From dea85a3fca647ec11ed4bd952c565aa2d20b1e28 Mon Sep 17 00:00:00 2001 From: Piras314 Date: Tue, 27 Aug 2024 13:01:32 -0400 Subject: [PATCH] Merge Upstream (#538) * Update Credits (#31409) Co-authored-by: PJBot * Replace obsolete code in GasPortableSystem (#31407) * Change `Resave` Permission Requirement to Host (#31397) ChangePermissionFlagToHost * Automatic changelog update * Remove client state from server AirAlarmComponent (#31236) * Remove client state from server AirAlarmComponent Send information for all connected devices, not just the ones for the current tab, as attempting to limit this breaks multiple users viewing the same UI. Fixes #12842 * Send device data as a list, rather than a dictionary --------- Co-authored-by: Eoin Mcloughlin * Fix ChemVend jugs again (#31398) This re-introduces the dummy entity naming code, originally introduced in #29178 and randomly removed by #30064 with no technical justification given. Fixes #31373 * Automatic changelog update * Fix dungeon spawn + ftl overlap (#31413) * Fix dungeon spawn + ftl overlap * Better fixes * Automatic changelog update * Fix firelockedge rotation (#31371) save * Automatic changelog update * Update Oasis (#31415) * Cameras and junk * I forgot to clear my multitool * Automatic changelog update * marathon update (#31421) * Give sec cadets jackboots instead of combat boots (#31419) give cadets jackboots * Automatic changelog update * meta update (#31423) * Adds the Head of Greytide stamp (#30189) suggested changes from discord discussion, sprite change, add to refactored loot table * Automatic changelog update * Verb tweaks (#31309) * Verb tweaks Remove the LOS check because this is already done above in CanExamine. * Fix outlines * import * Add ContainerComp (#31311) Applies EntProtoId changes upon insertion / removal from container. Can also be useful for borgs / mechs / vehicles in future but atm I just used it for AI. * Blueprints (#31138) * Blueprints * Update tables_loot.yml * doink * mark as required * Automatic changelog update * decouple ItemToggle from PowerCellDraw (#31392) * remove ItemToggle from PowerCellDraw query * add EntityQuery for resolves, make them all optional * move integration to ToggleCellDraw * add ToggleCellDraw to almost every PowerCellDraw prototype * :trollface: * :trollface: * :trollface: * let it disable on mapinit * set update time on mapinit, make borg power logic consistent now * :trollface: --------- Co-authored-by: deltanedas <@deltanedas:kde.org> * Automatic changelog update * Power stuff (#31314) * Power stuff - Add shared IsPowered - Add shared ResolveApc - Move PowerChangedEvent to shared for now - Add SlimPoweredLight that actually functions how you'd expect a PoweredLight to function it id didn't have a bunch of bloat on it. * big update * boing * ItemToggle + slots stuff (#31312) * ItemToggle + slots stuff - Add component for itemslot locks to match LockComponent (surprised this didn't exist). - Add thing for pointlight to match itemtoggle. In future should be used for PDAs and stuff but need to fix some other stuff first. * Also this * grill * Run actions on press (#31191) I know UI generallys want to do stuff on key-up not key-down. With that being said the delay on release for these is noticeable. e.g. ActivateInWorld / UseInHand / any in-world interactions are on-press. This is especially noticeable if you have the same event on action + verb. * Automatic changelog update * Action stuff (#31305) * Action stuff - Cleanup some event stuff - Avoid dirtying entity unnecessarily - Add ActionGrant as an easy way to apply / remove actions via compregistry. * Fix merge * Update submodule to 231.0.0 (#31430) * Weather fix (#30857) * weather fix * localize errors * ContainerComp fix (#31434) Forgot to push these ones on the branch. * togglelight updates (#31435) Missed in the green checkmark sea * Increase (SUPER)PACMAN ramp rate/tolerance (#31403) All PACMANs used to use the same ramping parameters, this meant a SUPERPACMAN (50 kW) took literally a 100 seconds to get up to its full output level. Ouch. PACMAN has been raised to 5000 W/s with 1500 W tolerance, SUPERPACMAN to 7500 W/s with 2500 W tolerance * Automatic changelog update * Make space scanning T1 technology (#31321) make space scanning and mass scanner t1 tech * Automatic changelog update * Add a bool to disable buckling on InteractHand (#30001) * Automatic changelog update * fix(FieldGenerators): Don't show nonsense popup (#30469) * . * bagel update (#31440) * bagel update * fixgridatmos * qm office * sci cam fix * jesus christ so many routers * remove invalids * Fix-Resprite emote icons (#31447) * Fix-Resprite emote icons * change scream * Moff cooking. Part one. (#30668) * yml part * guidebook * commit * some fixes * a little * change * Automatic changelog update * Cog update (#31458) made disposals less bad * Add BUI ctor tests (#31463) 5 lines of eaten iocmanager.injectdependencies led to this. * Predict EmitSoundOnUIOpen (#31464) * Predict EmitSoundOnUIOpen BUI prediction led to this moment. * unforky * Bots now make sound when they speak (#31471) fixes 31454 * Automatic changelog update * Change the science radio channel color (#31319) * Change the science radio channel color * This one looks better * Automatic changelog update * Move OnGhostAttempt to GhostSystem (#31445) * Move OnGhostAttempt to GhostSystem * Remove unused dependencies and sort them * Fix energy sword visuals (#31478) * Automatic changelog update * Replace obsolete code in shuttle systems. (#31408) * Format DockingSystem.Shuttle * arrivals system * docking system * shuttle console system * emergency shuttle system * shuttle system * thruster system * Fix compile error --------- Co-authored-by: Pieter-Jan Briers * Replaces small fans on most shuttles with directional fans. (#31495) * Automatic changelog update * Replace obsolete functions in NPC systems (#31448) * Make guidebook remember where you left off (#31375) * Guidebook tracks last read entry * Persistent guidebook fixes * Persistent guidebook requested changes * Update Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs --------- Co-authored-by: Pieter-Jan Briers * Automatic changelog update * Remove double-iteration from the mime wall code (#31420) * Remove double-iteration from the mime wall code * Update * Update * fix method OnEntityEnter in DamageContactsSystem (#31494) fix Co-authored-by: Dimastra * Automatic changelog update * Make Gas Miners indestructable, anchorable, and pullable. (#31370) * Make miner indestructable, and pullable. * Miners can't be unanchored. Only anchored. --------- Co-authored-by: JIPDawg * Automatic changelog update * bagel update (#31502) * Minor fixes to character profile editor save/reset buttons (#31505) Merge SetDirty() with preview reload People were forgetting to SetDirty() when changing a property; move SetDirty() into preview reloading, since if the preview is being reloaded, some property has definitely changed anyway. Co-authored-by: Eoin Mcloughlin * Centcom & FTLDestination cleanup (#30226) * centcomm name and ftlcomp * networking microopstimization * go sleep. * map names and arrivals * Fix swapped around Safety Moth poster graphics (#31507) * Automatic changelog update * Mark explosives as a contraband (#31508) * Automatic changelog update * Mark the syndicate raid helmet as a Syndicate contraband (#31512) * Automatic changelog update * Add title to multitool door-access-configuration window (#31504) Fixes #29923. Co-authored-by: Eoin Mcloughlin * Restrict the explorer gas mask to cargo (#31514) * Automatic changelog update * Fix stray pixel in officer beersky barsign (#31517) * Scale text in admin player overlay (#31503) * Scale text in admin player overlay Fixes #30040 * Feedback from PR - get UI scale through root window --------- Co-authored-by: Eoin Mcloughlin * New Health Analyzer UI (#30834) * WIP: first prototype * Change text slightly * Allow names to wrap * Add label for the scan mode * Remove ugly text * Readd bleeding message * Update code * Allow for the Health Analyzer UI to grow vertically * Automatic changelog update * Disable Arrivals message for Cryosleep (#30888) * Disable arrivals message for cryosleep late arrivals * Provide silent to PlayerSpawnCompleteEvent * Fix typo * Move message to event and into arrivals system * Automatic changelog update * Remove glibc from devshell (#28842) * Automated whitelists (#23985) * Beginnings of making the breadmemes jobs easier * stuff * stuff pt. 2 * Stuff pt.3 * Stuff I forgot last time * Basic whitelist Only people that are added to the whitelist with the addwhitelist command will be able to join. I call this the "legacy" whitelist * Remove always deny condition in favor of just breaking if playtime check fails * Change default whitelist Default whitelist is now the "legacy" whitelist. * localization * Admin check * minor spelling change * Fix build * Whitelist message * Fix vars not being datafield and spelling mistakes * Minor spelling mistake * Change config for salamander * Reviews and stuff * Add summaries * Fix whitelists * Forgot to add a datafield * Fixing stuff I guess * Reuse admin remarks to reduce load when connecting. * Update log messages to be verbose instead of debug * Reviews * whoops * Explain a bit more how whitelist checking works * Apply CE's review * Append Membership to Blacklist and Whitelist conditions * Fix review comments * Uncapitalize playerConnectionWhitelist, add to ignored client prototypes * Make note count field work * Fix cvar for thingy --------- Co-authored-by: Pieter-Jan Briers --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: PJBot Co-authored-by: Mervill Co-authored-by: PursuitInAshes Co-authored-by: eoineoineoin Co-authored-by: Eoin Mcloughlin Co-authored-by: Pieter-Jan Briers Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: themias <89101928+themias@users.noreply.github.com> Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Co-authored-by: Emisse <99158783+Emisse@users.noreply.github.com> Co-authored-by: PopGamer46 Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> Co-authored-by: Alzore <140123969+Blackern5000@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com> Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com> Co-authored-by: Spessmann <156740760+Spessmann@users.noreply.github.com> Co-authored-by: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Co-authored-by: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Co-authored-by: QueerNB <176353696+QueerNB@users.noreply.github.com> Co-authored-by: 12rabbits <53499656+12rabbits@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers Co-authored-by: Dimastra <65184747+Dimastra@users.noreply.github.com> Co-authored-by: Dimastra Co-authored-by: JIPDawg <51352440+JIPDawg@users.noreply.github.com> Co-authored-by: JIPDawg Co-authored-by: Saphire Lattice Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com> Co-authored-by: stellar-novas Co-authored-by: Simon <63975668+Simyon264@users.noreply.github.com> --- Content.Client/Actions/ActionsSystem.cs | 6 - .../Administration/AdminNameOverlay.cs | 20 +- .../Systems/AdminSystem.Overlay.cs | 5 +- .../UI/BanList/BanListWindow.xaml.cs | 1 + .../UI/Bwoink/BwoinkControl.xaml.cs | 3 +- .../UI/SetOutfit/SetOutfitMenu.xaml.cs | 1 + .../Monitor/UI/AirAlarmBoundUserInterface.cs | 6 - .../Atmos/Monitor/UI/AirAlarmWindow.xaml.cs | 8 - .../Cartridges/CrewManifestUiFragment.xaml.cs | 3 +- .../Commands/SetMenuVisibilityCommand.cs | 1 + .../UI/FlatpackCreatorMenu.xaml.cs | 1 + .../ContextMenu/UI/EntityMenuUIController.cs | 19 +- .../CrewManifest/CrewManifestUi.xaml.cs | 1 + .../DoorElectronicsConfigurationMenu.xaml | 3 +- Content.Client/Entry/EntryPoint.cs | 1 + .../Controls/GuidebookWindow.xaml.cs | 4 + .../UI/HealthAnalyzerBoundUserInterface.cs | 1 + .../UI/HealthAnalyzerWindow.xaml | 70 +- .../UI/HealthAnalyzerWindow.xaml.cs | 168 +- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 15 +- .../UI/LobbyCharacterPreviewPanel.xaml.cs | 1 + Content.Client/Lobby/UI/LobbyGui.xaml.cs | 1 + .../UI/SignalTimerWindow.xaml.cs | 1 + Content.Client/Options/UI/OptionsMenu.xaml.cs | 1 + .../EntitySystems/PowerReceiverSystem.cs | 13 + .../Power/Generator/GeneratorWindow.xaml.cs | 1 + Content.Client/Radio/Ui/IntercomMenu.xaml.cs | 1 + .../StationRecords/GeneralRecord.xaml.cs | 1 + .../StorageContainerVisualsComponent.cs | 1 + .../Controls/ProgressTextureRect.cs | 7 +- .../Systems/Actions/ActionUIController.cs | 8 +- .../Guidebook/GuidebookUIController.cs | 17 +- .../UI/VendingMachineMenu.xaml.cs | 29 +- Content.Client/Verbs/VerbSystem.cs | 45 +- .../Ui/AnalysisConsoleMenu.xaml.cs | 1 + .../Tests/UserInterface/UiControlTest.cs | 58 + .../20240112194620_Blacklist.Designer.cs | 1769 +++++++ .../Postgres/20240112194620_Blacklist.cs | 33 + .../PostgresServerDbContextModelSnapshot.cs | 14 + .../20240112194612_Blacklist.Designer.cs | 1701 ++++++ .../Sqlite/20240112194612_Blacklist.cs | 33 + .../SqliteServerDbContextModelSnapshot.cs | 13 + Content.Server.Database/Model.cs | 10 + .../Abilities/Mime/MimePowersSystem.cs | 15 +- .../Actions/ActionOnInteractSystem.cs | 12 - .../AlertLevel/AlertLevelDisplaySystem.cs | 1 + .../Ame/EntitySystems/AmeControllerSystem.cs | 1 + .../Anomaly/AnomalySynchronizerSystem.cs | 1 + .../Anomaly/AnomalySystem.Generator.cs | 1 + .../Arcade/BlockGame/BlockGameArcadeSystem.cs | 1 + .../SpaceVillainArcadeSystem.cs | 1 + .../Monitor/Components/AirAlarmComponent.cs | 2 - .../Atmos/Monitor/Systems/AirAlarmSystem.cs | 47 +- .../Monitor/Systems/AtmosAlarmableSystem.cs | 1 + .../Monitor/Systems/AtmosMonitoringSystem.cs | 1 + .../Unary/EntitySystems/GasPortableSystem.cs | 5 +- .../Unary/EntitySystems/GasVentPumpSystem.cs | 1 + .../EntitySystems/GasVentScrubberSystem.cs | 1 + .../Atmos/Portable/PortableScrubberSystem.cs | 1 + .../Atmos/Portable/SpaceHeaterSystem.cs | 1 + Content.Server/Audio/AmbientSoundSystem.cs | 1 + Content.Server/Audio/Jukebox/JukeboxSystem.cs | 1 + Content.Server/Bed/BedSystem.cs | 1 + .../Bed/Cryostorage/CryostorageSystem.cs | 14 +- Content.Server/Body/Systems/BodySystem.cs | 6 +- .../Buckle/Systems/AntiRotOnBuckleSystem.cs | 1 + .../Cargo/Systems/CargoSystem.Telepad.cs | 1 + Content.Server/Chat/SuicideSystem.cs | 12 +- .../SolutionContainerMixerSystem.cs | 1 + .../EntitySystems/SolutionHeaterSystem.cs | 1 + .../Cloning/CloningConsoleSystem.cs | 1 + .../Clothing/Systems/CursedMaskSystem.cs | 6 +- .../Connection/ConnectionManager.Whitelist.cs | 221 + .../Connection/ConnectionManager.cs | 47 +- .../Connection/Whitelist/BlacklistCommands.cs | 117 + .../Conditions/ConditionAlwaysMatch.cs | 12 + .../ConditionManualBlacklistMembership.cs | 12 + .../ConditionManualWhitelistMembership.cs | 12 + .../Conditions/ConditionNotesDateRange.cs | 34 + .../Conditions/ConditionNotesPlaytimeRange.cs | 30 + .../Conditions/ConditionPlayerCount.cs | 16 + .../Whitelist/Conditions/ConditionPlaytime.cs | 15 + .../Whitelist/WhitelistCondition.cs | 41 + .../Whitelist/WhitelistPrototype.cs | 42 + .../ConstructionSystem.Computer.cs | 1 + Content.Server/Construction/FlatpackSystem.cs | 1 + Content.Server/Database/ServerDbBase.cs | 23 + Content.Server/Database/ServerDbManager.cs | 28 + .../Components/PowerSensorComponent.cs | 1 + .../DeviceNetworkRequiresPowerSystem.cs | 1 + .../Systems/SingletonDeviceNetServerSystem.cs | 1 + .../Unit/EntitySystems/DisposalUnitSystem.cs | 1 + Content.Server/Doors/Systems/AirlockSystem.cs | 1 + Content.Server/Doors/Systems/DoorSystem.cs | 2 +- .../Doors/Systems/FirelockSystem.cs | 1 + Content.Server/Entry/EntryPoint.cs | 1 + Content.Server/Fax/FaxSystem.cs | 1 + .../GameTicking/GameTicker.GamePreset.cs | 118 +- .../GameTicking/GameTicker.Spawning.cs | 23 +- Content.Server/Ghost/GhostCommand.cs | 3 +- Content.Server/Ghost/GhostSystem.cs | 121 +- .../EntitySystems/ReagentGrinderSystem.cs | 1 + Content.Server/Lathe/LatheSystem.cs | 5 +- .../EntitySystems/EmergencyLightSystem.cs | 1 + .../Light/EntitySystems/LitOnPoweredSystem.cs | 2 + .../Light/EntitySystems/PoweredLightSystem.cs | 2 + Content.Server/Maps/ResaveCommand.cs | 2 +- .../Materials/MaterialReclaimerSystem.cs | 21 +- .../BiomassReclaimerSystem.cs | 1 + Content.Server/Medical/CryoPodSystem.cs | 1 + Content.Server/Mind/MindSystem.cs | 4 +- Content.Server/Morgue/CrematoriumSystem.cs | 8 +- Content.Server/NPC/Systems/NPCJukeSystem.cs | 7 +- .../NPC/Systems/NPCSteeringSystem.Context.cs | 12 +- .../Systems/NPCSteeringSystem.Obstacles.cs | 2 +- .../NPC/Systems/NPCSteeringSystem.cs | 1 + .../NPC/Systems/NPCUseActionOnTargetSystem.cs | 2 - .../EntitySystems/FatExtractorSystem.cs | 1 + .../Paper/PaperRandomStoryComponent.cs | 1 + .../ParticleAcceleratorSystem.ControlBox.cs | 1 + .../Physics/Controllers/ConveyorController.cs | 1 + .../Components/ApcPowerReceiverComponent.cs | 7 - .../Power/Components/CableComponent.cs | 9 +- .../ActivatableUIRequiresPowerSystem.cs | 1 + .../EntitySystems/CableMultitoolSystem.cs | 5 +- .../Power/EntitySystems/ChargerSystem.cs | 1 + .../Power/EntitySystems/PowerNetSystem.cs | 1 + .../EntitySystems/PowerReceiverSystem.cs | 13 + .../Power/Generation/Teg/TegSystem.cs | 2 + .../Power/Generator/GasPowerReceiverSystem.cs | 2 + .../GeneratorSignalControlComponent.cs | 1 + .../PowerCell/PowerCellSystem.Draw.cs | 14 +- .../Procedural/DungeonJob/DungeonJob.cs | 11 + Content.Server/Procedural/DungeonSystem.cs | 9 +- .../Radio/EntitySystems/RadioDeviceSystem.cs | 1 + .../Shuttles/Systems/ArrivalsSystem.cs | 32 +- .../Shuttles/Systems/DockingSystem.Shuttle.cs | 567 +- .../Shuttles/Systems/DockingSystem.cs | 3 +- .../Systems/EmergencyShuttleSystem.Console.cs | 2 +- .../Systems/EmergencyShuttleSystem.cs | 19 +- .../Systems/ShuttleConsoleSystem.FTL.cs | 2 +- .../Shuttles/Systems/ShuttleConsoleSystem.cs | 7 +- .../Systems/ShuttleSystem.FasterThanLight.cs | 165 +- .../Systems/ShuttleSystem.GridFill.cs | 11 +- .../Shuttles/Systems/ShuttleSystem.Impact.cs | 4 +- .../Shuttles/Systems/ShuttleSystem.cs | 1 - .../Shuttles/Systems/ThrusterSystem.cs | 25 +- Content.Server/Silicons/Borgs/BorgSystem.cs | 2 + .../ContainmentFieldGeneratorSystem.cs | 3 +- .../EntitySystems/EmitterSystem.cs | 1 + .../Components/EmitSoundOnUIOpenComponent.cs | 12 - Content.Server/Sound/EmitSoundSystem.cs | 6 - .../Sound/SpamEmitSoundRequirePowerSystem.cs | 2 + .../SurveillanceCameraMonitorSystem.cs | 1 + .../Systems/SurveillanceCameraRouterSystem.cs | 1 + .../Systems/SurveillanceCameraSystem.cs | 1 + .../Temperature/Systems/EntityHeaterSystem.cs | 1 + .../VendingMachines/VendingMachineSystem.cs | 1 + Content.Server/Weather/WeatherSystem.cs | 54 +- Content.Server/Wires/WiresSystem.cs | 1 + .../Systems/ArtifactAnalyzerSystem.cs | 1 + .../Systems/ArtifactCrusherSystem.cs | 1 + Content.Shared/Actions/ActionEvents.cs | 7 +- .../Actions/ActionGrantComponent.cs | 17 + Content.Shared/Actions/ActionGrantSystem.cs | 48 + .../Events/ActionComponentChangeEvent.cs | 27 + .../Actions/ItemActionGrantComponent.cs | 14 + Content.Shared/Actions/SharedActionsSystem.cs | 69 +- .../Components/SharedAirAlarmComponent.cs | 30 +- .../Buckle/Components/StrapComponent.cs | 6 + .../Buckle/SharedBuckleSystem.Interaction.cs | 2 +- Content.Shared/CCVar/CCVars.cs | 20 +- .../Cabinet/ItemCabinetComponent.cs | 1 + .../Cargo/Components/CashComponent.cs | 2 +- .../Chemistry/Components/Solution.cs | 1 + .../Components/PilotedByClothingComponent.cs | 1 + .../Components/ToggleClothingComponent.cs | 2 + .../Containers/ContainerCompComponent.cs | 17 + .../Containers/ContainerCompSystem.cs | 43 + .../Containers/ContainerFillComponent.cs | 1 + .../ItemSlot/ItemSlotsLockComponent.cs | 13 + .../ItemSlot/ItemSlotsSystem.Lock.cs | 36 + .../Containers/ItemSlot/ItemSlotsSystem.cs | 4 +- .../Damage/Systems/DamageContactsSystem.cs | 2 +- .../Components/ItemToggleComponent.cs | 12 +- .../Item/ItemToggle/ItemToggleSystem.cs | 52 +- Content.Shared/Lathe/LatheComponent.cs | 2 +- .../ItemTogglePointLightComponent.cs | 12 + .../Components/SlimPoweredLightComponent.cs | 17 + .../ItemTogglePointLightSystem.cs | 29 + .../EntitySystems/SlimPoweredLightSystem.cs | 67 + .../UnpoweredFlashlightSystem.cs | 2 + Content.Shared/Objectives/ObjectiveInfo.cs | 1 + .../Components/PayloadTriggerComponent.cs | 1 + .../ItemSlotRequiresPowerComponent.cs | 9 + .../ItemSlotRequiresPowerSystem.cs | 23 + .../SharedPowerReceiverSystem.cs | 11 + Content.Shared/Power/PowerChangedEvent.cs | 8 + .../Components/ToggleCellDrawComponent.cs | 10 + .../PowerCell/PowerCellDrawComponent.cs | 5 +- .../PowerCell/SharedPowerCellSystem.cs | 26 +- .../PowerCell/ToggleCellDrawSystem.cs | 49 + .../Research/Components/BlueprintComponent.cs | 19 + .../Components/BlueprintReceiverComponent.cs | 18 + .../Research/Systems/BlueprintSystem.cs | 114 + .../Components/EmitSoundOnUIOpenComponent.cs | 11 + Content.Shared/Sound/SharedEmitSoundSystem.cs | 8 +- .../Tools/Systems/SharedToolSystem.cs | 3 + Content.Shared/Verbs/SharedVerbSystem.cs | 24 + .../Weapons/Melee/MeleeSoundSystem.cs | 1 + Content.Shared/Weather/SharedWeatherSystem.cs | 7 +- Resources/Changelog/Admin.yml | 8 + Resources/Changelog/Changelog.yml | 377 +- .../ConfigPresets/WizardsDen/salamander.toml | 5 +- Resources/Credits/GitHub.txt | 2 +- .../access/ui/door-electronics-window.ftl | 1 + .../Locale/en-US/connection-messages.ftl | 38 +- Resources/Locale/en-US/items/toggle.ftl | 2 + .../components/health-analyzer-component.ftl | 28 +- .../Locale/en-US/paper/stamp-component.ftl | 1 + .../en-US/research/components/blueprint.ftl | 2 + Resources/Locale/en-US/shuttles/emergency.ftl | 4 + Resources/Locale/en-US/weather/weather.ftl | 4 + .../ShuttleEvent/disaster_evacpod.yml | 2 +- .../Maps/Shuttles/ShuttleEvent/honki.yml | 2 +- .../Maps/Shuttles/ShuttleEvent/lost_cargo.yml | 62 +- .../Maps/Shuttles/ShuttleEvent/striker.yml | 65 +- .../Shuttles/ShuttleEvent/syndie_evacpod.yml | 2650 +++++++--- .../ShuttleEvent/traveling_china_cuisine.yml | 23 +- Resources/Maps/Shuttles/arrivals.yml | 60 +- Resources/Maps/Shuttles/briggle.yml | 18 +- Resources/Maps/Shuttles/cargo.yml | 68 +- Resources/Maps/Shuttles/cargo_core.yml | 62 +- Resources/Maps/Shuttles/cargo_fland.yml | 66 +- Resources/Maps/Shuttles/dart.yml | 176 +- Resources/Maps/Shuttles/emergency.yml | 46 +- Resources/Maps/Shuttles/emergency_box.yml | 30 +- Resources/Maps/Shuttles/emergency_cluster.yml | 21 +- Resources/Maps/Shuttles/emergency_courser.yml | 26 +- Resources/Maps/Shuttles/emergency_delta.yml | 48 +- Resources/Maps/Shuttles/emergency_lox.yml | 42 +- Resources/Maps/Shuttles/emergency_meta.yml | 31 +- Resources/Maps/Shuttles/emergency_omega.yml | 26 +- Resources/Maps/Shuttles/emergency_raven.yml | 386 +- Resources/Maps/Shuttles/emergency_rod.yml | 105 +- Resources/Maps/Shuttles/emergency_wode.yml | 52 +- Resources/Maps/Shuttles/escape_pod_small.yml | 2 +- Resources/Maps/Shuttles/mining.yml | 30 +- Resources/Maps/Shuttles/pirate.yml | 82 +- Resources/Maps/Shuttles/trading_outpost.yml | 162 +- Resources/Maps/Shuttles/wizard.yml | 71 +- Resources/Maps/bagel.yml | 507 +- Resources/Maps/cog.yml | 4553 +++++++++-------- Resources/Maps/marathon.yml | 2150 +++++++- Resources/Maps/meta.yml | 1554 +++++- Resources/Maps/oasis.yml | 2226 ++++++-- .../Entities/Clothing/Head/helmets.yml | 2 +- .../Entities/Clothing/Masks/masks.yml | 2 +- .../Entities/Clothing/OuterClothing/suits.yml | 1 + .../Entities/Clothing/Shoes/misc.yml | 1 + .../Spawners/Random/Salvage/tables_loot.yml | 3 + .../Markers/Spawners/Random/maintenance.yml | 1 + .../Mobs/Cyborgs/base_borg_chassis.yml | 3 +- .../Prototypes/Entities/Mobs/NPCs/silicon.yml | 1 + .../Objects/Consumable/Food/Baked/bread.yml | 61 + .../Objects/Consumable/Food/Baked/pizza.yml | 63 + .../Objects/Consumable/Food/ingredients.yml | 44 + .../Objects/Devices/base_handheld.yml | 1 + .../Entities/Objects/Devices/pda.yml | 2 +- .../Entities/Objects/Misc/rubber_stamp.yml | 13 + .../Specific/Medical/healthanalyzer.yml | 1 + .../Objects/Specific/Research/anomaly.yml | 2 + .../Entities/Objects/Tools/blueprint.yml | 49 + .../Objects/Tools/handheld_mass_scanner.yml | 1 + .../Weapons/Guns/Ammunition/explosives.yml | 12 +- .../Weapons/Guns/Launchers/launchers.yml | 2 + .../Objects/Weapons/Melee/e_sword.yml | 1 + .../Structures/Doors/Firelocks/frame.yml | 2 - .../Structures/Furniture/rollerbeds.yml | 1 + .../Entities/Structures/Machines/lathe.yml | 14 +- .../Structures/Piping/Atmospherics/miners.yml | 23 +- .../Power/Generation/portable_generator.yml | 6 + .../Structures/Wallmounts/Signs/posters.yml | 12 +- .../Construction/Graphs/food/cottonpizza.yml | 13 + .../Graphs/structures/firelock.yml | 6 + .../Recipes/Construction/structures.yml | 2 + .../Recipes/Cooking/meal_recipes.yml | 17 + .../Prototypes/Recipes/Lathes/salvage.yml | 14 +- .../Prototypes/Recipes/Reactions/food.yml | 16 + Resources/Prototypes/Research/industrial.yml | 28 +- .../Roles/Jobs/Security/security_cadet.yml | 2 +- Resources/Prototypes/Voice/speech_emotes.yml | 2 +- Resources/Prototypes/radio_channels.yml | 2 +- Resources/Prototypes/tags.yml | 3 + Resources/Prototypes/whitelists.yml | 7 + Resources/Prototypes/wizardsDenWhitelists.yml | 39 + .../Guidebook/Service/FoodRecipes.xml | 6 + .../Interface/Emotes/attributions.yml | 7 +- .../Textures/Interface/Emotes/scream.png | Bin 0 -> 506 bytes Resources/Textures/Interface/Emotes/vocal.png | Bin 358 -> 336 bytes .../Food/Baked/bread.rsi/cotton-slice.png | Bin 0 -> 721 bytes .../Food/Baked/bread.rsi/cotton.png | Bin 0 -> 1187 bytes .../Consumable/Food/Baked/bread.rsi/meta.json | 8 +- .../Food/Baked/pizza.rsi/cotton-pizza.png | Bin 0 -> 672 bytes .../Food/Baked/pizza.rsi/cotton-slice.png | Bin 0 -> 501 bytes .../Consumable/Food/Baked/pizza.rsi/meta.json | 8 +- .../ingredients.rsi/cotton-dough-flat.png | Bin 0 -> 765 bytes .../Food/ingredients.rsi/cotton-dough.png | Bin 0 -> 904 bytes .../Consumable/Food/ingredients.rsi/meta.json | 8 +- .../Objects/Misc/bureaucracy.rsi/meta.json | 5 +- .../bureaucracy.rsi/paper_stamp-greytide.png | Bin 0 -> 168 bytes .../Objects/Misc/stamps.rsi/meta.json | 5 +- .../Misc/stamps.rsi/stamp-greytide.png | Bin 0 -> 1219 bytes .../Objects/Tools/blueprint.rsi/icon.png | Bin 0 -> 449 bytes .../Tools/blueprint.rsi/inhand-left.png | Bin 0 -> 341 bytes .../Tools/blueprint.rsi/inhand-right.png | Bin 0 -> 358 bytes .../Objects/Tools/blueprint.rsi/meta.json | 22 + .../Wallmounts/barsign.rsi/officerbeersky.png | Bin 1129 -> 3160 bytes RobustToolbox | 2 +- shell.nix | 1 - 320 files changed, 17073 insertions(+), 6495 deletions(-) create mode 100644 Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs create mode 100644 Content.Server/Connection/ConnectionManager.Whitelist.cs create mode 100644 Content.Server/Connection/Whitelist/BlacklistCommands.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs create mode 100644 Content.Server/Connection/Whitelist/WhitelistCondition.cs create mode 100644 Content.Server/Connection/Whitelist/WhitelistPrototype.cs delete mode 100644 Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs create mode 100644 Content.Shared/Actions/ActionGrantComponent.cs create mode 100644 Content.Shared/Actions/ActionGrantSystem.cs create mode 100644 Content.Shared/Actions/Events/ActionComponentChangeEvent.cs create mode 100644 Content.Shared/Actions/ItemActionGrantComponent.cs create mode 100644 Content.Shared/Containers/ContainerCompComponent.cs create mode 100644 Content.Shared/Containers/ContainerCompSystem.cs create mode 100644 Content.Shared/Containers/ItemSlot/ItemSlotsLockComponent.cs create mode 100644 Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs create mode 100644 Content.Shared/Light/Components/ItemTogglePointLightComponent.cs create mode 100644 Content.Shared/Light/Components/SlimPoweredLightComponent.cs create mode 100644 Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs create mode 100644 Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs create mode 100644 Content.Shared/Power/Components/ItemSlotRequiresPowerComponent.cs create mode 100644 Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs create mode 100644 Content.Shared/Power/PowerChangedEvent.cs create mode 100644 Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs create mode 100644 Content.Shared/PowerCell/ToggleCellDrawSystem.cs create mode 100644 Content.Shared/Research/Components/BlueprintComponent.cs create mode 100644 Content.Shared/Research/Components/BlueprintReceiverComponent.cs create mode 100644 Content.Shared/Research/Systems/BlueprintSystem.cs create mode 100644 Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs create mode 100644 Resources/Locale/en-US/access/ui/door-electronics-window.ftl create mode 100644 Resources/Locale/en-US/items/toggle.ftl create mode 100644 Resources/Locale/en-US/research/components/blueprint.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Tools/blueprint.yml create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml create mode 100644 Resources/Prototypes/whitelists.yml create mode 100644 Resources/Prototypes/wizardsDenWhitelists.yml create mode 100644 Resources/Textures/Interface/Emotes/scream.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice.png create mode 100644 Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough-flat.png create mode 100644 Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough.png create mode 100644 Resources/Textures/Objects/Misc/bureaucracy.rsi/paper_stamp-greytide.png create mode 100644 Resources/Textures/Objects/Misc/stamps.rsi/stamp-greytide.png create mode 100644 Resources/Textures/Objects/Tools/blueprint.rsi/icon.png create mode 100644 Resources/Textures/Objects/Tools/blueprint.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Tools/blueprint.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Tools/blueprint.rsi/meta.json diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index f05e445588..26a22fa8b8 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -259,12 +259,6 @@ public void TriggerAction(EntityUid actionId, BaseActionComponent action) if (action.ClientExclusive) { - if (instantAction.Event != null) - { - instantAction.Event.Performer = user; - instantAction.Event.Action = actionId; - } - PerformAction(user, actions, actionId, instantAction, instantAction.Event, GameTiming.CurTime); } else diff --git a/Content.Client/Administration/AdminNameOverlay.cs b/Content.Client/Administration/AdminNameOverlay.cs index 6a1881a227..e2db7a8d6b 100644 --- a/Content.Client/Administration/AdminNameOverlay.cs +++ b/Content.Client/Administration/AdminNameOverlay.cs @@ -2,10 +2,10 @@ using Content.Client.Administration.Systems; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Shared; using Robust.Shared.Enums; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Maths; +using Robust.Shared.Configuration; namespace Content.Client.Administration; @@ -15,14 +15,16 @@ internal sealed class AdminNameOverlay : Overlay private readonly IEntityManager _entityManager; private readonly IEyeManager _eyeManager; private readonly EntityLookupSystem _entityLookup; + private readonly IUserInterfaceManager _userInterfaceManager; private readonly Font _font; - public AdminNameOverlay(AdminSystem system, IEntityManager entityManager, IEyeManager eyeManager, IResourceCache resourceCache, EntityLookupSystem entityLookup) + public AdminNameOverlay(AdminSystem system, IEntityManager entityManager, IEyeManager eyeManager, IResourceCache resourceCache, EntityLookupSystem entityLookup, IUserInterfaceManager userInterfaceManager) { _system = system; _entityManager = entityManager; _eyeManager = eyeManager; _entityLookup = entityLookup; + _userInterfaceManager = userInterfaceManager; ZIndex = 200; _font = new VectorFont(resourceCache.GetResource("/Fonts/NotoSans/NotoSans-Regular.ttf"), 10); } @@ -57,16 +59,18 @@ protected override void Draw(in OverlayDrawArgs args) continue; } - var lineoffset = new Vector2(0f, 11f); + var uiScale = _userInterfaceManager.RootControl.UIScale; + var lineoffset = new Vector2(0f, 11f) * uiScale; var screenCoordinates = _eyeManager.WorldToScreen(aabb.Center + new Angle(-_eyeManager.CurrentEye.Rotation).RotateVec( aabb.TopRight - aabb.Center)) + new Vector2(1f, 7f); if (playerInfo.Antag) { - args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 2), "ANTAG", Color.OrangeRed); + args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 2), "ANTAG", uiScale, Color.OrangeRed); +; } - args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, playerInfo.Connected ? Color.Yellow : Color.White); - args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, playerInfo.Connected ? Color.Aquamarine : Color.White); + args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, uiScale, playerInfo.Connected ? Color.Yellow : Color.White); + args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White); } } } diff --git a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs index 3502faf9e8..ba6ce40ca0 100644 --- a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs +++ b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs @@ -1,6 +1,8 @@ using Content.Client.Administration.Managers; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Shared.Configuration; namespace Content.Client.Administration.Systems { @@ -11,6 +13,7 @@ public sealed partial class AdminSystem [Dependency] private readonly IClientAdminManager _adminManager = default!; [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; private AdminNameOverlay _adminNameOverlay = default!; @@ -19,7 +22,7 @@ public sealed partial class AdminSystem private void InitializeOverlay() { - _adminNameOverlay = new AdminNameOverlay(this, EntityManager, _eyeManager, _resourceCache, _entityLookup); + _adminNameOverlay = new AdminNameOverlay(this, EntityManager, _eyeManager, _resourceCache, _entityLookup, _userInterfaceManager); _adminManager.AdminStatusUpdated += OnAdminStatusUpdated; } diff --git a/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs b/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs index c95f8f204d..fad55f9627 100644 --- a/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs +++ b/Content.Client/Administration/UI/BanList/BanListWindow.xaml.cs @@ -1,4 +1,5 @@ using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs b/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs index dd8e3e2212..b4e9a07ef8 100644 --- a/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs +++ b/Content.Client/Administration/UI/Bwoink/BwoinkControl.xaml.cs @@ -11,9 +11,8 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Network; -using Robust.Shared.Utility; -using Robust.Shared.Timing; using Robust.Shared.Configuration; +using Robust.Shared.Utility; namespace Content.Client.Administration.UI.Bwoink { diff --git a/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs b/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs index a2faf208d9..7cb32b43df 100644 --- a/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs +++ b/Content.Client/Administration/UI/SetOutfit/SetOutfitMenu.xaml.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Client.UserInterface.Controls; using Content.Shared.Roles; using Robust.Client.AutoGenerated; using Robust.Client.Console; diff --git a/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs b/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs index 2ae1518835..d9e94e373b 100644 --- a/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs +++ b/Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs @@ -30,7 +30,6 @@ protected override void Open() _window.AirAlarmModeChanged += OnAirAlarmModeChanged; _window.AutoModeChanged += OnAutoModeChanged; _window.ResyncAllRequested += ResyncAllDevices; - _window.AirAlarmTabChange += OnTabChanged; } private void ResyncAllDevices() @@ -63,11 +62,6 @@ private void OnThresholdChanged(string address, AtmosMonitorThresholdType type, SendMessage(new AirAlarmUpdateAlarmThresholdMessage(address, type, threshold, gas)); } - private void OnTabChanged(AirAlarmTab tab) - { - SendMessage(new AirAlarmTabSetMessage(tab)); - } - protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); diff --git a/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs b/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs index eeec11c766..e1425ac491 100644 --- a/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs +++ b/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs @@ -23,7 +23,6 @@ public sealed partial class AirAlarmWindow : FancyWindow public event Action? AirAlarmModeChanged; public event Action? AutoModeChanged; public event Action? ResyncAllRequested; - public event Action? AirAlarmTabChange; private RichTextLabel _address => CDeviceAddress; private RichTextLabel _deviceTotal => CDeviceTotal; @@ -80,11 +79,6 @@ public AirAlarmWindow() _tabContainer.SetTabTitle(1, Loc.GetString("air-alarm-ui-window-tab-scrubbers")); _tabContainer.SetTabTitle(2, Loc.GetString("air-alarm-ui-window-tab-sensors")); - _tabContainer.OnTabChanged += idx => - { - AirAlarmTabChange!((AirAlarmTab) idx); - }; - _resyncDevices.OnPressed += _ => { _ventDevices.RemoveAllChildren(); @@ -117,8 +111,6 @@ public void UpdateState(AirAlarmUIState state) { UpdateDeviceData(addr, dev); } - - _tabContainer.CurrentTab = (int) state.Tab; } public void UpdateModeSelector(AirAlarmMode mode) diff --git a/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs b/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs index 273707cb6e..27ddd51815 100644 --- a/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs +++ b/Content.Client/CartridgeLoader/Cartridges/CrewManifestUiFragment.xaml.cs @@ -1,4 +1,5 @@ -using Content.Shared.CrewManifest; +using Content.Client.CrewManifest.UI; +using Content.Shared.CrewManifest; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/Commands/SetMenuVisibilityCommand.cs b/Content.Client/Commands/SetMenuVisibilityCommand.cs index ddfb0b1692..17a544daba 100644 --- a/Content.Client/Commands/SetMenuVisibilityCommand.cs +++ b/Content.Client/Commands/SetMenuVisibilityCommand.cs @@ -1,4 +1,5 @@ using Content.Client.Verbs; +using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Shared.Console; diff --git a/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs b/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs index 269694ebf9..81410dc7e6 100644 --- a/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs +++ b/Content.Client/Construction/UI/FlatpackCreatorMenu.xaml.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Client.Materials; +using Content.Client.Materials.UI; using Content.Client.Message; using Content.Client.UserInterface.Controls; using Content.Shared.Construction.Components; diff --git a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs index 0462c095ba..bda831394d 100644 --- a/Content.Client/ContextMenu/UI/EntityMenuUIController.cs +++ b/Content.Client/ContextMenu/UI/EntityMenuUIController.cs @@ -9,6 +9,7 @@ using Content.Shared.Examine; using Content.Shared.IdentityManagement; using Content.Shared.Input; +using Content.Shared.Verbs; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Input; @@ -194,8 +195,20 @@ public override void FrameUpdate(FrameEventArgs args) return; // Do we need to do in-range unOccluded checks? - var ignoreFov = !_eyeManager.CurrentEye.DrawFov || - (_verbSystem.Visibility & MenuVisibility.NoFov) == MenuVisibility.NoFov; + var visibility = _verbSystem.Visibility; + + if (!_eyeManager.CurrentEye.DrawFov) + { + visibility &= ~MenuVisibility.NoFov; + } + + var ev = new MenuVisibilityEvent() + { + Visibility = visibility, + }; + + _entityManager.EventBus.RaiseLocalEvent(player, ref ev); + visibility = ev.Visibility; _entityManager.TryGetComponent(player, out ExaminerComponent? examiner); var xformQuery = _entityManager.GetEntityQuery(); @@ -209,7 +222,7 @@ public override void FrameUpdate(FrameEventArgs args) continue; } - if (ignoreFov) + if ((visibility & MenuVisibility.NoFov) == MenuVisibility.NoFov) continue; var pos = new MapCoordinates(_xform.GetWorldPosition(xform, xformQuery), xform.MapID); diff --git a/Content.Client/CrewManifest/CrewManifestUi.xaml.cs b/Content.Client/CrewManifest/CrewManifestUi.xaml.cs index 4183c90814..f07e54eb65 100644 --- a/Content.Client/CrewManifest/CrewManifestUi.xaml.cs +++ b/Content.Client/CrewManifest/CrewManifestUi.xaml.cs @@ -1,3 +1,4 @@ +using Content.Client.CrewManifest.UI; using Content.Shared.CrewManifest; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; diff --git a/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml b/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml index 4cd59f38b2..e832b4ee9f 100644 --- a/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml +++ b/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml @@ -1,6 +1,7 @@ + xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" + Title="{Loc door-electronics-configuration-title}"> diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 6caefb9a7e..c4c18f154a 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -108,6 +108,7 @@ public override void Init() _prototypeManager.RegisterIgnore("lobbyBackground"); _prototypeManager.RegisterIgnore("gamePreset"); _prototypeManager.RegisterIgnore("noiseChannel"); + _prototypeManager.RegisterIgnore("playerConnectionWhitelist"); _prototypeManager.RegisterIgnore("spaceBiome"); _prototypeManager.RegisterIgnore("worldgenConfig"); _prototypeManager.RegisterIgnore("gameRule"); diff --git a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs index 469b0ed222..de06d85bb0 100644 --- a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs +++ b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs @@ -23,6 +23,8 @@ public sealed partial class GuidebookWindow : FancyWindow, ILinkClickHandler private readonly ISawmill _sawmill; + public ProtoId LastEntry; + public GuidebookWindow() { RobustXamlLoader.Load(this); @@ -90,6 +92,8 @@ private void ShowGuide(GuideEntry entry) _sawmill.Error($"Failed to parse contents of guide document {entry.Id}."); } + + LastEntry = entry.Id; } public void UpdateGuides( diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs index 38760f4aa3..baea03c892 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs @@ -17,6 +17,7 @@ public HealthAnalyzerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owne protected override void Open() { base.Open(); + _window = this.CreateWindow(); _window.Title = EntMan.GetComponent(Owner).EntityName; diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml index 401f976862..97968c4b99 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml @@ -1,48 +1,64 @@ - + MaxHeight="525" + MinWidth="300"> diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs index fcf6d4551f..9b96f5d3fe 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs @@ -1,12 +1,20 @@ using System.Linq; using System.Numerics; +using Content.Client.Message; using Content.Shared.Atmos; using Content.Client.UserInterface.Controls; +using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Prototypes; using Content.Shared.IdentityManagement; +using Content.Shared.Inventory; using Content.Shared.MedicalScanner; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition.Components; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; @@ -28,9 +36,6 @@ public sealed partial class HealthAnalyzerWindow : FancyWindow private readonly IPrototypeManager _prototypes; private readonly IResourceCache _cache; - private const int AnalyzerHeight = 430; - private const int AnalyzerWidth = 300; - public HealthAnalyzerWindow() { RobustXamlLoader.Load(this); @@ -44,8 +49,6 @@ public HealthAnalyzerWindow() public void Populate(HealthAnalyzerScannedUserMessage msg) { - GroupsContainer.RemoveAllChildren(); - var target = _entityManager.GetEntity(msg.TargetEntity); if (target == null @@ -57,82 +60,96 @@ public void Populate(HealthAnalyzerScannedUserMessage msg) NoPatientDataText.Visible = false; - string entityName = Loc.GetString("health-analyzer-window-entity-unknown-text"); - if (_entityManager.HasComponent(target.Value)) - { - entityName = Identity.Name(target.Value, _entityManager); - } + // Scan Mode - if (msg.ScanMode.HasValue) - { - ScanModePanel.Visible = true; - ScanModeText.Text = Loc.GetString(msg.ScanMode.Value ? "health-analyzer-window-scan-mode-active" : "health-analyzer-window-scan-mode-inactive"); - ScanModeText.FontColorOverride = msg.ScanMode.Value ? Color.Green : Color.Red; - } - else - { - ScanModePanel.Visible = false; - } + ScanModeLabel.Text = msg.ScanMode.HasValue + ? msg.ScanMode.Value + ? Loc.GetString("health-analyzer-window-scan-mode-active") + : Loc.GetString("health-analyzer-window-scan-mode-inactive") + : Loc.GetString("health-analyzer-window-entity-unknown-text"); + + ScanModeLabel.FontColorOverride = msg.ScanMode.HasValue && msg.ScanMode.Value ? Color.Green : Color.Red; + + // Patient Information + + SpriteView.SetEntity(target.Value); + + var name = new FormattedMessage(); + name.PushColor(Color.White); + name.AddText(_entityManager.HasComponent(target.Value) + ? Identity.Name(target.Value, _entityManager) + : Loc.GetString("health-analyzer-window-entity-unknown-text")); + NameLabel.SetMessage(name); + + SpeciesLabel.Text = + _entityManager.TryGetComponent(target.Value, + out var humanoidAppearanceComponent) + ? Loc.GetString(_prototypes.Index(humanoidAppearanceComponent.Species).Name) + : Loc.GetString("health-analyzer-window-entity-unknown-species-text"); + + // Basic Diagnostic + + TemperatureLabel.Text = !float.IsNaN(msg.Temperature) + ? $"{msg.Temperature - Atmospherics.T0C:F1} °C ({msg.Temperature:F1} K)" + : Loc.GetString("health-analyzer-window-entity-unknown-value-text"); + + BloodLabel.Text = !float.IsNaN(msg.BloodLevel) + ? $"{msg.BloodLevel * 100:F1} %" + : Loc.GetString("health-analyzer-window-entity-unknown-value-text"); - PatientName.Text = Loc.GetString( - "health-analyzer-window-entity-health-text", - ("entityName", entityName) - ); + StatusLabel.Text = + _entityManager.TryGetComponent(target.Value, out var mobStateComponent) + ? GetStatus(mobStateComponent.CurrentState) + : Loc.GetString("health-analyzer-window-entity-unknown-text"); - Temperature.Text = Loc.GetString("health-analyzer-window-entity-temperature-text", - ("temperature", float.IsNaN(msg.Temperature) ? "N/A" : $"{msg.Temperature - Atmospherics.T0C:F1} °C ({msg.Temperature:F1} K)") - ); + // Total Damage - BloodLevel.Text = Loc.GetString("health-analyzer-window-entity-blood-level-text", - ("bloodLevel", float.IsNaN(msg.BloodLevel) ? "N/A" : $"{msg.BloodLevel * 100:F1} %") - ); + DamageLabel.Text = damageable.TotalDamage.ToString(); + + // Alerts + + AlertsDivider.Visible = msg.Bleeding == true; + AlertsContainer.Visible = msg.Bleeding == true; if (msg.Bleeding == true) { - Bleeding.Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"); - Bleeding.FontColorOverride = Color.Red; - } - else - { - Bleeding.Text = string.Empty; // Clear the text + AlertsContainer.DisposeAllChildren(); + AlertsContainer.AddChild(new Label + { + Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"), + FontColorOverride = Color.Red, + }); } - patientDamageAmount.Text = Loc.GetString( - "health-analyzer-window-entity-damage-total-text", - ("amount", damageable.TotalDamage) - ); + // Damage Groups var damageSortedGroups = - damageable.DamagePerGroup.OrderBy(damage => damage.Value) + damageable.DamagePerGroup.OrderByDescending(damage => damage.Value) .ToDictionary(x => x.Key, x => x.Value); + IReadOnlyDictionary damagePerType = damageable.Damage.DamageDict; DrawDiagnosticGroups(damageSortedGroups, damagePerType); + } - if (_entityManager.TryGetComponent(target, out HungerComponent? hunger) - && hunger.StarvationDamage != null - && hunger.CurrentThreshold <= HungerThreshold.Starving) + private static string GetStatus(MobState mobState) + { + return mobState switch { - var box = new Control { Margin = new Thickness(0, 0, 0, 15) }; - - box.AddChild(CreateDiagnosticGroupTitle( - Loc.GetString("health-analyzer-window-malnutrition"), - "malnutrition")); - - GroupsContainer.AddChild(box); - } - - SetHeight = AnalyzerHeight; - SetWidth = AnalyzerWidth; + MobState.Alive => Loc.GetString("health-analyzer-window-entity-alive-text"), + MobState.Critical => Loc.GetString("health-analyzer-window-entity-critical-text"), + MobState.Dead => Loc.GetString("health-analyzer-window-entity-dead-text"), + _ => Loc.GetString("health-analyzer-window-entity-unknown-text"), + }; } private void DrawDiagnosticGroups( - Dictionary groups, IReadOnlyDictionary damageDict) + Dictionary groups, + IReadOnlyDictionary damageDict) { - HashSet shownTypes = new(); + GroupsContainer.RemoveAllChildren(); - // Show the total damage and type breakdown for each damage group. - foreach (var (damageGroupId, damageAmount) in groups.Reverse()) + foreach (var (damageGroupId, damageAmount) in groups) { if (damageAmount == 0) continue; @@ -145,7 +162,6 @@ private void DrawDiagnosticGroups( var groupContainer = new BoxContainer { - Margin = new Thickness(0, 0, 0, 15), Align = BoxContainer.AlignMode.Begin, Orientation = BoxContainer.LayoutOrientation.Vertical, }; @@ -159,23 +175,16 @@ private void DrawDiagnosticGroups( foreach (var type in group.DamageTypes) { - if (damageDict.TryGetValue(type, out var typeAmount) && typeAmount > 0) - { - // If damage types are allowed to belong to more than one damage group, - // they may appear twice here. Mark them as duplicate. - if (shownTypes.Contains(type)) - continue; - - shownTypes.Add(type); - - var damageString = Loc.GetString( - "health-analyzer-window-damage-type-text", - ("damageType", _prototypes.Index(type).LocalizedName), - ("amount", typeAmount) - ); - - groupContainer.AddChild(CreateDiagnosticItemLabel(damageString.Insert(0, "- "))); - } + if (!damageDict.TryGetValue(type, out var typeAmount) || typeAmount <= 0) + continue; + + var damageString = Loc.GetString( + "health-analyzer-window-damage-type-text", + ("damageType", _prototypes.Index(type).LocalizedName), + ("amount", typeAmount) + ); + + groupContainer.AddChild(CreateDiagnosticItemLabel(damageString.Insert(0, " · "))); } } } @@ -198,7 +207,6 @@ private static Label CreateDiagnosticItemLabel(string text) { return new Label { - Margin = new Thickness(2, 2), Text = text, }; } @@ -207,13 +215,13 @@ private BoxContainer CreateDiagnosticGroupTitle(string text, string id) { var rootContainer = new BoxContainer { + Margin = new Thickness(0, 6, 0, 0), VerticalAlignment = VAlignment.Bottom, - Orientation = BoxContainer.LayoutOrientation.Horizontal + Orientation = BoxContainer.LayoutOrientation.Horizontal, }; rootContainer.AddChild(new TextureRect { - Margin = new Thickness(0, 3), SetSize = new Vector2(30, 30), Texture = GetTexture(id.ToLower()) }); diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index c5f2f311d9..e81f72ba67 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -718,6 +718,9 @@ private void ReloadPreview() PreviewDummy = _controller.LoadProfileEntity(Profile, JobOverride, ShowClothes.Pressed); SpriteView.SetEntity(PreviewDummy); _entManager.System().SetEntityName(PreviewDummy, Profile.Name); + + // Check and set the dirty flag to enable the save/reset buttons as appropriate. + SetDirty(); } /// @@ -778,6 +781,9 @@ private void ReloadProfilePreview() return; _entManager.System().LoadProfile(PreviewDummy, Profile); + + // Check and set the dirty flag to enable the save/reset buttons as appropriate. + SetDirty(); } private void OnSpeciesInfoButtonPressed(BaseButton.ButtonEventArgs args) @@ -1014,7 +1020,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo roleLoadout.AddLoadout(loadoutGroup, loadoutProto, _prototypeManager); _loadoutWindow.RefreshLoadouts(roleLoadout, session, collection); Profile = Profile?.WithLoadout(roleLoadout); - SetDirty(); ReloadPreview(); }; @@ -1023,7 +1028,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo roleLoadout.RemoveLoadout(loadoutGroup, loadoutProto, _prototypeManager); _loadoutWindow.RefreshLoadouts(roleLoadout, session, collection); Profile = Profile?.WithLoadout(roleLoadout); - SetDirty(); ReloadPreview(); }; @@ -1033,7 +1037,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo _loadoutWindow.OnClose += () => { JobOverride = null; - SetDirty(); ReloadPreview(); }; @@ -1058,7 +1061,6 @@ private void OnMarkingChange(MarkingSet markings) return; Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithMarkings(markings.GetForwardEnumerator().ToList())); - SetDirty(); ReloadProfilePreview(); } @@ -1126,7 +1128,6 @@ private void OnSkinColorOnValueChanged() } } - SetDirty(); ReloadProfilePreview(); } @@ -1157,7 +1158,6 @@ private void SetAge(int newAge) { Profile = Profile?.WithAge(newAge); ReloadPreview(); - SetDirty(); } private void SetSex(Sex newSex) @@ -1180,14 +1180,12 @@ private void SetSex(Sex newSex) UpdateGenderControls(); Markings.SetSex(newSex); ReloadPreview(); - SetDirty(); } private void SetGender(Gender newGender) { Profile = Profile?.WithGender(newGender); ReloadPreview(); - SetDirty(); } private void SetSpecies(string newSpecies) @@ -1201,7 +1199,6 @@ private void SetSpecies(string newSpecies) RefreshLoadouts(); UpdateSexControls(); // update sex for new species UpdateSpeciesGuidebookIcon(); - SetDirty(); ReloadPreview(); } diff --git a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs index 14709f8b1f..619cac6839 100644 --- a/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs +++ b/Content.Client/Lobby/UI/LobbyCharacterPreviewPanel.xaml.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Client.UserInterface.Controls; +using Prometheus; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/Lobby/UI/LobbyGui.xaml.cs b/Content.Client/Lobby/UI/LobbyGui.xaml.cs index 6471edb6f3..81230130a1 100644 --- a/Content.Client/Lobby/UI/LobbyGui.xaml.cs +++ b/Content.Client/Lobby/UI/LobbyGui.xaml.cs @@ -2,6 +2,7 @@ using Content.Client.UserInterface.Systems.EscapeMenu; using Robust.Client.AutoGenerated; using Robust.Client.Console; +using Robust.Client.State; using Robust.Client.UserInterface; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs b/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs index 6133abfcb7..441ca9ea36 100644 --- a/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs +++ b/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs @@ -3,6 +3,7 @@ using Robust.Client.UserInterface.XAML; using Robust.Shared.Timing; using Content.Client.TextScreen; +using Robust.Client.UserInterface.Controls; namespace Content.Client.MachineLinking.UI; diff --git a/Content.Client/Options/UI/OptionsMenu.xaml.cs b/Content.Client/Options/UI/OptionsMenu.xaml.cs index 61037f4e4a..b749d1f234 100644 --- a/Content.Client/Options/UI/OptionsMenu.xaml.cs +++ b/Content.Client/Options/UI/OptionsMenu.xaml.cs @@ -1,3 +1,4 @@ +using Content.Client.Options.UI.Tabs; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; diff --git a/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs index 61e20f751c..ebf6c18c95 100644 --- a/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Client/Power/EntitySystems/PowerReceiverSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Client.Power.Components; using Content.Shared.Power.Components; using Content.Shared.Power.EntitySystems; @@ -27,4 +28,16 @@ private void OnHandleState(EntityUid uid, ApcPowerReceiverComponent component, r component.Powered = state.Powered; } + + public override bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component) + { + if (component != null) + return true; + + if (!TryComp(entity, out ApcPowerReceiverComponent? receiver)) + return false; + + component = receiver; + return true; + } } diff --git a/Content.Client/Power/Generator/GeneratorWindow.xaml.cs b/Content.Client/Power/Generator/GeneratorWindow.xaml.cs index e975e5d466..161482e090 100644 --- a/Content.Client/Power/Generator/GeneratorWindow.xaml.cs +++ b/Content.Client/Power/Generator/GeneratorWindow.xaml.cs @@ -3,6 +3,7 @@ using Content.Shared.Power.Generator; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Network; namespace Content.Client.Power.Generator; diff --git a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs index 20d2e4a3e5..f66b3db000 100644 --- a/Content.Client/Radio/Ui/IntercomMenu.xaml.cs +++ b/Content.Client/Radio/Ui/IntercomMenu.xaml.cs @@ -1,3 +1,4 @@ +using System.Threading.Channels; using Content.Client.UserInterface.Controls; using Content.Shared.Radio.Components; using Robust.Client.AutoGenerated; diff --git a/Content.Client/StationRecords/GeneralRecord.xaml.cs b/Content.Client/StationRecords/GeneralRecord.xaml.cs index 6a2622fba9..e84c2dc098 100644 --- a/Content.Client/StationRecords/GeneralRecord.xaml.cs +++ b/Content.Client/StationRecords/GeneralRecord.xaml.cs @@ -2,6 +2,7 @@ using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; using Robust.Client.UserInterface.XAML; +using Robust.Shared.Enums; namespace Content.Client.StationRecords; diff --git a/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs b/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs index 9f07867da8..9ef6c65e89 100644 --- a/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs +++ b/Content.Client/Storage/Components/StorageContainerVisualsComponent.cs @@ -1,4 +1,5 @@ using Content.Client.Chemistry.Visualizers; +using Content.Shared.Chemistry.Components; namespace Content.Client.Storage.Components; diff --git a/Content.Client/UserInterface/Controls/ProgressTextureRect.cs b/Content.Client/UserInterface/Controls/ProgressTextureRect.cs index 2b8d93a5d4..8454ae0892 100644 --- a/Content.Client/UserInterface/Controls/ProgressTextureRect.cs +++ b/Content.Client/UserInterface/Controls/ProgressTextureRect.cs @@ -9,7 +9,12 @@ public sealed class ProgressTextureRect : TextureRect { public float Progress; - private readonly ProgressColorSystem _progressColor = IoCManager.Resolve().System(); + private readonly ProgressColorSystem _progressColor; + + public ProgressTextureRect() + { + _progressColor = IoCManager.Resolve().System(); + } protected override void Draw(DrawingHandleScreen handle) { diff --git a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs index c920bbfeec..fa2f5bfa75 100644 --- a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs +++ b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs @@ -133,7 +133,7 @@ public void OnStateEntered(GameplayState state) var boundKey = hotbarKeys[i]; builder = builder.Bind(boundKey, new PointerInputCmdHandler((in PointerInputCmdArgs args) => { - if (args.State != BoundKeyState.Up) + if (args.State != BoundKeyState.Down) return false; TriggerAction(boundId); @@ -240,8 +240,6 @@ private bool TryTargetWorld(in PointerInputCmdArgs args, EntityUid actionId, Wor if (action.Event != null) { action.Event.Target = coords; - action.Event.Performer = user; - action.Event.Action = actionId; } _actionsSystem.PerformAction(user, actionComp, actionId, action, action.Event, _timing.CurTime); @@ -275,8 +273,6 @@ private bool TryTargetEntity(in PointerInputCmdArgs args, EntityUid actionId, En if (action.Event != null) { action.Event.Target = entity; - action.Event.Performer = user; - action.Event.Action = actionId; } _actionsSystem.PerformAction(user, actionComp, actionId, action, action.Event, _timing.CurTime); @@ -316,8 +312,6 @@ private bool TryTargetEntityWorld(in PointerInputCmdArgs args, { action.Event.Entity = entity; action.Event.Coords = coords; - action.Event.Performer = user; - action.Event.Action = actionId; } _actionsSystem.PerformAction(user, actionComp, actionId, action, action.Event, _timing.CurTime); diff --git a/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs b/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs index 03ea47827f..702b0a52ac 100644 --- a/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs +++ b/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs @@ -30,6 +30,7 @@ public sealed class GuidebookUIController : UIController, IOnStateEntered UIManager.GetActiveUIWidgetOrNull()?.GuidebookButton; + private ProtoId? _lastEntry; public void OnStateEntered(LobbyState state) { @@ -142,7 +143,10 @@ private void OnWindowClosed() GuidebookButton.Pressed = false; if (_guideWindow != null) + { _guideWindow.ReturnContainer.Visible = false; + _lastEntry = _guideWindow.LastEntry; + } } private void OnWindowOpen() @@ -176,8 +180,6 @@ public void OpenGuidebook( if (GuidebookButton != null) GuidebookButton.SetClickPressed(!_guideWindow.IsOpen); - selected ??= _configuration.GetCVar(CCVars.DefaultGuide); - if (guides == null) { guides = _prototypeManager.EnumeratePrototypes() @@ -193,6 +195,17 @@ public void OpenGuidebook( } } + if (selected == null) + { + if (_lastEntry is { } lastEntry && guides.ContainsKey(lastEntry)) + { + selected = _lastEntry; + } + else + { + selected = _configuration.GetCVar(CCVars.DefaultGuide); + } + } _guideWindow.UpdateGuides(guides, rootEntries, forceRoot, selected); // Expand up to depth-2. diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index efe6ef8e9a..ee7a0e41fa 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -7,6 +7,7 @@ using FancyWindow = Content.Client.UserInterface.Controls.FancyWindow; using Robust.Client.UserInterface; using Content.Client.UserInterface.Controls; +using Content.Shared.IdentityManagement; using Robust.Client.Graphics; namespace Content.Client.VendingMachines.UI @@ -15,6 +16,9 @@ namespace Content.Client.VendingMachines.UI public sealed partial class VendingMachineMenu : FancyWindow { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + + private readonly Dictionary _dummies = []; public event Action? OnItemSelected; @@ -32,6 +36,22 @@ public VendingMachineMenu() VendingContents.ItemKeyBindDown += (args, data) => OnItemSelected?.Invoke(args, data); } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + // Don't clean up dummies during disposal or we'll just have to spawn them again + if (!disposing) + return; + + // Delete any dummy items we spawned + foreach (var entity in _dummies.Values) + { + _entityManager.QueueDeleteEntity(entity); + } + _dummies.Clear(); + } + private bool DataFilterCondition(string filter, ListData data) { if (data is not VendorItemsListData { ItemText: var text }) @@ -91,7 +111,14 @@ public void Populate(List inventory) if (!_prototypeManager.TryIndex(entry.ID, out var prototype)) continue; - var itemText = $"{prototype.Name} [{entry.Amount}]"; + if (!_dummies.TryGetValue(entry.ID, out var dummy)) + { + dummy = _entityManager.Spawn(entry.ID); + _dummies.Add(entry.ID, dummy); + } + + var itemName = Identity.Name(dummy, _entityManager); + var itemText = $"{itemName} [{entry.Amount}]"; if (itemText.Length > longestEntry.Length) longestEntry = itemText; diff --git a/Content.Client/Verbs/VerbSystem.cs b/Content.Client/Verbs/VerbSystem.cs index 5f1f49e5fd..c3e03528a7 100644 --- a/Content.Client/Verbs/VerbSystem.cs +++ b/Content.Client/Verbs/VerbSystem.cs @@ -67,6 +67,14 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true ? Visibility : Visibility | MenuVisibility.NoFov; + var ev = new MenuVisibilityEvent() + { + TargetPos = targetPos, + Visibility = visibility, + }; + + RaiseLocalEvent(player.Value, ref ev); + visibility = ev.Visibility; // Get entities List entities; @@ -77,13 +85,8 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true var entitiesUnderMouse = gameScreenBase.GetClickableEntities(targetPos).ToHashSet(); bool Predicate(EntityUid e) => e == player || entitiesUnderMouse.Contains(e); - // first check the general location. - if (!_examine.CanExamine(player.Value, targetPos, Predicate)) - return false; - TryComp(player.Value, out ExaminerComponent? examiner); - // Then check every entity entities = new(); foreach (var ent in _entityLookup.GetEntitiesInRange(targetPos, EntityMenuLookupSize)) { @@ -137,27 +140,6 @@ public bool TryGetEntityMenuEntities(MapCoordinates targetPos, [NotNullWhen(true } } - // Remove any entities that do not have LOS - if ((visibility & MenuVisibility.NoFov) == 0) - { - var xformQuery = GetEntityQuery(); - var playerPos = _transform.GetMapCoordinates(player.Value, xform: xformQuery.GetComponent(player.Value)); - - for (var i = entities.Count - 1; i >= 0; i--) - { - var entity = entities[i]; - - if (!_examine.InRangeUnOccluded( - playerPos, - _transform.GetMapCoordinates(entity, xform: xformQuery.GetComponent(entity)), - ExamineSystemShared.ExamineRange, - null)) - { - entities.RemoveSwap(i); - } - } - } - if (entities.Count == 0) return false; @@ -229,15 +211,4 @@ private void HandleVerbResponse(VerbsResponseEvent msg) OnVerbsResponse?.Invoke(msg); } } - - [Flags] - public enum MenuVisibility - { - // What entities can a user see on the entity menu? - Default = 0, // They can only see entities in FoV. - NoFov = 1 << 0, // They ignore FoV restrictions - InContainer = 1 << 1, // They can see through containers. - Invisible = 1 << 2, // They can see entities without sprites and the "HideContextMenu" tag is ignored. - All = NoFov | InContainer | Invisible - } } diff --git a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs index 2890bb3dbf..2723db1efb 100644 --- a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs +++ b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs @@ -1,6 +1,7 @@ using Content.Client.Stylesheets; using Content.Client.UserInterface.Controls; using Content.Shared.Xenoarchaeology.Equipment; +using Microsoft.VisualBasic; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; using Robust.Client.UserInterface.Controls; diff --git a/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs b/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs new file mode 100644 index 0000000000..c8378bb661 --- /dev/null +++ b/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs @@ -0,0 +1,58 @@ +using System.Linq; +using Content.Client.Chat.UI; +using Content.Client.LateJoin; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.ContentPack; +using Robust.Shared.IoC; +using Robust.Shared.Reflection; + +namespace Content.IntegrationTests.Tests.UserInterface; + +[TestFixture] +public sealed class UiControlTest +{ + // You should not be adding to this. + private Type[] _ignored = new Type[] + { + typeof(EmotesMenu), + typeof(LateJoinGui), + }; + + /// + /// Tests that all windows can be instantiated successfully. + /// + [Test] + public async Task TestWindows() + { + var pair = await PoolManager.GetServerClient(new PoolSettings() + { + Connected = true, + }); + var activator = pair.Client.ResolveDependency(); + var refManager = pair.Client.ResolveDependency(); + var loader = pair.Client.ResolveDependency(); + + await pair.Client.WaitAssertion(() => + { + foreach (var type in refManager.GetAllChildren(typeof(BaseWindow))) + { + if (type.IsAbstract || _ignored.Contains(type)) + continue; + + if (!loader.IsContentType(type)) + continue; + + // If it has no empty ctor then skip it instead of figuring out what args it needs. + var ctor = type.GetConstructor(Type.EmptyTypes); + + if (ctor == null) + continue; + + // Don't inject because the control themselves have to do it. + activator.CreateInstance(type, oneOff: true, inject: false); + } + }); + + await pair.CleanReturnAsync(); + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs new file mode 100644 index 0000000000..61aa1a8c73 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs @@ -0,0 +1,1769 @@ +// +using System; +using System.Net; +using System.Text.Json; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20240112194620_Blacklist")] + partial class Blacklist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminId") + .HasColumnType("uuid") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("boolean") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("text") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("text") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_name"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("integer") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("integer") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("text") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("integer") + .HasColumnName("slot"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property?>("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property?>("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs new file mode 100644 index 0000000000..a6a34626ed --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class Blacklist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "blacklist", + columns: table => new + { + user_id = table.Column(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_blacklist", x => x.user_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "blacklist"); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs index cb9fdde4d5..1f64f6e51a 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs @@ -512,6 +512,20 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.Blacklist", + b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string) null); + }); + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => { b.Property("Id") diff --git a/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs new file mode 100644 index 0000000000..049901bc7d --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs @@ -0,0 +1,1701 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20240112194612_Blacklist")] + partial class Blacklist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_flag_id"); + + b.Property("AdminId") + .HasColumnType("TEXT") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("INTEGER") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_flag_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("antag_id"); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("assigned_user_id_id"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("job_id"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("INTEGER") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("TEXT") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("Age") + .HasColumnType("INTEGER") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_name"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("INTEGER") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("INTEGER") + .HasColumnName("slot"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs new file mode 100644 index 0000000000..4988a3c336 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class Blacklist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "blacklist", + columns: table => new + { + user_id = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_blacklist", x => x.user_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "blacklist"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs index efc6682191..02d4416302 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs @@ -483,6 +483,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.Blacklist", + b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string) null); + }); modelBuilder.Entity("Content.Server.Database.BanTemplate", b => { b.Property("Id") diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs index ea63c41fc2..00b3cfea03 100644 --- a/Content.Server.Database/Model.cs +++ b/Content.Server.Database/Model.cs @@ -28,6 +28,7 @@ protected ServerDbContext(DbContextOptions options) : base(options) public DbSet AdminLog { get; set; } = null!; public DbSet AdminLogPlayer { get; set; } = null!; public DbSet Whitelist { get; set; } = null!; + public DbSet Blacklist { get; set; } = null!; public DbSet Ban { get; set; } = default!; public DbSet Unban { get; set; } = default!; public DbSet BanExemption { get; set; } = default!; @@ -551,6 +552,15 @@ public class Whitelist [Required, Key] public Guid UserId { get; set; } } + /// + /// List of users who are on the "blacklist". This is a list that may be used by Whitelist implementations to deny access to certain users. + /// + [Table("blacklist")] + public class Blacklist + { + [Required, Key] public Guid UserId { get; set; } + } + public class Admin { [Key] public Guid UserId { get; set; } diff --git a/Content.Server/Abilities/Mime/MimePowersSystem.cs b/Content.Server/Abilities/Mime/MimePowersSystem.cs index 85230faab0..20889f293c 100644 --- a/Content.Server/Abilities/Mime/MimePowersSystem.cs +++ b/Content.Server/Abilities/Mime/MimePowersSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Alert; using Content.Shared.Coordinates.Helpers; using Content.Shared.Maps; -using Content.Shared.Mobs.Components; using Content.Shared.Physics; using Robust.Shared.Containers; using Robust.Shared.Map; @@ -19,7 +18,6 @@ public sealed class MimePowersSystem : EntitySystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; - [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; [Dependency] private readonly TurfSystem _turf = default!; [Dependency] private readonly IMapManager _mapMan = default!; [Dependency] private readonly SharedContainerSystem _container = default!; @@ -80,22 +78,13 @@ private void OnInvisibleWall(EntityUid uid, MimePowersComponent component, Invis if (tile == null) return; - // Check there are no walls there - if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + // Check if the tile is blocked by a wall or mob, and don't create the wall if so + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable | CollisionGroup.Opaque)) { _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-failed"), uid, uid); return; } - // Check there are no mobs there - foreach (var entity in _lookupSystem.GetLocalEntitiesIntersecting(tile.Value, 0f)) - { - if (HasComp(entity) && entity != uid) - { - _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-failed"), uid, uid); - return; - } - } _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-popup", ("mime", uid)), uid); // Make sure we set the invisible wall to despawn properly Spawn(component.WallPrototype, _turf.GetTileCenter(tile.Value)); diff --git a/Content.Server/Actions/ActionOnInteractSystem.cs b/Content.Server/Actions/ActionOnInteractSystem.cs index a1f02ed1ec..af9b0b1ddb 100644 --- a/Content.Server/Actions/ActionOnInteractSystem.cs +++ b/Content.Server/Actions/ActionOnInteractSystem.cs @@ -55,12 +55,6 @@ private void OnActivate(EntityUid uid, ActionOnInteractComponent component, Acti return; var (actId, act) = _random.Pick(options); - if (act.Event != null) - { - act.Event.Performer = args.User; - act.Event.Action = actId; - } - _actions.PerformAction(args.User, null, actId, act, act.Event, _timing.CurTime, false); args.Handled = true; } @@ -94,8 +88,6 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var (entActId, entAct) = _random.Pick(entOptions); if (entAct.Event != null) { - entAct.Event.Performer = args.User; - entAct.Event.Action = entActId; entAct.Event.Target = args.Target.Value; } @@ -119,8 +111,6 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var (entActId, entAct) = _random.Pick(entWorldOptions); if (entAct.Event != null) { - entAct.Event.Performer = args.User; - entAct.Event.Action = entActId; entAct.Event.Entity = args.Target; entAct.Event.Coords = args.ClickLocation; } @@ -145,8 +135,6 @@ private void OnAfterInteract(EntityUid uid, ActionOnInteractComponent component, var (actId, act) = _random.Pick(options); if (act.Event != null) { - act.Event.Performer = args.User; - act.Event.Action = actId; act.Event.Target = args.ClickLocation; } diff --git a/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs b/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs index 4f2108748b..3dd216c5dc 100644 --- a/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs +++ b/Content.Server/AlertLevel/AlertLevelDisplaySystem.cs @@ -1,6 +1,7 @@ using Content.Server.Power.Components; using Content.Server.Station.Systems; using Content.Shared.AlertLevel; +using Content.Shared.Power; namespace Content.Server.AlertLevel; diff --git a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs index bac2648307..bc3b57bd5a 100644 --- a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs +++ b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; using Content.Shared.Mind.Components; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/Anomaly/AnomalySynchronizerSystem.cs b/Content.Server/Anomaly/AnomalySynchronizerSystem.cs index 9f18a41292..d4a3a0d5fa 100644 --- a/Content.Server/Anomaly/AnomalySynchronizerSystem.cs +++ b/Content.Server/Anomaly/AnomalySynchronizerSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Power; using Robust.Shared.Audio.Systems; using Content.Shared.Verbs; diff --git a/Content.Server/Anomaly/AnomalySystem.Generator.cs b/Content.Server/Anomaly/AnomalySystem.Generator.cs index 056a985cbe..6eb84b9441 100644 --- a/Content.Server/Anomaly/AnomalySystem.Generator.cs +++ b/Content.Server/Anomaly/AnomalySystem.Generator.cs @@ -13,6 +13,7 @@ using Robust.Shared.Physics.Components; using Robust.Shared.Map; using System.Numerics; +using Content.Shared.Power; using Robust.Server.GameObjects; namespace Content.Server.Anomaly; diff --git a/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs b/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs index 561cad8d7e..b0bf389509 100644 --- a/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs +++ b/Content.Server/Arcade/BlockGame/BlockGameArcadeSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Advertise; using Content.Server.Advertise.Components; using Content.Shared.Arcade; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Player; diff --git a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs index f7758f11f1..b359a13bd1 100644 --- a/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs +++ b/Content.Server/Arcade/SpaceVillainGame/SpaceVillainArcadeSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.UserInterface; using Content.Server.Advertise; using Content.Server.Advertise.Components; +using Content.Shared.Power; using static Content.Shared.Arcade.SharedSpaceVillainArcadeComponent; using Robust.Server.GameObjects; using Robust.Shared.Audio; diff --git a/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs b/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs index 643b0ce782..a4e83594f2 100644 --- a/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs +++ b/Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs @@ -17,8 +17,6 @@ public sealed partial class AirAlarmComponent : Component // Remember to null this afterwards. [ViewVariables] public IAirAlarmModeUpdate? CurrentModeUpdater { get; set; } - [ViewVariables] public AirAlarmTab CurrentTab { get; set; } - public readonly HashSet KnownDevices = new(); public readonly Dictionary VentData = new(); public readonly Dictionary ScrubberData = new(); diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index f4650861db..eebac18501 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -18,6 +18,7 @@ using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Systems; using Content.Shared.Interaction; +using Content.Shared.Power; using Content.Shared.Wires; using Robust.Server.GameObjects; using Robust.Shared.Player; @@ -173,7 +174,6 @@ public override void Initialize() subs.Event(OnUpdateThreshold); subs.Event(OnUpdateDeviceData); subs.Event(OnCopyDeviceData); - subs.Event(OnTabChange); }); } @@ -200,12 +200,6 @@ private void OnDeviceListUpdate(EntityUid uid, AirAlarmComponent component, Devi SyncRegisterAllDevices(uid); } - private void OnTabChange(EntityUid uid, AirAlarmComponent component, AirAlarmTabSetMessage msg) - { - component.CurrentTab = msg.Tab; - UpdateUI(uid, component); - } - private void OnPowerChanged(EntityUid uid, AirAlarmComponent component, ref PowerChangedEvent args) { if (args.Powered) @@ -598,34 +592,19 @@ public void UpdateUI(EntityUid uid, AirAlarmComponent? alarm = null, DeviceNetwo var pressure = CalculatePressureAverage(alarm); var temperature = CalculateTemperatureAverage(alarm); - var dataToSend = new Dictionary(); + var dataToSend = new List<(string, IAtmosDeviceData)>(); - if (alarm.CurrentTab != AirAlarmTab.Settings) + foreach (var (addr, data) in alarm.VentData) { - switch (alarm.CurrentTab) - { - case AirAlarmTab.Vent: - foreach (var (addr, data) in alarm.VentData) - { - dataToSend.Add(addr, data); - } - - break; - case AirAlarmTab.Scrubber: - foreach (var (addr, data) in alarm.ScrubberData) - { - dataToSend.Add(addr, data); - } - - break; - case AirAlarmTab.Sensors: - foreach (var (addr, data) in alarm.SensorData) - { - dataToSend.Add(addr, data); - } - - break; - } + dataToSend.Add((addr, data)); + } + foreach (var (addr, data) in alarm.ScrubberData) + { + dataToSend.Add((addr, data)); + } + foreach (var (addr, data) in alarm.SensorData) + { + dataToSend.Add((addr, data)); } var deviceCount = alarm.KnownDevices.Count; @@ -638,7 +617,7 @@ public void UpdateUI(EntityUid uid, AirAlarmComponent? alarm = null, DeviceNetwo _ui.SetUiState( uid, SharedAirAlarmInterfaceKey.Key, - new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, alarm.CurrentTab, highestAlarm.Value, alarm.AutoMode)); + new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, highestAlarm.Value, alarm.AutoMode)); } private const float Delay = 8f; diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs index 1b3b11068c..81a3968e6f 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Power.Components; using Content.Shared.Atmos.Monitor; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.Tag; using Robust.Server.Audio; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs index c1a5256fdd..2c9a358755 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosMonitoringSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Atmos; using Content.Shared.Atmos.Monitor; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.Tag; using Robust.Shared.Prototypes; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs index 7cb8102a38..b6271c22d4 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs @@ -15,6 +15,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems [UsedImplicitly] public sealed class GasPortableSystem : EntitySystem { + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; @@ -33,7 +34,7 @@ private void OnPortableAnchorAttempt(EntityUid uid, GasPortableComponent compone return; // If we can't find any ports, cancel the anchoring. - if(!FindGasPortIn(transform.GridUid, transform.Coordinates, out _)) + if (!FindGasPortIn(transform.GridUid, transform.Coordinates, out _)) args.Cancel(); } @@ -57,7 +58,7 @@ public bool FindGasPortIn(EntityUid? gridId, EntityCoordinates coordinates, [Not if (!TryComp(gridId, out var grid)) return false; - foreach (var entityUid in grid.GetLocal(coordinates)) + foreach (var entityUid in _mapSystem.GetLocal(gridId.Value, grid, coordinates)) { if (EntityManager.TryGetComponent(entityUid, out port)) { diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs index 2859c7f19d..dbbbf2d008 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs @@ -18,6 +18,7 @@ using Content.Shared.Audio; using Content.Shared.DeviceNetwork; using Content.Shared.Examine; +using Content.Shared.Power; using Content.Shared.Tools.Systems; using JetBrains.Annotations; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs index b27689ed58..a35cf6c2e3 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs @@ -16,6 +16,7 @@ using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Audio; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.Tools.Systems; using JetBrains.Annotations; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs index bc5db2e22c..b1b6ed3678 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberSystem.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberSystem.cs @@ -15,6 +15,7 @@ using Content.Server.NodeContainer.EntitySystems; using Content.Shared.Atmos; using Content.Shared.Database; +using Content.Shared.Power; namespace Content.Server.Atmos.Portable { diff --git a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs index cbf63f5404..36ef59e743 100644 --- a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs +++ b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs @@ -6,6 +6,7 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Atmos.Piping.Portable.Components; using Content.Shared.Atmos.Visuals; +using Content.Shared.Power; using Content.Shared.UserInterface; using Robust.Server.GameObjects; diff --git a/Content.Server/Audio/AmbientSoundSystem.cs b/Content.Server/Audio/AmbientSoundSystem.cs index e78970d124..1f4abf34f7 100644 --- a/Content.Server/Audio/AmbientSoundSystem.cs +++ b/Content.Server/Audio/AmbientSoundSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Audio; using Content.Shared.Mobs; +using Content.Shared.Power; namespace Content.Server.Audio; diff --git a/Content.Server/Audio/Jukebox/JukeboxSystem.cs b/Content.Server/Audio/Jukebox/JukeboxSystem.cs index b8b97b415c..d7593368ae 100644 --- a/Content.Server/Audio/Jukebox/JukeboxSystem.cs +++ b/Content.Server/Audio/Jukebox/JukeboxSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Audio.Jukebox; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Components; diff --git a/Content.Server/Bed/BedSystem.cs b/Content.Server/Bed/BedSystem.cs index a6b61da591..2cc8085e72 100644 --- a/Content.Server/Bed/BedSystem.cs +++ b/Content.Server/Bed/BedSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Damage; using Content.Shared.Emag.Systems; using Content.Shared.Mobs.Systems; +using Content.Shared.Power; using Robust.Shared.Timing; using Robust.Shared.Utility; diff --git a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs index 1369fa20f1..dd89ba2f72 100644 --- a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs +++ b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs @@ -1,17 +1,14 @@ -using System.Globalization; -using System.Linq; using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Hands.Systems; using Content.Server.Inventory; using Content.Server.Popups; -using Content.Server.Chat.Systems; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Server.StationRecords; using Content.Server.StationRecords.Systems; -using Content.Shared.StationRecords; -using Content.Shared.UserInterface; using Content.Shared.Access.Systems; using Content.Shared.Bed.Cryostorage; using Content.Shared.Chat; @@ -19,6 +16,8 @@ using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Mind.Components; +using Content.Shared.StationRecords; +using Content.Shared.UserInterface; using Robust.Server.Audio; using Robust.Server.Containers; using Robust.Server.GameObjects; @@ -27,6 +26,7 @@ using Robust.Shared.Enums; using Robust.Shared.Network; using Robust.Shared.Player; +using System.Globalization; namespace Content.Server.Bed.Cryostorage; @@ -40,7 +40,7 @@ public sealed class CryostorageSystem : SharedCryostorageSystem [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly ClimbSystem _climb = default!; [Dependency] private readonly ContainerSystem _container = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly HandsSystem _hands = default!; [Dependency] private readonly ServerInventorySystem _inventory = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -210,7 +210,7 @@ public void HandleEnterCryostorage(Entity ent, Ne if (userId != null && Mind.TryGetMind(userId.Value, out var mind) && HasComp(mind.Value.Comp.CurrentEntity)) { - _gameTicker.OnGhostAttempt(mind.Value, false); + _ghostSystem.OnGhostAttempt(mind.Value, false); } } diff --git a/Content.Server/Body/Systems/BodySystem.cs b/Content.Server/Body/Systems/BodySystem.cs index bd5edb0ea5..4279f3ed2b 100644 --- a/Content.Server/Body/Systems/BodySystem.cs +++ b/Content.Server/Body/Systems/BodySystem.cs @@ -1,5 +1,5 @@ using Content.Server.Body.Components; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Humanoid; using Content.Shared.Body.Components; using Content.Shared.Body.Part; @@ -17,7 +17,7 @@ namespace Content.Server.Body.Systems; public sealed class BodySystem : SharedBodySystem { - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -43,7 +43,7 @@ private void OnRelayMoveInput(Entity ent, ref MoveInputEvent args if (_mobState.IsDead(ent) && _mindSystem.TryGetMind(ent, out var mindId, out var mind)) { mind.TimeOfDeath ??= _gameTiming.RealTime; - _ticker.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); } } diff --git a/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs b/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs index 4458b020a1..6f356baf07 100644 --- a/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs +++ b/Content.Server/Buckle/Systems/AntiRotOnBuckleSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Power.Components; using Content.Shared.Atmos.Rotting; using Content.Shared.Buckle.Components; +using Content.Shared.Power; namespace Content.Server.Buckle.Systems; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs index f83ec1a512..5b69974077 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Telepad.cs @@ -6,6 +6,7 @@ using Content.Shared.Cargo; using Content.Shared.Cargo.Components; using Content.Shared.DeviceLinking; +using Content.Shared.Power; using Robust.Shared.Audio; using Robust.Shared.Random; using Robust.Shared.Utility; diff --git a/Content.Server/Chat/SuicideSystem.cs b/Content.Server/Chat/SuicideSystem.cs index 884292b0fa..69d87472fb 100644 --- a/Content.Server/Chat/SuicideSystem.cs +++ b/Content.Server/Chat/SuicideSystem.cs @@ -1,18 +1,18 @@ -using Content.Server.GameTicking; +using Content.Server.Ghost; +using Content.Shared.Administration.Logs; +using Content.Shared.Chat; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Interaction.Events; using Content.Shared.Item; using Content.Shared.Mind; +using Content.Shared.Mind.Components; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; using Content.Shared.Tag; using Robust.Shared.Player; -using Content.Shared.Administration.Logs; -using Content.Shared.Chat; -using Content.Shared.Mind.Components; namespace Content.Server.Chat; @@ -23,7 +23,7 @@ public sealed class SuicideSystem : EntitySystem [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly SharedSuicideSystem _suicide = default!; public override void Initialize() @@ -82,7 +82,7 @@ private void OnSuicideGhost(Entity victim, ref SuicideGh if (_tagSystem.HasTag(victim, "CannotSuicide")) args.CanReturnToBody = true; - if (_gameTicker.OnGhostAttempt(victim.Comp.Mind.Value, args.CanReturnToBody, mind: mindComponent)) + if (_ghostSystem.OnGhostAttempt(victim.Comp.Mind.Value, args.CanReturnToBody, mind: mindComponent)) args.Handled = true; } diff --git a/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs index a942d34e7a..45a85010b1 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionContainerMixerSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.EntitySystems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Power; namespace Content.Server.Chemistry.EntitySystems; diff --git a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs index 6e6373e10b..cd39d20b75 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionHeaterSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Placeable; +using Content.Shared.Power; namespace Content.Server.Chemistry.EntitySystems; diff --git a/Content.Server/Cloning/CloningConsoleSystem.cs b/Content.Server/Cloning/CloningConsoleSystem.cs index 950a6599a8..050e2b7f06 100644 --- a/Content.Server/Cloning/CloningConsoleSystem.cs +++ b/Content.Server/Cloning/CloningConsoleSystem.cs @@ -15,6 +15,7 @@ using Content.Shared.Mind; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; +using Content.Shared.Power; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Server.Player; diff --git a/Content.Server/Clothing/Systems/CursedMaskSystem.cs b/Content.Server/Clothing/Systems/CursedMaskSystem.cs index 2045ff5ccd..825e85e2c6 100644 --- a/Content.Server/Clothing/Systems/CursedMaskSystem.cs +++ b/Content.Server/Clothing/Systems/CursedMaskSystem.cs @@ -1,5 +1,5 @@ using Content.Server.Administration.Logs; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Mind; using Content.Server.NPC; using Content.Server.NPC.HTN; @@ -21,7 +21,7 @@ namespace Content.Server.Clothing.Systems; public sealed class CursedMaskSystem : SharedCursedMaskSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly HTNSystem _htn = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly NPCSystem _npc = default!; @@ -39,7 +39,7 @@ protected override void TryTakeover(Entity ent, EntityUid w if (TryComp(wearer, out var actor) && actor.PlayerSession.GetMind() is { } mind) { var session = actor.PlayerSession; - if (!_ticker.OnGhostAttempt(mind, false)) + if (!_ghostSystem.OnGhostAttempt(mind, false)) return; ent.Comp.StolenMind = mind; diff --git a/Content.Server/Connection/ConnectionManager.Whitelist.cs b/Content.Server/Connection/ConnectionManager.Whitelist.cs new file mode 100644 index 0000000000..212c87e17a --- /dev/null +++ b/Content.Server/Connection/ConnectionManager.Whitelist.cs @@ -0,0 +1,221 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Server.Connection.Whitelist; +using Content.Server.Connection.Whitelist.Conditions; +using Content.Server.Database; +using Content.Shared.CCVar; +using Content.Shared.Database; +using Content.Shared.Players.PlayTimeTracking; +using Robust.Shared.Network; + +namespace Content.Server.Connection; + +/// +/// Handles whitelist conditions for incoming connections. +/// +public sealed partial class ConnectionManager +{ + private PlayerConnectionWhitelistPrototype[]? _whitelists; + + public void PostInit() + { + _cfg.OnValueChanged(CCVars.WhitelistPrototypeList, UpdateWhitelists, true); + } + + private void UpdateWhitelists(string s) + { + var list = new List(); + foreach (var id in s.Split(',')) + { + if (_prototypeManager.TryIndex(id, out PlayerConnectionWhitelistPrototype? prototype)) + { + list.Add(prototype); + } + else + { + _sawmill.Fatal($"Whitelist prototype {id} does not exist. Denying all connections."); + _whitelists = null; // Invalidate the list, causes deny on all connections. + return; + } + } + + _whitelists = list.ToArray(); + } + + private bool IsValid(PlayerConnectionWhitelistPrototype whitelist, int playerCount) + { + return playerCount >= whitelist.MinimumPlayers && playerCount <= whitelist.MaximumPlayers; + } + + public async Task<(bool isWhitelisted, string? denyMessage)> IsWhitelisted(PlayerConnectionWhitelistPrototype whitelist, NetUserData data, ISawmill sawmill) + { + var cacheRemarks = await _db.GetAllAdminRemarks(data.UserId); + var cachePlaytime = await _db.GetPlayTimes(data.UserId); + + foreach (var condition in whitelist.Conditions) + { + bool matched; + string denyMessage; + switch (condition) + { + case ConditionAlwaysMatch: + matched = true; + denyMessage = Loc.GetString("whitelist-always-deny"); + break; + case ConditionManualWhitelistMembership: + matched = await CheckConditionManualWhitelist(data); + denyMessage = Loc.GetString("whitelist-manual"); + break; + case ConditionManualBlacklistMembership: + matched = await CheckConditionManualBlacklist(data); + denyMessage = Loc.GetString("whitelist-blacklisted"); + break; + case ConditionNotesDateRange conditionNotes: + matched = CheckConditionNotesDateRange(conditionNotes, cacheRemarks); + denyMessage = Loc.GetString("whitelist-notes"); + break; + case ConditionPlayerCount conditionPlayerCount: + matched = CheckConditionPlayerCount(conditionPlayerCount); + denyMessage = Loc.GetString("whitelist-player-count"); + break; + case ConditionPlaytime conditionPlaytime: + matched = CheckConditionPlaytime(conditionPlaytime, cachePlaytime); + denyMessage = Loc.GetString("whitelist-playtime", ("minutes", conditionPlaytime.MinimumPlaytime)); + break; + case ConditionNotesPlaytimeRange conditionNotesPlaytimeRange: + matched = CheckConditionNotesPlaytimeRange(conditionNotesPlaytimeRange, cacheRemarks, cachePlaytime); + denyMessage = Loc.GetString("whitelist-notes"); + break; + default: + throw new NotImplementedException($"Whitelist condition {condition.GetType().Name} not implemented"); + } + + sawmill.Verbose($"User {data.UserName} whitelist condition {condition.GetType().Name} result: {matched}"); + sawmill.Verbose($"Action: {condition.Action.ToString()}"); + switch (condition.Action) + { + case ConditionAction.Allow: + if (matched) + { + sawmill.Verbose($"User {data.UserName} passed whitelist condition {condition.GetType().Name} and it's a breaking condition"); + return (true, denyMessage); + } + break; + case ConditionAction.Deny: + if (matched) + { + sawmill.Verbose($"User {data.UserName} failed whitelist condition {condition.GetType().Name}"); + return (false, denyMessage); + } + break; + default: + sawmill.Verbose($"User {data.UserName} failed whitelist condition {condition.GetType().Name} but it's not a breaking condition"); + break; + } + } + sawmill.Verbose($"User {data.UserName} passed all whitelist conditions"); + return (true, null); + } + + #region Condition Checking + + private async Task CheckConditionManualWhitelist(NetUserData data) + { + return !(await _db.GetWhitelistStatusAsync(data.UserId)); + } + + private async Task CheckConditionManualBlacklist(NetUserData data) + { + return await _db.GetBlacklistStatusAsync(data.UserId); + } + + private bool CheckConditionNotesDateRange(ConditionNotesDateRange conditionNotes, List remarks) + { + var range = DateTime.UtcNow.AddDays(-conditionNotes.Range); + + return CheckRemarks(remarks, + conditionNotes.IncludeExpired, + conditionNotes.IncludeSecret, + conditionNotes.MinimumSeverity, + conditionNotes.MinimumNotes, + adminRemarksRecord => adminRemarksRecord.CreatedAt > range); + } + + private bool CheckConditionPlayerCount(ConditionPlayerCount conditionPlayerCount) + { + var count = _plyMgr.PlayerCount; + return count >= conditionPlayerCount.MinimumPlayers && count <= conditionPlayerCount.MaximumPlayers; + } + + private bool CheckConditionPlaytime(ConditionPlaytime conditionPlaytime, List playtime) + { + var tracker = playtime.Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall); + if (tracker is null) + { + return false; + } + + return tracker.TimeSpent.TotalMinutes >= conditionPlaytime.MinimumPlaytime; + } + + private bool CheckConditionNotesPlaytimeRange( + ConditionNotesPlaytimeRange conditionNotesPlaytimeRange, + List remarks, + List playtime) + { + var overallTracker = playtime.Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall); + if (overallTracker is null) + { + return false; + } + + return CheckRemarks(remarks, + conditionNotesPlaytimeRange.IncludeExpired, + conditionNotesPlaytimeRange.IncludeSecret, + conditionNotesPlaytimeRange.MinimumSeverity, + conditionNotesPlaytimeRange.MinimumNotes, + adminRemarksRecord => adminRemarksRecord.PlaytimeAtNote >= overallTracker.TimeSpent - TimeSpan.FromMinutes(conditionNotesPlaytimeRange.Range)); + } + + private bool CheckRemarks(List remarks, bool includeExpired, bool includeSecret, NoteSeverity minimumSeverity, int MinimumNotes, Func additionalCheck) + { + var utcNow = DateTime.UtcNow; + + var notes = remarks.Count(r => r is AdminNoteRecord note && note.Severity >= minimumSeverity && (includeSecret || !note.Secret) && (includeExpired || note.ExpirationTime == null || note.ExpirationTime > utcNow)); + if (notes < MinimumNotes) + { + return false; + } + + foreach (var adminRemarksRecord in remarks) + { + // If we're not including expired notes, skip them + if (!includeExpired && (adminRemarksRecord.ExpirationTime == null || adminRemarksRecord.ExpirationTime <= utcNow)) + continue; + + // In order to get the severity of the remark, we need to see if it's an AdminNoteRecord. + if (adminRemarksRecord is not AdminNoteRecord adminNoteRecord) + continue; + + // We want to filter out secret notes if we're not including them. + if (!includeSecret && adminNoteRecord.Secret) + continue; + + // At this point, we need to remove the note if it's not within the severity range. + if (adminNoteRecord.Severity < minimumSeverity) + continue; + + // Perform the additional check specific to each method + if (!additionalCheck(adminRemarksRecord)) + continue; + + // If we've made it this far, we have a match + return true; + } + + // No matches + return false; + } + + #endregion +} diff --git a/Content.Server/Connection/ConnectionManager.cs b/Content.Server/Connection/ConnectionManager.cs index d39dd7990e..987c8d06b0 100644 --- a/Content.Server/Connection/ConnectionManager.cs +++ b/Content.Server/Connection/ConnectionManager.cs @@ -1,5 +1,9 @@ using System.Collections.Immutable; using System.Linq; +using System.Text.Json.Nodes; +using System.Threading.Tasks; +using Content.Server.Connection.Whitelist; +using Content.Server.Connection.Whitelist.Conditions; using System.Runtime.InteropServices; using System.Text.Json.Nodes; using System.Threading.Tasks; @@ -14,6 +18,7 @@ using Robust.Shared.Configuration; using Robust.Shared.Enums; using Robust.Shared.Network; +using Robust.Shared.Prototypes; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -26,6 +31,7 @@ namespace Content.Server.Connection public interface IConnectionManager { void Initialize(); + void PostInit(); /// /// Temporarily allow a user to bypass regular connection requirements. @@ -43,7 +49,7 @@ public interface IConnectionManager /// /// Handles various duties like guest username assignment, bans, connection logs, etc... /// - public sealed class ConnectionManager : IConnectionManager + public sealed partial class ConnectionManager : IConnectionManager { [Dependency] private readonly IServerDbManager _dbManager = default!; [Dependency] private readonly IPlayerManager _plyMgr = default!; @@ -52,12 +58,14 @@ public sealed class ConnectionManager : IConnectionManager [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ILocalizationManager _loc = default!; [Dependency] private readonly ServerDbEntryManager _serverDbEntry = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IChatManager _chatManager = default!; - private readonly Dictionary _temporaryBypasses = []; private ISawmill _sawmill = default!; + private readonly Dictionary _temporaryBypasses = []; + public void Initialize() { @@ -268,20 +276,33 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame return (ConnectionDenyReason.Full, Loc.GetString("soft-player-cap-full"), null); } - if (_cfg.GetCVar(CCVars.WhitelistEnabled)) + // Checks for whitelist IF it's enabled AND the user isn't an admin. Admins are always allowed. + if (_cfg.GetCVar(CCVars.WhitelistEnabled) && adminData is null) { - var min = _cfg.GetCVar(CCVars.WhitelistMinPlayers); - var max = _cfg.GetCVar(CCVars.WhitelistMaxPlayers); - var playerCountValid = _plyMgr.PlayerCount >= min && _plyMgr.PlayerCount < max; + if (_whitelists is null) + { + _sawmill.Error("Whitelist enabled but no whitelists loaded."); + // Misconfigured, deny everyone. + return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-misconfigured"), null); + } - if (playerCountValid && await _db.GetWhitelistStatusAsync(userId) == false - && adminData is null) + foreach (var whitelist in _whitelists) { - var msg = Loc.GetString(_cfg.GetCVar(CCVars.WhitelistReason)); - // was the whitelist playercount changed? - if (min > 0 || max < int.MaxValue) - msg += "\n" + Loc.GetString("whitelist-playercount-invalid", ("min", min), ("max", max)); - return (ConnectionDenyReason.Whitelist, msg, null); + if (!IsValid(whitelist, _plyMgr.PlayerCount)) + { + // Not valid for current player count. + continue; + } + + var whitelistStatus = await IsWhitelisted(whitelist, e.UserData, _sawmill); + if (!whitelistStatus.isWhitelisted) + { + // Not whitelisted. + return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-fail-prefix", ("msg", whitelistStatus.denyMessage!)), null); + } + + // Whitelisted, don't check any more. + break; } } diff --git a/Content.Server/Connection/Whitelist/BlacklistCommands.cs b/Content.Server/Connection/Whitelist/BlacklistCommands.cs new file mode 100644 index 0000000000..e79fb7ee22 --- /dev/null +++ b/Content.Server/Connection/Whitelist/BlacklistCommands.cs @@ -0,0 +1,117 @@ +using Content.Server.Administration; +using Content.Server.Database; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Connection.Whitelist; + +[AdminCommand(AdminFlags.Ban)] +public sealed class AddBlacklistCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IServerDbManager _db = default!; + + public override string Command => "blacklistadd"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); + return; + } + + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteLine(Help); + return; + } + + var name = args[0]; + var data = await _playerLocator.LookupIdByNameAsync(name); + + if (data == null) + { + shell.WriteError(Loc.GetString("cmd-blacklistadd-not-found", ("username", args[0]))); + return; + } + var guid = data.UserId; + var isBlacklisted = await _db.GetBlacklistStatusAsync(guid); + if (isBlacklisted) + { + shell.WriteLine(Loc.GetString("cmd-blacklistadd-existing", ("username", data.Username))); + return; + } + + await _db.AddToBlacklistAsync(guid); + shell.WriteLine(Loc.GetString("cmd-blacklistadd-added", ("username", data.Username))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-blacklistadd-arg-player")); + } + + return CompletionResult.Empty; + } +} + +[AdminCommand(AdminFlags.Ban)] +public sealed class RemoveBlacklistCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IServerDbManager _db = default!; + + public override string Command => "blacklistremove"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); + return; + } + + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteLine(Help); + return; + } + + var name = args[0]; + var data = await _playerLocator.LookupIdByNameAsync(name); + + if (data == null) + { + shell.WriteError(Loc.GetString("cmd-blacklistremove-not-found", ("username", args[0]))); + return; + } + + var guid = data.UserId; + var isBlacklisted = await _db.GetBlacklistStatusAsync(guid); + if (!isBlacklisted) + { + shell.WriteLine(Loc.GetString("cmd-blacklistremove-existing", ("username", data.Username))); + return; + } + + await _db.RemoveFromBlacklistAsync(guid); + shell.WriteLine(Loc.GetString("cmd-blacklistremove-removed", ("username", data.Username))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-blacklistremove-arg-player")); + } + + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs new file mode 100644 index 0000000000..9fe5db4012 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that always matches +/// +public sealed partial class ConditionAlwaysMatch : WhitelistCondition +{ + +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs new file mode 100644 index 0000000000..9d67129e71 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player is in the manual blacklist. +/// +public sealed partial class ConditionManualBlacklistMembership : WhitelistCondition +{ +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs new file mode 100644 index 0000000000..a31835f9c2 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player is in the manual whitelist. +/// +public sealed partial class ConditionManualWhitelistMembership : WhitelistCondition +{ +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs new file mode 100644 index 0000000000..1e34bc6373 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs @@ -0,0 +1,34 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has notes within a certain date range. +/// +public sealed partial class ConditionNotesDateRange : WhitelistCondition +{ + [DataField] + public bool IncludeExpired = false; + + [DataField] + public NoteSeverity MinimumSeverity = NoteSeverity.Minor; + + /// + /// The minimum number of notes required. + /// + [DataField] + public int MinimumNotes = 1; + + /// + /// Range in days to check for notes. + /// + [DataField] + public int Range = int.MaxValue; + + [DataField] + public bool IncludeSecret = false; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs new file mode 100644 index 0000000000..d2d22a8cd0 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs @@ -0,0 +1,30 @@ +using Content.Shared.Database; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has notes within a certain playtime range. +/// +public sealed partial class ConditionNotesPlaytimeRange : WhitelistCondition +{ + [DataField] + public bool IncludeExpired = false; + + [DataField] + public NoteSeverity MinimumSeverity = NoteSeverity.Minor; + + /// + /// The minimum number of notes required. + /// + [DataField] + public int MinimumNotes = 1; + + /// + /// The range in minutes to check for notes. + /// + [DataField] + public int Range = int.MaxValue; + + [DataField] + public bool IncludeSecret = false; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs new file mode 100644 index 0000000000..432ad32c4a --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using Robust.Server.Player; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player count is within a certain range. +/// +public sealed partial class ConditionPlayerCount : WhitelistCondition +{ + [DataField] + public int MinimumPlayers = 0; + [DataField] + public int MaximumPlayers = int.MaxValue; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs new file mode 100644 index 0000000000..7b45181e12 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.Players.PlayTimeTracking; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has played for a certain amount of time. +/// +public sealed partial class ConditionPlaytime : WhitelistCondition +{ + [DataField] + public int MinimumPlaytime = 0; // In minutes +} diff --git a/Content.Server/Connection/Whitelist/WhitelistCondition.cs b/Content.Server/Connection/Whitelist/WhitelistCondition.cs new file mode 100644 index 0000000000..b68fd52996 --- /dev/null +++ b/Content.Server/Connection/Whitelist/WhitelistCondition.cs @@ -0,0 +1,41 @@ +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist; + +/// +/// This class is used to determine if a player should be allowed to join the server. +/// It is used in +/// +[ImplicitDataDefinitionForInheritors] +[MeansImplicitUse] +public abstract partial class WhitelistCondition +{ + /// + /// What action should be taken if this condition is met? + /// Defaults to . + /// + [DataField] + public ConditionAction Action { get; set; } = ConditionAction.Next; +} + +/// +/// Determines what action should be taken if a condition is met. +/// +public enum ConditionAction +{ + /// + /// The player is allowed to join, and the next conditions will be skipped. + /// + Allow, + /// + /// The player is denied to join, and the next conditions will be skipped. + /// + Deny, + /// + /// The next condition should be checked. + /// + Next +} diff --git a/Content.Server/Connection/Whitelist/WhitelistPrototype.cs b/Content.Server/Connection/Whitelist/WhitelistPrototype.cs new file mode 100644 index 0000000000..2b8b9babbc --- /dev/null +++ b/Content.Server/Connection/Whitelist/WhitelistPrototype.cs @@ -0,0 +1,42 @@ +using System.Threading.Tasks; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; + +namespace Content.Server.Connection.Whitelist; + +/// +/// Used by the to determine if a player should be allowed to join the server. +/// Used in the whitelist.prototype_list CVar. +/// +/// Whitelists are used to determine if a player is allowed to connect. +/// You define a PlayerConnectionWhitelist with a list of conditions. +/// Every condition has a type and a along with other parameters depending on the type. +/// Action must either be Allow, Deny or Next. +/// Allow means the player is instantly allowed to connect if the condition is met. +/// Deny means the player is instantly denied to connect if the condition is met. +/// Next means the next condition in the list is checked. +/// If the condition doesn't match, the next condition is checked. +/// +[Prototype("playerConnectionWhitelist")] +public sealed class PlayerConnectionWhitelistPrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + /// + /// Minimum number of players required for this whitelist to be active. + /// If there are less players than this, the whitelist will be ignored and the next one in the list will be used. + /// + [DataField] + public int MinimumPlayers { get; } = 0; + + /// + /// Maximum number of players allowed for this whitelist to be active. + /// If there are more players than this, the whitelist will be ignored and the next one in the list will be used. + /// + [DataField] + public int MaximumPlayers { get; } = int.MaxValue; + + [DataField] + public WhitelistCondition[] Conditions { get; } = default!; +} diff --git a/Content.Server/Construction/ConstructionSystem.Computer.cs b/Content.Server/Construction/ConstructionSystem.Computer.cs index 0685b08f4f..6951d44b4d 100644 --- a/Content.Server/Construction/ConstructionSystem.Computer.cs +++ b/Content.Server/Construction/ConstructionSystem.Computer.cs @@ -1,6 +1,7 @@ using Content.Server.Construction.Components; using Content.Server.Power.Components; using Content.Shared.Computer; +using Content.Shared.Power; using Robust.Shared.Containers; namespace Content.Server.Construction; diff --git a/Content.Server/Construction/FlatpackSystem.cs b/Content.Server/Construction/FlatpackSystem.cs index af2132723c..11303e7f2e 100644 --- a/Content.Server/Construction/FlatpackSystem.cs +++ b/Content.Server/Construction/FlatpackSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Construction; using Content.Shared.Construction.Components; using Content.Shared.Containers.ItemSlots; +using Content.Shared.Power; using Robust.Shared.Prototypes; using Robust.Shared.Timing; diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 72e3c50daf..2b6ce41e19 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -1066,6 +1066,29 @@ public async Task SetLastReadRules(NetUserId player, DateTimeOffset date) await db.DbContext.SaveChangesAsync(); } + public async Task GetBlacklistStatusAsync(NetUserId player) + { + await using var db = await GetDb(); + + return await db.DbContext.Blacklist.AnyAsync(w => w.UserId == player); + } + + public async Task AddToBlacklistAsync(NetUserId player) + { + await using var db = await GetDb(); + + db.DbContext.Blacklist.Add(new Blacklist() { UserId = player }); + await db.DbContext.SaveChangesAsync(); + } + + public async Task RemoveFromBlacklistAsync(NetUserId player) + { + await using var db = await GetDb(); + var entry = await db.DbContext.Blacklist.SingleAsync(w => w.UserId == player); + db.DbContext.Blacklist.Remove(entry); + await db.DbContext.SaveChangesAsync(); + } + #endregion #region Uploaded Resources Logs diff --git a/Content.Server/Database/ServerDbManager.cs b/Content.Server/Database/ServerDbManager.cs index 8b6ac5fed6..216b1ec159 100644 --- a/Content.Server/Database/ServerDbManager.cs +++ b/Content.Server/Database/ServerDbManager.cs @@ -244,6 +244,16 @@ Task AddConnectionLogAsync( #endregion + #region Blacklist + + Task GetBlacklistStatusAsync(NetUserId player); + + Task AddToBlacklistAsync(NetUserId player); + + Task RemoveFromBlacklistAsync(NetUserId player); + + #endregion + #region Uploaded Resources Logs Task AddUploadedResourceLogAsync(NetUserId user, DateTimeOffset date, string path, byte[] data); @@ -740,6 +750,24 @@ public Task RemoveFromWhitelistAsync(NetUserId player) return RunDbCommand(() => _db.RemoveFromWhitelistAsync(player)); } + public Task GetBlacklistStatusAsync(NetUserId player) + { + DbReadOpsMetric.Inc(); + return RunDbCommand(() => _db.GetBlacklistStatusAsync(player)); + } + + public Task AddToBlacklistAsync(NetUserId player) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.AddToBlacklistAsync(player)); + } + + public Task RemoveFromBlacklistAsync(NetUserId player) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.RemoveFromBlacklistAsync(player)); + } + public Task AddUploadedResourceLogAsync(NetUserId user, DateTimeOffset date, string path, byte[] data) { DbWriteOpsMetric.Inc(); diff --git a/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs b/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs index d9599546ae..b67a2fcd95 100644 --- a/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs +++ b/Content.Server/DeviceLinking/Components/PowerSensorComponent.cs @@ -1,5 +1,6 @@ using Content.Server.DeviceLinking.Systems; using Content.Shared.DeviceLinking; +using Content.Shared.Power.Generator; using Content.Shared.Tools; using Robust.Shared.Audio; using Robust.Shared.Prototypes; diff --git a/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs b/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs index 6e7bd255c5..f47a5df8ac 100644 --- a/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/DeviceNetworkRequiresPowerSystem.cs @@ -1,6 +1,7 @@ using Content.Server.DeviceNetwork.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Power.EntitySystems; namespace Content.Server.DeviceNetwork.Systems; diff --git a/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs b/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs index cdc083feac..d189afc0a0 100644 --- a/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/SingletonDeviceNetServerSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Medical.CrewMonitoring; using Content.Server.Power.Components; using Content.Server.Station.Systems; +using Content.Shared.Power; namespace Content.Server.DeviceNetwork.Systems; diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index 7726acfc93..f1d182fc66 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -25,6 +25,7 @@ using Content.Shared.Item; using Content.Shared.Movement.Events; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Verbs; using Robust.Server.Audio; using Robust.Server.GameObjects; diff --git a/Content.Server/Doors/Systems/AirlockSystem.cs b/Content.Server/Doors/Systems/AirlockSystem.cs index fd5d3a9ceb..e9f1db13ff 100644 --- a/Content.Server/Doors/Systems/AirlockSystem.cs +++ b/Content.Server/Doors/Systems/AirlockSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; using Content.Shared.Interaction; +using Content.Shared.Power; using Content.Shared.Wires; using Robust.Shared.Player; diff --git a/Content.Server/Doors/Systems/DoorSystem.cs b/Content.Server/Doors/Systems/DoorSystem.cs index 5968e445c1..292f8ec8e9 100644 --- a/Content.Server/Doors/Systems/DoorSystem.cs +++ b/Content.Server/Doors/Systems/DoorSystem.cs @@ -1,9 +1,9 @@ using Content.Server.Access; using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; -using Content.Server.Power.Components; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; +using Content.Shared.Power; using Robust.Shared.Physics.Components; namespace Content.Server.Doors.Systems; diff --git a/Content.Server/Doors/Systems/FirelockSystem.cs b/Content.Server/Doors/Systems/FirelockSystem.cs index 87e5887c42..6bb1972b6e 100644 --- a/Content.Server/Doors/Systems/FirelockSystem.cs +++ b/Content.Server/Doors/Systems/FirelockSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Atmos.Monitor; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Map.Components; diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index 3a9d07126e..76d1b0deda 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -145,6 +145,7 @@ public override void PostInit() IoCManager.Resolve().Initialize(); IoCManager.Resolve().GetEntitySystem().PostInitialize(); IoCManager.Resolve().Initialize(); + IoCManager.Resolve().PostInit(); } } diff --git a/Content.Server/Fax/FaxSystem.cs b/Content.Server/Fax/FaxSystem.cs index 18852ac755..a43d0171e6 100644 --- a/Content.Server/Fax/FaxSystem.cs +++ b/Content.Server/Fax/FaxSystem.cs @@ -29,6 +29,7 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Content.Shared.NameModifier.Components; +using Content.Shared.Power; namespace Content.Server.Fax; diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index 5a2b375dd6..5642e84f90 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -1,27 +1,16 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading.Tasks; using Content.Server.GameTicking.Presets; using Content.Server.Maps; using Content.Shared.CCVar; -using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; -using Content.Shared.Database; -using Content.Shared.FixedPoint; -using Content.Shared.Ghost; -using Content.Shared.Mind; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using JetBrains.Annotations; using Robust.Shared.Player; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading.Tasks; namespace Content.Server.GameTicking { public sealed partial class GameTicker { - [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; - public const float PresetFailedCooldownIncrease = 30f; /// @@ -198,94 +187,6 @@ public void StartGamePresetRules() } } - public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaCommand = false, MindComponent? mind = null) - { - if (!Resolve(mindId, ref mind)) - return false; - - var playerEntity = mind.CurrentEntity; - - if (playerEntity != null && viaCommand) - _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} is attempting to ghost via command"); - - var handleEv = new GhostAttemptHandleEvent(mind, canReturnGlobal); - RaiseLocalEvent(handleEv); - - // Something else has handled the ghost attempt for us! We return its result. - if (handleEv.Handled) - return handleEv.Result; - - if (mind.PreventGhosting) - { - if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts - { - _chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), - true); - } - - return false; - } - - if (TryComp(playerEntity, out var comp) && !comp.CanGhostInteract) - return false; - - if (mind.VisitingEntity != default) - { - _mind.UnVisit(mindId, mind: mind); - } - - var position = Exists(playerEntity) - ? Transform(playerEntity.Value).Coordinates - : GetObserverSpawnPoint(); - - if (position == default) - return false; - - // Ok, so, this is the master place for the logic for if ghosting is "too cheaty" to allow returning. - // There's no reason at this time to move it to any other place, especially given that the 'side effects required' situations would also have to be moved. - // + If CharacterDeadPhysically applies, we're physically dead. Therefore, ghosting OK, and we can return (this is critical for gibbing) - // Note that we could theoretically be ICly dead and still physically alive and vice versa. - // (For example, a zombie could be dead ICly, but may retain memories and is definitely physically active) - // + If we're in a mob that is critical, and we're supposed to be able to return if possible, - // we're succumbing - the mob is killed. Therefore, character is dead. Ghosting OK. - // (If the mob survives, that's a bug. Ghosting is kept regardless.) - var canReturn = canReturnGlobal && _mind.IsCharacterDeadPhysically(mind); - - if (_configurationManager.GetCVar(CCVars.GhostKillCrit) && - canReturnGlobal && - TryComp(playerEntity, out MobStateComponent? mobState)) - { - if (_mobState.IsCritical(playerEntity.Value, mobState)) - { - canReturn = true; - - //todo: what if they dont breathe lol - //cry deeply - - FixedPoint2 dealtDamage = 200; - if (TryComp(playerEntity, out var damageable) - && TryComp(playerEntity, out var thresholds)) - { - var playerDeadThreshold = _mobThresholdSystem.GetThresholdForState(playerEntity.Value, MobState.Dead, thresholds); - dealtDamage = playerDeadThreshold - damageable.TotalDamage; - } - - DamageSpecifier damage = new(_prototypeManager.Index("Asphyxiation"), dealtDamage); - - _damageable.TryChangeDamage(playerEntity, damage, true); - } - } - - var ghost = _ghost.SpawnGhost((mindId, mind), position, canReturn); - if (ghost == null) - return false; - - if (playerEntity != null) - _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} ghosted{(!canReturn ? " (non-returnable)" : "")}"); - - return true; - } - private void IncrementRoundNumber() { var playerIds = _playerGameStatuses.Keys.Select(player => player.UserId).ToArray(); @@ -304,17 +205,4 @@ private void IncrementRoundNumber() RoundId = task.GetAwaiter().GetResult(); } } - - public sealed class GhostAttemptHandleEvent : HandledEntityEventArgs - { - public MindComponent Mind { get; } - public bool CanReturnGlobal { get; } - public bool Result { get; set; } - - public GhostAttemptHandleEvent(MindComponent mind, bool canReturnGlobal) - { - Mind = mind; - CanReturnGlobal = canReturnGlobal; - } - } } diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 5e2ef0c02c..3ca62e561d 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -4,6 +4,7 @@ using Content.Server.Administration.Managers; using Content.Server.GameTicking.Events; using Content.Server.Ghost; +using Content.Server.Shuttles.Components; using Content.Server.Spawners.Components; using Content.Server.Speech.Components; using Content.Server.Station.Components; @@ -274,28 +275,13 @@ private void SpawnPlayer(ICommonSession player, Loc.GetString("job-greet-station-name", ("stationName", metaData.EntityName))); } - // Arrivals is unable to do this during spawning as no actor is attached yet. - // We also want this message last. - if (!silent && lateJoin && _arrivals.Enabled) - { - var arrival = _arrivals.NextShuttleArrival(); - if (arrival == null) - { - _chatManager.DispatchServerMessage(player, Loc.GetString("latejoin-arrivals-direction")); - } - else - { - _chatManager.DispatchServerMessage(player, - Loc.GetString("latejoin-arrivals-direction-time", ("time", $"{arrival:mm\\:ss}"))); - } - } - // We raise this event directed to the mob, but also broadcast it so game rules can do something now. PlayersJoinedRoundNormally++; var aev = new PlayerSpawnCompleteEvent(mob, player, jobId, lateJoin, + silent, PlayersJoinedRoundNormally, station, character); @@ -314,7 +300,7 @@ public void Respawn(ICommonSession player) } /// - /// Makes a player join into the game and spawn on a staiton. + /// Makes a player join into the game and spawn on a station. /// /// The player joining /// The station they're spawning on @@ -494,6 +480,7 @@ public sealed class PlayerSpawnCompleteEvent : EntityEventArgs public ICommonSession Player { get; } public string? JobId { get; } public bool LateJoin { get; } + public bool Silent { get; } public EntityUid Station { get; } public HumanoidCharacterProfile Profile { get; } @@ -504,6 +491,7 @@ public PlayerSpawnCompleteEvent(EntityUid mob, ICommonSession player, string? jobId, bool lateJoin, + bool silent, int joinOrder, EntityUid station, HumanoidCharacterProfile profile) @@ -512,6 +500,7 @@ public PlayerSpawnCompleteEvent(EntityUid mob, Player = player; JobId = jobId; LateJoin = lateJoin; + Silent = silent; Station = station; Profile = profile; JoinOrder = joinOrder; diff --git a/Content.Server/Ghost/GhostCommand.cs b/Content.Server/Ghost/GhostCommand.cs index b553d64201..a2f361d29d 100644 --- a/Content.Server/Ghost/GhostCommand.cs +++ b/Content.Server/Ghost/GhostCommand.cs @@ -1,4 +1,3 @@ -using Content.Server.GameTicking; using Content.Server.Popups; using Content.Shared.Administration; using Content.Shared.Mind; @@ -41,7 +40,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) mind = _entities.GetComponent(mindId); } - if (!_entities.System().OnGhostAttempt(mindId, true, true, mind)) + if (!_entities.System().OnGhostAttempt(mindId, true, true, mind)) { shell.WriteLine(Loc.GetString("ghost-command-denied")); } diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index b68c279b3e..b045214329 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -1,17 +1,23 @@ -using System.Linq; -using System.Numerics; +using Content.Server.Administration.Logs; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Ghost.Components; using Content.Server.Mind; using Content.Server.Roles.Jobs; using Content.Server.Warps; using Content.Shared.Actions; +using Content.Shared.CCVar; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Eye; +using Content.Shared.FixedPoint; using Content.Shared.Follower; using Content.Shared.Ghost; using Content.Shared.Mind; using Content.Shared.Mind.Components; +using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Events; @@ -19,11 +25,15 @@ using Content.Shared.Storage.Components; using Robust.Server.GameObjects; using Robust.Server.Player; +using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using System.Linq; +using System.Numerics; namespace Content.Server.Ghost { @@ -44,6 +54,14 @@ public sealed class GhostSystem : SharedGhostSystem [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; private EntityQuery _ghostQuery; private EntityQuery _physicsQuery; @@ -144,7 +162,7 @@ private void OnRelayMoveInput(EntityUid uid, GhostOnMoveComponent component, ref if (component.MustBeDead && (_mobState.IsAlive(uid) || _mobState.IsCritical(uid))) return; - _ticker.OnGhostAttempt(mindId, component.CanReturn, mind: mind); + OnGhostAttempt(mindId, component.CanReturn, mind: mind); } private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentStartup args) @@ -473,5 +491,102 @@ private bool IsValidSpawnPosition(EntityCoordinates? spawnPosition) Log.Debug($"Spawned ghost \"{ToPrettyString(ghost)}\" for {mind.Comp.CharacterName}."); return ghost; } + + public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaCommand = false, MindComponent? mind = null) + { + if (!Resolve(mindId, ref mind)) + return false; + + var playerEntity = mind.CurrentEntity; + + if (playerEntity != null && viaCommand) + _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} is attempting to ghost via command"); + + var handleEv = new GhostAttemptHandleEvent(mind, canReturnGlobal); + RaiseLocalEvent(handleEv); + + // Something else has handled the ghost attempt for us! We return its result. + if (handleEv.Handled) + return handleEv.Result; + + if (mind.PreventGhosting) + { + if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts + { + _chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), + true); + } + + return false; + } + + if (TryComp(playerEntity, out var comp) && !comp.CanGhostInteract) + return false; + + if (mind.VisitingEntity != default) + { + _mind.UnVisit(mindId, mind: mind); + } + + var position = Exists(playerEntity) + ? Transform(playerEntity.Value).Coordinates + : _gameTicker.GetObserverSpawnPoint(); + + if (position == default) + return false; + + // Ok, so, this is the master place for the logic for if ghosting is "too cheaty" to allow returning. + // There's no reason at this time to move it to any other place, especially given that the 'side effects required' situations would also have to be moved. + // + If CharacterDeadPhysically applies, we're physically dead. Therefore, ghosting OK, and we can return (this is critical for gibbing) + // Note that we could theoretically be ICly dead and still physically alive and vice versa. + // (For example, a zombie could be dead ICly, but may retain memories and is definitely physically active) + // + If we're in a mob that is critical, and we're supposed to be able to return if possible, + // we're succumbing - the mob is killed. Therefore, character is dead. Ghosting OK. + // (If the mob survives, that's a bug. Ghosting is kept regardless.) + var canReturn = canReturnGlobal && _mind.IsCharacterDeadPhysically(mind); + + if (_configurationManager.GetCVar(CCVars.GhostKillCrit) && + canReturnGlobal && + TryComp(playerEntity, out MobStateComponent? mobState)) + { + if (_mobState.IsCritical(playerEntity.Value, mobState)) + { + canReturn = true; + + //todo: what if they dont breathe lol + //cry deeply + + FixedPoint2 dealtDamage = 200; + + if (TryComp(playerEntity, out var damageable) + && TryComp(playerEntity, out var thresholds)) + { + var playerDeadThreshold = _mobThresholdSystem.GetThresholdForState(playerEntity.Value, MobState.Dead, thresholds); + dealtDamage = playerDeadThreshold - damageable.TotalDamage; + } + + DamageSpecifier damage = new(_prototypeManager.Index("Asphyxiation"), dealtDamage); + + _damageable.TryChangeDamage(playerEntity, damage, true); + } + } + + var ghost = SpawnGhost((mindId, mind), position, canReturn); + + if (ghost == null) + return false; + + if (playerEntity != null) + _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} ghosted{(!canReturn ? " (non-returnable)" : "")}"); + + return true; + } + } + + public sealed class GhostAttemptHandleEvent(MindComponent mind, bool canReturnGlobal) : HandledEntityEventArgs + { + public MindComponent Mind { get; } = mind; + public bool CanReturnGlobal { get; } = canReturnGlobal; + public bool Result { get; set; } } } diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index b4023bbdb9..f7e0c6fde2 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -21,6 +21,7 @@ using System.Linq; using Content.Server.Jittering; using Content.Shared.Jittering; +using Content.Shared.Power; namespace Content.Server.Kitchen.EntitySystems { diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 5ece533a62..18f246dcef 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -19,6 +19,7 @@ using Content.Shared.Examine; using Content.Shared.Lathe; using Content.Shared.Materials; +using Content.Shared.Power; using Content.Shared.ReagentSpeed; using Content.Shared.Research.Components; using Content.Shared.Research.Prototypes; @@ -155,10 +156,10 @@ public List> GetAvailableRecipes(EntityUid uid, La { var ev = new LatheGetRecipesEvent(uid, getUnavailable) { - Recipes = new List>(component.StaticRecipes) + Recipes = new HashSet>(component.StaticRecipes) }; RaiseLocalEvent(uid, ev); - return ev.Recipes; + return ev.Recipes.ToList(); } public static List> GetAllBaseRecipes(LatheComponent component) diff --git a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs index b6810aa33b..6bd5750460 100644 --- a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Examine; using Content.Shared.Light; using Content.Shared.Light.Components; +using Content.Shared.Power; using Content.Shared.Station.Components; using Robust.Server.GameObjects; using Color = Robust.Shared.Maths.Color; diff --git a/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs b/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs index 752fb8f5fe..3c5f7eaecb 100644 --- a/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs +++ b/Content.Server/Light/EntitySystems/LitOnPoweredSystem.cs @@ -1,6 +1,8 @@ using Content.Server.Light.Components; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Power; +using Content.Shared.Power.Components; namespace Content.Server.Light.EntitySystems { diff --git a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs index 33b7ce0782..6e1363dee2 100644 --- a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs +++ b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs @@ -25,6 +25,8 @@ using Robust.Shared.Audio.Systems; using Content.Shared.Damage.Systems; using Content.Shared.Damage.Components; +using Content.Shared.Power; +using Content.Shared.Power.Components; namespace Content.Server.Light.EntitySystems { diff --git a/Content.Server/Maps/ResaveCommand.cs b/Content.Server/Maps/ResaveCommand.cs index a966070d3e..cc4d13dded 100644 --- a/Content.Server/Maps/ResaveCommand.cs +++ b/Content.Server/Maps/ResaveCommand.cs @@ -13,7 +13,7 @@ namespace Content.Server.Maps; /// /// Loads every map and resaves it into the data folder. /// -[AdminCommand(AdminFlags.Mapping)] +[AdminCommand(AdminFlags.Host)] public sealed class ResaveCommand : LocalizedCommands { [Dependency] private readonly IEntityManager _entManager = default!; diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index e66c27343c..f6abcad7bc 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -1,30 +1,29 @@ -using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Administration.Logs; using Content.Server.Fluids.EntitySystems; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Popups; -using Content.Server.Power.Components; +using Content.Server.Repairable; using Content.Server.Stack; using Content.Server.Wires; using Content.Shared.Body.Systems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Database; +using Content.Shared.Destructible; +using Content.Shared.Emag.Components; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Materials; using Content.Shared.Mind; using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; using System.Linq; -using Content.Server.Administration.Logs; -using Content.Server.Repairable; -using Content.Shared.Database; -using Content.Shared.Destructible; -using Content.Shared.Emag.Components; -using Robust.Shared.Prototypes; namespace Content.Server.Materials; @@ -33,7 +32,7 @@ public sealed class MaterialReclaimerSystem : SharedMaterialReclaimerSystem { [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly AppearanceSystem _appearance = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly OpenableSystem _openable = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -98,7 +97,7 @@ private void OnSuicideByEnvironment(Entity entity, r if (TryComp(victim, out ActorComponent? actor) && _mind.TryGetMind(actor.PlayerSession, out var mindId, out var mind)) { - _ticker.OnGhostAttempt(mindId, false, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } suicider) { _popup.PopupEntity(Loc.GetString("recycler-component-suicide-message"), suicider); diff --git a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs index c5beed718e..868e6d99f2 100644 --- a/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs +++ b/Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs @@ -24,6 +24,7 @@ using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Throwing; using Robust.Server.Player; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/Medical/CryoPodSystem.cs b/Content.Server/Medical/CryoPodSystem.cs index 8d54fc6dd9..2c9f58616a 100644 --- a/Content.Server/Medical/CryoPodSystem.cs +++ b/Content.Server/Medical/CryoPodSystem.cs @@ -29,6 +29,7 @@ using Content.Shared.Interaction; using Content.Shared.Medical.Cryogenics; using Content.Shared.MedicalScanner; +using Content.Shared.Power; using Content.Shared.Verbs; using Robust.Server.GameObjects; using Robust.Shared.Containers; diff --git a/Content.Server/Mind/MindSystem.cs b/Content.Server/Mind/MindSystem.cs index 4271d76b44..c3e29cc363 100644 --- a/Content.Server/Mind/MindSystem.cs +++ b/Content.Server/Mind/MindSystem.cs @@ -1,4 +1,3 @@ -using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.GameTicking; using Content.Server.Ghost; @@ -13,6 +12,7 @@ using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; namespace Content.Server.Mind; @@ -194,7 +194,7 @@ public override void TransferTo(EntityUid mindId, EntityUid? entity, bool ghostC component = EnsureComp(entity.Value); if (component.HasMind) - _gameTicker.OnGhostAttempt(component.Mind.Value, false); + _ghosts.OnGhostAttempt(component.Mind.Value, false); if (TryComp(entity.Value, out var actor)) { diff --git a/Content.Server/Morgue/CrematoriumSystem.cs b/Content.Server/Morgue/CrematoriumSystem.cs index f6859b610a..656457dc98 100644 --- a/Content.Server/Morgue/CrematoriumSystem.cs +++ b/Content.Server/Morgue/CrematoriumSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Morgue.Components; using Content.Server.Storage.Components; using Content.Server.Storage.EntitySystems; @@ -13,8 +13,6 @@ using Content.Shared.Storage; using Content.Shared.Storage.Components; using Content.Shared.Verbs; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Player; @@ -25,7 +23,7 @@ public sealed class CrematoriumSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly EntityStorageSystem _entityStorage = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly StandingStateSystem _standing = default!; @@ -154,7 +152,7 @@ private void OnSuicideByEnvironment(EntityUid uid, CrematoriumComponent componen var victim = args.Victim; if (TryComp(victim, out ActorComponent? actor) && _minds.TryGetMind(victim, out var mindId, out var mind)) { - _ticker.OnGhostAttempt(mindId, false, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } entity) { diff --git a/Content.Server/NPC/Systems/NPCJukeSystem.cs b/Content.Server/NPC/Systems/NPCJukeSystem.cs index 94a30feb0c..1b2f4f5357 100644 --- a/Content.Server/NPC/Systems/NPCJukeSystem.cs +++ b/Content.Server/NPC/Systems/NPCJukeSystem.cs @@ -20,6 +20,7 @@ public sealed class NPCJukeSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly MeleeWeaponSystem _melee = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; private EntityQuery _npcMeleeQuery; @@ -59,7 +60,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt return; } - var currentTile = grid.CoordinatesToTile(args.Transform.Coordinates); + var currentTile = _mapSystem.CoordinatesToTile(args.Transform.GridUid.Value, grid, args.Transform.Coordinates); if (component.TargetTile == null) { @@ -72,7 +73,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt for (var i = 0; i < 8; i++) { var index = (startIndex + i) % 8; - var neighbor = ((Direction) index).ToIntVec() + currentTile; + var neighbor = ((Direction)index).ToIntVec() + currentTile; var valid = true; // TODO: Probably make this a helper on engine maybe @@ -116,7 +117,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt return; } - var targetCoords = grid.GridTileToWorld(component.TargetTile.Value); + var targetCoords = _mapSystem.GridTileToWorld(args.Transform.GridUid.Value, grid, component.TargetTile.Value); var targetDir = (targetCoords.Position - args.WorldPosition); targetDir = args.OffsetRotation.RotateVec(targetDir); const float weight = 1f; diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs index e0bcb97a11..fa43b3e752 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs @@ -22,7 +22,7 @@ private void ApplySeek(Span interest, Vector2 direction, float weight) if (weight == 0f || direction == Vector2.Zero) return; - var directionAngle = (float) direction.ToAngle().Theta; + var directionAngle = (float)direction.ToAngle().Theta; for (var i = 0; i < InterestDirections; i++) { @@ -166,8 +166,8 @@ private bool TrySeek( } // Check if mapids match. - var targetMap = targetCoordinates.ToMap(EntityManager, _transform); - var ourMap = ourCoordinates.ToMap(EntityManager, _transform); + var targetMap = _transform.ToMapCoordinates(targetCoordinates); + var ourMap = _transform.ToMapCoordinates(ourCoordinates); if (targetMap.MapId != ourMap.MapId) { @@ -258,7 +258,7 @@ private bool TrySeek( return false; } - targetMap = targetCoordinates.ToMap(EntityManager, _transform); + targetMap = _transform.ToMapCoordinates(targetCoordinates); // Can't make it again. if (ourMap.MapId != targetMap.MapId) @@ -429,7 +429,7 @@ public void PrunePath(EntityUid uid, MapCoordinates mapCoordinates, Vector2 dire if (TryComp(uid, out var physics)) { - mask = (CollisionGroup) physics.CollisionMask; + mask = (CollisionGroup)physics.CollisionMask; } for (var i = 0; i < nodes.Count; i++) @@ -439,7 +439,7 @@ public void PrunePath(EntityUid uid, MapCoordinates mapCoordinates, Vector2 dire if (!node.Data.IsFreeSpace) break; - var nodeMap = node.Coordinates.ToMap(EntityManager, _transform); + var nodeMap = _transform.ToMapCoordinates(node.Coordinates); // If any nodes are 'behind us' relative to the target we'll prune them. // This isn't perfect but should fix most cases of stutter stepping. diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs index 3bc4eae9e4..a31c7850f3 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs @@ -207,7 +207,7 @@ private void GetObstacleEntities(PathPoly poly, int mask, int layer, List user, En if (action.Event != null) { - action.Event.Performer = user; - action.Event.Action = user.Comp.ActionEnt.Value; action.Event.Coords = Transform(target).Coordinates; } diff --git a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs index 180e40d1e4..c91a6f795b 100644 --- a/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FatExtractorSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Power; using Content.Shared.Storage.Components; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; diff --git a/Content.Server/Paper/PaperRandomStoryComponent.cs b/Content.Server/Paper/PaperRandomStoryComponent.cs index b8e07f0ee8..7b6624ac85 100644 --- a/Content.Server/Paper/PaperRandomStoryComponent.cs +++ b/Content.Server/Paper/PaperRandomStoryComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Paper; using Content.Shared.StoryGen; using Robust.Shared.Prototypes; diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs index 4d39a5ce30..17943c1c98 100644 --- a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs @@ -6,6 +6,7 @@ using System.Diagnostics; using Content.Server.Administration.Managers; using Content.Shared.CCVar; +using Content.Shared.Power; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; diff --git a/Content.Server/Physics/Controllers/ConveyorController.cs b/Content.Server/Physics/Controllers/ConveyorController.cs index e2788fa54c..3c0db7f85a 100644 --- a/Content.Server/Physics/Controllers/ConveyorController.cs +++ b/Content.Server/Physics/Controllers/ConveyorController.cs @@ -7,6 +7,7 @@ using Content.Shared.Maps; using Content.Shared.Physics; using Content.Shared.Physics.Controllers; +using Content.Shared.Power; using Robust.Shared.Physics; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Components; diff --git a/Content.Server/Power/Components/ApcPowerReceiverComponent.cs b/Content.Server/Power/Components/ApcPowerReceiverComponent.cs index 9a68e2aabb..ebb3c6b42f 100644 --- a/Content.Server/Power/Components/ApcPowerReceiverComponent.cs +++ b/Content.Server/Power/Components/ApcPowerReceiverComponent.cs @@ -59,11 +59,4 @@ public bool PowerDisabled { public float PowerReceived => NetworkLoad.ReceivingPower; } - - /// - /// Raised whenever an ApcPowerReceiver becomes powered / unpowered. - /// Does nothing on the client. - /// - [ByRefEvent] - public readonly record struct PowerChangedEvent(bool Powered, float ReceivingPower); } diff --git a/Content.Server/Power/Components/CableComponent.cs b/Content.Server/Power/Components/CableComponent.cs index a2a02a60f6..7398bc0616 100644 --- a/Content.Server/Power/Components/CableComponent.cs +++ b/Content.Server/Power/Components/CableComponent.cs @@ -4,6 +4,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using System.Diagnostics.Tracing; +using Content.Shared.Tools.Systems; namespace Content.Server.Power.Components; @@ -14,11 +15,11 @@ namespace Content.Server.Power.Components; [Access(typeof(CableSystem))] public sealed partial class CableComponent : Component { - [DataField("cableDroppedOnCutPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string CableDroppedOnCutPrototype = "CableHVStack1"; + [DataField] + public EntProtoId CableDroppedOnCutPrototype = "CableHVStack1"; - [DataField("cuttingQuality", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string CuttingQuality = "Cutting"; + [DataField] + public ProtoId CuttingQuality = SharedToolSystem.CutQuality; /// /// Checked by to determine if there is diff --git a/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs b/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs index 11f35634b2..9fd824a3c4 100644 --- a/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs +++ b/Content.Server/Power/EntitySystems/ActivatableUIRequiresPowerSystem.cs @@ -1,4 +1,5 @@ using Content.Server.Power.Components; +using Content.Shared.Power; using Content.Shared.Power.Components; using Content.Shared.Power.EntitySystems; using Content.Shared.UserInterface; diff --git a/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs b/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs index 15b967bb1d..4a63be894e 100644 --- a/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs +++ b/Content.Server/Power/EntitySystems/CableMultitoolSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Tools; using Content.Shared.Examine; using Content.Shared.Interaction; +using Content.Shared.Tools.Systems; using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Shared.Utility; @@ -27,7 +28,7 @@ public override void Initialize() private void OnAfterInteractUsing(EntityUid uid, CableComponent component, AfterInteractUsingEvent args) { - if (args.Handled || args.Target == null || !args.CanReach || !_toolSystem.HasQuality(args.Used, "Pulsing")) + if (args.Handled || args.Target == null || !args.CanReach || !_toolSystem.HasQuality(args.Used, SharedToolSystem.PulseQuality)) return; var markup = FormattedMessage.FromMarkup(GenerateCableMarkup(uid)); @@ -45,7 +46,7 @@ private void OnGetExamineVerbs(EntityUid uid, CableComponent component, GetVerbs // Pulsing is hardcoded here because I don't think it needs to be more complex than that right now. // Update if I'm wrong. - var enabled = held != null && _toolSystem.HasQuality(held.Value, "Pulsing"); + var enabled = held != null && _toolSystem.HasQuality(held.Value, SharedToolSystem.PulseQuality); var verb = new ExamineVerb { Disabled = !enabled, diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index 4e2543d2a7..df7bd2a54f 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -8,6 +8,7 @@ using JetBrains.Annotations; using Robust.Shared.Containers; using System.Diagnostics.CodeAnalysis; +using Content.Shared.Power.Components; using Content.Shared.Storage.Components; using Robust.Server.Containers; using Content.Shared.Whitelist; diff --git a/Content.Server/Power/EntitySystems/PowerNetSystem.cs b/Content.Server/Power/EntitySystems/PowerNetSystem.cs index a7098649ce..9ce4814139 100644 --- a/Content.Server/Power/EntitySystems/PowerNetSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerNetSystem.cs @@ -5,6 +5,7 @@ using Content.Server.Power.Pow3r; using Content.Shared.CCVar; using Content.Shared.Power; +using Content.Shared.Power.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Configuration; diff --git a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs index 9b15bdfd28..38d7376e54 100644 --- a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Power.Components; @@ -197,5 +198,17 @@ public void SetLoad(ApcPowerReceiverComponent comp, float load) { comp.Load = load; } + + public override bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component) + { + if (component != null) + return true; + + if (!TryComp(entity, out ApcPowerReceiverComponent? receiver)) + return false; + + component = receiver; + return true; + } } } diff --git a/Content.Server/Power/Generation/Teg/TegSystem.cs b/Content.Server/Power/Generation/Teg/TegSystem.cs index 02412ca5fb..edf0693954 100644 --- a/Content.Server/Power/Generation/Teg/TegSystem.cs +++ b/Content.Server/Power/Generation/Teg/TegSystem.cs @@ -10,6 +10,8 @@ using Content.Shared.Atmos; using Content.Shared.DeviceNetwork; using Content.Shared.Examine; +using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Power.Generation.Teg; using Content.Shared.Rounding; using Robust.Server.GameObjects; diff --git a/Content.Server/Power/Generator/GasPowerReceiverSystem.cs b/Content.Server/Power/Generator/GasPowerReceiverSystem.cs index 5f79906c99..5a1bd31a15 100644 --- a/Content.Server/Power/Generator/GasPowerReceiverSystem.cs +++ b/Content.Server/Power/Generator/GasPowerReceiverSystem.cs @@ -5,6 +5,8 @@ using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Shared.Atmos; +using Content.Shared.Power; +using Content.Shared.Power.Components; namespace Content.Server.Power.Generator; diff --git a/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs b/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs index f16a09eae3..19ae0bd687 100644 --- a/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs +++ b/Content.Server/Power/Generator/GeneratorSignalControlComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.DeviceLinking; +using Content.Shared.Power.Generator; using Robust.Shared.Prototypes; namespace Content.Server.Power.Generator; diff --git a/Content.Server/PowerCell/PowerCellSystem.Draw.cs b/Content.Server/PowerCell/PowerCellSystem.Draw.cs index 9ebd677f47..ae43b6dae9 100644 --- a/Content.Server/PowerCell/PowerCellSystem.Draw.cs +++ b/Content.Server/PowerCell/PowerCellSystem.Draw.cs @@ -1,5 +1,4 @@ using Content.Server.Power.Components; -using Content.Shared.Item.ItemToggle.Components; using Content.Shared.PowerCell; using Content.Shared.PowerCell.Components; @@ -14,11 +13,11 @@ public sealed partial class PowerCellSystem public override void Update(float frameTime) { base.Update(frameTime); - var query = EntityQueryEnumerator(); + var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var comp, out var slot, out var toggle)) + while (query.MoveNext(out var uid, out var comp, out var slot)) { - if (!comp.Enabled || !toggle.Activated) + if (!comp.Enabled) continue; if (Timing.CurTime < comp.NextUpdateTime) @@ -32,8 +31,6 @@ public override void Update(float frameTime) if (_battery.TryUseCharge(batteryEnt.Value, comp.DrawRate, battery)) continue; - Toggle.TryDeactivate((uid, toggle)); - var ev = new PowerCellSlotEmptyEvent(); RaiseLocalEvent(uid, ref ev); } @@ -60,7 +57,10 @@ private void OnDrawCellChanged(EntityUid uid, PowerCellDrawComponent component, var canUse = !args.Ejected && HasActivatableCharge(uid, component); if (!canDraw) - Toggle.TryDeactivate(uid); + { + var ev = new PowerCellSlotEmptyEvent(); + RaiseLocalEvent(uid, ref ev); + } if (canUse != component.CanUse || canDraw != component.CanDraw) { diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.cs index 5a6a8510ff..cdf1f00205 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.cs @@ -4,6 +4,7 @@ using Content.Server.NPC.Components; using Content.Server.NPC.HTN; using Content.Server.NPC.Systems; +using Content.Server.Shuttles.Systems; using Content.Shared.Construction.EntitySystems; using Content.Shared.Maps; using Content.Shared.Procedural; @@ -51,6 +52,8 @@ public sealed partial class DungeonJob : Job> private readonly EntityUid _gridUid; private readonly MapGridComponent _grid; + private readonly EntityCoordinates? _targetCoordinates; + private readonly ISawmill _sawmill; public DungeonJob( @@ -70,6 +73,7 @@ public DungeonJob( EntityUid gridUid, int seed, Vector2i position, + EntityCoordinates? targetCoordinates = null, CancellationToken cancellation = default) : base(maxTime, cancellation) { _sawmill = sawmill; @@ -94,6 +98,7 @@ public DungeonJob( _gridUid = gridUid; _seed = seed; _position = position; + _targetCoordinates = targetCoordinates; } /// @@ -151,6 +156,12 @@ private async Task> GetDungeons( // To make it slightly more deterministic treat this RNG as separate ig. // Post-processing after finishing loading. + if (_targetCoordinates != null) + { + var oldMap = _xformQuery.Comp(_gridUid).MapUid; + _entManager.System().TryFTLProximity(_gridUid, _targetCoordinates.Value); + _entManager.DeleteEntity(oldMap); + } // Defer splitting so they don't get spammed and so we don't have to worry about tracking the grid along the way. _grid.CanSplit = true; diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 68c4a98610..706f63ffd7 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -183,11 +183,16 @@ public MapId GetOrCreateTemplate(DungeonRoomPrototype proto) return mapId; } + /// + /// Generates a dungeon in the background with the specified config. + /// + /// Coordinates to move the dungeon to afterwards. Will delete the original map public void GenerateDungeon(DungeonConfig gen, EntityUid gridUid, MapGridComponent grid, Vector2i position, - int seed) + int seed, + EntityCoordinates? coordinates = null) { var cancelToken = new CancellationTokenSource(); var job = new DungeonJob.DungeonJob( @@ -207,6 +212,7 @@ public void GenerateDungeon(DungeonConfig gen, gridUid, seed, position, + coordinates, cancelToken.Token); _dungeonJobs.Add(job, cancelToken); @@ -238,6 +244,7 @@ public async Task> GenerateDungeonAsync( gridUid, seed, position, + null, cancelToken.Token); _dungeonJobs.Add(job, cancelToken); diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index 1258e0b8c7..c977fbc048 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -9,6 +9,7 @@ using Content.Server.Speech.Components; using Content.Shared.Examine; using Content.Shared.Interaction; +using Content.Shared.Power; using Content.Shared.Radio; using Content.Shared.Radio.Components; using Robust.Shared.Prototypes; diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 0cbbc46a4f..0b86383faa 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -45,13 +45,14 @@ public sealed class ArrivalsSystem : EntitySystem [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IConsoleHost _console = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly BiomeSystem _biomes = default!; [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ShuttleSystem _shuttles = default!; @@ -103,6 +104,8 @@ public override void Initialize() SubscribeLocalEvent(OnArrivalsFTL); SubscribeLocalEvent(OnArrivalsDocked); + SubscribeLocalEvent(SendDirections); + _pendingQuery = GetEntityQuery(); _blacklistQuery = GetEntityQuery(); _mobQuery = GetEntityQuery(); @@ -377,6 +380,20 @@ public void HandlePlayerSpawning(PlayerSpawningEvent ev) EnsureComp(ev.SpawnResult.Value); } + private void SendDirections(PlayerSpawnCompleteEvent ev) + { + if (!Enabled || !ev.LateJoin || ev.Silent || !_pendingQuery.HasComp(ev.Mob)) + return; + + var arrival = NextShuttleArrival(); + + var message = arrival is not null + ? Loc.GetString("latejoin-arrivals-direction-time", ("time", $"{arrival:mm\\:ss}")) + : Loc.GetString("latejoin-arrivals-direction"); + + _chat.DispatchServerMessage(ev.Player, message); + } + private bool TryTeleportToMapSpawn(EntityUid player, EntityUid stationId, TransformComponent? transform = null) { if (!Resolve(player, ref transform)) @@ -496,9 +513,8 @@ private void OnRoundStarting(RoundStartingEvent ev) private void SetupArrivalsStation() { - var mapId = _mapManager.CreateMap(); - var mapUid = _mapManager.GetMapEntityId(mapId); - _mapManager.AddUninitializedMap(mapId); + var mapUid = _mapSystem.CreateMap(out var mapId, false); + _metaData.SetEntityName(mapUid, Loc.GetString("map-name-terminal")); if (!_loader.TryLoad(mapId, _cfgManager.GetCVar(CCVars.ArrivalsMap), out var uids)) { @@ -524,7 +540,7 @@ private void SetupArrivalsStation() AddComp(mapUid, restricted); } - _mapManager.DoMapInitialize(mapId); + _mapSystem.InitializeMap(mapId); // Handle roundstart stations. var query = AllEntityQuery(); @@ -582,10 +598,10 @@ private void SetupShuttle(EntityUid uid, StationArrivalsComponent component) return; // Spawn arrivals on a dummy map then dock it to the source. - var dummyMap = _mapManager.CreateMap(); + var dummpMapEntity = _mapSystem.CreateMap(out var dummyMapId); if (TryGetArrivals(out var arrivals) && - _loader.TryLoad(dummyMap, component.ShuttlePath.ToString(), out var shuttleUids)) + _loader.TryLoad(dummyMapId, component.ShuttlePath.ToString(), out var shuttleUids)) { component.Shuttle = shuttleUids[0]; var shuttleComp = Comp(component.Shuttle); @@ -597,7 +613,7 @@ private void SetupShuttle(EntityUid uid, StationArrivalsComponent component) } // Don't start the arrivals shuttle immediately docked so power has a time to stabilise? - var timer = AddComp(_mapManager.GetMapEntityId(dummyMap)); + var timer = AddComp(dummpMapEntity); timer.Lifetime = 15f; } } diff --git a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs index 1a95ef9cb2..597d74dcc7 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs @@ -18,143 +18,143 @@ public sealed partial class DockingSystem private const int DockRoundingDigits = 2; public Angle GetAngle(EntityUid uid, TransformComponent xform, EntityUid targetUid, TransformComponent targetXform, EntityQuery xformQuery) - { - var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform); - var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform); - - var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), - _physicsQuery.GetComponent(uid).LocalCenter); - var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), - _physicsQuery.GetComponent(targetUid).LocalCenter); - - var mapDiff = shuttleCOM - targetCOM; - var angle = mapDiff.ToWorldAngle(); - angle -= targetRot; - return angle; - } - - /// - /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. - /// - private bool CanDock( - DockingComponent shuttleDock, - TransformComponent shuttleDockXform, - DockingComponent gridDock, - TransformComponent gridDockXform, - Box2 shuttleAABB, - Angle targetGridRotation, - FixturesComponent shuttleFixtures, - MapGridComponent grid, - bool isMap, - out Matrix3x2 matty, - out Box2 shuttleDockedAABB, - out Angle gridRotation) - { - shuttleDockedAABB = Box2.UnitCentered; - gridRotation = Angle.Zero; - matty = Matrix3x2.Identity; - - if (shuttleDock.Docked || - gridDock.Docked || - !shuttleDockXform.Anchored || - !gridDockXform.Anchored) - { - return false; - } - - // First, get the station dock's position relative to the shuttle, this is where we rotate it around - var stationDockPos = shuttleDockXform.LocalPosition + - shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f)); - - // Need to invert the grid's angle. - var shuttleDockAngle = shuttleDockXform.LocalRotation; - var gridDockAngle = gridDockXform.LocalRotation.Opposite(); - var offsetAngle = gridDockAngle - shuttleDockAngle; - - var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle); - var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); - matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix); - - if (!ValidSpawn(grid, matty, offsetAngle, shuttleFixtures, isMap)) - return false; - - shuttleDockedAABB = matty.TransformBox(shuttleAABB); - gridRotation = (targetGridRotation + offsetAngle).Reduced(); - return true; - } - - /// - /// Gets docking config between 2 specific docks. - /// - public DockingConfig? GetDockingConfig( - EntityUid shuttleUid, - EntityUid targetGrid, - EntityUid shuttleDockUid, - DockingComponent shuttleDock, - EntityUid gridDockUid, - DockingComponent gridDock) - { - var shuttleDocks = new List>(1) + { + var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform); + var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform); + + var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), + _physicsQuery.GetComponent(uid).LocalCenter); + var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), + _physicsQuery.GetComponent(targetUid).LocalCenter); + + var mapDiff = shuttleCOM - targetCOM; + var angle = mapDiff.ToWorldAngle(); + angle -= targetRot; + return angle; + } + + /// + /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. + /// + private bool CanDock( + DockingComponent shuttleDock, + TransformComponent shuttleDockXform, + DockingComponent gridDock, + TransformComponent gridDockXform, + Box2 shuttleAABB, + Angle targetGridRotation, + FixturesComponent shuttleFixtures, + Entity gridEntity, + bool isMap, + out Matrix3x2 matty, + out Box2 shuttleDockedAABB, + out Angle gridRotation) + { + shuttleDockedAABB = Box2.UnitCentered; + gridRotation = Angle.Zero; + matty = Matrix3x2.Identity; + + if (shuttleDock.Docked || + gridDock.Docked || + !shuttleDockXform.Anchored || + !gridDockXform.Anchored) + { + return false; + } + + // First, get the station dock's position relative to the shuttle, this is where we rotate it around + var stationDockPos = shuttleDockXform.LocalPosition + + shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f)); + + // Need to invert the grid's angle. + var shuttleDockAngle = shuttleDockXform.LocalRotation; + var gridDockAngle = gridDockXform.LocalRotation.Opposite(); + var offsetAngle = gridDockAngle - shuttleDockAngle; + + var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle); + var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); + matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix); + + if (!ValidSpawn(gridEntity, matty, offsetAngle, shuttleFixtures, isMap)) + return false; + + shuttleDockedAABB = matty.TransformBox(shuttleAABB); + gridRotation = (targetGridRotation + offsetAngle).Reduced(); + return true; + } + + /// + /// Gets docking config between 2 specific docks. + /// + public DockingConfig? GetDockingConfig( + EntityUid shuttleUid, + EntityUid targetGrid, + EntityUid shuttleDockUid, + DockingComponent shuttleDock, + EntityUid gridDockUid, + DockingComponent gridDock) + { + var shuttleDocks = new List>(1) { (shuttleDockUid, shuttleDock) }; - var gridDocks = new List>(1) + var gridDocks = new List>(1) { (gridDockUid, gridDock) }; - return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks); - } - - /// - /// Tries to get a valid docking configuration for the shuttle to the target grid. - /// - /// Priority docking tag to prefer, e.g. for emergency shuttle - public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null) - { - var gridDocks = GetDocks(targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - - return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag); - } - - /// - /// Tries to get a docking config at the specified coordinates and angle. - /// - public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid, - EntityUid targetGrid, - EntityCoordinates coordinates, - Angle angle) - { - var gridDocks = GetDocks(targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - - var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); - - foreach (var config in configs) - { - if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15)) - { - return config; - } - } - - return null; - } - - /// - /// Gets all docking configs between the 2 grids. - /// - private List GetDockingConfigs( - EntityUid shuttleUid, - EntityUid targetGrid, - List> shuttleDocks, - List> gridDocks) - { - var validDockConfigs = new List(); - - if (gridDocks.Count <= 0) + return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks); + } + + /// + /// Tries to get a valid docking configuration for the shuttle to the target grid. + /// + /// Priority docking tag to prefer, e.g. for emergency shuttle + public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null) + { + var gridDocks = GetDocks(targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + + return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag); + } + + /// + /// Tries to get a docking config at the specified coordinates and angle. + /// + public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid, + EntityUid targetGrid, + EntityCoordinates coordinates, + Angle angle) + { + var gridDocks = GetDocks(targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + + var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); + + foreach (var config in configs) + { + if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15)) + { + return config; + } + } + + return null; + } + + /// + /// Gets all docking configs between the 2 grids. + /// + private List GetDockingConfigs( + EntityUid shuttleUid, + EntityUid targetGrid, + List> shuttleDocks, + List> gridDocks) + { + var validDockConfigs = new List(); + + if (gridDocks.Count <= 0) return validDockConfigs; var targetGridGrid = _gridQuery.GetComponent(targetGrid); @@ -168,117 +168,118 @@ private List GetDockingConfigs( var grids = new List>(); if (shuttleDocks.Count > 0) { - // We'll try all combinations of shuttle docks and see which one is most suitable - foreach (var (dockUid, shuttleDock) in shuttleDocks) - { - var shuttleDockXform = _xformQuery.GetComponent(dockUid); - - foreach (var (gridDockUid, gridDock) in gridDocks) - { - var gridXform = _xformQuery.GetComponent(gridDockUid); - - if (!CanDock( - shuttleDock, shuttleDockXform, - gridDock, gridXform, - shuttleAABB, - targetGridAngle, - shuttleFixturesComp, - targetGridGrid, - isMap, - out var matty, - out var dockedAABB, - out var targetAngle)) - { - continue; - } - - // Can't just use the AABB as we want to get bounds as tight as possible. - var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty)); - var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, gridPosition.ToMapPos(EntityManager, _transform)); - - // TODO: use tight bounds - var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position); - - // Check if there's no intersecting grids (AKA oh god it's docking at cargo). - grids.Clear(); - _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false); - if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid)) - { - continue; - } - - // Alright well the spawn is valid now to check how many we can connect - // Get the matrix for each shuttle dock and test it against the grid docks to see - // if the connected position / direction matches. - - var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>() + // We'll try all combinations of shuttle docks and see which one is most suitable + foreach (var (dockUid, shuttleDock) in shuttleDocks) + { + var shuttleDockXform = _xformQuery.GetComponent(dockUid); + + foreach (var (gridDockUid, gridDock) in gridDocks) + { + var gridXform = _xformQuery.GetComponent(gridDockUid); + + if (!CanDock( + shuttleDock, shuttleDockXform, + gridDock, gridXform, + shuttleAABB, + targetGridAngle, + shuttleFixturesComp, + (targetGrid, targetGridGrid), + isMap, + out var matty, + out var dockedAABB, + out var targetAngle)) + { + continue; + } + + // Can't just use the AABB as we want to get bounds as tight as possible. + var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty)); + var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, _transform.ToMapCoordinates(gridPosition).Position); + + // TODO: use tight bounds + var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position); + + // Check if there's no intersecting grids (AKA oh god it's docking at cargo). + grids.Clear(); + _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false); + if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid)) + { + continue; + } + + // Alright well the spawn is valid now to check how many we can connect + // Get the matrix for each shuttle dock and test it against the grid docks to see + // if the connected position / direction matches. + + var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>() { (dockUid, gridDockUid, shuttleDock, gridDock), }; - dockedAABB = dockedAABB.Rounded(DockRoundingDigits); - - foreach (var (otherUid, other) in shuttleDocks) - { - if (other == shuttleDock) - continue; - - foreach (var (otherGridUid, otherGrid) in gridDocks) - { - if (otherGrid == gridDock) - continue; - - if (!CanDock( - other, - _xformQuery.GetComponent(otherUid), - otherGrid, - _xformQuery.GetComponent(otherGridUid), - shuttleAABB, - targetGridAngle, - shuttleFixturesComp, targetGridGrid, - isMap, - out _, - out var otherdockedAABB, - out var otherTargetAngle)) - { - continue; - } - - otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits); - - // Different setup. - if (!targetAngle.Equals(otherTargetAngle) || - !dockedAABB.Equals(otherdockedAABB)) - { - continue; - } - - dockedPorts.Add((otherUid, otherGridUid, other, otherGrid)); - } - } - - validDockConfigs.Add(new DockingConfig() - { - Docks = dockedPorts, - Coordinates = gridPosition, - Area = dockedAABB, - Angle = targetAngle, - }); - } - } + dockedAABB = dockedAABB.Rounded(DockRoundingDigits); + + foreach (var (otherUid, other) in shuttleDocks) + { + if (other == shuttleDock) + continue; + + foreach (var (otherGridUid, otherGrid) in gridDocks) + { + if (otherGrid == gridDock) + continue; + + if (!CanDock( + other, + _xformQuery.GetComponent(otherUid), + otherGrid, + _xformQuery.GetComponent(otherGridUid), + shuttleAABB, + targetGridAngle, + shuttleFixturesComp, + (targetGrid, targetGridGrid), + isMap, + out _, + out var otherdockedAABB, + out var otherTargetAngle)) + { + continue; + } + + otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits); + + // Different setup. + if (!targetAngle.Equals(otherTargetAngle) || + !dockedAABB.Equals(otherdockedAABB)) + { + continue; + } + + dockedPorts.Add((otherUid, otherGridUid, other, otherGrid)); + } + } + + validDockConfigs.Add(new DockingConfig() + { + Docks = dockedPorts, + Coordinates = gridPosition, + Area = dockedAABB, + Angle = targetAngle, + }); + } + } } return validDockConfigs; - } + } - private DockingConfig? GetDockingConfigPrivate( - EntityUid shuttleUid, - EntityUid targetGrid, - List> shuttleDocks, - List> gridDocks, - string? priorityTag = null) - { - var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); + private DockingConfig? GetDockingConfigPrivate( + EntityUid shuttleUid, + EntityUid targetGrid, + List> shuttleDocks, + List> gridDocks, + string? priorityTag = null) + { + var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); if (validDockConfigs.Count <= 0) return null; @@ -300,56 +301,56 @@ private List GetDockingConfigs( return location; } - /// - /// Checks whether the shuttle can warp to the specified position. - /// - private bool ValidSpawn(MapGridComponent grid, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) - { - var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle); + /// + /// Checks whether the shuttle can warp to the specified position. + /// + private bool ValidSpawn(Entity gridEntity, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) + { + var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle); - // Because some docking bounds are tight af need to check each chunk individually - foreach (var fix in shuttleFixturesComp.Fixtures.Values) - { - var polyShape = (PolygonShape) fix.Shape; - var aabb = polyShape.ComputeAABB(transform, 0); - aabb = aabb.Enlarged(-0.01f); - - // If it's a map check no hard collidable anchored entities overlap - if (isMap) - { - foreach (var tile in grid.GetLocalTilesIntersecting(aabb)) - { - var anchoredEnumerator = grid.GetAnchoredEntitiesEnumerator(tile.GridIndices); - - while (anchoredEnumerator.MoveNext(out var anc)) - { - if (!_physicsQuery.TryGetComponent(anc, out var physics) || - !physics.CanCollide || - !physics.Hard) - { - continue; - } - - return false; - } - } - } - // If it's not a map check it doesn't overlap the grid. - else - { - if (grid.GetLocalTilesIntersecting(aabb).Any()) - return false; - } - } - - return true; - } - - public List> GetDocks(EntityUid uid) - { - _dockingSet.Clear(); - _lookup.GetChildEntities(uid, _dockingSet); - - return _dockingSet.ToList(); - } + // Because some docking bounds are tight af need to check each chunk individually + foreach (var fix in shuttleFixturesComp.Fixtures.Values) + { + var polyShape = (PolygonShape)fix.Shape; + var aabb = polyShape.ComputeAABB(transform, 0); + aabb = aabb.Enlarged(-0.01f); + + // If it's a map check no hard collidable anchored entities overlap + if (isMap) + { + foreach (var tile in _mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb)) + { + var anchoredEnumerator = _mapSystem.GetAnchoredEntitiesEnumerator(gridEntity.Owner, gridEntity.Comp, tile.GridIndices); + + while (anchoredEnumerator.MoveNext(out var anc)) + { + if (!_physicsQuery.TryGetComponent(anc, out var physics) || + !physics.CanCollide || + !physics.Hard) + { + continue; + } + + return false; + } + } + } + // If it's not a map check it doesn't overlap the grid. + else + { + if (_mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb).Any()) + return false; + } + } + + return true; + } + + public List> GetDocks(EntityUid uid) + { + _dockingSet.Clear(); + _lookup.GetChildEntities(uid, _dockingSet); + + return _dockingSet.ToList(); + } } diff --git a/Content.Server/Shuttles/Systems/DockingSystem.cs b/Content.Server/Shuttles/Systems/DockingSystem.cs index f46c3980e5..fcdd6c0c1a 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.cs @@ -23,6 +23,7 @@ namespace Content.Server.Shuttles.Systems public sealed partial class DockingSystem : SharedDockingSystem { [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly DoorSystem _doorSystem = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly PathfindingSystem _pathfinding = default!; @@ -262,7 +263,7 @@ public void Dock(Entity dockA, Entity dockB) joint.LocalAnchorA = anchorA; joint.LocalAnchorB = anchorB; - joint.ReferenceAngle = (float) (_transform.GetWorldRotation(gridBXform) - _transform.GetWorldRotation(gridAXform)); + joint.ReferenceAngle = (float)(_transform.GetWorldRotation(gridBXform) - _transform.GetWorldRotation(gridAXform)); joint.CollideConnected = true; joint.Stiffness = stiffness; joint.Damping = damping; diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs index 6e61ff39b4..e44a8ce361 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs @@ -233,7 +233,7 @@ private void UpdateEmergencyConsole(float frameTime) ShuttlesLeft = true; _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("emergency-shuttle-left", ("transitTime", $"{TransitTime:0}"))); - Timer.Spawn((int) (TransitTime * 1000) + _bufferTime.Milliseconds, () => _roundEnd.EndRound(), _roundEndCancelToken?.Token ?? default); + Timer.Spawn((int)(TransitTime * 1000) + _bufferTime.Milliseconds, () => _roundEnd.EndRound(), _roundEndCancelToken?.Token ?? default); } // All the others. diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 45397ede08..52b327ee01 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -50,8 +50,8 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IConfigurationManager _configManager = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly AccessReaderSystem _reader = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly CommunicationsConsoleSystem _commsConsole = default!; @@ -61,6 +61,7 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly IdCardSystem _idSystem = default!; [Dependency] private readonly NavMapSystem _navMap = default!; [Dependency] private readonly MapLoaderSystem _map = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly RoundEndSystem _roundEnd = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -212,7 +213,7 @@ private void OnEmergencyFTL(EntityUid uid, EmergencyShuttleComponent component, { [ShuttleTimerMasks.ShuttleMap] = uid, [ShuttleTimerMasks.SourceMap] = args.FromMapUid, - [ShuttleTimerMasks.DestMap] = args.TargetCoordinates.GetMapUid(_entityManager), + [ShuttleTimerMasks.DestMap] = _transformSystem.GetMap(args.TargetCoordinates), [ShuttleTimerMasks.ShuttleTime] = ftlTime, [ShuttleTimerMasks.SourceTime] = ftlTime, [ShuttleTimerMasks.DestTime] = ftlTime @@ -289,7 +290,7 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo { var angle = _dock.GetAngle(stationShuttle.EmergencyShuttle.Value, xform, targetGrid.Value, targetXform, xformQuery); var direction = ContentLocalizationManager.FormatDirection(angle.GetDir()); - var location = FormattedMessage.RemoveMarkup(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); + var location = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); _chatSystem.DispatchStationAnnouncement(stationUid, Loc.GetString("emergency-shuttle-docked", ("time", $"{_consoleAccumulator:0}"), ("direction", direction), ("location", location)), playDefaultSound: false); } @@ -320,7 +321,7 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo { var angle = _dock.GetAngle(stationShuttle.EmergencyShuttle.Value, xform, targetGrid.Value, targetXform, xformQuery); var direction = ContentLocalizationManager.FormatDirection(angle.GetDir()); - var location = FormattedMessage.RemoveMarkup(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); + var location = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); _chatSystem.DispatchStationAnnouncement(stationUid, Loc.GetString("emergency-shuttle-nearby", ("time", $"{_consoleAccumulator:0}"), ("direction", direction), ("location", location)), playDefaultSound: false); } @@ -401,7 +402,7 @@ private void SetupEmergencyShuttle() private void AddCentcomm(EntityUid station, StationCentcommComponent component) { - DebugTools.Assert(LifeStage(station)>= EntityLifeStage.MapInitialized); + DebugTools.Assert(LifeStage(station) >= EntityLifeStage.MapInitialized); if (component.MapEntity != null || component.Entity != null) { Log.Warning("Attempted to re-add an existing centcomm map."); @@ -434,12 +435,11 @@ private void AddCentcomm(EntityUid station, StationCentcommComponent component) return; } - var mapId = _mapManager.CreateMap(); + var map = _mapSystem.CreateMap(out var mapId); var grid = _map.LoadGrid(mapId, component.Map.ToString(), new MapLoadOptions() { LoadMap = false, }); - var map = _mapManager.GetMapEntityId(mapId); if (!Exists(map)) { @@ -465,8 +465,9 @@ private void AddCentcomm(EntityUid station, StationCentcommComponent component) } component.MapEntity = map; + _metaData.SetEntityName(map, Loc.GetString("map-name-centcomm")); component.Entity = grid; - _shuttle.TryAddFTLDestination(mapId, false, out _); + _shuttle.TryAddFTLDestination(mapId, true, out _); Log.Info($"Created centcomm grid {ToPrettyString(grid)} on map {ToPrettyString(map)} for station {ToPrettyString(station)}"); } @@ -492,7 +493,7 @@ private void AddEmergencyShuttle(Entity ent, ref Shuttle private void OnPositionFTLMessage(Entity entity, ref ShuttleConsoleFTLPositionMessage args) { - var mapUid = _mapManager.GetMapEntityId(args.Coordinates.MapId); + var mapUid = _mapSystem.GetMap(args.Coordinates.MapId); // If it's beacons only block all position messages. if (!Exists(mapUid) || _shuttle.IsBeaconMap(mapUid)) diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs index 00a913aad8..f02ea945d0 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs @@ -12,6 +12,7 @@ using Content.Shared.Shuttles.Systems; using Content.Shared.Tag; using Content.Shared.Movement.Systems; +using Content.Shared.Power; using Content.Shared.Shuttles.UI.MapObjects; using Content.Shared.Timing; using Robust.Server.GameObjects; @@ -25,7 +26,7 @@ namespace Content.Server.Shuttles.Systems; public sealed partial class ShuttleConsoleSystem : SharedShuttleConsoleSystem { - [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly ActionBlockerSystem _blocker = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; @@ -128,7 +129,7 @@ public void RefreshShuttleConsoles() while (query.MoveNext(out var uid, out _)) { - UpdateState(uid,ref dockState); + UpdateState(uid, ref dockState); } } @@ -137,7 +138,7 @@ public void RefreshShuttleConsoles() /// private void OnConsoleUIClose(EntityUid uid, ShuttleConsoleComponent component, BoundUIClosedEvent args) { - if ((ShuttleConsoleUiKey) args.UiKey != ShuttleConsoleUiKey.Key) + if ((ShuttleConsoleUiKey)args.UiKey != ShuttleConsoleUiKey.Key) { return; } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index 518867b555..e670445745 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -66,7 +66,7 @@ public sealed partial class ShuttleSystem /// /// How many times we try to proximity warp close to something before falling back to map-wideAABB. /// - private const int FTLProximityIterations = 3; + private const int FTLProximityIterations = 5; private readonly HashSet _lookupEnts = new(); private readonly HashSet _immuneEnts = new(); @@ -134,13 +134,12 @@ private EntityUid EnsureFTLMap() return uid; } - var mapId = _mapManager.CreateMap(); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapUid = _mapSystem.CreateMap(out var mapId); var ftlMap = AddComp(mapUid); _metadata.SetEntityName(mapUid, "FTL"); Log.Debug($"Setup hyperspace map at {mapUid}"); - DebugTools.Assert(!_mapManager.IsMapPaused(mapId)); + DebugTools.Assert(!_mapSystem.IsPaused(mapId)); var parallax = EnsureComp(mapUid); parallax.Parallax = ftlMap.Parallax; @@ -188,7 +187,12 @@ public void SetFTLWhitelist(Entity entity, EntityWhite /// public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] out FTLDestinationComponent? component) { - var mapUid = _mapManager.GetMapEntityId(mapId); + return TryAddFTLDestination(mapId, enabled, true, false, out component); + } + + public bool TryAddFTLDestination(MapId mapId, bool enabled, bool requireDisk, bool beaconsOnly, [NotNullWhen(true)] out FTLDestinationComponent? component) + { + var mapUid = _mapSystem.GetMapOrInvalid(mapId); component = null; if (!Exists(mapUid)) @@ -196,10 +200,13 @@ public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] component = EnsureComp(mapUid); - if (component.Enabled == enabled) + if (component.Enabled == enabled && component.RequireCoordinateDisk == requireDisk && component.BeaconsOnly == beaconsOnly) return true; component.Enabled = enabled; + component.RequireCoordinateDisk = requireDisk; + component.BeaconsOnly = beaconsOnly; + _console.RefreshShuttleConsoles(); Dirty(mapUid, component); return true; @@ -281,8 +288,8 @@ public void FTLToCoordinates( _console.RefreshShuttleConsoles(shuttleUid); - var mapId = coordinates.GetMapId(EntityManager); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapId = _transform.GetMapId(coordinates); + var mapUid = _mapSystem.GetMap(mapId); var ev = new FTLRequestEvent(mapUid); RaiseLocalEvent(shuttleUid, ref ev, true); } @@ -321,7 +328,7 @@ public void FTLToDock( hyperspace.TargetCoordinates = config.Coordinates; hyperspace.TargetAngle = config.Angle; } - else if (TryGetFTLProximity(shuttleUid, target, out var coords, out var targAngle)) + else if (TryGetFTLProximity(shuttleUid, new EntityCoordinates(target, Vector2.Zero), out var coords, out var targAngle)) { hyperspace.TargetCoordinates = coords; hyperspace.TargetAngle = targAngle; @@ -377,17 +384,18 @@ private void UpdateFTLStarting(Entity entity) var fromMatrix = _transform.GetWorldMatrix(xform); var fromRotation = _transform.GetWorldRotation(xform); - var width = Comp(uid).LocalAABB.Width; + var grid = Comp(uid); + var width = grid.LocalAABB.Width; var ftlMap = EnsureFTLMap(); var body = _physicsQuery.GetComponent(entity); - var shuttleCenter = body.LocalCenter; + var shuttleCenter = grid.LocalAABB.Center; // Leave audio at the old spot // Just so we don't clip if (fromMapUid != null && TryComp(comp.StartupStream, out AudioComponent? startupAudio)) { var clippedAudio = _audio.PlayStatic(_startupSound, Filter.Broadcast(), - new EntityCoordinates(fromMapUid.Value, _maps.GetGridPosition(entity.Owner)), true, startupAudio.Params); + new EntityCoordinates(fromMapUid.Value, _mapSystem.GetGridPosition(entity.Owner)), true, startupAudio.Params); _audio.SetPlaybackPosition(clippedAudio, entity.Comp1.StartupTime); clippedAudio.Value.Component.Flags |= AudioFlags.NoOcclusion; @@ -476,7 +484,7 @@ private void UpdateFTLArriving(Entity entity) var map = maps.Min(o => o.GetHashCode()); mapId = new MapId(map); - TryFTLProximity(uid, _mapManager.GetMapEntityId(mapId)); + TryFTLProximity(uid, _mapSystem.GetMap(mapId)); } // Docking FTL else if (HasComp(target.EntityId) && @@ -500,7 +508,8 @@ private void UpdateFTLArriving(Entity entity) // Position ftl else { - mapId = target.GetMapId(EntityManager); + // TODO: This should now use tryftlproximity + mapId = _transform.GetMapId(target); _transform.SetCoordinates(uid, xform, target, rotation: entity.Comp1.TargetAngle); } @@ -538,7 +547,7 @@ private void UpdateFTLArriving(Entity entity) _mapManager.SetMapPaused(mapId, false); Smimsh(uid, xform: xform); - var ftlEvent = new FTLCompletedEvent(uid, _mapManager.GetMapEntityId(mapId)); + var ftlEvent = new FTLCompletedEvent(uid, _mapSystem.GetMap(mapId)); RaiseLocalEvent(uid, ref ftlEvent, true); } @@ -614,7 +623,7 @@ private void DoTheDinosaur(TransformComponent xform) // If the guy we knocked down is on a spaced tile, throw them too if (grid != null) - TossIfSpaced(grid, shuttleBody, child); + TossIfSpaced((xform.GridUid.Value, grid, shuttleBody), child); } } } @@ -635,13 +644,15 @@ private void KnockOverKids(TransformComponent xform, ref ValueList to /// /// Throws people who are standing on a spaced tile, tries to throw them towards a neighbouring space tile /// - private void TossIfSpaced(MapGridComponent shuttleGrid, PhysicsComponent shuttleBody, EntityUid tossed) + private void TossIfSpaced(Entity shuttleEntity, EntityUid tossed) { - if (!_xformQuery.TryGetComponent(tossed, out var childXform) ) + var shuttleGrid = shuttleEntity.Comp1; + var shuttleBody = shuttleEntity.Comp2; + if (!_xformQuery.TryGetComponent(tossed, out var childXform)) return; // only toss if its on lattice/space - var tile = shuttleGrid.GetTileRef(childXform.Coordinates); + var tile = _mapSystem.GetTileRef(shuttleEntity, shuttleGrid, childXform.Coordinates); if (!tile.IsSpace(_tileDefManager)) return; @@ -687,7 +698,7 @@ public void FTLDock(Entity shuttle, DockingConfig config) { // Set position var mapCoordinates = _transform.ToMapCoordinates(config.Coordinates); - var mapUid = _mapManager.GetMapEntityId(mapCoordinates.MapId); + var mapUid = _mapSystem.GetMap(mapCoordinates.MapId); _transform.SetCoordinates(shuttle.Owner, shuttle.Comp, new EntityCoordinates(mapUid, mapCoordinates.Position), rotation: config.Angle); // Connect everything @@ -698,16 +709,23 @@ public void FTLDock(Entity shuttle, DockingConfig config) } /// - /// Tries to get the target position to FTL near to another grid. + /// Tries to get the target position to FTL near the target coordinates. + /// If the target coordinates have a mapgrid then will try to offset the AABB. /// - private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, + /// Min offset for the final FTL. + /// Max offset for the final FTL from the box we spawn. + private bool TryGetFTLProximity( + EntityUid shuttleUid, + EntityCoordinates targetCoordinates, out EntityCoordinates coordinates, out Angle angle, + float minOffset = 0f, float maxOffset = 64f, TransformComponent? xform = null, TransformComponent? targetXform = null) { + DebugTools.Assert(minOffset < maxOffset); coordinates = EntityCoordinates.Invalid; angle = Angle.Zero; - if (!Resolve(targetUid, ref targetXform) || + if (!Resolve(targetCoordinates.EntityId, ref targetXform) || targetXform.MapUid == null || !targetXform.MapUid.Value.IsValid() || !Resolve(shuttleUid, ref xform)) @@ -715,26 +733,24 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, return false; } - - var xformQuery = GetEntityQuery(); - var shuttleAABB = Comp(shuttleUid).LocalAABB; - Box2 targetLocalAABB; - - // Spawn nearby. // We essentially expand the Box2 of the target area until nothing else is added then we know it's valid. // Can't just get an AABB of every grid as we may spawn very far away. - if (TryComp(targetXform.GridUid, out var targetGrid)) - { - targetLocalAABB = targetGrid.LocalAABB; - } - else - { - targetLocalAABB = new Box2(); - } - - var targetAABB = _transform.GetWorldMatrix(targetXform, xformQuery) - .TransformBox(targetLocalAABB).Enlarged(shuttleAABB.Size.Length()); var nearbyGrids = new HashSet(); + var shuttleAABB = Comp(shuttleUid).LocalAABB; + + // Start with small point. + // If our target pos is offset we mot even intersect our target's AABB so we don't include it. + var targetLocalAABB = Box2.CenteredAround(targetCoordinates.Position, Vector2.One); + + // How much we expand the target AABB be. + // We half it because we only need the width / height in each direction if it's placed at a particular spot. + var expansionAmount = MathF.Max(shuttleAABB.Width / 2f, shuttleAABB.Height / 2f); + + // Expand the starter AABB so we have something to query to start with. + var targetAABB = _transform.GetWorldMatrix(targetXform) + .TransformBox(targetLocalAABB) + .Enlarged(expansionAmount); + var iteration = 0; var lastCount = nearbyGrids.Count; var mapId = targetXform.MapID; @@ -743,15 +759,21 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, while (iteration < FTLProximityIterations) { grids.Clear(); - _mapManager.FindGridsIntersecting(mapId, targetAABB, ref grids); + // We pass in an expanded offset here so we can safely do a random offset later. + // We don't include this in the actual targetAABB because then we would be double-expanding it. + // Once in this loop, then again when placing the shuttle later. + // Note that targetAABB already has expansionAmount factored in already. + _mapManager.FindGridsIntersecting(mapId, targetAABB.Enlarged(maxOffset), ref grids); foreach (var grid in grids) { if (!nearbyGrids.Add(grid)) continue; - targetAABB = targetAABB.Union(_transform.GetWorldMatrix(grid, xformQuery) - .TransformBox(Comp(grid).LocalAABB)); + // Include the other grid's AABB (expanded by ours) as well. + targetAABB = targetAABB.Union( + _transform.GetWorldMatrix(grid) + .TransformBox(Comp(grid).LocalAABB.Enlarged(expansionAmount))); } // Can do proximity @@ -760,7 +782,6 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, break; } - targetAABB = targetAABB.Enlarged(shuttleAABB.Size.Length() / 2f); iteration++; lastCount = nearbyGrids.Count; @@ -775,13 +796,15 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, if (nearbyGrids.Contains(uid)) continue; - targetAABB = targetAABB.Union(_transform.GetWorldMatrix(uid, xformQuery) - .TransformBox(Comp(uid).LocalAABB)); + targetAABB = targetAABB.Union( + _transform.GetWorldMatrix(uid) + .TransformBox(Comp(uid).LocalAABB.Enlarged(expansionAmount))); } break; } + // Now we have a targetAABB. This has already been expanded to account for our fat ass. Vector2 spawnPos; if (TryComp(shuttleUid, out var shuttleBody)) @@ -790,21 +813,32 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, _physics.SetAngularVelocity(shuttleUid, 0f, body: shuttleBody); } + // TODO: This should prefer the position's angle instead. // TODO: This is pretty crude for multiple landings. if (nearbyGrids.Count > 1 || !HasComp(targetXform.GridUid)) { - var minRadius = (MathF.Max(targetAABB.Width, targetAABB.Height) + MathF.Max(shuttleAABB.Width, shuttleAABB.Height)) / 2f; - spawnPos = targetAABB.Center + _random.NextVector2(minRadius, minRadius + 64f); + // Pick a random angle + var offsetAngle = _random.NextAngle(); + + // Our valid spawn positions are away. + var minRadius = MathF.Max(targetAABB.Width / 2f, targetAABB.Height / 2f); + spawnPos = targetAABB.Center + offsetAngle.RotateVec(new Vector2(_random.NextFloat(minRadius + minOffset, minRadius + maxOffset), 0f)); } else if (shuttleBody != null) { - var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform, xformQuery); - var transform = new Transform(targetPos, targetRot); - spawnPos = Robust.Shared.Physics.Transform.Mul(transform, -shuttleBody.LocalCenter); + (spawnPos, angle) = _transform.GetWorldPositionRotation(targetXform); } else { - spawnPos = _transform.GetWorldPosition(targetXform, xformQuery); + spawnPos = _transform.GetWorldPosition(targetXform); + } + + var offset = Vector2.Zero; + + // Offset it because transform does not correspond to AABB position. + if (TryComp(shuttleUid, out MapGridComponent? shuttleGrid)) + { + offset = -shuttleGrid.LocalAABB.Center; } if (!HasComp(targetXform.GridUid)) @@ -816,7 +850,11 @@ private bool TryGetFTLProximity(EntityUid shuttleUid, EntityUid targetUid, angle = Angle.Zero; } - coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos); + // Rotate our localcenter around so we spawn exactly where we "think" we should (center of grid on the dot). + var transform = new Transform(spawnPos, angle); + spawnPos = Robust.Shared.Physics.Transform.Mul(transform, offset); + + coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos - offset); return true; } @@ -833,13 +871,31 @@ public bool TryFTLProximity(EntityUid shuttleUid, EntityUid targetUid, Transform return false; } - if (!TryGetFTLProximity(shuttleUid, targetUid, out var coords, out var angle, xform, targetXform)) + if (!TryGetFTLProximity(shuttleUid, new EntityCoordinates(targetUid, Vector2.Zero), out var coords, out var angle, xform: xform, targetXform: targetXform)) return false; _transform.SetCoordinates(shuttleUid, xform, coords, rotation: angle); return true; } + /// + /// Tries to FTL to the target coordinates; will move nearby if not possible. + /// + public bool TryFTLProximity(Entity shuttle, EntityCoordinates targetCoordinates) + { + if (!Resolve(shuttle.Owner, ref shuttle.Comp) || + _transform.GetMap(targetCoordinates)?.IsValid() != true) + { + return false; + } + + if (!TryGetFTLProximity(shuttle, targetCoordinates, out var coords, out var angle)) + return false; + + _transform.SetCoordinates(shuttle, shuttle.Comp, coords, rotation: angle); + return true; + } + /// /// Flattens / deletes everything under the grid upon FTL. /// @@ -861,7 +917,6 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom var aabb = fixture.Shape.ComputeAABB(transform, 0); // Shift it slightly - aabb = aabb.Translated(-grid.TileSizeHalfVector); // Create a small border around it. aabb = aabb.Enlarged(0.2f); aabbs.Add(aabb); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs index c0eff11931..5ad94699be 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs @@ -85,7 +85,7 @@ private void CargoSpawn(EntityUid uid, StationCargoShuttleComponent component) _mapManager.DeleteMap(mapId); } - private bool TryDungeonSpawn(Entity targetGrid, MapId mapId, DungeonSpawnGroup group, out EntityUid spawned) + private bool TryDungeonSpawn(Entity targetGrid, DungeonSpawnGroup group, out EntityUid spawned) { spawned = EntityUid.Invalid; @@ -110,11 +110,12 @@ private bool TryDungeonSpawn(Entity targetGrid, MapId mapId, spawnCoords = spawnCoords.Offset(_random.NextVector2(distancePadding + group.MinimumDistance, distancePadding + group.MaximumDistance)); } - var spawnMapCoords = _transform.ToMapCoordinates(spawnCoords); + _mapSystem.CreateMap(out var mapId); + var spawnedGrid = _mapManager.CreateGridEntity(mapId); - _transform.SetMapCoordinates(spawnedGrid, spawnMapCoords); - _dungeon.GenerateDungeon(dungeonProto, spawnedGrid.Owner, spawnedGrid.Comp, Vector2i.Zero, _random.Next()); + _transform.SetMapCoordinates(spawnedGrid, new MapCoordinates(Vector2.Zero, mapId)); + _dungeon.GenerateDungeon(dungeonProto, spawnedGrid.Owner, spawnedGrid.Comp, Vector2i.Zero, _random.Next(), spawnCoords); spawned = spawnedGrid.Owner; return true; @@ -192,7 +193,7 @@ private void GridSpawns(EntityUid uid, GridSpawnComponent component) switch (group) { case DungeonSpawnGroup dungeon: - if (!TryDungeonSpawn(targetGrid.Value, mapId, dungeon, out spawned)) + if (!TryDungeonSpawn(targetGrid.Value, dungeon, out spawned)) continue; break; diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs index 8a8d2d883d..436b248407 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs @@ -39,8 +39,8 @@ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref Sta var otherXform = Transform(args.OtherEntity); - var ourPoint = Vector2.Transform(args.WorldPoint, ourXform.InvWorldMatrix); - var otherPoint = Vector2.Transform(args.WorldPoint, otherXform.InvWorldMatrix); + var ourPoint = Vector2.Transform(args.WorldPoint, _transform.GetInvWorldMatrix(ourXform)); + var otherPoint = Vector2.Transform(args.WorldPoint, _transform.GetInvWorldMatrix(otherXform)); var ourVelocity = _physics.GetLinearVelocity(uid, ourPoint, ourBody, ourXform); var otherVelocity = _physics.GetLinearVelocity(args.OtherEntity, otherPoint, otherBody, otherXform); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 6ae4aff2f4..054c42f934 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -49,7 +49,6 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private readonly MetaDataSystem _metadata = default!; [Dependency] private readonly PvsOverrideSystem _pvs = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedMapSystem _maps = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ShuttleConsoleSystem _console = default!; diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index fd14963081..f5e8f7823e 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -19,6 +19,7 @@ using Robust.Shared.Timing; using Robust.Shared.Utility; using Content.Shared.Localizations; +using Content.Shared.Power; namespace Content.Server.Shuttles.Systems; @@ -26,6 +27,7 @@ public sealed class ThrusterSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly AmbientSoundSystem _ambient = default!; [Dependency] private readonly FixtureSystem _fixtureSystem = default!; [Dependency] private readonly DamageableSystem _damageable = default!; @@ -108,7 +110,7 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref continue; var checkPos = tilePos + new Vector2i(x, y); - var enumerator = grid.GetAnchoredEntitiesEnumerator(checkPos); + var enumerator = _mapSystem.GetAnchoredEntitiesEnumerator(uid, grid, checkPos); while (enumerator.MoveNext(out var ent)) { @@ -119,7 +121,7 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref var xform = xformQuery.GetComponent(ent.Value); var direction = xform.LocalRotation.ToWorldVec(); - if (new Vector2i((int) direction.X, (int) direction.Y) != new Vector2i(x, y)) + if (new Vector2i((int)direction.X, (int)direction.Y) != new Vector2i(x, y)) continue; DisableThruster(ent.Value, thruster, xform.GridUid); @@ -182,8 +184,8 @@ private void OnRotate(EntityUid uid, ThrusterComponent component, ref MoveEvent return; } - var oldDirection = (int) args.OldRotation.GetCardinalDir() / 2; - var direction = (int) args.NewRotation.GetCardinalDir() / 2; + var oldDirection = (int)args.OldRotation.GetCardinalDir() / 2; + var direction = (int)args.NewRotation.GetCardinalDir() / 2; var oldShuttleComponent = shuttleComponent; if (args.ParentChanged) @@ -281,7 +283,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform switch (component.Type) { case ThrusterType.Linear: - var direction = (int) xform.LocalRotation.GetCardinalDir() / 2; + var direction = (int)xform.LocalRotation.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] += component.Thrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); @@ -293,7 +295,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform { var shape = new PolygonShape(); shape.Set(component.BurnPoly); - _fixtureSystem.TryCreateFixture(uid, shape, BurnFixture, hard: false, collisionLayer: (int) CollisionGroup.FullTileMask, body: physicsComponent); + _fixtureSystem.TryCreateFixture(uid, shape, BurnFixture, hard: false, collisionLayer: (int)CollisionGroup.FullTileMask, body: physicsComponent); } break; @@ -333,7 +335,7 @@ private void RefreshCenter(EntityUid uid, ShuttleComponent shuttle) foreach (var dir in new[] { Direction.South, Direction.East, Direction.North, Direction.West }) { - var index = (int) dir / 2; + var index = (int)dir / 2; var pop = shuttle.LinearThrusters[index]; var totalThrust = 0f; @@ -379,7 +381,7 @@ public void DisableThruster(EntityUid uid, ThrusterComponent component, EntityUi { case ThrusterType.Linear: angle ??= xform.LocalRotation; - var direction = (int) angle.Value.GetCardinalDir() / 2; + var direction = (int)angle.Value.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] -= component.Thrust; DebugTools.Assert(shuttleComponent.LinearThrusters[direction].Contains(uid)); @@ -425,7 +427,7 @@ public bool CanEnable(EntityUid uid, ThrusterComponent component) var xform = Transform(uid); - if (!xform.Anchored ||!this.IsPowered(uid, EntityManager)) + if (!xform.Anchored || !this.IsPowered(uid, EntityManager)) { return false; } @@ -442,7 +444,8 @@ private bool NozzleExposed(TransformComponent xform) return true; var (x, y) = xform.LocalPosition + xform.LocalRotation.Opposite().ToWorldVec(); - var tile = Comp(xform.GridUid.Value).GetTileRef(new Vector2i((int) Math.Floor(x), (int) Math.Floor(y))); + var mapGrid = Comp(xform.GridUid.Value); + var tile = _mapSystem.GetTileRef(xform.GridUid.Value, mapGrid, new Vector2i((int)Math.Floor(x), (int)Math.Floor(y))); return tile.Tile.IsSpace(); } @@ -581,6 +584,6 @@ public void SetAngularThrust(ShuttleComponent component, bool on) private int GetFlagIndex(DirectionFlag flag) { - return (int) Math.Log2((int) flag); + return (int)Math.Log2((int)flag); } } diff --git a/Content.Server/Silicons/Borgs/BorgSystem.cs b/Content.Server/Silicons/Borgs/BorgSystem.cs index 3f32afbffb..bd85282a0f 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.cs @@ -282,6 +282,7 @@ public void BorgActivate(EntityUid uid, BorgChassisComponent component) { Popup.PopupEntity(Loc.GetString("borg-mind-added", ("name", Identity.Name(uid, EntityManager))), uid); Toggle.TryActivate(uid); + _powerCell.SetDrawEnabled(uid, _mobState.IsAlive(uid)); _appearance.SetData(uid, BorgVisuals.HasPlayer, true); } @@ -292,6 +293,7 @@ public void BorgDeactivate(EntityUid uid, BorgChassisComponent component) { Popup.PopupEntity(Loc.GetString("borg-mind-removed", ("name", Identity.Name(uid, EntityManager))), uid); Toggle.TryDeactivate(uid); + _powerCell.SetDrawEnabled(uid, false); _appearance.SetData(uid, BorgVisuals.HasPlayer, false); } diff --git a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs index ca32beb8db..05262f2999 100644 --- a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs @@ -166,11 +166,12 @@ private void RemoveConnections(Entity genera ChangeFieldVisualizer(value.Item1); } component.Connections.Clear(); + if (component.IsConnected) + _popupSystem.PopupEntity(Loc.GetString("comp-containment-disconnected"), uid, PopupType.LargeCaution); component.IsConnected = false; ChangeOnLightVisualizer(generator); ChangeFieldVisualizer(generator); _adminLogger.Add(LogType.FieldGeneration, LogImpact.Medium, $"{ToPrettyString(uid)} lost field connections"); // Ideally LogImpact would depend on if there is a singulo nearby - _popupSystem.PopupEntity(Loc.GetString("comp-containment-disconnected"), uid, PopupType.LargeCaution); } #endregion diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs index a9763b64d9..1ada60e1d6 100644 --- a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Interaction; using Content.Shared.Lock; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Projectiles; using Content.Shared.Singularity.Components; using Content.Shared.Singularity.EntitySystems; diff --git a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs deleted file mode 100644 index 44e83b0e79..0000000000 --- a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Shared.Sound.Components; - -namespace Content.Server.Sound.Components -{ - /// - /// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent - /// - [RegisterComponent] - public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent - { - } -} diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs index fc10d951e7..9d7e8496c3 100644 --- a/Content.Server/Sound/EmitSoundSystem.cs +++ b/Content.Server/Sound/EmitSoundSystem.cs @@ -39,15 +39,9 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(HandleEmitSoundOnTrigger); - SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(HandleSpamEmitSoundMapInit); } - private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) - { - TryEmitSound(uid, component, args.User, false); - } - private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args) { TryEmitSound(uid, component, args.User, false); diff --git a/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs b/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs index 9cc85060c6..d2c2a8a1ca 100644 --- a/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs +++ b/Content.Server/Sound/SpamEmitSoundRequirePowerSystem.cs @@ -1,5 +1,7 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Sound; using Content.Shared.Sound.Components; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs index f61c57a4a6..5e50740ae6 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMonitorSystem.cs @@ -3,6 +3,7 @@ using Content.Server.DeviceNetwork.Systems; using Content.Server.Power.Components; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.UserInterface; using Content.Shared.SurveillanceCamera; using Robust.Server.GameObjects; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs index d0c2cd78d3..315273a0cc 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraRouterSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Power.Components; using Content.Shared.ActionBlocker; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.SurveillanceCamera; using Content.Shared.Verbs; using Robust.Server.GameObjects; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 8dd253269d..9d1dd00590 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -5,6 +5,7 @@ using Content.Server.Power.Components; using Content.Shared.ActionBlocker; using Content.Shared.DeviceNetwork; +using Content.Shared.Power; using Content.Shared.SurveillanceCamera; using Content.Shared.Verbs; using Robust.Server.GameObjects; diff --git a/Content.Server/Temperature/Systems/EntityHeaterSystem.cs b/Content.Server/Temperature/Systems/EntityHeaterSystem.cs index ffc796cbb2..c4b5b72a9c 100644 --- a/Content.Server/Temperature/Systems/EntityHeaterSystem.cs +++ b/Content.Server/Temperature/Systems/EntityHeaterSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Examine; using Content.Shared.Placeable; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Temperature; using Content.Shared.Verbs; using Robust.Server.Audio; diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 2866b14a83..a265ce2d43 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -16,6 +16,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Emp; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Throwing; using Content.Shared.UserInterface; using Content.Shared.VendingMachines; diff --git a/Content.Server/Weather/WeatherSystem.cs b/Content.Server/Weather/WeatherSystem.cs index c3af49944d..dbee62a72f 100644 --- a/Content.Server/Weather/WeatherSystem.cs +++ b/Content.Server/Weather/WeatherSystem.cs @@ -33,58 +33,50 @@ private void WeatherTwo(IConsoleShell shell, string argStr, string[] args) { if (args.Length < 2) { - shell.WriteError($"A"); + shell.WriteError(Loc.GetString("cmd-weather-error-no-arguments")); return; } if (!int.TryParse(args[0], out var mapInt)) - { return; - } var mapId = new MapId(mapInt); if (!MapManager.MapExists(mapId)) - { return; + + if (!_mapSystem.TryGetMap(mapId, out var mapUid)) + return; + + var weatherComp = EnsureComp(mapUid.Value); + + //Weather Proto parsing + WeatherPrototype? weather = null; + if (!args[1].Equals("null")) + { + if (!ProtoMan.TryIndex(args[1], out weather)) + { + shell.WriteError(Loc.GetString("cmd-weather-error-unknown-proto")); + return; + } } + //Time parsing TimeSpan? endTime = null; - if (args.Length == 3) { + var curTime = Timing.CurTime; if (int.TryParse(args[2], out var durationInt)) { - var curTime = Timing.CurTime; - var maxTime = TimeSpan.MaxValue; - - // If it's already running then just fade out with how much time we're into the weather. - if (_mapSystem.TryGetMap(mapId, out var mapUid) && - TryComp(mapUid, out var weatherComp) && - weatherComp.Weather.TryGetValue(args[1], out var existing)) - { - maxTime = curTime - existing.StartTime; - } - endTime = curTime + TimeSpan.FromSeconds(durationInt); - - if (endTime > maxTime) - endTime = maxTime; + } + else + { + shell.WriteError(Loc.GetString("cmd-weather-error-wrong-time")); } } - if (args[1].Equals("null")) - { - SetWeather(mapId, null, endTime); - } - else if (ProtoMan.TryIndex(args[1], out var weatherProto)) - { - SetWeather(mapId, weatherProto, endTime); - } - else - { - shell.WriteError($"Unable to parse weather prototype"); - } + SetWeather(mapId, weather, endTime); } private CompletionResult WeatherCompletion(IConsoleShell shell, string[] args) diff --git a/Content.Server/Wires/WiresSystem.cs b/Content.Server/Wires/WiresSystem.cs index 92dcbb504f..92a0322ecb 100644 --- a/Content.Server/Wires/WiresSystem.cs +++ b/Content.Server/Wires/WiresSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Tools.Components; using Content.Shared.Wires; using Robust.Server.GameObjects; diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs index 8fc2f26fa6..3681e3d402 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Paper; using Content.Shared.Placeable; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Research.Components; using Content.Shared.Xenoarchaeology.Equipment; using Content.Shared.Xenoarchaeology.XenoArtifacts; diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs index f65ba46f7a..f841ea910e 100644 --- a/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactCrusherSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Xenoarchaeology.XenoArtifacts; using Content.Shared.Body.Components; using Content.Shared.Damage; +using Content.Shared.Power; using Content.Shared.Verbs; using Content.Shared.Whitelist; using Content.Shared.Xenoarchaeology.Equipment; diff --git a/Content.Shared/Actions/ActionEvents.cs b/Content.Shared/Actions/ActionEvents.cs index 4f1cd6da44..6ff8660458 100644 --- a/Content.Shared/Actions/ActionEvents.cs +++ b/Content.Shared/Actions/ActionEvents.cs @@ -187,5 +187,10 @@ public abstract partial class BaseActionEvent : HandledEntityEventArgs /// /// The action the event belongs to. /// - public EntityUid Action; + public Entity Action; + + /// + /// Should we toggle the action entity? + /// + public bool Toggle; } diff --git a/Content.Shared/Actions/ActionGrantComponent.cs b/Content.Shared/Actions/ActionGrantComponent.cs new file mode 100644 index 0000000000..94c3a0bbd1 --- /dev/null +++ b/Content.Shared/Actions/ActionGrantComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions; + +/// +/// Grants actions on MapInit and removes them on shutdown +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(ActionGrantSystem))] +public sealed partial class ActionGrantComponent : Component +{ + [DataField(required: true), AutoNetworkedField, AlwaysPushInheritance] + public List Actions = new(); + + [DataField, AutoNetworkedField] + public List ActionEntities = new(); +} diff --git a/Content.Shared/Actions/ActionGrantSystem.cs b/Content.Shared/Actions/ActionGrantSystem.cs new file mode 100644 index 0000000000..f73ecf8a46 --- /dev/null +++ b/Content.Shared/Actions/ActionGrantSystem.cs @@ -0,0 +1,48 @@ +namespace Content.Shared.Actions; + +/// +/// +/// +public sealed class ActionGrantSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnItemGet); + } + + private void OnItemGet(Entity ent, ref GetItemActionsEvent args) + { + if (!TryComp(ent.Owner, out ActionGrantComponent? grant)) + return; + + foreach (var action in grant.ActionEntities) + { + args.AddAction(action); + } + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + foreach (var action in ent.Comp.Actions) + { + EntityUid? actionEnt = null; + _actions.AddAction(ent.Owner, ref actionEnt, action); + + if (actionEnt != null) + ent.Comp.ActionEntities.Add(actionEnt.Value); + } + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + foreach (var actionEnt in ent.Comp.ActionEntities) + { + _actions.RemoveAction(ent.Owner, actionEnt); + } + } +} diff --git a/Content.Shared/Actions/Events/ActionComponentChangeEvent.cs b/Content.Shared/Actions/Events/ActionComponentChangeEvent.cs new file mode 100644 index 0000000000..c9c4db145d --- /dev/null +++ b/Content.Shared/Actions/Events/ActionComponentChangeEvent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions.Events; + +/// +/// Adds / removes the component upon action. +/// +[Virtual] +public partial class ActionComponentChangeEvent : InstantActionEvent +{ + [DataField(required: true)] + public ComponentRegistry Components = new(); +} + +/// +/// Similar to except raises an event to attempt to relay it. +/// +public sealed partial class RelayedActionComponentChangeEvent : ActionComponentChangeEvent +{ + +} + +[ByRefEvent] +public record struct AttemptRelayActionComponentChangeEvent +{ + public EntityUid? Target; +} diff --git a/Content.Shared/Actions/ItemActionGrantComponent.cs b/Content.Shared/Actions/ItemActionGrantComponent.cs new file mode 100644 index 0000000000..d1769b51a2 --- /dev/null +++ b/Content.Shared/Actions/ItemActionGrantComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Actions; + +/// +/// Works in tandem with by granting those actions to the equipper entity. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(ActionGrantSystem))] +public sealed partial class ItemActionGrantComponent : Component +{ + [DataField(required: true), AutoNetworkedField, AlwaysPushInheritance] + public List Actions = new(); +} diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index fb9415096f..2756345428 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -11,7 +11,6 @@ using Content.Shared.Rejuvenate; using Content.Shared.Whitelist; using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Timing; @@ -45,6 +44,8 @@ public override void Initialize() SubscribeLocalEvent(OnActionShutdown); SubscribeLocalEvent(OnActionShutdown); + SubscribeLocalEvent(OnActionCompChange); + SubscribeLocalEvent(OnRelayActionCompChange); SubscribeLocalEvent(OnDidEquip); SubscribeLocalEvent(OnHandEquipped); SubscribeLocalEvent(OnDidUnequip); @@ -490,12 +491,6 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg break; } - if (performEvent != null) - { - performEvent.Performer = user; - performEvent.Action = actionEnt; - } - // All checks passed. Perform the action! PerformAction(user, component, actionEnt, action, performEvent, curTime); } @@ -641,6 +636,8 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti // This here is required because of client-side prediction (RaisePredictiveEvent results in event re-use). actionEvent.Handled = false; var target = performer; + actionEvent.Performer = performer; + actionEvent.Action = (actionId, action); if (!action.RaiseOnUser && action.Container != null && !HasComp(action.Container)) target = action.Container.Value; @@ -653,10 +650,14 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti return; // no interaction occurred. // play sound, reduce charges, start cooldown, and mark as dirty (if required). + if (actionEvent?.Toggle == true) + { + action.Toggled = !action.Toggled; + } - _audio.PlayPredicted(action.Sound, performer,predicted ? performer : null); + _audio.PlayPredicted(action.Sound, performer, predicted ? performer : null); - var dirty = toggledBefore == action.Toggled; + var dirty = toggledBefore != action.Toggled; if (action.Charges != null) { @@ -673,10 +674,11 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti action.Cooldown = (curTime, curTime + action.UseDelay.Value); } - Dirty(actionId, action); - - if (dirty && component != null) - Dirty(performer, component); + if (dirty) + { + Dirty(actionId, action); + UpdateAction(actionId, action); + } var ev = new ActionPerformedEvent(performer); RaiseLocalEvent(actionId, ref ev); @@ -975,6 +977,47 @@ public bool ValidAction(BaseActionComponent action, bool canReach = true) #endregion + private void OnRelayActionCompChange(Entity ent, ref RelayedActionComponentChangeEvent args) + { + if (args.Handled) + return; + + var ev = new AttemptRelayActionComponentChangeEvent(); + RaiseLocalEvent(ent.Owner, ref ev); + var target = ev.Target ?? ent.Owner; + + args.Handled = true; + args.Toggle = true; + + if (!args.Action.Comp.Toggled) + { + EntityManager.AddComponents(target, args.Components); + } + else + { + EntityManager.RemoveComponents(target, args.Components); + } + } + + private void OnActionCompChange(Entity ent, ref ActionComponentChangeEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + args.Toggle = true; + var target = ent.Owner; + + if (!args.Action.Comp.Toggled) + { + EntityManager.AddComponents(target, args.Components); + } + else + { + EntityManager.RemoveComponents(target, args.Components); + } + } + #region EquipHandlers private void OnDidEquip(EntityUid uid, ActionsComponent component, DidEquipEvent args) { diff --git a/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs b/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs index e40099dc72..ce3f00094a 100644 --- a/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs +++ b/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs @@ -37,7 +37,7 @@ public interface IAtmosDeviceData [Serializable, NetSerializable] public sealed class AirAlarmUIState : BoundUserInterfaceState { - public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, Dictionary deviceData, AirAlarmMode mode, AirAlarmTab tab, AtmosAlarmType alarmType, bool autoMode) + public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, List<(string, IAtmosDeviceData)> deviceData, AirAlarmMode mode, AtmosAlarmType alarmType, bool autoMode) { Address = address; DeviceCount = deviceCount; @@ -45,7 +45,6 @@ public AirAlarmUIState(string address, int deviceCount, float pressureAverage, f TemperatureAverage = temperatureAverage; DeviceData = deviceData; Mode = mode; - Tab = tab; AlarmType = alarmType; AutoMode = autoMode; } @@ -57,27 +56,16 @@ public AirAlarmUIState(string address, int deviceCount, float pressureAverage, f /// /// Every single device data that can be seen from this /// air alarm. This includes vents, scrubbers, and sensors. - /// The device data you get, however, depends on the current - /// selected tab. + /// Each entry is a tuple of device address and the device + /// data. The same address may appear multiple times, if + /// that device provides multiple functions. /// - public Dictionary DeviceData { get; } + public List<(string, IAtmosDeviceData)> DeviceData { get; } public AirAlarmMode Mode { get; } - public AirAlarmTab Tab { get; } public AtmosAlarmType AlarmType { get; } public bool AutoMode { get; } } -[Serializable, NetSerializable] -public sealed class AirAlarmTabSetMessage : BoundUserInterfaceMessage -{ - public AirAlarmTabSetMessage(AirAlarmTab tab) - { - Tab = tab; - } - - public AirAlarmTab Tab { get; } -} - [Serializable, NetSerializable] public sealed class AirAlarmResyncAllDevicesMessage : BoundUserInterfaceMessage {} @@ -144,11 +132,3 @@ public AirAlarmUpdateAlarmThresholdMessage(string address, AtmosMonitorThreshold Gas = gas; } } - -public enum AirAlarmTab -{ - Vent, - Scrubber, - Sensors, - Settings -} diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index b8186e2b79..101c388a8b 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -90,6 +90,12 @@ public sealed partial class StrapComponent : Component /// [DataField] public float BuckleDoafterTime = 2f; + + /// + /// Whether InteractHand will buckle the user to the strap. + /// + [DataField] + public bool BuckleOnInteractHand = true; } public enum StrapPosition diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs index 381789f32d..7677e800fe 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs @@ -84,7 +84,7 @@ private void OnStrapInteractHand(EntityUid uid, StrapComponent component, Intera if (!TryComp(args.User, out BuckleComponent? buckle)) return; - if (buckle.BuckledTo == null) + if (buckle.BuckledTo == null && component.BuckleOnInteractHand) TryBuckle(args.User, args.User, uid, buckle, popup: true); else if (buckle.BuckledTo == uid) TryUnbuckle(args.User, args.User, buckle, popup: true); diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 2c65885670..4c49a8548e 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1379,24 +1379,12 @@ public static readonly CVarDef /// public static readonly CVarDef WhitelistEnabled = CVarDef.Create("whitelist.enabled", false, CVar.SERVERONLY); - - /// - /// The loc string to display as a disconnect reason when someone is not whitelisted. - /// - public static readonly CVarDef WhitelistReason = - CVarDef.Create("whitelist.reason", "whitelist-not-whitelisted", CVar.SERVERONLY); - - /// - /// If the playercount is below this number, the whitelist will not apply. - /// - public static readonly CVarDef WhitelistMinPlayers = - CVarDef.Create("whitelist.min_players", 0, CVar.SERVERONLY); - /// - /// If the playercount is above this number, the whitelist will not apply. + /// Specifies the whitelist prototypes to be used by the server. This should be a comma-separated list of prototypes. + /// If a whitelists conditions to be active fail (for example player count), the next whitelist will be used instead. If no whitelist is valid, the player will be allowed to connect. /// - public static readonly CVarDef WhitelistMaxPlayers = - CVarDef.Create("whitelist.max_players", int.MaxValue, CVar.SERVERONLY); + public static readonly CVarDef WhitelistPrototypeList = + CVarDef.Create("whitelist.prototype_list", "basicWhitelist", CVar.SERVERONLY); /* * VOTE diff --git a/Content.Shared/Cabinet/ItemCabinetComponent.cs b/Content.Shared/Cabinet/ItemCabinetComponent.cs index b1d7e4a263..f83f6a96ad 100644 --- a/Content.Shared/Cabinet/ItemCabinetComponent.cs +++ b/Content.Shared/Cabinet/ItemCabinetComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Containers.ItemSlots; using Robust.Shared.GameStates; using Robust.Shared.Serialization; diff --git a/Content.Shared/Cargo/Components/CashComponent.cs b/Content.Shared/Cargo/Components/CashComponent.cs index 10a47ff803..89af094e04 100644 --- a/Content.Shared/Cargo/Components/CashComponent.cs +++ b/Content.Shared/Cargo/Components/CashComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Cargo.Components; /// -/// Can be inserted into a to increase the station's bank account. +/// Can be inserted into a to increase the station's bank account. /// [RegisterComponent, NetworkedComponent] public sealed partial class CashComponent : Component diff --git a/Content.Shared/Chemistry/Components/Solution.cs b/Content.Shared/Chemistry/Components/Solution.cs index 35ab28f34a..fc25781005 100644 --- a/Content.Shared/Chemistry/Components/Solution.cs +++ b/Content.Shared/Chemistry/Components/Solution.cs @@ -6,6 +6,7 @@ using Robust.Shared.Utility; using System.Collections; using System.Linq; +using Content.Shared.Chemistry.Components.SolutionManager; namespace Content.Shared.Chemistry.Components { diff --git a/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs b/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs index cd4d0d6203..a5303ac121 100644 --- a/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs +++ b/Content.Shared/Clothing/Components/PilotedByClothingComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Clothing.EntitySystems; using Robust.Shared.GameStates; namespace Content.Shared.Clothing.Components; diff --git a/Content.Shared/Clothing/Components/ToggleClothingComponent.cs b/Content.Shared/Clothing/Components/ToggleClothingComponent.cs index c77aa03475..04bc3ed4e8 100644 --- a/Content.Shared/Clothing/Components/ToggleClothingComponent.cs +++ b/Content.Shared/Clothing/Components/ToggleClothingComponent.cs @@ -1,5 +1,7 @@ using Content.Shared.Actions; using Content.Shared.Clothing.EntitySystems; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Toggleable; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; diff --git a/Content.Shared/Containers/ContainerCompComponent.cs b/Content.Shared/Containers/ContainerCompComponent.cs new file mode 100644 index 0000000000..b1415e0d8b --- /dev/null +++ b/Content.Shared/Containers/ContainerCompComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Containers; + +/// +/// Applies container changes whenever an entity is inserted into the specified container on this entity. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ContainerCompComponent : Component +{ + [DataField(required: true)] + public EntProtoId Proto; + + [DataField(required: true)] + public string Container = string.Empty; +} diff --git a/Content.Shared/Containers/ContainerCompSystem.cs b/Content.Shared/Containers/ContainerCompSystem.cs new file mode 100644 index 0000000000..75908efea3 --- /dev/null +++ b/Content.Shared/Containers/ContainerCompSystem.cs @@ -0,0 +1,43 @@ +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Shared.Containers; + +/// +/// Applies / removes an entity prototype from a child entity when it's inserted into a container. +/// +public sealed class ContainerCompSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnConInsert); + SubscribeLocalEvent(OnConRemove); + } + + private void OnConRemove(Entity ent, ref EntRemovedFromContainerMessage args) + { + if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) + return; + + if (_proto.TryIndex(ent.Comp.Proto, out var entProto)) + { + EntityManager.RemoveComponents(args.Entity, entProto.Components); + } + } + + private void OnConInsert(Entity ent, ref EntInsertedIntoContainerMessage args) + { + if (args.Container.ID != ent.Comp.Container || _timing.ApplyingState) + return; + + if (_proto.TryIndex(ent.Comp.Proto, out var entProto)) + { + EntityManager.AddComponents(args.Entity, entProto.Components); + } + } +} diff --git a/Content.Shared/Containers/ContainerFillComponent.cs b/Content.Shared/Containers/ContainerFillComponent.cs index 8c63cbc66a..7ce5fa8850 100644 --- a/Content.Shared/Containers/ContainerFillComponent.cs +++ b/Content.Shared/Containers/ContainerFillComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Storage; +using Content.Shared.Storage.Components; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; using Robust.Shared.Serialization.Markdown.Mapping; diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsLockComponent.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsLockComponent.cs new file mode 100644 index 0000000000..0d8901028d --- /dev/null +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsLockComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Containers.ItemSlots; + +/// +/// Updates the relevant ItemSlots locks based on +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ItemSlotsLockComponent : Component +{ + [DataField(required: true)] + public List Slots = new(); +} diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs new file mode 100644 index 0000000000..ee5178df95 --- /dev/null +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.Lock.cs @@ -0,0 +1,36 @@ +using Content.Shared.Lock; + +namespace Content.Shared.Containers.ItemSlots; + +public sealed partial class ItemSlotsSystem +{ + private void InitializeLock() + { + SubscribeLocalEvent(OnLockMapInit); + SubscribeLocalEvent(OnLockToggled); + } + + private void OnLockMapInit(Entity ent, ref MapInitEvent args) + { + if (!TryComp(ent.Owner, out LockComponent? lockComp)) + return; + + UpdateLocks(ent, lockComp.Locked); + } + + private void OnLockToggled(Entity ent, ref LockToggledEvent args) + { + UpdateLocks(ent, args.Locked); + } + + private void UpdateLocks(Entity ent, bool value) + { + foreach (var slot in ent.Comp.Slots) + { + if (!TryGetSlot(ent.Owner, slot, out var itemSlot)) + continue; + + SetLock(ent.Owner, itemSlot, value); + } + } +} diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index 48f4f07cbe..f41fa2b22d 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -24,7 +24,7 @@ namespace Content.Shared.Containers.ItemSlots /// Note when using popups on entities with many slots with InsertOnInteract, EjectOnInteract or EjectOnUse: /// A single use will try to insert to/eject from every slot and generate a popup for each that fails. /// - public sealed class ItemSlotsSystem : EntitySystem + public sealed partial class ItemSlotsSystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; @@ -38,6 +38,8 @@ public override void Initialize() { base.Initialize(); + InitializeLock(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(Oninitialize); diff --git a/Content.Shared/Damage/Systems/DamageContactsSystem.cs b/Content.Shared/Damage/Systems/DamageContactsSystem.cs index b08ef77fed..3cc73a87c5 100644 --- a/Content.Shared/Damage/Systems/DamageContactsSystem.cs +++ b/Content.Shared/Damage/Systems/DamageContactsSystem.cs @@ -65,7 +65,7 @@ private void OnEntityEnter(EntityUid uid, DamageContactsComponent component, ref if (HasComp(otherUid)) return; - if (_whitelistSystem.IsWhitelistFail(component.IgnoreWhitelist, otherUid)) + if (_whitelistSystem.IsWhitelistPass(component.IgnoreWhitelist, otherUid)) return; var damagedByContact = EnsureComp(otherUid); diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs index 46249fdd0d..47edec135d 100644 --- a/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleComponent.cs @@ -19,6 +19,12 @@ public sealed partial class ItemToggleComponent : Component [DataField, AutoNetworkedField] public bool Activated = false; + /// + /// Can the entity be activated in the world. + /// + [DataField] + public bool OnActivate = true; + /// /// If this is set to false then the item can't be toggled by pressing Z. /// Use another system to do it then. @@ -52,12 +58,6 @@ public sealed partial class ItemToggleComponent : Component /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public SoundSpecifier? SoundFailToActivate; - - /// - /// Whether or not to toggle the entity's lights on or off. - /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] - public bool ToggleLight = true; } /// diff --git a/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs index 6b969d1d62..33b88dbaf8 100644 --- a/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs @@ -1,8 +1,10 @@ +using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Popups; using Content.Shared.Temperature; using Content.Shared.Toggleable; +using Content.Shared.Verbs; using Content.Shared.Wieldable; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; @@ -20,18 +22,23 @@ public sealed class ItemToggleSystem : EntitySystem [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedPointLightSystem _light = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + private EntityQuery _query; + public override void Initialize() { base.Initialize(); + _query = GetEntityQuery(); + SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(TurnOffOnUnwielded); SubscribeLocalEvent(TurnOnOnWielded); SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent>(OnActivateVerb); + SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnIsHotEvent); @@ -62,6 +69,32 @@ private void OnUseInHand(Entity ent, ref UseInHandEvent arg Toggle((ent, ent.Comp), args.User, predicted: ent.Comp.Predictable); } + private void OnActivateVerb(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + var user = args.User; + + args.Verbs.Add(new ActivationVerb() + { + Text = !ent.Comp.Activated ? Loc.GetString("item-toggle-activate") : Loc.GetString("item-toggle-deactivate"), + Act = () => + { + Toggle((ent.Owner, ent.Comp), user, predicted: ent.Comp.Predictable); + } + }); + } + + private void OnActivate(Entity ent, ref ActivateInWorldEvent args) + { + if (args.Handled || !ent.Comp.OnActivate) + return; + + args.Handled = true; + Toggle((ent.Owner, ent.Comp), args.User, predicted: ent.Comp.Predictable); + } + /// /// Used when an item is attempted to be toggled. /// Sets its state to the opposite of what it is. @@ -69,7 +102,7 @@ private void OnUseInHand(Entity ent, ref UseInHandEvent arg /// Same as public bool Toggle(Entity ent, EntityUid? user = null, bool predicted = true) { - if (!Resolve(ent, ref ent.Comp)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return false; return TrySetActive(ent, !ent.Comp.Activated, user, predicted); @@ -92,7 +125,7 @@ public bool TrySetActive(Entity ent, bool active, EntityUi /// public bool TryActivate(Entity ent, EntityUid? user = null, bool predicted = true) { - if (!Resolve(ent, ref ent.Comp)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return false; var uid = ent.Owner; @@ -135,7 +168,7 @@ public bool TryActivate(Entity ent, EntityUid? user = null /// public bool TryDeactivate(Entity ent, EntityUid? user = null, bool predicted = true) { - if (!Resolve(ent, ref ent.Comp)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return false; var uid = ent.Owner; @@ -199,16 +232,7 @@ private void UpdateVisuals(Entity ent) if (TryComp(ent, out AppearanceComponent? appearance)) { _appearance.SetData(ent, ToggleVisuals.Toggled, ent.Comp.Activated, appearance); - - if (ent.Comp.ToggleLight) - _appearance.SetData(ent, ToggleableLightVisuals.Enabled, ent.Comp.Activated, appearance); } - - if (!ent.Comp.ToggleLight) - return; - - if (_light.TryGetLight(ent, out var light)) - _light.SetEnabled(ent, ent.Comp.Activated, light); } /// @@ -230,7 +254,7 @@ private void TurnOnOnWielded(Entity ent, ref ItemWieldedEve public bool IsActivated(Entity ent) { - if (!Resolve(ent, ref ent.Comp, false)) + if (!_query.Resolve(ent, ref ent.Comp, false)) return true; // assume always activated if no component return ent.Comp.Activated; diff --git a/Content.Shared/Lathe/LatheComponent.cs b/Content.Shared/Lathe/LatheComponent.cs index 7924a0ec94..de4311e559 100644 --- a/Content.Shared/Lathe/LatheComponent.cs +++ b/Content.Shared/Lathe/LatheComponent.cs @@ -83,7 +83,7 @@ public sealed class LatheGetRecipesEvent : EntityEventArgs public bool getUnavailable; - public List> Recipes = new(); + public HashSet> Recipes = new(); public LatheGetRecipesEvent(EntityUid lathe, bool forced) { diff --git a/Content.Shared/Light/Components/ItemTogglePointLightComponent.cs b/Content.Shared/Light/Components/ItemTogglePointLightComponent.cs new file mode 100644 index 0000000000..6ac1bf236d --- /dev/null +++ b/Content.Shared/Light/Components/ItemTogglePointLightComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Light.Components; + +/// +/// Toggles point light on an entity whenever ItemToggle hits. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ItemTogglePointLightComponent : Component +{ + +} diff --git a/Content.Shared/Light/Components/SlimPoweredLightComponent.cs b/Content.Shared/Light/Components/SlimPoweredLightComponent.cs new file mode 100644 index 0000000000..bf6ae0e525 --- /dev/null +++ b/Content.Shared/Light/Components/SlimPoweredLightComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Light.Components; + +// All content light code is terrible and everything is baked-in. Power code got predicted before light code did. +/// +/// Handles turning a pointlight on / off based on power. Nothing else +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SlimPoweredLightComponent : Component +{ + /// + /// Used to make this as being lit. If unpowered then the light will still be off. + /// + [DataField, AutoNetworkedField] + public bool Enabled = true; +} diff --git a/Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs b/Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs new file mode 100644 index 0000000000..7030c538c1 --- /dev/null +++ b/Content.Shared/Light/EntitySystems/ItemTogglePointLightSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Toggleable; +using ItemTogglePointLightComponent = Content.Shared.Light.Components.ItemTogglePointLightComponent; + +namespace Content.Shared.Light.EntitySystems; + +/// +/// Handles ItemToggle for PointLight +/// +public sealed class ItemTogglePointLightSystem : EntitySystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedPointLightSystem _light = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnLightToggled); + } + + private void OnLightToggled(Entity ent, ref ItemToggledEvent args) + { + if (!_light.TryGetLight(ent.Owner, out var light)) + return; + + _appearance.SetData(ent, ToggleableLightVisuals.Enabled, args.Activated); + _light.SetEnabled(ent.Owner, args.Activated, comp: light); + } +} diff --git a/Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs b/Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs new file mode 100644 index 0000000000..6d984ed19a --- /dev/null +++ b/Content.Shared/Light/EntitySystems/SlimPoweredLightSystem.cs @@ -0,0 +1,67 @@ +using Content.Shared.Light.Components; +using Content.Shared.Power; +using Content.Shared.Power.Components; +using Content.Shared.Power.EntitySystems; + +namespace Content.Shared.Light.EntitySystems; + +public sealed class SlimPoweredLightSystem : EntitySystem +{ + [Dependency] private readonly SharedPowerReceiverSystem _receiver = default!; + [Dependency] private readonly SharedPointLightSystem _lights = default!; + + private bool _setting; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnLightAttempt); + SubscribeLocalEvent(OnLightPowerChanged); + } + + private void OnLightAttempt(Entity ent, ref AttemptPointLightToggleEvent args) + { + // Early-out to avoid having to trycomp stuff if we're the caller setting it + if (_setting) + return; + + if (args.Enabled && !_receiver.IsPowered(ent.Owner)) + args.Cancelled = true; + } + + private void OnLightPowerChanged(Entity ent, ref PowerChangedEvent args) + { + // Early out if we don't need to trycomp. + if (args.Powered) + { + if (!ent.Comp.Enabled) + return; + } + else + { + if (!ent.Comp.Enabled) + return; + } + + if (!_lights.TryGetLight(ent.Owner, out var light)) + return; + + var enabled = ent.Comp.Enabled && args.Powered; + _setting = true; + _lights.SetEnabled(ent.Owner, enabled, light); + _setting = false; + } + + public void SetEnabled(Entity entity, bool enabled) + { + if (!Resolve(entity.Owner, ref entity.Comp, false)) + return; + + if (entity.Comp.Enabled == enabled) + return; + + entity.Comp.Enabled = enabled; + Dirty(entity); + _lights.SetEnabled(entity.Owner, enabled); + } +} diff --git a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs index 42e55bea55..8754de5058 100644 --- a/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs +++ b/Content.Shared/Light/EntitySystems/UnpoweredFlashlightSystem.cs @@ -13,6 +13,8 @@ namespace Content.Shared.Light.EntitySystems; public sealed class UnpoweredFlashlightSystem : EntitySystem { + // TODO: Split some of this to ItemTogglePointLight + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; diff --git a/Content.Shared/Objectives/ObjectiveInfo.cs b/Content.Shared/Objectives/ObjectiveInfo.cs index 689fe17e6c..0b7e7a15f6 100644 --- a/Content.Shared/Objectives/ObjectiveInfo.cs +++ b/Content.Shared/Objectives/ObjectiveInfo.cs @@ -1,3 +1,4 @@ +using Content.Shared.Objectives.Components; using Robust.Shared.Serialization; using Robust.Shared.Utility; diff --git a/Content.Shared/Payload/Components/PayloadTriggerComponent.cs b/Content.Shared/Payload/Components/PayloadTriggerComponent.cs index 6d3df41ac9..b064e91198 100644 --- a/Content.Shared/Payload/Components/PayloadTriggerComponent.cs +++ b/Content.Shared/Payload/Components/PayloadTriggerComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Explosion.Components; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; diff --git a/Content.Shared/Power/Components/ItemSlotRequiresPowerComponent.cs b/Content.Shared/Power/Components/ItemSlotRequiresPowerComponent.cs new file mode 100644 index 0000000000..6e3b9eaca0 --- /dev/null +++ b/Content.Shared/Power/Components/ItemSlotRequiresPowerComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Power.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ItemSlotRequiresPowerComponent : Component +{ + +} diff --git a/Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs b/Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs new file mode 100644 index 0000000000..3df8b91a98 --- /dev/null +++ b/Content.Shared/Power/EntitySystems/ItemSlotRequiresPowerSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Power.Components; + +namespace Content.Shared.Power.EntitySystems; + +public sealed class ItemSlotRequiresPowerSystem : EntitySystem +{ + [Dependency] private readonly SharedPowerReceiverSystem _receiver = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInsertAttempt); + } + + private void OnInsertAttempt(Entity ent, ref ItemSlotInsertAttemptEvent args) + { + if (!_receiver.IsPowered(ent.Owner)) + { + args.Cancelled = true; + } + } +} diff --git a/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs b/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs index 37ac751889..2bc2af7831 100644 --- a/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs +++ b/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Shared.Examine; using Content.Shared.Power.Components; @@ -5,6 +6,16 @@ namespace Content.Shared.Power.EntitySystems; public abstract class SharedPowerReceiverSystem : EntitySystem { + public abstract bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component); + + public bool IsPowered(Entity entity) + { + if (!ResolveApc(entity.Owner, ref entity.Comp)) + return true; + + return entity.Comp.Powered; + } + protected string GetExamineText(bool powered) { return Loc.GetString("power-receiver-component-on-examine-main", diff --git a/Content.Shared/Power/PowerChangedEvent.cs b/Content.Shared/Power/PowerChangedEvent.cs new file mode 100644 index 0000000000..578a34142a --- /dev/null +++ b/Content.Shared/Power/PowerChangedEvent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Power; + +/// +/// Raised whenever an ApcPowerReceiver becomes powered / unpowered. +/// Does nothing on the client. +/// +[ByRefEvent] +public readonly record struct PowerChangedEvent(bool Powered, float ReceivingPower); \ No newline at end of file diff --git a/Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs b/Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs new file mode 100644 index 0000000000..20e2d4fe02 --- /dev/null +++ b/Content.Shared/PowerCell/Components/ToggleCellDrawComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.PowerCell.Components; + +/// +/// Integrate PowerCellDraw and ItemToggle. +/// Make toggling this item require power, and deactivates the item when power runs out. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ToggleCellDrawComponent : Component; diff --git a/Content.Shared/PowerCell/PowerCellDrawComponent.cs b/Content.Shared/PowerCell/PowerCellDrawComponent.cs index 94de7c7787..7af44420a7 100644 --- a/Content.Shared/PowerCell/PowerCellDrawComponent.cs +++ b/Content.Shared/PowerCell/PowerCellDrawComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Item.ItemToggle.Components; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; @@ -8,7 +9,6 @@ namespace Content.Shared.PowerCell; /// /// /// With ActivatableUI it will activate and deactivate when the ui is opened and closed, drawing power inbetween. -/// Requires to work. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] public sealed partial class PowerCellDrawComponent : Component @@ -30,9 +30,8 @@ public sealed partial class PowerCellDrawComponent : Component #endregion /// - /// Whether drawing is enabled, regardless of ItemToggle. + /// Whether drawing is enabled. /// Having no cell will still disable it. - /// Only use this if you really don't want it to use power for some time. /// [DataField, AutoNetworkedField] public bool Enabled = true; diff --git a/Content.Shared/PowerCell/SharedPowerCellSystem.cs b/Content.Shared/PowerCell/SharedPowerCellSystem.cs index 2b2a836633..f098f575c4 100644 --- a/Content.Shared/PowerCell/SharedPowerCellSystem.cs +++ b/Content.Shared/PowerCell/SharedPowerCellSystem.cs @@ -1,6 +1,4 @@ using Content.Shared.Containers.ItemSlots; -using Content.Shared.Item.ItemToggle; -using Content.Shared.Item.ItemToggle.Components; using Content.Shared.PowerCell.Components; using Content.Shared.Rejuvenate; using Robust.Shared.Containers; @@ -13,19 +11,22 @@ public abstract class SharedPowerCellSystem : EntitySystem [Dependency] protected readonly IGameTiming Timing = default!; [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] protected readonly ItemToggleSystem Toggle = default!; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnRejuvenate); SubscribeLocalEvent(OnCellInserted); SubscribeLocalEvent(OnCellRemoved); SubscribeLocalEvent(OnCellInsertAttempt); + } - SubscribeLocalEvent(OnActivateAttempt); - SubscribeLocalEvent(OnToggled); + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + QueueUpdate((ent, ent.Comp)); } private void OnRejuvenate(EntityUid uid, PowerCellSlotComponent component, RejuvenateEvent args) @@ -70,16 +71,13 @@ protected virtual void OnCellRemoved(EntityUid uid, PowerCellSlotComponent compo RaiseLocalEvent(uid, new PowerCellChangedEvent(true), false); } - private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) - { - if (!HasDrawCharge(ent, ent.Comp, user: args.User) - || !HasActivatableCharge(ent, ent.Comp, user: args.User)) - args.Cancelled = true; - } - - private void OnToggled(Entity ent, ref ItemToggledEvent args) + /// + /// Makes the draw logic update in the next tick. + /// + public void QueueUpdate(Entity ent) { - ent.Comp.NextUpdateTime = Timing.CurTime; + if (Resolve(ent, ref ent.Comp)) + ent.Comp.NextUpdateTime = Timing.CurTime; } public void SetDrawEnabled(Entity ent, bool enabled) diff --git a/Content.Shared/PowerCell/ToggleCellDrawSystem.cs b/Content.Shared/PowerCell/ToggleCellDrawSystem.cs new file mode 100644 index 0000000000..070937b8b4 --- /dev/null +++ b/Content.Shared/PowerCell/ToggleCellDrawSystem.cs @@ -0,0 +1,49 @@ +using Content.Shared.Item.ItemToggle; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.PowerCell.Components; + +namespace Content.Shared.PowerCell; + +/// +/// Handles events to integrate PowerCellDraw with ItemToggle +/// +public sealed class ToggleCellDrawSystem : EntitySystem +{ + [Dependency] private readonly ItemToggleSystem _toggle = default!; + [Dependency] private readonly SharedPowerCellSystem _cell = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnActivateAttempt); + SubscribeLocalEvent(OnToggled); + SubscribeLocalEvent(OnEmpty); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _cell.SetDrawEnabled(ent.Owner, _toggle.IsActivated(ent.Owner)); + } + + private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) + { + if (!_cell.HasDrawCharge(ent, user: args.User) + || !_cell.HasActivatableCharge(ent, user: args.User)) + args.Cancelled = true; + } + + private void OnToggled(Entity ent, ref ItemToggledEvent args) + { + var uid = ent.Owner; + var draw = Comp(uid); + _cell.QueueUpdate((uid, draw)); + _cell.SetDrawEnabled((uid, draw), args.Activated); + } + + private void OnEmpty(Entity ent, ref PowerCellSlotEmptyEvent args) + { + _toggle.TryDeactivate(ent.Owner); + } +} diff --git a/Content.Shared/Research/Components/BlueprintComponent.cs b/Content.Shared/Research/Components/BlueprintComponent.cs new file mode 100644 index 0000000000..71ed3da034 --- /dev/null +++ b/Content.Shared/Research/Components/BlueprintComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Research.Prototypes; +using Content.Shared.Research.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Research.Components; + +/// +/// This is used for an item that is inserted directly into a given lathe to provide it with a recipe. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(BlueprintSystem))] +public sealed partial class BlueprintComponent : Component +{ + /// + /// The recipes that this blueprint provides. + /// + [DataField(required: true)] + public HashSet> ProvidedRecipes = new(); +} diff --git a/Content.Shared/Research/Components/BlueprintReceiverComponent.cs b/Content.Shared/Research/Components/BlueprintReceiverComponent.cs new file mode 100644 index 0000000000..94c323eb86 --- /dev/null +++ b/Content.Shared/Research/Components/BlueprintReceiverComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Research.Systems; +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.Research.Components; + +/// +/// This is used for a lathe that can utilize s to gain more recipes. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(BlueprintSystem))] +public sealed partial class BlueprintReceiverComponent : Component +{ + [DataField] + public string ContainerId = "blueprint"; + + [DataField(required: true)] + public EntityWhitelist Whitelist = new(); +} diff --git a/Content.Shared/Research/Systems/BlueprintSystem.cs b/Content.Shared/Research/Systems/BlueprintSystem.cs new file mode 100644 index 0000000000..237ff70300 --- /dev/null +++ b/Content.Shared/Research/Systems/BlueprintSystem.cs @@ -0,0 +1,114 @@ +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Lathe; +using Content.Shared.Popups; +using Content.Shared.Research.Components; +using Content.Shared.Research.Prototypes; +using Content.Shared.Whitelist; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Research.Systems; + +public sealed class BlueprintSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnGetRecipes); + } + + private void OnStartup(Entity ent, ref ComponentStartup args) + { + _container.EnsureContainer(ent, ent.Comp.ContainerId); + } + + private void OnAfterInteract(Entity ent, ref AfterInteractUsingEvent args) + { + if (args.Handled || !args.CanReach || !TryComp(args.Used, out var blueprintComponent)) + return; + args.Handled = TryInsertBlueprint(ent, (args.Used, blueprintComponent), args.User); + } + + private void OnGetRecipes(Entity ent, ref LatheGetRecipesEvent args) + { + var recipes = GetBlueprintRecipes(ent); + foreach (var recipe in recipes) + { + args.Recipes.Add(recipe); + } + } + + public bool TryInsertBlueprint(Entity ent, Entity blueprint, EntityUid? user) + { + if (!CanInsertBlueprint(ent, blueprint, user)) + return false; + + if (user is not null) + { + var userId = Identity.Entity(user.Value, EntityManager); + var bpId = Identity.Entity(blueprint, EntityManager); + var machineId = Identity.Entity(ent, EntityManager); + var msg = Loc.GetString("blueprint-receiver-popup-insert", + ("user", userId), + ("blueprint", bpId), + ("receiver", machineId)); + _popup.PopupPredicted(msg, ent, user); + } + + _container.Insert(blueprint.Owner, _container.GetContainer(ent, ent.Comp.ContainerId)); + + var ev = new TechnologyDatabaseModifiedEvent(); + RaiseLocalEvent(ent, ref ev); + return true; + } + + public bool CanInsertBlueprint(Entity ent, Entity blueprint, EntityUid? user) + { + if (_entityWhitelist.IsWhitelistFail(ent.Comp.Whitelist, blueprint)) + { + return false; + } + + if (blueprint.Comp.ProvidedRecipes.Count == 0) + { + Log.Error($"Attempted to insert blueprint {ToPrettyString(blueprint)} with no recipes."); + return false; + } + + // Don't add new blueprints if there are no new recipes. + var currentRecipes = GetBlueprintRecipes(ent); + if (currentRecipes.Count != 0 && currentRecipes.IsSupersetOf(blueprint.Comp.ProvidedRecipes)) + { + _popup.PopupPredicted(Loc.GetString("blueprint-receiver-popup-recipe-exists"), ent, user); + return false; + } + + return _container.CanInsert(blueprint, _container.GetContainer(ent, ent.Comp.ContainerId)); + } + + public HashSet> GetBlueprintRecipes(Entity ent) + { + var contained = _container.GetContainer(ent, ent.Comp.ContainerId); + + var recipes = new HashSet>(); + foreach (var blueprint in contained.ContainedEntities) + { + if (!TryComp(blueprint, out var blueprintComponent)) + continue; + + foreach (var provided in blueprintComponent.ProvidedRecipes) + { + recipes.Add(provided); + } + } + + return recipes; + } +} diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs new file mode 100644 index 0000000000..a979a6ec50 --- /dev/null +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Sound.Components; + +/// +/// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent +{ +} diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index efc18abaa0..8733edf485 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Audio; using Content.Shared.Hands; -using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Maps; @@ -8,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Sound.Components; using Content.Shared.Throwing; +using Content.Shared.UserInterface; using Content.Shared.Whitelist; using JetBrains.Annotations; using Robust.Shared.Audio; @@ -48,12 +48,18 @@ public override void Initialize() SubscribeLocalEvent(OnEmitSoundOnPickup); SubscribeLocalEvent(OnEmitSoundOnDrop); SubscribeLocalEvent(OnEmitSoundOnInteractUsing); + SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(OnEmitSoundOnCollide); SubscribeLocalEvent(OnMobState); } + private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) + { + TryEmitSound(uid, component, args.User); + } + private void OnMobState(Entity entity, ref MobStateChangedEvent args) { // Disable this component rather than removing it because it can be brought back to life. diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.cs b/Content.Shared/Tools/Systems/SharedToolSystem.cs index 201eb19a88..86b91dcda4 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.cs @@ -33,6 +33,9 @@ public abstract partial class SharedToolSystem : EntitySystem [Dependency] private readonly TurfSystem _turfs = default!; [Dependency] protected readonly SharedSolutionContainerSystem SolutionContainer = default!; + public const string CutQuality = "Cutting"; + public const string PulseQuality = "Pulsing"; + public override void Initialize() { InitializeMultipleTool(); diff --git a/Content.Shared/Verbs/SharedVerbSystem.cs b/Content.Shared/Verbs/SharedVerbSystem.cs index 319f927c7b..db17599d87 100644 --- a/Content.Shared/Verbs/SharedVerbSystem.cs +++ b/Content.Shared/Verbs/SharedVerbSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; using Robust.Shared.Containers; +using Robust.Shared.Map; namespace Content.Shared.Verbs { @@ -173,4 +174,27 @@ public virtual void ExecuteVerb(Verb verb, EntityUid user, EntityUid target, boo _interactionSystem.DoContactInteraction(user, target); } } + + // Does nothing on server + /// + /// Raised directed when trying to get the entity menu visibility for entities. + /// + [ByRefEvent] + public record struct MenuVisibilityEvent + { + public MapCoordinates TargetPos; + public MenuVisibility Visibility; + } + + // Does nothing on server + [Flags] + public enum MenuVisibility + { + // What entities can a user see on the entity menu? + Default = 0, // They can only see entities in FoV. + NoFov = 1 << 0, // They ignore FoV restrictions + InContainer = 1 << 1, // They can see through containers. + Invisible = 1 << 2, // They can see entities without sprites and the "HideContextMenu" tag is ignored. + All = NoFov | InContainer | Invisible + } } diff --git a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs index 5bf7480202..3add18365a 100644 --- a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs +++ b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Weapons.Melee.Components; +using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; diff --git a/Content.Shared/Weather/SharedWeatherSystem.cs b/Content.Shared/Weather/SharedWeatherSystem.cs index 6141902124..acd4305538 100644 --- a/Content.Shared/Weather/SharedWeatherSystem.cs +++ b/Content.Shared/Weather/SharedWeatherSystem.cs @@ -156,11 +156,14 @@ public void SetWeather(MapId mapId, WeatherPrototype? proto, TimeSpan? endTime) foreach (var (eProto, weather) in weatherComp.Weather) { + // if we turn off the weather, we don't want endTime = null + if (proto == null) + endTime ??= Timing.CurTime + WeatherComponent.ShutdownTime; + // Reset cooldown if it's an existing one. - if (proto == null || eProto == proto.ID) + if (proto is not null && eProto == proto.ID) { weather.EndTime = endTime; - if (weather.State == WeatherState.Ending) weather.State = WeatherState.Running; diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index da87e520e9..bd42b8ee7b 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -491,5 +491,13 @@ Entries: id: 61 time: '2024-08-23T00:11:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31045 +- author: PursuitInAshes + changes: + - message: The resave command is no longer usable with the mapping permission, instead + it requires host permissions. + type: Tweak + id: 62 + time: '2024-08-25T01:55:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31397 Name: Admin Order: 1 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e24e23a86d..7df53e2a84 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,195 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Fixed singularity decay being underpowered, leading to continuous growth - on higher PA strengths. - type: Fix - id: 6701 - time: '2024-06-08T14:36:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28743 -- author: metalgearsloth - changes: - - message: Fix sometimes spawning without bags. - type: Fix - id: 6702 - time: '2024-06-08T18:48:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28734 -- author: UBlueberry - changes: - - message: The guidebook has been heavily reorganized to improve convenience for - all types of users. - type: Tweak - id: 6703 - time: '2024-06-08T23:00:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28603 -- author: Psychpsyo - changes: - - message: New lobby background art! - type: Add - id: 6704 - time: '2024-06-08T23:29:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28724 -- author: AJCM-git - changes: - - message: When people with less than an hour playing join the game, the guidebook - is automatically opened for them. - type: Tweak - id: 6705 - time: '2024-06-09T16:26:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28774 -- author: Aeshus - changes: - - message: Salvage has a comprehensive guide. - type: Add - - message: Cargo's guide is up-to-date. - type: Tweak - id: 6706 - time: '2024-06-09T18:28:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28775 -- author: Zonespace27 - changes: - - message: Fixed a typo under the "Cargonia" header in the glossary. - type: Fix - id: 6707 - time: '2024-06-10T13:19:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28818 -- author: EmoGarbage404 - changes: - - message: Fixed drinks page not having a search bar. - type: Fix - id: 6708 - time: '2024-06-10T13:20:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28815 -- author: Aquif - changes: - - message: It is now possible to save after chaining you job unavailable preference. - type: Fix - id: 6709 - time: '2024-06-11T02:48:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28839 -- author: lzk228 - changes: - - message: Added reward info in cargo bounty label. - type: Tweak - id: 6710 - time: '2024-06-11T09:33:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28853 -- author: Tayrtahn - changes: - - message: Announcements for the location of the evac shuttle, the armed nuke, and - more will no longer send you in the opposite direction. - type: Fix - id: 6711 - time: '2024-06-11T22:18:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28869 -- author: Boaz1111 - changes: - - message: Refactors Cluster's Armoury - type: Tweak - id: 6712 - time: '2024-06-12T01:07:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28854 -- author: Deserty0 - changes: - - message: '"no materials loaded" messege now appears in lathes!' - type: Fix - id: 6713 - time: '2024-06-12T10:32:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28885 -- author: robertGN - changes: - - message: Syndicate communications consoles can no longer recall the emergency - shuttle. - type: Fix - id: 6714 - time: '2024-06-12T13:32:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28803 -- author: deltanedas - changes: - - message: Fixed opening the PDA UI sometimes breaking. - type: Fix - id: 6715 - time: '2024-06-12T18:10:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28896 -- author: notafet - changes: - - message: The singularity is now safe to operate up to PA level 3. - type: Fix - id: 6716 - time: '2024-06-12T22:56:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28906 -- author: stalengd - changes: - - message: Players can now correctly toggle internals on pets. - type: Fix - id: 6717 - time: '2024-06-13T02:17:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28904 -- author: Cojoke-dot - changes: - - message: Tranquilizer Shotguns shells now have a unique sprite - type: Tweak - - message: You now print boxes of Tranquilizer Boxes rather than a single shell - type: Tweak - id: 6718 - time: '2024-06-13T02:17:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28903 -- author: Plykiya - changes: - - message: Gauze continues to heal even when you stop someone's bleeding. - type: Fix - id: 6719 - time: '2024-06-13T02:19:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28844 -- author: Doomsdrayk - changes: - - message: Fixed guns appearing to cycle their bolt when wielded. - type: Fix - id: 6720 - time: '2024-06-13T06:30:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28756 -- author: Doomsdrayk - changes: - - message: The Drozd and C-20r do not unwield on use again. - type: Fix - id: 6721 - time: '2024-06-13T18:10:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28728 -- author: EmoGarbage404 - changes: - - message: Fixed constructed items rotating strangely. - type: Fix - id: 6722 - time: '2024-06-13T18:21:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28427 -- author: lzk228 - changes: - - message: Added order quantity to cargo invoice label. - type: Tweak - id: 6723 - time: '2024-06-13T18:36:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28821 -- author: osjarw - changes: - - message: Added context menu action for scanning artifacts. - type: Add - id: 6724 - time: '2024-06-14T02:01:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26873 -- author: Cojoke-dot - changes: - - message: Lasers now pass over things unless clicked like projectiles - type: Tweak - id: 6725 - time: '2024-06-14T02:04:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28768 -- author: Boaz1111 - changes: - - message: The PKA can now mine rocks in one hit again. - type: Tweak - id: 6726 - time: '2024-06-14T02:40:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27476 - author: KyuPolaris changes: - message: Chickens now make a clucking sound when they speak. @@ -3870,3 +3679,189 @@ id: 7200 time: '2024-08-24T23:30:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31405 +- author: PJB3005 + changes: + - message: Fix the ChemVend jug names again + type: Fix + id: 7201 + time: '2024-08-25T02:02:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31398 +- author: metalgearsloth + changes: + - message: Fix grids sometimes overlapping on roundstart. + type: Fix + id: 7202 + time: '2024-08-25T04:48:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31413 +- author: themias + changes: + - message: Thin firelocks now respect rotation when built + type: Fix + id: 7203 + time: '2024-08-25T04:57:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31371 +- author: IProduceWidgets + changes: + - message: Oasis Voxbox is no longer a pressure bomb. (Thanks Delta) + type: Fix + id: 7204 + time: '2024-08-25T05:42:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31415 +- author: PopGamer46 + changes: + - message: Security cadets now spawn with jackboots instead of combat boots + type: Tweak + id: 7205 + time: '2024-08-25T06:58:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31419 +- author: ArtisticRoomba + changes: + - message: Added the greytide stamp. This stamp can be rarely found in maints lockers. + type: Add + id: 7206 + time: '2024-08-25T10:35:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30189 +- author: EmoGarbage404 + changes: + - message: Added blueprints! These can be found by salvagers and inserted into an + autolathe in order to unlock new recipes. + type: Add + id: 7207 + time: '2024-08-25T12:06:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31138 +- author: deltanedas + changes: + - message: Fixed borgs losing access when they run out of power. + type: Fix + id: 7208 + time: '2024-08-25T12:17:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31392 +- author: metalgearsloth + changes: + - message: Actions now activate on key-down, not key-up. + type: Tweak + id: 7209 + time: '2024-08-25T12:36:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31191 +- author: PJB3005 + changes: + - message: PACMAN and SUPERPACMAN now ramp their power output significantly faster. + type: Tweak + id: 7210 + time: '2024-08-25T16:11:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31403 +- author: Blackern5000 + changes: + - message: Space scanning technology is now T1 industrial, this includes cyborg + GPS modules and handheld mass scanners. + type: Tweak + id: 7211 + time: '2024-08-25T16:47:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31321 +- author: ShadowCommander + changes: + - message: Rollerbeds no longer buckle yourself when clicked on. + type: Remove + id: 7212 + time: '2024-08-25T17:09:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30001 +- author: lzk228 + changes: + - message: Cotton dough added to the game! Check the guidebook for new recipes. + type: Add + id: 7213 + time: '2024-08-26T02:46:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30668 +- author: Moomoobeef + changes: + - message: Silicons like medbots, janibots, and honkbots now make sound when speaking. + type: Fix + id: 7214 + time: '2024-08-26T09:09:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31471 +- author: Winkarst-cpu + changes: + - message: The color of the science radio channel was changed. + type: Tweak + id: 7215 + time: '2024-08-26T12:02:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31319 +- author: slarticodefast + changes: + - message: Fixed energy sword visuals. + type: Fix + id: 7216 + time: '2024-08-26T13:00:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31478 +- author: CuteBoi + changes: + - message: Replaced small fans on most shuttles with directional fans. + type: Fix + id: 7217 + time: '2024-08-26T22:24:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31495 +- author: 12rabbits + changes: + - message: The guidebook now remembers where you left off when re-opened. + type: Tweak + id: 7218 + time: '2024-08-26T23:06:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31375 +- author: Dimastra + changes: + - message: Fixed meat kudzu not dealing damage. + type: Fix + id: 7219 + time: '2024-08-27T00:30:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31494 +- author: JIPDawg + changes: + - message: Gas miners are now indestructible, can be pulled and only anchored. + type: Tweak + id: 7220 + time: '2024-08-27T00:48:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31370 +- author: SaphireLattice + changes: + - message: Safety Moth poster graphics for hardhats and pipes are no longer swapped + around + type: Fix + id: 7221 + time: '2024-08-27T11:32:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31507 +- author: Winkarst-cpu + changes: + - message: Explosive ammunition is now marked as a contraband. + type: Fix + id: 7222 + time: '2024-08-27T11:37:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31508 +- author: Winkarst-cpu + changes: + - message: Now the syndicate raid helmet is marked as a Syndicate contraband. + type: Fix + id: 7223 + time: '2024-08-27T13:01:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31512 +- author: Winkarst-cpu + changes: + - message: The explorer gas mask is now restricted to the cargo. + type: Fix + id: 7224 + time: '2024-08-27T13:19:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31514 +- author: Aeshus + changes: + - message: The Health Analyzer now displays the patient's picture, species, and + current status. + type: Add + id: 7225 + time: '2024-08-27T14:57:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30834 +- author: Aeshus + changes: + - message: Cryosleep no longer gives arrival shuttle directions. + type: Fix + id: 7226 + time: '2024-08-27T15:02:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30888 diff --git a/Resources/ConfigPresets/WizardsDen/salamander.toml b/Resources/ConfigPresets/WizardsDen/salamander.toml index 632dcae716..43ba4d8d04 100644 --- a/Resources/ConfigPresets/WizardsDen/salamander.toml +++ b/Resources/ConfigPresets/WizardsDen/salamander.toml @@ -1,7 +1,7 @@ # Configuration preset used on Wizard's Den Salamander [game] -desc = "Official English Space Station 14 servers. Medium roleplay ruleset. You must be whitelisted through Discord to play if there are more than 15 online players." +desc = "Official English Space Station 14 servers. Medium roleplay ruleset. you must be whitelisted by playing on other Wizard's Den servers if there are more than 15 online players." hostname = "[EN] Wizard's Den Salamander [US West RP]" soft_max_players = 130 @@ -10,8 +10,7 @@ rules_file = "MRPRuleset" [whitelist] enabled = true -reason = "whitelist-not-whitelisted-rp" -min_players = 15 +prototype_list = "salamanderMrpWhitelist" [shuttle] emergency_early_launch_allowed = true diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index cb735f4f67..4a6fe75e49 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, Aeshus, Aexxie, Afrokada, Agoichi, Ahion, Aidenkrz, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUm418, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BellwetherLogic, BGare, bhenrich, BingoJohnson-zz, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, BombasterDS, brainfood1183, Brandon-Huu, Bright0, brndd, BYONDFuckery, c4llv07e, CaasGit, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, chavonadelal, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, dffdff2423, diraven, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doomsdrayk, 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, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, Ian321, icekot8, IgorAnt028, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JIPDawg, JoeHammad1844, joelsgp, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, K-Dynamic, KaiShibaa, kalane15, kalanosh, Keer-Sar, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, laok233, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, marboww, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, MerrytheManokit, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, MureixloI, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, Spessmann, SphiraI, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem +0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aeshus, Aexxie, Afrokada, Agoichi, Ahion, Aidenkrz, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUm418, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, ArkiveDev, Arteben, AruMoon, as334, asperger-sind, aspiringLich, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, bhenrich, Bixkitts, Blackern5000, Blazeror, blueDev2, Boaz1111, BobdaBiscuit, BombasterDS, brainfood1183, Brandon-Huu, Bright0, brndd, c4llv07e, CaasGit, CaptainSqrBeard, Carbonhell, CatTheSystem, Centronias, chairbender, Charlese2, chavonadelal, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, Ciac32, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, dffdff2423, DieselMohawk, diraven, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doomsdrayk, 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, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, iacore, IamVelcroboy, Ian321, icekot8, IgorAnt028, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, Interrobang01, IProduceWidgets, ItsMeThom, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JIPDawg, JoeHammad1844, joelsgp, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTrotter, K-Dynamic, KaiShibaa, kalane15, kalanosh, Keer-Sar, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, laok233, lapatison, LetterN, Level10Cybermancer, lever1209, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, MACMAN2003, Macoron, Magicalus, MagnusCrowe, ManelNavola, Mangohydra, marboww, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, MerrytheManokit, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, MureixloI, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, nuke-haus, NULL882, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, RamZ, Rane, ravage123321, rbertoche, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, RumiTiger, Saakra, SaphireLattice, Sarahon, ScalyChimp, scrato, Scribbles0, Serkket, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, Sirionaut, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, Spessmann, SphiraI, spoogemonster, ssdaniel24, stalengd, Stealthbomber16, StrawberryMoses, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, thetolbean, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, Tornado-Technology, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Unkn0wnGh0st333, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Voomra, Vordenburg, vulppine, wafehling, WarMechanic, waylon531, weaversam8, whateverusername0, Willhelm53, Winkarst-cpu, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, ZNixian, ZoldorfTheWizard, Zonespace27, Zumorica, Zymem diff --git a/Resources/Locale/en-US/access/ui/door-electronics-window.ftl b/Resources/Locale/en-US/access/ui/door-electronics-window.ftl new file mode 100644 index 0000000000..6a7b1c95c2 --- /dev/null +++ b/Resources/Locale/en-US/access/ui/door-electronics-window.ftl @@ -0,0 +1 @@ +door-electronics-configuration-title = Configure Access diff --git a/Resources/Locale/en-US/connection-messages.ftl b/Resources/Locale/en-US/connection-messages.ftl index 7b663d2286..190da3ebeb 100644 --- a/Resources/Locale/en-US/connection-messages.ftl +++ b/Resources/Locale/en-US/connection-messages.ftl @@ -1,16 +1,4 @@ -whitelist-not-whitelisted = You are not whitelisted. - -# proper handling for having a min/max or not -whitelist-playercount-invalid = {$min -> - [0] The whitelist for this server only applies below {$max} players. - *[other] The whitelist for this server only applies above {$min} {$max -> - [2147483647] -> players, so you may be able to join later. - *[other] -> players and below {$max} players, so you may be able to join later. - } -} -whitelist-not-whitelisted-rp = You are not whitelisted. To become whitelisted, visit our Discord (which can be found at https://spacestation14.io) and check the #rp-whitelist channel. - -cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. +cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. cmd-whitelistadd-help = Usage: whitelistadd cmd-whitelistadd-existing = {$username} is already on the whitelist! cmd-whitelistadd-added = {$username} added to the whitelist @@ -41,8 +29,30 @@ panic-bunker-account-denied-reason = This server is in panic bunker mode, often panic-bunker-account-reason-account = Your Space Station 14 account is too new. It must be older than {$minutes} minutes panic-bunker-account-reason-overall = Your overall playtime on the server must be greater than {$minutes} $minutes +whitelist-playtime = You do not have enough playtime to join this server. You need at least {$minutes} minutes of playtime to join this server. +whitelist-player-count = This server is currently not accepting players. Please try again later. +whitelist-notes = You currently have too many admin notes to join this server. You can check your notes by typing /adminremarks in chat. +whitelist-manual = You are not whitelisted on this server. +whitelist-blacklisted = You are blacklisted from this server. +whitelist-always-deny = You are not allowed to join this server. +whitelist-fail-prefix = Not whitelisted: {$msg} +whitelist-misconfigured = The server is misconfigured and is not accepting players. Please contact the server owner and try again later. + +cmd-blacklistadd-desc = Adds the player with the given username to the server blacklist. +cmd-blacklistadd-help = Usage: blacklistadd +cmd-blacklistadd-existing = {$username} is already on the blacklist! +cmd-blacklistadd-added = {$username} added to the blacklist +cmd-blacklistadd-not-found = Unable to find '{$username}' +cmd-blacklistadd-arg-player = [player] + +cmd-blacklistremove-desc = Removes the player with the given username from the server blacklist. +cmd-blacklistremove-help = Usage: blacklistremove +cmd-blacklistremove-existing = {$username} is not on the blacklist! +cmd-blacklistremove-removed = {$username} removed from the blacklist +cmd-blacklistremove-not-found = Unable to find '{$username}' +cmd-blacklistremove-arg-player = [player] + baby-jail-account-denied = This server is a newbie server, intended for new players and those who want to help them. New connections by accounts that are too old or are not on a whitelist are not accepted. Check out some other servers and see everything Space Station 14 has to offer. Have fun! baby-jail-account-denied-reason = This server is a newbie server, intended for new players and those who want to help them. New connections by accounts that are too old or are not on a whitelist are not accepted. Check out some other servers and see everything Space Station 14 has to offer. Have fun! Reason: "{$reason}" baby-jail-account-reason-account = Your Space Station 14 account is too old. It must be younger than {$minutes} minutes baby-jail-account-reason-overall = Your overall playtime on the server must be younger than {$minutes} $minutes - diff --git a/Resources/Locale/en-US/items/toggle.ftl b/Resources/Locale/en-US/items/toggle.ftl new file mode 100644 index 0000000000..bcf5c161a6 --- /dev/null +++ b/Resources/Locale/en-US/items/toggle.ftl @@ -0,0 +1,2 @@ +item-toggle-activate = Activate +item-toggle-deactivate = Deactivate diff --git a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl index 121e50b923..fe1f92e914 100644 --- a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl +++ b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl @@ -1,18 +1,24 @@ health-analyzer-window-no-patient-data-text = No patient data. -health-analyzer-window-entity-unknown-text = unknown -health-analyzer-window-entity-health-text = {$entityName}'s health: -health-analyzer-window-entity-temperature-text = Temperature: {$temperature} -health-analyzer-window-entity-blood-level-text = Blood Level: {$bloodLevel} -health-analyzer-window-entity-bleeding-text = Patient is bleeding! -health-analyzer-window-entity-damage-total-text = Total Damage: {$amount} +health-analyzer-window-entity-unknown-text = Unknown +health-analyzer-window-entity-unknown-species-text = Non-Humanoid +health-analyzer-window-entity-unknown-value-text = N/A + +health-analyzer-window-entity-alive-text = Alive +health-analyzer-window-entity-dead-text = Dead +health-analyzer-window-entity-critical-text = Critical + +health-analyzer-window-entity-temperature-text = Temperature: +health-analyzer-window-entity-blood-level-text = Blood Level: +health-analyzer-window-entity-status-text = Status: +health-analyzer-window-entity-damage-total-text = Total Damage: + health-analyzer-window-damage-group-text = {$damageGroup}: {$amount} health-analyzer-window-damage-type-text = {$damageType}: {$amount} -health-analyzer-window-damage-type-duplicate-text = {$damageType}: {$amount} (duplicate) -health-analyzer-window-scan-mode-text = Scan Mode: -health-analyzer-window-scan-mode-active = ACTIVE -health-analyzer-window-scan-mode-inactive = INACTIVE +health-analyzer-window-entity-bleeding-text = Patient is bleeding! -health-analyzer-window-malnutrition = Severely malnourished +health-analyzer-window-scan-mode-text = Scan Mode: +health-analyzer-window-scan-mode-active = Active +health-analyzer-window-scan-mode-inactive = Inactive health-analyzer-popup-scan-target = {CAPITALIZE(THE($user))} is trying to scan you! diff --git a/Resources/Locale/en-US/paper/stamp-component.ftl b/Resources/Locale/en-US/paper/stamp-component.ftl index c7dc1a1bda..36be70d61f 100644 --- a/Resources/Locale/en-US/paper/stamp-component.ftl +++ b/Resources/Locale/en-US/paper/stamp-component.ftl @@ -17,3 +17,4 @@ stamp-component-stamped-name-warden = Warden stamp-component-stamped-name-trader = Trader stamp-component-stamped-name-syndicate = Syndicate stamp-component-stamped-name-ce = Chief Engineer +stamp-component-stamped-name-greytide = Greytide diff --git a/Resources/Locale/en-US/research/components/blueprint.ftl b/Resources/Locale/en-US/research/components/blueprint.ftl new file mode 100644 index 0000000000..34c3a3c80e --- /dev/null +++ b/Resources/Locale/en-US/research/components/blueprint.ftl @@ -0,0 +1,2 @@ +blueprint-receiver-popup-insert = { CAPITALIZE(THE($user)) } inserted { THE($blueprint) } into { THE($receiver) }. +blueprint-receiver-popup-recipe-exists = The same blueprint was already inserted! diff --git a/Resources/Locale/en-US/shuttles/emergency.ftl b/Resources/Locale/en-US/shuttles/emergency.ftl index b4dcaa3e67..be3f0962fa 100644 --- a/Resources/Locale/en-US/shuttles/emergency.ftl +++ b/Resources/Locale/en-US/shuttles/emergency.ftl @@ -33,3 +33,7 @@ emergency-shuttle-ui-authorize = AUTHORIZE emergency-shuttle-ui-repeal = REPEAL emergency-shuttle-ui-authorizations = Authorizations emergency-shuttle-ui-remaining = Remaining: {$remaining} + +# Map Misc. +map-name-centcomm = Central Command +map-name-terminal = Arrivals Terminal \ No newline at end of file diff --git a/Resources/Locale/en-US/weather/weather.ftl b/Resources/Locale/en-US/weather/weather.ftl index de5dbd8890..67e6eec35f 100644 --- a/Resources/Locale/en-US/weather/weather.ftl +++ b/Resources/Locale/en-US/weather/weather.ftl @@ -1,3 +1,7 @@ cmd-weather-desc = Sets the weather for the current map. cmd-weather-help = weather cmd-weather-hint = Weather prototype + +cmd-weather-error-no-arguments = Not enough arguments! +cmd-weather-error-unknown-proto = Unknown Weather prototype! +cmd-weather-error-wrong-time = Time is in the wrong format! \ No newline at end of file diff --git a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml index be1ca4ffde..6649a01ce8 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml @@ -117,7 +117,7 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 4 components: diff --git a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml index 28e4dab515..bd792c425b 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml @@ -267,7 +267,7 @@ entities: - type: Transform pos: 1.5,-3.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 6 components: diff --git a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml index 148577363f..413cdfb448 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml @@ -242,27 +242,31 @@ entities: - type: Transform pos: -0.5,6.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 8 components: - type: Transform - pos: -5.5,1.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 1 - uid: 9 components: - type: Transform - pos: -5.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 1 - uid: 10 components: - type: Transform - pos: 0.5,3.5 + rot: -1.5707963267948966 rad + pos: -5.5,1.5 parent: 1 - uid: 11 components: - type: Transform - pos: 0.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 1 - proto: BlastDoor entities: @@ -271,33 +275,21 @@ entities: - type: Transform pos: 0.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 135 - uid: 13 components: - type: Transform pos: -5.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 134 - uid: 14 components: - type: Transform pos: 0.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 136 - uid: 15 components: - type: Transform pos: -5.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 133 - proto: BoxMRE entities: - uid: 93 @@ -650,108 +642,72 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 151 - uid: 82 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 151 - uid: 83 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 151 - uid: 84 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 149 - uid: 85 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 149 - uid: 86 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 149 - uid: 87 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 150 - uid: 88 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 152 - uid: 89 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 152 - uid: 90 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 152 - uid: 91 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 150 - uid: 92 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 150 - proto: CrateFilledSpawner entities: - uid: 95 diff --git a/Resources/Maps/Shuttles/ShuttleEvent/striker.yml b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml index 88b113d7fd..ce518370f8 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/striker.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml @@ -198,8 +198,6 @@ entities: - type: Transform pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: AirlockExternalShuttleSyndicateLocked entities: - uid: 142 @@ -232,11 +230,12 @@ entities: currentReceiving: 15106.935 currentSupply: 15107 supplyRampPosition: 0.064453125 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 6 components: - type: Transform + rot: 1.5707963267948966 rad pos: -3.5,-1.5 parent: 325 - proto: Bed @@ -267,9 +266,6 @@ entities: occludes: True ents: - 331 - - type: DeviceLinkSink - links: - - 205 - uid: 191 components: - type: Transform @@ -282,9 +278,6 @@ entities: occludes: True ents: - 332 - - type: DeviceLinkSink - links: - - 205 - uid: 192 components: - type: Transform @@ -297,9 +290,6 @@ entities: occludes: True ents: - 333 - - type: DeviceLinkSink - links: - - 205 - uid: 193 components: - type: Transform @@ -312,9 +302,6 @@ entities: occludes: True ents: - 334 - - type: DeviceLinkSink - links: - - 205 - uid: 196 components: - type: Transform @@ -327,9 +314,6 @@ entities: occludes: True ents: - 337 - - type: DeviceLinkSink - links: - - 205 - uid: 198 components: - type: Transform @@ -342,9 +326,6 @@ entities: occludes: True ents: - 339 - - type: DeviceLinkSink - links: - - 205 - uid: 199 components: - type: Transform @@ -357,9 +338,6 @@ entities: occludes: True ents: - 340 - - type: DeviceLinkSink - links: - - 205 - uid: 200 components: - type: Transform @@ -372,9 +350,6 @@ entities: occludes: True ents: - 341 - - type: DeviceLinkSink - links: - - 205 - uid: 201 components: - type: Transform @@ -387,9 +362,6 @@ entities: occludes: True ents: - 342 - - type: DeviceLinkSink - links: - - 205 - uid: 202 components: - type: Transform @@ -402,9 +374,6 @@ entities: occludes: True ents: - 343 - - type: DeviceLinkSink - links: - - 205 - proto: BoxMRE entities: - uid: 320 @@ -825,6 +794,10 @@ entities: occludes: True ents: - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CyberPen entities: - uid: 77 @@ -1041,8 +1014,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: GasVentPump entities: - uid: 218 @@ -1054,8 +1025,6 @@ entities: address: Vnt-5f41a0ae transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 219 components: - type: Transform @@ -1066,8 +1035,6 @@ entities: address: Vnt-129c27d2 transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 220 components: - type: Transform @@ -1078,8 +1045,6 @@ entities: address: Vnt-11c4609d transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 221 components: - type: Transform @@ -1090,8 +1055,6 @@ entities: address: Vnt-6859729f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 222 components: - type: Transform @@ -1102,8 +1065,6 @@ entities: address: Vnt-19d24c7f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - proto: GeneratorBasic15kW entities: - uid: 41 @@ -1457,6 +1418,13 @@ entities: - type: Transform pos: 1.561105,-2.5567772 parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 - proto: PinpointerNuclear entities: - uid: 162 @@ -2379,11 +2347,4 @@ entities: occludes: True ents: - 346 -- proto: YellowOxygenTankFilled - entities: - - uid: 167 - components: - - type: Transform - pos: 1.60798,-0.3062118 - parent: 325 ... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml index d90fadba23..04eae18342 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml @@ -5,37 +5,49 @@ tilemap: 0: Space 29: FloorDark 84: FloorShuttleRed - 101: FloorSteelOffset 104: FloorTechMaint + 105: FloorTechMaint2 + 118: FloorWood 120: Lattice 121: Plating entities: - proto: "" entities: - - uid: 1 + - uid: 6 + components: + - type: MetaData + name: Map Entity + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - uid: 325 components: - type: MetaData - desc: Evacuation pod - name: Evacuation pod - type: Transform - parent: invalid + pos: 0.5638949,0.47865233 + parent: 6 - type: MapGrid chunks: -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAZQAAAAAA - version: 6 - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAZQAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAaQAAAAAAHQAAAAABHQAAAAABHQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAACHQAAAAAB version: 6 0,-1: ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAABeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAABHQAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAADHQAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,0: ind: 0,0 - tiles: ZQAAAAAAZQAAAAAAZQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: VAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 - type: Broadphase - type: Physics @@ -47,9 +59,7 @@ entities: - type: Fixtures fixtures: {} - type: OccluderTree - - type: SpreaderGrid - type: Shuttle - - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg @@ -58,104 +68,119 @@ entities: version: 2 nodes: - node: - color: '#A91409FF' - id: StandClearGreyscale + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 11: 1,-1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 5: -3,-1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 4: 1,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSw + decals: + 3: -3,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 0: -1,-3 + 1: -2,-3 + 2: 0,-3 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerNe + decals: + 13: 1,-1 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerNw + decals: + 12: -3,-1 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerSe + decals: + 9: 1,-3 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerSw decals: - 18: 0,-1 + 10: -3,-3 - node: - color: '#A91409FF' - id: WarnCornerSmallGreyscaleNE + color: '#7F1C1FFF' + id: BrickTileWhiteLineS decals: - 15: -2,0 + 6: -2,-3 + 7: -1,-3 + 8: 0,-3 - node: - color: '#A91409FF' - id: WarnCornerSmallGreyscaleNW + color: '#FFFFFFFF' + id: Delivery decals: - 14: 2,0 + 23: 2,-2 + 24: -4,-2 - node: - color: '#A91409FF' - id: WarnEndGreyscaleN + color: '#FFFFFFFF' + id: WarnLineE decals: - 9: -2,1 - 10: 2,1 + 14: 1,-2 - node: - color: '#A91409FF' - id: WarnLineGreyscaleE + color: '#FFFFFFFF' + id: WarnLineS decals: - 0: 2,0 - 8: 2,-1 - 17: 5,0 + 16: -3,-2 - node: - color: '#A91409FF' - id: WarnLineGreyscaleN + color: '#FFFFFFFF' + id: WarnLineW decals: - 11: -1,0 - 12: 0,0 - 13: 1,0 + 15: -1,-1 - node: - color: '#A91409FF' - id: WarnLineGreyscaleS + color: '#FFFFFFFF' + id: WoodTrimThinLineN decals: - 1: 1,-1 - 2: 0,-1 - 3: -1,-1 - 4: -2,-1 - 5: 2,-1 + 17: -1,-5 + 18: 0,-5 + 19: -2,-5 - node: - color: '#A91409FF' - id: WarnLineGreyscaleW + color: '#FFFFFFFF' + id: WoodTrimThinLineS decals: - 6: -2,-1 - 7: -2,0 - 16: -5,0 + 20: -2,-6 + 21: -1,-6 + 22: 0,-6 - type: GridAtmosphere version: 2 data: tiles: - -2,-1: - 0: 18432 - -2,0: - 1: 12 - 0: 64 -1,-1: - 0: 601 - 1: 51200 - -1,0: - 1: 2255 - 0: 16896 + 0: 65535 0,-1: - 0: 2115 - 1: 29440 - -2,1: + 0: 65535 + -2,-1: + 0: 52424 + -1,-3: + 0: 65280 + -1,-2: + 0: 65535 + 0,-3: + 0: 30464 + 0,-2: + 0: 30583 + -2,0: 0: 8 - -1,1: - 0: 4096 + -1,0: + 0: 3839 0,0: - 1: 895 - 0: 18432 - 1,-1: - 0: 16913 - 1,0: - 1: 7 - 0: 64 - 1,1: - 0: 4098 + 0: 895 uniqueMixes: - - volume: 2500 - immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 temperature: 293.15 moles: @@ -173,1016 +198,2165 @@ entities: - 0 chunkSize: 4 - type: GasTileOverlay - - type: NavMap - type: RadiationGridResistance -- proto: AirlockShuttleSyndicate + - type: GravityShake + shakeTimes: 10 + - type: SpreaderGrid + - type: GridPathfinding +- proto: AirCanister entities: - - uid: 2 + - uid: 91 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,0.5 - parent: 1 - - uid: 3 + pos: -0.5,-8.5 + parent: 325 +- proto: AirlockExternalShuttleSyndicateLocked + entities: + - uid: 142 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,0.5 - parent: 1 -- proto: AirlockSyndicate + pos: -4.5,-1.5 + parent: 325 +- proto: AirlockSyndicateLocked entities: - - uid: 4 + - uid: 20 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 5 + pos: -0.5,-3.5 + parent: 325 + - uid: 88 components: - type: Transform - pos: -2.5,0.5 - parent: 1 + pos: -0.5,-6.5 + parent: 325 - proto: APCBasic entities: - - uid: 6 + - uid: 107 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,1.5 - parent: 1 -- proto: AtmosDeviceFanTiny + pos: 0.5,-6.5 + parent: 325 + - type: PowerNetworkBattery + loadingNetworkDemand: 15107 + currentReceiving: 15106.935 + currentSupply: 15107 + supplyRampPosition: 0.064453125 +- proto: AtmosDeviceFanDirectional entities: - - uid: 7 + - uid: 168 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,0.5 - parent: 1 - - uid: 8 + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 325 +- proto: Bed + entities: + - uid: 76 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,0.5 - parent: 1 -- proto: BannerSyndicate + pos: 0.5,-5.5 + parent: 325 +- proto: BedsheetSyndie entities: - - uid: 9 + - uid: 164 components: - type: Transform - pos: 1.5,1.5 - parent: 1 -- proto: CableApcExtension + pos: 0.5,-5.5 + parent: 325 +- proto: BlastDoorOpen entities: - - uid: 10 + - uid: 190 components: - type: Transform - pos: -2.5,1.5 - parent: 1 - - uid: 11 + pos: 1.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 331 + - uid: 191 components: - type: Transform - pos: -2.5,0.5 - parent: 1 - - uid: 12 + pos: 1.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 332 + - uid: 192 components: - type: Transform - pos: -3.5,0.5 - parent: 1 - - uid: 13 + pos: -2.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 333 + - uid: 193 components: - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 14 + pos: -2.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 334 + - uid: 196 components: - type: Transform - pos: -5.5,0.5 - parent: 1 - - uid: 15 + pos: 3.5,-1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 337 + - uid: 198 components: - type: Transform - pos: -1.5,0.5 - parent: 1 - - uid: 16 + pos: -1.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 339 + - uid: 199 components: - type: Transform - pos: -0.5,0.5 - parent: 1 - - uid: 17 + pos: -1.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 340 + - uid: 200 components: - type: Transform - pos: 0.5,0.5 - parent: 1 - - uid: 18 + pos: -0.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 341 + - uid: 201 components: - type: Transform - pos: 1.5,0.5 - parent: 1 - - uid: 19 + pos: 0.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 342 + - uid: 202 components: - type: Transform - pos: 2.5,0.5 - parent: 1 - - uid: 20 + pos: 0.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 343 +- proto: BoxMRE + entities: + - uid: 320 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 21 + pos: 0.70504504,-7.29326 + parent: 325 +- proto: CableApcExtension + entities: + - uid: 120 components: - type: Transform - pos: 4.5,0.5 - parent: 1 - - uid: 22 + pos: 0.5,-6.5 + parent: 325 + - uid: 121 components: - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 23 + pos: -0.5,-6.5 + parent: 325 + - uid: 122 components: - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 24 + pos: -0.5,-7.5 + parent: 325 + - uid: 123 components: - type: Transform - pos: 0.5,-1.5 - parent: 1 - - uid: 25 + pos: -0.5,-8.5 + parent: 325 + - uid: 124 components: - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 26 + pos: -1.5,-8.5 + parent: 325 + - uid: 125 components: - type: Transform - pos: -0.5,-2.5 - parent: 1 - - uid: 27 + pos: 0.5,-8.5 + parent: 325 + - uid: 126 components: - type: Transform - pos: 1.5,-2.5 - parent: 1 - - uid: 28 + pos: 1.5,-8.5 + parent: 325 + - uid: 127 components: - type: Transform - pos: -0.5,-1.5 - parent: 1 - - uid: 29 + pos: -2.5,-8.5 + parent: 325 + - uid: 128 components: - type: Transform - pos: -1.5,-1.5 - parent: 1 - - uid: 30 + pos: -3.5,-8.5 + parent: 325 + - uid: 129 components: - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 31 + pos: -3.5,-7.5 + parent: 325 + - uid: 130 components: - type: Transform - pos: 2.5,-1.5 - parent: 1 - - uid: 32 + pos: 2.5,-8.5 + parent: 325 + - uid: 131 components: - type: Transform - pos: 0.5,1.5 - parent: 1 -- proto: CableHV - entities: - - uid: 33 + pos: 2.5,-7.5 + parent: 325 + - uid: 132 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 34 + pos: -0.5,-5.5 + parent: 325 + - uid: 133 components: - type: Transform - pos: -1.5,-0.5 - parent: 1 - - uid: 35 + pos: -0.5,-4.5 + parent: 325 + - uid: 134 components: - type: Transform - pos: -0.5,-0.5 - parent: 1 - - uid: 36 + pos: -0.5,-3.5 + parent: 325 + - uid: 135 components: - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 37 + pos: -0.5,-2.5 + parent: 325 + - uid: 136 components: - type: Transform - pos: 1.5,-0.5 - parent: 1 - - uid: 38 + pos: -0.5,-1.5 + parent: 325 + - uid: 137 components: - type: Transform - pos: 2.5,-0.5 - parent: 1 - - uid: 39 + pos: -0.5,-0.5 + parent: 325 + - uid: 138 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 40 + pos: -0.5,0.5 + parent: 325 + - uid: 139 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 41 + pos: -0.5,1.5 + parent: 325 + - uid: 140 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 42 + pos: -0.5,2.5 + parent: 325 + - uid: 141 components: - type: Transform - pos: 3.5,1.5 - parent: 1 -- proto: CableMV - entities: - - uid: 43 + pos: -1.5,1.5 + parent: 325 + - uid: 143 components: - type: Transform - pos: 3.5,1.5 - parent: 1 - - uid: 44 + pos: 0.5,1.5 + parent: 325 + - uid: 145 components: - type: Transform - pos: 2.5,1.5 - parent: 1 - - uid: 45 + pos: -1.5,-1.5 + parent: 325 + - uid: 146 components: - type: Transform - pos: 1.5,1.5 - parent: 1 - - uid: 46 + pos: -2.5,-1.5 + parent: 325 + - uid: 147 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 47 + pos: -3.5,-1.5 + parent: 325 + - uid: 148 components: - type: Transform - pos: -0.5,1.5 - parent: 1 - - uid: 48 - components: + pos: -4.5,-1.5 + parent: 325 + - uid: 149 + components: - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 49 + pos: 0.5,-1.5 + parent: 325 + - uid: 150 components: - type: Transform - pos: -2.5,1.5 - parent: 1 -- proto: ChairPilotSeat - entities: - - uid: 50 + pos: 1.5,-1.5 + parent: 325 + - uid: 151 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,1.5 - parent: 1 - - uid: 51 + pos: 2.5,-1.5 + parent: 325 + - uid: 152 components: - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 52 + pos: 3.5,-1.5 + parent: 325 + - uid: 153 components: - type: Transform - pos: 2.5,1.5 - parent: 1 -- proto: ClosetWallEmergencyFilledRandom - entities: - - uid: 53 + pos: 0.5,-4.5 + parent: 325 + - uid: 154 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,-0.5 - parent: 1 -- proto: ClosetWallFireFilledRandom - entities: - - uid: 54 + pos: 1.5,-4.5 + parent: 325 + - uid: 155 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-0.5 - parent: 1 -- proto: ClothingHeadPyjamaSyndicateRed - entities: - - uid: 98 + pos: 1.5,-5.5 + parent: 325 + - uid: 156 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingNeckScarfStripedSyndieRed - entities: - - uid: 101 + pos: -1.5,-4.5 + parent: 325 + - uid: 157 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 102 + pos: -2.5,-4.5 + parent: 325 + - uid: 158 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ComputerShuttleSyndie + pos: -2.5,-5.5 + parent: 325 +- proto: CableHV entities: - - uid: 55 + - uid: 111 components: - type: Transform - pos: 0.5,2.5 - parent: 1 -- proto: CrateSyndicate - entities: - - uid: 92 + pos: 1.5,-7.5 + parent: 325 + - uid: 112 components: - type: Transform - pos: 1.5,-0.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14673 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 102 - - 101 - - 100 - - 99 - - 98 - - 97 - - 96 - - 95 - - 94 - - 93 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null -- proto: CyberPen + pos: 0.5,-7.5 + parent: 325 + - uid: 113 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 325 + - uid: 114 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 325 + - uid: 115 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 325 + - uid: 116 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 325 +- proto: CableHVStack1 entities: - - uid: 93 + - uid: 235 components: - type: Transform - parent: 92 + parent: 41 + - type: Stack + count: 10 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: FaxMachineSyndie - entities: - - uid: 162 + - uid: 239 components: - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: GeneratorWallmountAPU + parent: 56 + - type: Stack + count: 10 + - type: Physics + canCollide: False +- proto: CableMV entities: - - uid: 56 + - uid: 117 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 -- proto: GeneratorWallmountBasic - entities: - - uid: 57 + pos: -1.5,-6.5 + parent: 325 + - uid: 118 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 -- proto: Grille - entities: - - uid: 58 + pos: -0.5,-6.5 + parent: 325 + - uid: 119 components: - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 59 + pos: 0.5,-6.5 + parent: 325 +- proto: CapacitorStockPart + entities: + - uid: 233 components: - type: Transform - pos: 0.5,3.5 - parent: 1 - - uid: 60 + parent: 41 + - type: Physics + canCollide: False + - uid: 234 components: - type: Transform - pos: -1.5,2.5 - parent: 1 - - uid: 61 + parent: 41 + - type: Physics + canCollide: False + - uid: 237 components: - type: Transform - pos: -0.5,3.5 - parent: 1 - - uid: 62 + parent: 56 + - type: Physics + canCollide: False + - uid: 238 components: - type: Transform - pos: 1.5,3.5 - parent: 1 -- proto: GrilleDiagonal - entities: - - uid: 63 + parent: 56 + - type: Physics + canCollide: False + - uid: 241 components: - type: Transform - pos: -2.5,2.5 - parent: 1 - - uid: 64 + parent: 58 + - type: Physics + canCollide: False + - uid: 242 components: - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 65 + parent: 58 + - type: Physics + canCollide: False + - uid: 243 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 1 - - uid: 66 + parent: 58 + - type: Physics + canCollide: False + - uid: 254 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 67 + parent: 95 + - type: Physics + canCollide: False + - uid: 261 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 1 - - uid: 68 + parent: 96 + - type: Physics + canCollide: False + - uid: 268 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 -- proto: Gyroscope - entities: - - uid: 69 + parent: 97 + - type: Physics + canCollide: False + - uid: 275 components: - type: Transform - pos: 0.5,-1.5 - parent: 1 -- proto: Paper - entities: - - uid: 95 + parent: 98 + - type: Physics + canCollide: False + - uid: 282 components: - type: Transform - parent: 92 + parent: 99 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 97 + - uid: 289 components: - type: Transform - parent: 92 + parent: 100 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 99 + - uid: 296 components: - type: Transform - parent: 92 + parent: 101 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 100 + - uid: 303 components: - type: Transform - parent: 92 + parent: 102 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: PlasmaWindowDiagonal +- proto: Carpet entities: - - uid: 70 + - uid: 74 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 1 - - uid: 71 + pos: -0.5,-4.5 + parent: 325 + - uid: 89 components: - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 72 + pos: -0.5,-5.5 + parent: 325 +- proto: Catwalk + entities: + - uid: 159 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 - - uid: 73 + pos: -1.5,-7.5 + parent: 325 + - uid: 160 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 74 + pos: -0.5,-7.5 + parent: 325 + - uid: 161 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 1 - - uid: 75 + pos: 0.5,-7.5 + parent: 325 +- proto: ChairOfficeDark + entities: + - uid: 93 components: - type: Transform - pos: -2.5,2.5 - parent: 1 -- proto: Poweredlight + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 325 +- proto: ChairPilotSeat entities: - - uid: 76 + - uid: 78 components: - type: Transform rot: 3.141592653589793 rad - pos: 0.5,-1.5 - parent: 1 -- proto: PoweredSmallLight + pos: -0.5,0.5 + parent: 325 +- proto: ComputerIFFSyndicate + entities: + - uid: 40 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 325 +- proto: ComputerShuttleSyndie + entities: + - uid: 64 + components: + - type: Transform + pos: -0.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CyberPen entities: - uid: 77 components: - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 78 + pos: -1.1813428,-5.15565 + parent: 325 +- proto: DoorElectronics + entities: + - uid: 331 components: - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 79 + parent: 190 + - type: Physics + canCollide: False + - uid: 332 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,1.5 - parent: 1 - - uid: 80 + parent: 191 + - type: Physics + canCollide: False + - uid: 333 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,1.5 - parent: 1 -- proto: RandomPosterContraband - entities: - - uid: 81 + parent: 192 + - type: Physics + canCollide: False + - uid: 334 components: - type: Transform - pos: -3.5,1.5 - parent: 1 - - uid: 82 + parent: 193 + - type: Physics + canCollide: False + - uid: 337 components: - type: Transform - pos: 4.5,1.5 - parent: 1 -- proto: ReinforcedPlasmaWindow - entities: - - uid: 83 + parent: 196 + - type: Physics + canCollide: False + - uid: 339 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,3.5 - parent: 1 - - uid: 84 + parent: 198 + - type: Physics + canCollide: False + - uid: 340 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,3.5 - parent: 1 - - uid: 85 + parent: 199 + - type: Physics + canCollide: False + - uid: 341 components: - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 86 + parent: 200 + - type: Physics + canCollide: False + - uid: 342 components: - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 1 - - uid: 87 + parent: 201 + - type: Physics + canCollide: False + - uid: 343 components: - type: Transform - pos: -1.5,2.5 - parent: 1 -- proto: RubberStampSyndicate - entities: - - uid: 94 + parent: 202 + - type: Physics + canCollide: False + - uid: 346 components: - type: Transform - parent: 92 + parent: 206 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: SubstationWallBasic +- proto: DresserFilled entities: - - uid: 88 + - uid: 85 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 325 +- proto: DrinkNukieCan + entities: + - uid: 144 + components: + - type: Transform + pos: -2.6964839,-2.109029 + parent: 325 +- proto: FaxMachineSyndie + entities: + - uid: 46 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 325 + - type: FaxMachine + name: Striker +- proto: filingCabinetRandom + entities: + - uid: 75 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 325 +- proto: Firelock + entities: + - uid: 224 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 350 + - type: DeviceNetwork + address: 44a24659 + receiveFrequency: 1621 + - uid: 225 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 351 + - type: DeviceNetwork + address: 6fdb75cf + receiveFrequency: 1621 +- proto: FirelockElectronics + entities: + - uid: 350 + components: + - type: Transform + parent: 224 + - type: Physics + canCollide: False + - uid: 351 + components: + - type: Transform + parent: 225 + - type: Physics + canCollide: False +- proto: FoodBoxDonut + entities: + - uid: 87 + components: + - type: Transform + pos: -2.470145,-2.3953476 + parent: 325 +- proto: GasPipeFourway + entities: + - uid: 216 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 325 +- proto: GasPipeStraight + entities: + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-6.5 + parent: 325 + - uid: 213 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 325 + - uid: 214 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 325 + - uid: 215 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 325 + - uid: 217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 325 +- proto: GasPipeTJunction + entities: + - uid: 210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 325 + - uid: 212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 325 +- proto: GasPort + entities: + - uid: 59 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-8.5 + parent: 325 +- proto: GasVentPump + entities: + - uid: 218 + components: + - type: Transform + pos: -0.5,0.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-5f41a0ae + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-129c27d2 + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-11c4609d + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-6859729f + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-19d24c7f + transmitFrequency: 1621 + receiveFrequency: 1621 +- proto: GeneratorBasic15kW + entities: + - uid: 41 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 325 + - type: PowerSupplier + supplyRampPosition: 7552.5303 + - type: ContainerContainer + containers: + machine_board: !type:Container + ents: + - 232 + machine_parts: !type:Container + ents: + - 233 + - 234 + - 235 + - uid: 56 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 325 + - type: PowerSupplier + supplyRampPosition: 7552.5303 + - type: ContainerContainer + containers: + machine_board: !type:Container + ents: + - 236 + machine_parts: !type:Container + ents: + - 237 + - 238 + - 239 +- proto: GravityGeneratorMini + entities: + - uid: 57 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 325 +- proto: Grille + entities: + - uid: 1 + components: + - type: Transform + pos: -0.5,2.5 + parent: 325 + - uid: 2 + components: + - type: Transform + pos: -1.5,2.5 + parent: 325 + - uid: 3 + components: + - type: Transform + pos: -1.5,1.5 + parent: 325 + - uid: 4 + components: + - type: Transform + pos: 0.5,2.5 + parent: 325 + - uid: 5 + components: + - type: Transform + pos: 0.5,1.5 + parent: 325 + - uid: 21 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 325 + - uid: 50 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 325 + - uid: 51 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 325 + - uid: 52 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 325 + - uid: 53 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 325 +- proto: Gyroscope + entities: + - uid: 58 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-8.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 240 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 241 + - 242 + - 243 + - 244 +- proto: GyroscopeMachineCircuitboard + entities: + - uid: 240 + components: + - type: Transform + parent: 58 + - type: Physics + canCollide: False +- proto: MedkitCombatFilled + entities: + - uid: 19 + components: + - type: Transform + pos: 1.48298,-0.3211529 + parent: 325 +- proto: MicroManipulatorStockPart + entities: + - uid: 250 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 251 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 252 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 253 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 257 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 258 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 259 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 260 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 264 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 265 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 266 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 267 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 271 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 272 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 273 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 274 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 278 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 279 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 280 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 281 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 285 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 286 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 287 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 288 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 292 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 293 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 294 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 295 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 299 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 300 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 301 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 302 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False +- proto: Mirror + entities: + - uid: 321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 325 +- proto: NitrogenTankFilled + entities: + - uid: 105 + components: + - type: Transform + pos: 1.373605,-0.2749618 + parent: 325 +- proto: NukeCodePaper + entities: + - uid: 323 + components: + - type: Transform + pos: 1.561105,-2.5567772 + parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 +- proto: PinpointerNuclear + entities: + - uid: 162 + components: + - type: Transform + pos: 1.3790641,-2.3161128 + parent: 325 + - type: Physics + canCollide: False +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 325 + - uid: 109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 325 +- proto: PlushieNuke + entities: + - uid: 47 + components: + - type: Transform + pos: 0.5061571,-5.233775 + parent: 325 +- proto: PortableGeneratorSuperPacmanMachineCircuitboard + entities: + - uid: 232 + components: + - type: Transform + parent: 41 + - type: Physics + canCollide: False + - uid: 236 + components: + - type: Transform + parent: 56 + - type: Physics + canCollide: False +- proto: PosterContrabandC20r + entities: + - uid: 24 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 325 +- proto: PosterContrabandEnergySwords + entities: + - uid: 227 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 325 +- proto: PosterContrabandNuclearDeviceInformational + entities: + - uid: 228 + components: + - type: Transform + pos: -2.5,0.5 + parent: 325 +- proto: PosterContrabandSyndicateRecruitment + entities: + - uid: 229 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 325 +- proto: Poweredlight + entities: + - uid: 94 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 325 + - uid: 110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 325 +- proto: PoweredlightLED + entities: + - uid: 182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 184 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 204 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 83 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 325 + - uid: 84 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 325 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 14 + components: + - type: Transform + pos: -1.5,1.5 + parent: 325 + - uid: 15 + components: + - type: Transform + pos: -1.5,2.5 + parent: 325 + - uid: 16 + components: + - type: Transform + pos: -0.5,2.5 + parent: 325 + - uid: 17 + components: + - type: Transform + pos: 0.5,2.5 + parent: 325 + - uid: 18 + components: + - type: Transform + pos: 0.5,1.5 + parent: 325 + - uid: 26 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 325 + - uid: 42 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 325 + - uid: 70 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 325 + - uid: 71 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 325 + - uid: 72 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 325 +- proto: RemoteSignaller + entities: + - uid: 176 + components: + - type: Transform + pos: 1.3427892,-2.379079 + parent: 325 + - type: Physics + canCollide: False +- proto: SheetGlass1 + entities: + - uid: 244 + components: + - type: Transform + parent: 58 + - type: Stack + count: 2 + - type: Physics + canCollide: False +- proto: SheetSteel1 + entities: + - uid: 255 + components: + - type: Transform + parent: 95 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 262 + components: + - type: Transform + parent: 96 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 269 + components: + - type: Transform + parent: 97 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 276 + components: + - type: Transform + parent: 98 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 283 + components: + - type: Transform + parent: 99 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 290 + components: + - type: Transform + parent: 100 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 297 + components: + - type: Transform + parent: 101 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 304 + components: + - type: Transform + parent: 102 + - type: Stack + count: 5 + - type: Physics + canCollide: False +- proto: SignalButton + entities: + - uid: 205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 325 + - type: DeviceLinkSource + linkedPorts: + 193: + - Pressed: Toggle + 192: + - Pressed: Toggle + 190: + - Pressed: Toggle + 191: + - Pressed: Toggle + 196: + - Pressed: Toggle + 202: + - Pressed: Toggle + 201: + - Pressed: Toggle + 200: + - Pressed: Toggle + 199: + - Pressed: Toggle + 198: + - Pressed: Toggle +- proto: SignSpace + entities: + - uid: 230 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 325 +- proto: SoapSyndie + entities: + - uid: 90 + components: + - type: Transform + pos: 0.5436061,-7.5129323 + parent: 325 +- proto: SpawnPointNukies + entities: + - uid: 322 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 325 +- proto: StealthBox + entities: + - uid: 106 + components: + - type: Transform + pos: 0.49860507,-2.4513345 + parent: 325 + - type: Stealth + enabled: False + - type: EntityStorage + open: True +- proto: SubstationWallBasic + entities: + - uid: 103 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 325 + - type: PowerNetworkBattery + loadingNetworkDemand: 15106.935 + currentReceiving: 15105.06 + currentSupply: 15106.935 + supplyRampPosition: 1.875 +- proto: SuitStorageSyndie + entities: + - uid: 67 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 325 +- proto: SyndicateCommsComputerCircuitboard + entities: + - uid: 246 + components: + - type: Transform + parent: 65 + - type: Physics + canCollide: False +- proto: SyndicateComputerComms + entities: + - uid: 65 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,0.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 246 +- proto: SyndicateIDCard + entities: + - uid: 324 + components: + - type: Transform + pos: 1.57673,-2.3849022 + parent: 325 +- proto: SyndicateShuttleConsoleCircuitboard + entities: + - uid: 245 + components: + - type: Transform + parent: 64 + - type: Physics + canCollide: False +- proto: Table + entities: + - uid: 165 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 325 +- proto: TableWood + entities: + - uid: 45 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 325 +- proto: Thruster + entities: + - uid: 95 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-9.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 249 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 250 + - 251 + - 252 + - 253 + - 254 + - 255 + - uid: 96 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-9.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 256 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 257 + - 258 + - 259 + - 260 + - 261 + - 262 + - uid: 97 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 263 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 264 + - 265 + - 266 + - 267 + - 268 + - 269 + - uid: 98 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 270 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 271 + - 272 + - 273 + - 274 + - 275 + - 276 + - uid: 99 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 277 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 278 + - 279 + - 280 + - 281 + - 282 + - 283 + - uid: 100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 284 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 285 + - 286 + - 287 + - 288 + - 289 + - 290 + - uid: 101 + components: + - type: Transform + pos: -3.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 291 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 292 + - 293 + - 294 + - 295 + - 296 + - 297 + - uid: 102 components: - type: Transform - pos: 3.5,1.5 - parent: 1 -- proto: SyndieDisasterVictimSpawner + pos: 2.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 298 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 299 + - 300 + - 301 + - 302 + - 303 + - 304 +- proto: ThrusterMachineCircuitboard entities: - - uid: 89 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 90 + - uid: 249 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 91 + parent: 95 + - type: Physics + canCollide: False + - uid: 256 components: - type: Transform - pos: 2.5,1.5 - parent: 1 -- proto: TableGlass - entities: - - uid: 163 + parent: 96 + - type: Physics + canCollide: False + - uid: 263 components: - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: Thruster - entities: - - uid: 103 + parent: 97 + - type: Physics + canCollide: False + - uid: 270 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-3.5 - parent: 1 - - uid: 104 + parent: 98 + - type: Physics + canCollide: False + - uid: 277 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-3.5 - parent: 1 - - uid: 105 + parent: 99 + - type: Physics + canCollide: False + - uid: 284 components: - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-3.5 - parent: 1 - - uid: 106 + parent: 100 + - type: Physics + canCollide: False + - uid: 291 components: - type: Transform - rot: 3.141592653589793 rad - pos: -2.5,-1.5 - parent: 1 - - uid: 107 + parent: 101 + - type: Physics + canCollide: False + - uid: 298 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-1.5 - parent: 1 + parent: 102 + - type: Physics + canCollide: False - proto: ToolboxSyndicateFilled entities: - - uid: 96 + - uid: 177 components: - type: Transform - parent: 92 + pos: 1.5699697,-0.44908836 + parent: 325 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: VendingMachineTankDispenserEVA +- proto: ToyFigurineNukie entities: - - uid: 108 + - uid: 10 components: - type: Transform - pos: -0.5,-0.5 - parent: 1 + pos: -2.3371089,-2.140279 + parent: 325 +- proto: VendingMachineSyndieDrobe + entities: + - uid: 163 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 325 - proto: WallPlastitanium entities: - - uid: 109 + - uid: 7 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-0.5 - parent: 1 - - uid: 110 + pos: -2.5,0.5 + parent: 325 + - uid: 8 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,1.5 - parent: 1 - - uid: 111 + pos: -3.5,0.5 + parent: 325 + - uid: 9 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,5.5 - parent: 1 - - uid: 112 + pos: -3.5,-0.5 + parent: 325 + - uid: 11 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,6.5 - parent: 1 - - uid: 113 + pos: 1.5,0.5 + parent: 325 + - uid: 12 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,3.5 - parent: 1 - - uid: 114 + pos: 2.5,0.5 + parent: 325 + - uid: 13 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-0.5 - parent: 1 - - uid: 115 + pos: -4.5,-0.5 + parent: 325 + - uid: 22 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,2.5 - parent: 1 - - uid: 116 + pos: 3.5,-0.5 + parent: 325 + - uid: 25 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,2.5 - parent: 1 - - uid: 117 + pos: 3.5,-2.5 + parent: 325 + - uid: 27 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,1.5 - parent: 1 - - uid: 118 + pos: -3.5,-2.5 + parent: 325 + - uid: 28 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-0.5 - parent: 1 - - uid: 119 + pos: -3.5,-6.5 + parent: 325 + - uid: 29 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,3.5 - parent: 1 - - uid: 120 + pos: 2.5,-6.5 + parent: 325 + - uid: 30 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,-0.5 - parent: 1 - - uid: 121 + pos: -2.5,-6.5 + parent: 325 + - uid: 31 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,3.5 - parent: 1 - - uid: 122 + pos: -3.5,-8.5 + parent: 325 + - uid: 32 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,1.5 - parent: 1 - - uid: 123 + pos: -2.5,-8.5 + parent: 325 + - uid: 33 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,4.5 - parent: 1 - - uid: 124 + pos: 1.5,-6.5 + parent: 325 + - uid: 34 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,1.5 - parent: 1 - - uid: 125 + pos: 1.5,-3.5 + parent: 325 + - uid: 35 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,-1.5 - parent: 1 - - uid: 126 + pos: -2.5,-9.5 + parent: 325 + - uid: 36 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,1.5 - parent: 1 - - uid: 127 + pos: 1.5,-8.5 + parent: 325 + - uid: 37 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 1 - - uid: 128 + pos: 1.5,-9.5 + parent: 325 + - uid: 38 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,2.5 - parent: 1 - - uid: 129 + pos: -4.5,-2.5 + parent: 325 + - uid: 39 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-1.5 - parent: 1 - - uid: 130 + pos: 2.5,-3.5 + parent: 325 + - uid: 44 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,3.5 - parent: 1 - - uid: 131 + pos: 2.5,-8.5 + parent: 325 + - uid: 48 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,4.5 - parent: 1 - - uid: 132 + pos: 2.5,-7.5 + parent: 325 + - uid: 49 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,6.5 - parent: 1 - - uid: 133 + pos: -3.5,-7.5 + parent: 325 + - uid: 54 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,2.5 - parent: 1 - - uid: 134 + pos: -2.5,-3.5 + parent: 325 + - uid: 55 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,1.5 - parent: 1 - - uid: 135 + pos: -3.5,-3.5 + parent: 325 + - uid: 60 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-1.5 - parent: 1 - - uid: 136 + rot: 3.141592653589793 rad + pos: -1.5,-6.5 + parent: 325 + - uid: 61 components: - type: Transform - pos: -0.5,-2.5 - parent: 1 - - uid: 137 + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 325 + - uid: 62 components: - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 138 + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 325 + - uid: 63 components: - type: Transform - pos: 1.5,-2.5 - parent: 1 - - uid: 139 + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 325 + - uid: 66 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-1.5 - parent: 1 - - uid: 140 + pos: 0.5,-9.5 + parent: 325 + - uid: 69 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 141 + pos: -2.5,1.5 + parent: 325 + - uid: 73 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 142 + pos: 1.5,1.5 + parent: 325 + - uid: 80 components: - type: Transform - pos: -3.5,-2.5 - parent: 1 - - uid: 143 + pos: 2.5,-2.5 + parent: 325 + - uid: 81 components: - type: Transform - pos: 4.5,-2.5 - parent: 1 -- proto: WallPlastitaniumDiagonal - entities: - - uid: 144 + pos: 2.5,-0.5 + parent: 325 + - uid: 92 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,1.5 - parent: 1 - - uid: 145 + pos: -1.5,-9.5 + parent: 325 + - uid: 108 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,-0.5 - parent: 1 - - uid: 146 + pos: -0.5,-9.5 + parent: 325 +- proto: WallPlastitaniumDiagonal + entities: + - uid: 23 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-1.5 - parent: 1 - - uid: 147 + pos: -4.5,0.5 + parent: 325 + - uid: 43 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,4.5 - parent: 1 - - uid: 148 - components: - - type: Transform - pos: -3.5,7.5 - parent: 1 - - uid: 149 - components: - - type: Transform - pos: -4.5,4.5 - parent: 1 - - uid: 150 + pos: 3.5,0.5 + parent: 325 + - uid: 68 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,7.5 - parent: 1 - - uid: 151 - components: - - type: Transform - pos: -5.5,1.5 - parent: 1 - - uid: 152 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-0.5 - parent: 1 - - uid: 153 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-1.5 - parent: 1 - - uid: 154 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-2.5 - parent: 1 - - uid: 155 + pos: 1.5,2.5 + parent: 325 + - uid: 79 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,-2.5 - parent: 1 - - uid: 156 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,-0.5 - parent: 1 - - uid: 157 - components: - - type: Transform - pos: 2.5,-0.5 - parent: 1 - - uid: 158 + pos: -4.5,-3.5 + parent: 325 + - uid: 82 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-1.5 - parent: 1 - - uid: 159 + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 325 + - uid: 86 components: - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 160 + pos: -2.5,2.5 + parent: 325 +- proto: WindoorSecure + entities: + - uid: 166 components: - type: Transform rot: 1.5707963267948966 rad - pos: -3.5,-3.5 - parent: 1 - - uid: 161 + pos: -3.5,-1.5 + parent: 325 + - uid: 206 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,-3.5 - parent: 1 + pos: -0.5,-0.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 346 ... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml index 7b6812c493..eab4520910 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml @@ -169,16 +169,18 @@ entities: - type: Transform pos: 2.5,-1.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 5 components: - type: Transform + rot: -1.5707963267948966 rad pos: -3.5,-4.5 parent: 1 - uid: 6 components: - type: Transform + rot: -1.5707963267948966 rad pos: -3.5,-0.5 parent: 1 - proto: BarSignMaidCafe @@ -196,9 +198,6 @@ entities: - type: Transform pos: -0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 161 - proto: Bucket entities: - uid: 9 @@ -1017,7 +1016,7 @@ entities: - uid: 115 components: - type: Transform - pos: -2.4682944,-0.4437158 + pos: -2.4622643,-0.46992433 parent: 1 - proto: GeneratorWallmountAPU entities: @@ -1349,33 +1348,21 @@ entities: - type: Transform pos: -0.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - uid: 150 components: - type: Transform pos: -0.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - uid: 151 components: - type: Transform pos: -0.5,-5.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - uid: 152 components: - type: Transform pos: -3.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - proto: ShuttleWindow entities: - uid: 153 @@ -1459,7 +1446,7 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-6.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 164 components: diff --git a/Resources/Maps/Shuttles/arrivals.yml b/Resources/Maps/Shuttles/arrivals.yml index 2fe16cd303..b4609e1b0a 100644 --- a/Resources/Maps/Shuttles/arrivals.yml +++ b/Resources/Maps/Shuttles/arrivals.yml @@ -199,8 +199,6 @@ entities: - type: Transform pos: -1.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: AirlockCommandGlassLocked entities: - uid: 278 @@ -218,24 +216,48 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-2.5 parent: 292 + - type: Door + secondsUntilStateChange: -336.60016 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 178 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,4.5 parent: 292 + - type: Door + secondsUntilStateChange: -338.3335 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 179 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 292 + - type: Door + secondsUntilStateChange: -332.80017 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 180 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 292 + - type: Door + secondsUntilStateChange: -334.70016 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - proto: APCBasic entities: - uid: 116 @@ -256,26 +278,30 @@ entities: - type: Transform pos: 3.5,3.5 parent: 292 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 164 components: - type: Transform - pos: 3.5,-2.5 + rot: -1.5707963267948966 rad + pos: -4.5,4.5 parent: 292 - uid: 165 components: - type: Transform + rot: 1.5707963267948966 rad pos: 3.5,4.5 parent: 292 - uid: 166 components: - type: Transform - pos: -4.5,4.5 + rot: 1.5707963267948966 rad + pos: 3.5,-2.5 parent: 292 - uid: 167 components: - type: Transform + rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 292 - proto: BlockGameArcade @@ -997,6 +1023,22 @@ entities: - type: Transform pos: 2.5,5.5 parent: 292 + - type: GroupExamine + group: + - hoverMessage: "" + contextText: verb-examine-group-other + icon: /Textures/Interface/examine-star.png + components: + - Armor + - ClothingSpeedModifier + entries: + - message: >- + It provides the following protection: + + - [color=orange]Explosion[/color] damage [color=white]to contents[/color] reduced by [color=lightblue]10%[/color]. + priority: 0 + component: Armor + title: null - proto: ClothingMaskBreath entities: - uid: 272 @@ -1049,8 +1091,6 @@ entities: - type: Transform pos: -0.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GasPipeBend entities: - uid: 182 @@ -1221,8 +1261,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GasVentPump entities: - uid: 212 @@ -1230,16 +1268,12 @@ entities: - type: Transform pos: -0.5,-2.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - uid: 213 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,4.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GeneratorBasic15kW entities: - uid: 114 diff --git a/Resources/Maps/Shuttles/briggle.yml b/Resources/Maps/Shuttles/briggle.yml index 4778896e02..0a7646393a 100644 --- a/Resources/Maps/Shuttles/briggle.yml +++ b/Resources/Maps/Shuttles/briggle.yml @@ -143,12 +143,12 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 1 - - type: Door - secondsUntilStateChange: -81.781815 - state: Opening - type: DeviceLinkSource lastSignals: DoorStatus: True + - type: Door + secondsUntilStateChange: -347.64847 + state: Opening - proto: AirlockSecurityGlassLocked entities: - uid: 73 @@ -170,9 +170,9 @@ entities: - type: Transform pos: -0.5,-7.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 83 + - uid: 57 components: - type: Transform pos: 0.5,-10.5 @@ -829,6 +829,14 @@ entities: Glip Glorp, NanoTrasen Motorpool Division +- proto: PlushieRouny + entities: + - uid: 83 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.53599805,-6.526394 + parent: 1 - proto: PortableGeneratorPacman entities: - uid: 41 diff --git a/Resources/Maps/Shuttles/cargo.yml b/Resources/Maps/Shuttles/cargo.yml index d8f3976e81..dab78a0102 100644 --- a/Resources/Maps/Shuttles/cargo.yml +++ b/Resources/Maps/Shuttles/cargo.yml @@ -166,8 +166,6 @@ entities: - type: Transform pos: -3.5,-1.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: AirlockGlassShuttle entities: - uid: 45 @@ -201,27 +199,31 @@ entities: - type: Transform pos: -0.5,6.5 parent: 173 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 168 components: - type: Transform - pos: -5.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 173 - uid: 169 components: - type: Transform - pos: -5.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 173 - uid: 170 components: - type: Transform - pos: 0.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 173 - uid: 171 components: - type: Transform - pos: 0.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,1.5 parent: 173 - proto: BlastDoor entities: @@ -230,33 +232,21 @@ entities: - type: Transform pos: 0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 57 - uid: 3 components: - type: Transform pos: -5.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 55 - uid: 54 components: - type: Transform pos: 0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 58 - uid: 56 components: - type: Transform pos: -5.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 2 - proto: CableApcExtension entities: - uid: 100 @@ -606,108 +596,72 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 39 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 40 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 41 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 42 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 43 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 46 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - uid: 47 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 48 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 49 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 51 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - uid: 167 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - proto: GasPipeBend entities: - uid: 134 @@ -744,8 +698,6 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-1.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: GasVentPump entities: - uid: 138 @@ -753,8 +705,6 @@ entities: - type: Transform pos: -2.5,2.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: GeneratorBasic15kW entities: - uid: 83 diff --git a/Resources/Maps/Shuttles/cargo_core.yml b/Resources/Maps/Shuttles/cargo_core.yml index 0c495835b9..dcbd4a972c 100644 --- a/Resources/Maps/Shuttles/cargo_core.yml +++ b/Resources/Maps/Shuttles/cargo_core.yml @@ -169,8 +169,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 147 @@ -181,8 +179,6 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockGlassShuttle entities: - uid: 131 @@ -205,22 +201,26 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-7.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 139 + - uid: 29 components: - type: Transform - pos: -0.5,-2.5 + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 parent: 2 - - uid: 140 + - uid: 141 components: - type: Transform - pos: -0.5,-1.5 + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 parent: 2 - - uid: 141 +- proto: AtmosDeviceFanTiny + entities: + - uid: 140 components: - type: Transform - pos: -0.5,-4.5 + pos: -0.5,-1.5 parent: 2 - uid: 142 components: @@ -234,17 +234,11 @@ entities: - type: Transform pos: -0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 137 - uid: 136 components: - type: Transform pos: -0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 138 - proto: CableApcExtension entities: - uid: 104 @@ -588,36 +582,24 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 152 - uid: 75 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 152 - uid: 76 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 151 - uid: 77 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 151 - proto: GasPassiveVent entities: - uid: 143 @@ -625,8 +607,6 @@ entities: - type: Transform pos: -0.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 148 @@ -651,8 +631,6 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPressurePump entities: - uid: 150 @@ -661,8 +639,6 @@ entities: rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 95 @@ -671,8 +647,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentScrubber entities: - uid: 144 @@ -681,8 +655,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorBasic15kW entities: - uid: 96 @@ -838,12 +810,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-3.5 parent: 2 - - uid: 29 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-4.5 - parent: 2 - uid: 30 components: - type: Transform @@ -856,6 +822,12 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-3.5 parent: 2 + - uid: 139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-4.5 + parent: 2 - proto: SignalButton entities: - uid: 137 diff --git a/Resources/Maps/Shuttles/cargo_fland.yml b/Resources/Maps/Shuttles/cargo_fland.yml index e91e228e5c..7a48231abb 100644 --- a/Resources/Maps/Shuttles/cargo_fland.yml +++ b/Resources/Maps/Shuttles/cargo_fland.yml @@ -183,8 +183,6 @@ entities: - type: Transform pos: 4.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: Lock locked: True - proto: AirlockGlassShuttle @@ -196,7 +194,7 @@ entities: pos: 0.5,0.5 parent: 1 - type: Door - secondsUntilStateChange: -4823.494 + secondsUntilStateChange: -4923.5425 state: Opening - uid: 51 components: @@ -205,7 +203,7 @@ entities: pos: 0.5,2.5 parent: 1 - type: Door - secondsUntilStateChange: -4822.5273 + secondsUntilStateChange: -4922.5757 state: Opening - uid: 52 components: @@ -214,7 +212,7 @@ entities: pos: 6.5,2.5 parent: 1 - type: Door - secondsUntilStateChange: -4821.5938 + secondsUntilStateChange: -4921.642 state: Opening - uid: 53 components: @@ -223,7 +221,7 @@ entities: pos: 6.5,0.5 parent: 1 - type: Door - secondsUntilStateChange: -4836.5938 + secondsUntilStateChange: -4936.642 state: Opening - proto: APCBasic entities: @@ -233,27 +231,31 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-3.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 158 components: - type: Transform - pos: 0.5,0.5 + rot: 1.5707963267948966 rad + pos: 6.5,2.5 parent: 1 - uid: 159 components: - type: Transform - pos: 0.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,0.5 parent: 1 - uid: 160 components: - type: Transform - pos: 6.5,2.5 + rot: -1.5707963267948966 rad + pos: 0.5,0.5 parent: 1 - uid: 161 components: - type: Transform - pos: 6.5,0.5 + rot: -1.5707963267948966 rad + pos: 0.5,2.5 parent: 1 - proto: BlastDoor entities: @@ -262,33 +264,21 @@ entities: - type: Transform pos: 0.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 145 - uid: 90 components: - type: Transform pos: 0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 145 - uid: 99 components: - type: Transform pos: 6.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 43 - uid: 100 components: - type: Transform pos: 6.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 43 - proto: CableApcExtension entities: - uid: 124 @@ -610,72 +600,48 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 92 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 93 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 94 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 95 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 96 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 97 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 98 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - proto: DisposalPipe entities: - uid: 83 @@ -777,8 +743,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentPump entities: - uid: 115 @@ -787,16 +751,12 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 168 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GeneratorBasic15kW entities: - uid: 106 diff --git a/Resources/Maps/Shuttles/dart.yml b/Resources/Maps/Shuttles/dart.yml index c44dfe890d..a3c552b84a 100644 --- a/Resources/Maps/Shuttles/dart.yml +++ b/Resources/Maps/Shuttles/dart.yml @@ -838,22 +838,16 @@ entities: - type: Transform pos: 2.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 127 components: - type: Transform pos: 2.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 128 components: - type: Transform pos: 2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: AirlockAtmosphericsLocked entities: - uid: 419 @@ -933,12 +927,6 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-1.5 parent: 1 - - uid: 414 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-0.5 - parent: 1 - uid: 415 components: - type: Transform @@ -957,6 +945,12 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-2.5 parent: 1 + - uid: 813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-0.5 + parent: 1 - proto: AirlockGlass entities: - uid: 73 @@ -1008,37 +1002,43 @@ entities: rot: 3.141592653589793 rad pos: -1.5,4.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 808 + - uid: 414 components: - type: Transform - pos: -9.5,-0.5 + rot: -1.5707963267948966 rad + pos: -9.5,-2.5 parent: 1 - - uid: 809 + - uid: 808 components: - type: Transform + rot: -1.5707963267948966 rad pos: -9.5,-1.5 parent: 1 - - uid: 810 + - uid: 809 components: - type: Transform - pos: -9.5,-2.5 + rot: -1.5707963267948966 rad + pos: -9.5,-0.5 parent: 1 - - uid: 811 + - uid: 810 components: - type: Transform - pos: 8.5,-0.5 + rot: 1.5707963267948966 rad + pos: 8.5,-2.5 parent: 1 - - uid: 812 + - uid: 811 components: - type: Transform + rot: 1.5707963267948966 rad pos: 8.5,-1.5 parent: 1 - - uid: 813 + - uid: 812 components: - type: Transform - pos: 8.5,-2.5 + rot: 1.5707963267948966 rad + pos: 8.5,-0.5 parent: 1 - proto: AtmosFixNitrogenMarker entities: @@ -1099,89 +1099,56 @@ entities: - type: Transform pos: -5.5,-9.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 807 components: - type: Transform pos: -5.5,-14.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 816 components: - type: Transform pos: -5.5,-8.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 817 components: - type: Transform pos: -0.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 818 components: - type: Transform pos: 0.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 819 components: - type: Transform pos: 4.5,-14.5 parent: 1 - - type: DeviceLinkSink - links: - - 822 - uid: 820 components: - type: Transform pos: 4.5,-8.5 parent: 1 - - type: DeviceLinkSink - links: - - 769 - uid: 821 components: - type: Transform pos: -1.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 824 components: - type: Transform pos: 4.5,-9.5 parent: 1 - - type: DeviceLinkSink - links: - - 769 - uid: 825 components: - type: Transform pos: 4.5,-13.5 parent: 1 - - type: DeviceLinkSink - links: - - 822 - uid: 826 components: - type: Transform pos: -5.5,-13.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - proto: BoozeDispenser entities: - uid: 444 @@ -2700,13 +2667,6 @@ entities: - type: Transform pos: -3.882896,-2.509187 parent: 1 -- proto: chem_master - entities: - - uid: 891 - components: - - type: Transform - pos: -3.5,-4.5 - parent: 1 - proto: ChemDispenser entities: - uid: 783 @@ -2721,6 +2681,13 @@ entities: - type: Transform pos: -4.5,-5.5 parent: 1 +- proto: ChemMaster + entities: + - uid: 891 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 - proto: CloningPod entities: - uid: 926 @@ -2728,9 +2695,6 @@ entities: - type: Transform pos: -4.5,2.5 parent: 1 - - type: DeviceLinkSink - links: - - 927 - proto: ClosetFireFilled entities: - uid: 194 @@ -3208,8 +3172,6 @@ entities: - type: Transform pos: -8.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 734 @@ -3217,8 +3179,6 @@ entities: - type: Transform pos: -8.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixerFlipped entities: - uid: 264 @@ -3229,8 +3189,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasPassiveVent @@ -3241,24 +3199,18 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 259 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 407 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasPipeBend @@ -3904,11 +3856,15 @@ entities: - uid: 289 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 0.5,-5.5 parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - type: Physics + canCollide: True + bodyType: Dynamic - uid: 291 components: - type: Transform @@ -3989,8 +3945,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 146 @@ -3999,8 +3953,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 151 @@ -4009,8 +3961,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 360 @@ -4019,8 +3969,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 367 @@ -4029,8 +3977,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 368 @@ -4039,8 +3985,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasPressurePump @@ -4053,8 +3997,6 @@ entities: parent: 1 - type: GasPressurePump targetPressure: 4500 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 326 @@ -4062,8 +4004,6 @@ entities: - type: Transform pos: 4.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasVentPump @@ -4074,8 +4014,6 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 282 @@ -4084,8 +4022,6 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 283 @@ -4094,8 +4030,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 311 @@ -4104,8 +4038,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 312 @@ -4114,8 +4046,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 313 @@ -4124,8 +4054,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 314 @@ -4134,8 +4062,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 315 @@ -4144,8 +4070,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 316 @@ -4154,8 +4078,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 317 @@ -4164,8 +4086,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 318 @@ -4174,8 +4094,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 319 @@ -4184,8 +4102,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasVentScrubber @@ -4196,8 +4112,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 387 @@ -4205,8 +4119,6 @@ entities: - type: Transform pos: 3.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 405 @@ -4215,8 +4127,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 406 @@ -4225,8 +4135,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 411 @@ -4234,8 +4142,6 @@ entities: - type: Transform pos: -4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GeneratorBasic15kW @@ -4583,9 +4489,6 @@ entities: - type: Transform pos: -4.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 927 - proto: MegaSprayBottle entities: - uid: 903 @@ -5303,7 +5206,7 @@ entities: - type: Transform pos: -1.5,-7.5 parent: 1 -- proto: SignChemistry1 +- proto: SignChem entities: - uid: 893 components: @@ -5377,7 +5280,7 @@ entities: - type: Transform pos: 2.4920845,-8.564493 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 785 components: @@ -5391,13 +5294,6 @@ entities: - type: Transform pos: 3.5,-9.5 parent: 1 -- proto: SpawnMobDrone - entities: - - uid: 987 - components: - - type: Transform - pos: 2.5,-18.5 - parent: 1 - proto: SpawnMobMedibot entities: - uid: 986 diff --git a/Resources/Maps/Shuttles/emergency.yml b/Resources/Maps/Shuttles/emergency.yml index d2b09201b2..e285d4a5ae 100644 --- a/Resources/Maps/Shuttles/emergency.yml +++ b/Resources/Maps/Shuttles/emergency.yml @@ -202,8 +202,6 @@ entities: - type: Transform pos: -1.5,-3.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: AirlockCommandGlassLocked entities: - uid: 353 @@ -292,47 +290,55 @@ entities: - type: Transform pos: -3.5,0.5 parent: 410 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 395 components: - type: Transform - pos: -7.5,5.5 + rot: -1.5707963267948966 rad + pos: -7.5,7.5 parent: 410 - uid: 396 components: - type: Transform - pos: -7.5,7.5 + rot: -1.5707963267948966 rad + pos: -7.5,-0.5 parent: 410 - uid: 397 components: - type: Transform - pos: 2.5,7.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 410 - uid: 398 components: - type: Transform - pos: 2.5,5.5 + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 parent: 410 - uid: 399 components: - type: Transform - pos: 2.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 410 - uid: 400 components: - type: Transform - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 410 - uid: 401 components: - type: Transform - pos: -7.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 410 - uid: 402 components: - type: Transform - pos: -7.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,7.5 parent: 410 - proto: BedsheetMedical entities: @@ -1251,8 +1257,6 @@ entities: - type: Transform pos: -1.5,-2.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasPassiveVent entities: - uid: 270 @@ -1261,8 +1265,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasPipeBend entities: - uid: 291 @@ -1459,8 +1461,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-3.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasVentPump entities: - uid: 242 @@ -1469,45 +1469,33 @@ entities: rot: 3.141592653589793 rad pos: -5.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 243 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 244 components: - type: Transform pos: 0.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 245 components: - type: Transform pos: -5.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 246 components: - type: Transform pos: -2.5,12.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 247 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GeneratorBasic15kW entities: - uid: 239 diff --git a/Resources/Maps/Shuttles/emergency_box.yml b/Resources/Maps/Shuttles/emergency_box.yml index 3aa6a3f7ea..49d082c995 100644 --- a/Resources/Maps/Shuttles/emergency_box.yml +++ b/Resources/Maps/Shuttles/emergency_box.yml @@ -26,7 +26,7 @@ entities: name: NT Evac Box - type: Transform pos: 0.06253052,0.58707 - parent: 484 + parent: invalid - type: MapGrid chunks: 0,0: @@ -492,18 +492,6 @@ entities: - type: GasTileOverlay - type: RadiationGridResistance - type: NavMap - - uid: 484 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - proto: AirCanister entities: - uid: 526 @@ -612,26 +600,30 @@ entities: rot: 3.141592653589793 rad pos: 15.5,-4.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 - uid: 580 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,9.5 parent: 1 - uid: 581 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,7.5 parent: 1 - uid: 582 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 583 - components: - - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 1 - proto: BookHowToSurvive diff --git a/Resources/Maps/Shuttles/emergency_cluster.yml b/Resources/Maps/Shuttles/emergency_cluster.yml index 3cc14505fe..82f178aaca 100644 --- a/Resources/Maps/Shuttles/emergency_cluster.yml +++ b/Resources/Maps/Shuttles/emergency_cluster.yml @@ -553,38 +553,43 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-18.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 472 components: - type: Transform - pos: 2.5,-7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-7.5 parent: 2 - uid: 473 components: - type: Transform - pos: 2.5,-9.5 + rot: 1.5707963267948966 rad + pos: 16.5,-9.5 parent: 2 - uid: 475 components: - type: Transform - pos: 16.5,-9.5 + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 parent: 2 - uid: 476 components: - type: Transform + rot: 1.5707963267948966 rad pos: 16.5,-15.5 parent: 2 - uid: 477 components: - type: Transform - pos: 16.5,-17.5 + rot: -1.5707963267948966 rad + pos: 2.5,-9.5 parent: 2 - - uid: 586 + - uid: 503 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,-7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-17.5 parent: 2 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_courser.yml b/Resources/Maps/Shuttles/emergency_courser.yml index f9ff40b8fa..426fe055b4 100644 --- a/Resources/Maps/Shuttles/emergency_courser.yml +++ b/Resources/Maps/Shuttles/emergency_courser.yml @@ -598,55 +598,55 @@ entities: - type: Transform pos: 0.5,10.5 parent: 656 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 621 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,4.5 + rot: 1.5707963267948966 rad + pos: 6.5,2.5 parent: 656 - uid: 622 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,4.5 parent: 656 - uid: 623 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-5.5 + rot: 1.5707963267948966 rad + pos: 6.5,-3.5 parent: 656 - uid: 624 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-3.5 + rot: 1.5707963267948966 rad + pos: 6.5,-5.5 parent: 656 - uid: 625 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,-3.5 + pos: -6.5,-5.5 parent: 656 - uid: 626 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,-5.5 + pos: -6.5,-3.5 parent: 656 - uid: 627 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,2.5 + pos: -6.5,2.5 parent: 656 - uid: 628 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,4.5 + pos: -6.5,4.5 parent: 656 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_delta.yml b/Resources/Maps/Shuttles/emergency_delta.yml index 20419b2872..0c092e2363 100644 --- a/Resources/Maps/Shuttles/emergency_delta.yml +++ b/Resources/Maps/Shuttles/emergency_delta.yml @@ -24,7 +24,7 @@ entities: name: NT Evac Delta - type: Transform pos: -0.5625,0.671875 - parent: 761 + parent: invalid - type: MapGrid chunks: 0,0: @@ -395,18 +395,6 @@ entities: chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance - - uid: 761 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - proto: AirCanister entities: - uid: 326 @@ -610,43 +598,45 @@ entities: - type: Transform pos: -4.5,-17.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 583 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,-8.5 parent: 1 - - uid: 658 + - uid: 696 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-19.5 + rot: 1.5707963267948966 rad + pos: 2.5,-10.5 parent: 1 - - uid: 659 + - uid: 761 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-20.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 1 - - uid: 696 + - uid: 763 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 1 - - uid: 763 +- proto: AtmosDeviceFanTiny + entities: + - uid: 658 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-8.5 + pos: -5.5,-19.5 parent: 1 - - uid: 764 + - uid: 659 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-10.5 + pos: -5.5,-20.5 parent: 1 - proto: BorgCharger entities: diff --git a/Resources/Maps/Shuttles/emergency_lox.yml b/Resources/Maps/Shuttles/emergency_lox.yml index 0856b97c38..64455757de 100644 --- a/Resources/Maps/Shuttles/emergency_lox.yml +++ b/Resources/Maps/Shuttles/emergency_lox.yml @@ -850,47 +850,55 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,9.5 parent: 670 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 640 + - uid: 231 components: - type: Transform - pos: -7.5,-2.5 + rot: -1.5707963267948966 rad + pos: -7.5,-0.5 parent: 670 - - uid: 641 + - uid: 232 components: - type: Transform - pos: -7.5,-0.5 + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 parent: 670 - - uid: 642 + - uid: 234 components: - type: Transform - pos: 2.5,-2.5 + rot: -1.5707963267948966 rad + pos: -7.5,7.5 parent: 670 - - uid: 643 + - uid: 240 components: - type: Transform - pos: 2.5,-0.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 670 - - uid: 644 + - uid: 241 components: - type: Transform - pos: 2.5,5.5 + rot: 1.5707963267948966 rad + pos: 2.5,7.5 parent: 670 - - uid: 645 + - uid: 242 components: - type: Transform - pos: 2.5,7.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 670 - - uid: 646 + - uid: 264 components: - type: Transform - pos: -7.5,7.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 670 - - uid: 647 + - uid: 270 components: - type: Transform - pos: -7.5,5.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 670 - proto: BedsheetMedical entities: diff --git a/Resources/Maps/Shuttles/emergency_meta.yml b/Resources/Maps/Shuttles/emergency_meta.yml index 091fe6a1f8..ba75195df9 100644 --- a/Resources/Maps/Shuttles/emergency_meta.yml +++ b/Resources/Maps/Shuttles/emergency_meta.yml @@ -669,45 +669,46 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-3.5 parent: 1 - - type: Apc - lastExternalState: Low - lastChargeState: Full - type: PowerNetworkBattery loadingNetworkDemand: 18077 currentReceiving: 18076.947 currentSupply: 18077 supplyRampPosition: 0.052734375 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 928 + - uid: 4 components: - type: Transform - pos: 14.5,1.5 + pos: -2.5,-11.5 parent: 1 - - uid: 929 + - uid: 33 components: - type: Transform - pos: 12.5,1.5 + rot: 3.141592653589793 rad + pos: 4.5,1.5 parent: 1 - - uid: 930 + - uid: 42 components: - type: Transform + rot: 3.141592653589793 rad pos: 6.5,1.5 parent: 1 - - uid: 931 + - uid: 43 components: - type: Transform - pos: 4.5,1.5 + pos: -1.5,-11.5 parent: 1 - - uid: 932 + - uid: 51 components: - type: Transform - pos: -1.5,-11.5 + rot: 3.141592653589793 rad + pos: 12.5,1.5 parent: 1 - - uid: 933 + - uid: 54 components: - type: Transform - pos: -2.5,-11.5 + rot: 3.141592653589793 rad + pos: 14.5,1.5 parent: 1 - proto: BedsheetMedical entities: diff --git a/Resources/Maps/Shuttles/emergency_omega.yml b/Resources/Maps/Shuttles/emergency_omega.yml index e848b90e57..05ef0a6719 100644 --- a/Resources/Maps/Shuttles/emergency_omega.yml +++ b/Resources/Maps/Shuttles/emergency_omega.yml @@ -808,47 +808,55 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,8.5 parent: 603 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 73 components: - type: Transform - pos: 5.5,3.5 + rot: 1.5707963267948966 rad + pos: 5.5,9.5 parent: 603 - uid: 77 components: - type: Transform - pos: -10.5,9.5 + rot: 1.5707963267948966 rad + pos: 5.5,3.5 parent: 603 - uid: 81 components: - type: Transform - pos: -10.5,1.5 + rot: 1.5707963267948966 rad + pos: 5.5,1.5 parent: 603 - uid: 93 components: - type: Transform - pos: -10.5,11.5 + rot: 1.5707963267948966 rad + pos: 5.5,11.5 parent: 603 - uid: 96 components: - type: Transform - pos: 5.5,1.5 + rot: -1.5707963267948966 rad + pos: -10.5,1.5 parent: 603 - uid: 108 components: - type: Transform - pos: 5.5,11.5 + rot: -1.5707963267948966 rad + pos: -10.5,3.5 parent: 603 - uid: 142 components: - type: Transform - pos: -10.5,3.5 + rot: -1.5707963267948966 rad + pos: -10.5,9.5 parent: 603 - uid: 237 components: - type: Transform - pos: 5.5,9.5 + rot: -1.5707963267948966 rad + pos: -10.5,11.5 parent: 603 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_raven.yml b/Resources/Maps/Shuttles/emergency_raven.yml index b7989a49cb..0d7948c234 100644 --- a/Resources/Maps/Shuttles/emergency_raven.yml +++ b/Resources/Maps/Shuttles/emergency_raven.yml @@ -1536,47 +1536,55 @@ entities: - type: Transform pos: 16.5,-21.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 2058 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 - uid: 2443 components: - type: Transform - pos: 0.5,-4.5 + rot: -1.5707963267948966 rad + pos: 0.5,5.5 parent: 1 - uid: 2444 components: - type: Transform - pos: 0.5,-2.5 + rot: -1.5707963267948966 rad + pos: 0.5,-4.5 parent: 1 - uid: 2445 components: - type: Transform - pos: 0.5,3.5 + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 parent: 1 - uid: 2446 components: - type: Transform - pos: 0.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,-4.5 parent: 1 - uid: 2447 components: - type: Transform - pos: 22.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,-2.5 parent: 1 - uid: 2448 components: - type: Transform + rot: 1.5707963267948966 rad pos: 22.5,3.5 parent: 1 - uid: 2449 components: - type: Transform - pos: 22.5,-2.5 - parent: 1 - - uid: 2450 - components: - - type: Transform - pos: 22.5,-4.5 + rot: 1.5707963267948966 rad + pos: 22.5,5.5 parent: 1 - proto: AtmosFixNitrogenMarker entities: @@ -1677,439 +1685,266 @@ entities: - type: Transform pos: 4.5,10.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2232 components: - type: Transform pos: 4.5,11.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2233 components: - type: Transform pos: 4.5,12.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2234 components: - type: Transform pos: 7.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2235 components: - type: Transform pos: 8.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2236 components: - type: Transform pos: 9.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2237 components: - type: Transform pos: 13.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2238 components: - type: Transform pos: 14.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2239 components: - type: Transform pos: 15.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2240 components: - type: Transform pos: 18.5,12.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2241 components: - type: Transform pos: 18.5,11.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2242 components: - type: Transform pos: 18.5,10.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2243 components: - type: Transform pos: 13.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2244 components: - type: Transform pos: 14.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2245 components: - type: Transform pos: 9.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2246 components: - type: Transform pos: 8.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2247 components: - type: Transform pos: 7.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2248 components: - type: Transform pos: 15.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2249 components: - type: Transform pos: 19.5,24.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2250 components: - type: Transform pos: 19.5,25.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2251 components: - type: Transform pos: 19.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2252 components: - type: Transform pos: 18.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2253 components: - type: Transform pos: 18.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2254 components: - type: Transform pos: 17.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2255 components: - type: Transform pos: 16.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2256 components: - type: Transform pos: 16.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2257 components: - type: Transform pos: 15.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2258 components: - type: Transform pos: 14.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2259 components: - type: Transform pos: 13.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2260 components: - type: Transform pos: 12.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2261 components: - type: Transform pos: 11.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2262 components: - type: Transform pos: 10.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2263 components: - type: Transform pos: 9.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2264 components: - type: Transform pos: 8.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2265 components: - type: Transform pos: 7.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2266 components: - type: Transform pos: 6.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2267 components: - type: Transform pos: 6.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2268 components: - type: Transform pos: 5.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2269 components: - type: Transform pos: 4.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2270 components: - type: Transform pos: 4.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2271 components: - type: Transform pos: 3.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2272 components: - type: Transform pos: 3.5,25.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2273 components: - type: Transform pos: 3.5,24.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2283 components: - type: Transform pos: 12.5,-6.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2284 components: - type: Transform pos: 12.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2285 components: - type: Transform pos: 15.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2286 components: - type: Transform pos: 16.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2287 components: - type: Transform pos: 17.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2290 components: - type: Transform pos: 10.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2291 components: - type: Transform pos: 11.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2292 components: - type: Transform pos: 12.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2451 components: - type: Transform pos: 4.5,9.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2452 components: - type: Transform pos: 18.5,9.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - proto: BoozeDispenser entities: - uid: 2127 @@ -6694,19 +6529,19 @@ entities: rot: 3.141592653589793 rad pos: 16.5,23.5 parent: 1 -- proto: chem_master +- proto: ChemDispenser entities: - - uid: 1904 + - uid: 1905 components: - type: Transform - pos: 11.5,-4.5 + pos: 10.5,-4.5 parent: 1 -- proto: ChemDispenser +- proto: ChemMaster entities: - - uid: 1905 + - uid: 1904 components: - type: Transform - pos: 10.5,-4.5 + pos: 11.5,-4.5 parent: 1 - proto: CigarGoldCase entities: @@ -8107,8 +7942,6 @@ entities: - type: Transform pos: 8.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 1323 @@ -8116,8 +7949,6 @@ entities: - type: Transform pos: 14.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixer entities: - uid: 1324 @@ -8129,8 +7960,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasPassiveVent @@ -8141,16 +7970,12 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 1376 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 1380 @@ -10449,8 +10274,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1498 @@ -10458,8 +10281,6 @@ entities: - type: Transform pos: 10.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1499 @@ -10468,8 +10289,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1500 @@ -10478,8 +10297,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1501 @@ -10488,8 +10305,6 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1502 @@ -10497,8 +10312,6 @@ entities: - type: Transform pos: 14.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1503 @@ -10507,8 +10320,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1504 @@ -10517,8 +10328,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1505 @@ -10527,8 +10336,6 @@ entities: rot: 3.141592653589793 rad pos: 16.5,-25.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1506 @@ -10536,8 +10343,6 @@ entities: - type: Transform pos: 18.5,-15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1507 @@ -10546,8 +10351,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1508 @@ -10556,8 +10359,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1509 @@ -10565,8 +10366,6 @@ entities: - type: Transform pos: 4.5,-15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1510 @@ -10575,8 +10374,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-14.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1511 @@ -10585,8 +10382,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-14.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1512 @@ -10595,8 +10390,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1513 @@ -10605,8 +10398,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1514 @@ -10615,8 +10406,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1515 @@ -10625,8 +10414,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1516 @@ -10634,8 +10421,6 @@ entities: - type: Transform pos: 6.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1517 @@ -10644,8 +10429,6 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1518 @@ -10654,8 +10437,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1519 @@ -10664,8 +10445,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1520 @@ -10674,8 +10453,6 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1521 @@ -10684,8 +10461,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1522 @@ -10694,8 +10469,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1523 @@ -10703,8 +10476,6 @@ entities: - type: Transform pos: 11.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1524 @@ -10712,8 +10483,6 @@ entities: - type: Transform pos: 10.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1525 @@ -10722,8 +10491,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1526 @@ -10732,8 +10499,6 @@ entities: rot: -1.5707963267948966 rad pos: 14.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1589 @@ -10742,8 +10507,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1590 @@ -10752,8 +10515,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1591 @@ -10761,8 +10522,6 @@ entities: - type: Transform pos: 6.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1592 @@ -10770,8 +10529,6 @@ entities: - type: Transform pos: 11.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1593 @@ -10779,8 +10536,6 @@ entities: - type: Transform pos: 16.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1594 @@ -10789,8 +10544,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1595 @@ -10799,8 +10552,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1596 @@ -10809,8 +10560,6 @@ entities: rot: 3.141592653589793 rad pos: 16.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1597 @@ -10819,8 +10568,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1598 @@ -10829,8 +10576,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1599 @@ -10839,8 +10584,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1600 @@ -10848,8 +10591,6 @@ entities: - type: Transform pos: 11.5,8.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1638 @@ -10858,8 +10599,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1639 @@ -10868,8 +10607,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1640 @@ -10878,8 +10615,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1641 @@ -10888,8 +10623,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1642 @@ -10898,8 +10631,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1644 @@ -10908,8 +10639,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1645 @@ -10918,8 +10647,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1646 @@ -10928,8 +10655,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1691 @@ -10938,8 +10663,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1692 @@ -10948,8 +10671,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1693 @@ -10958,8 +10679,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1694 @@ -10968,8 +10687,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1695 @@ -10978,8 +10695,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1696 @@ -10988,8 +10703,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1697 @@ -10998,8 +10711,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1698 @@ -11008,8 +10719,6 @@ entities: rot: 3.141592653589793 rad pos: 18.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1699 @@ -11018,8 +10727,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1700 @@ -11028,8 +10735,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1701 @@ -11038,8 +10743,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1738 @@ -11048,8 +10751,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1739 @@ -11058,8 +10759,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1741 @@ -11067,8 +10766,6 @@ entities: - type: Transform pos: 8.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1742 @@ -11076,8 +10773,6 @@ entities: - type: Transform pos: 11.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1743 @@ -11085,8 +10780,6 @@ entities: - type: Transform pos: 14.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1744 @@ -11095,8 +10788,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1745 @@ -11105,8 +10796,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1746 @@ -11115,8 +10804,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1747 @@ -11125,8 +10812,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 2293 @@ -11135,8 +10820,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GeneratorBasic15kW @@ -12897,41 +12580,26 @@ entities: - type: Transform pos: 9.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2279 components: - type: Transform pos: 10.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2280 components: - type: Transform pos: 11.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2281 components: - type: Transform pos: 12.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2282 components: - type: Transform pos: 13.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - proto: ShuttleWindow entities: - uid: 2 @@ -13772,7 +13440,7 @@ entities: - type: Transform pos: 8.5,-21.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 2128 components: diff --git a/Resources/Maps/Shuttles/emergency_rod.yml b/Resources/Maps/Shuttles/emergency_rod.yml index 4235e1d57f..cc9623712d 100644 --- a/Resources/Maps/Shuttles/emergency_rod.yml +++ b/Resources/Maps/Shuttles/emergency_rod.yml @@ -771,8 +771,6 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockCommandLocked entities: - uid: 179 @@ -886,47 +884,55 @@ entities: - type: Transform pos: -4.5,17.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 395 + - uid: 236 components: - type: Transform - pos: -7.5,3.5 + rot: 1.5707963267948966 rad + pos: 4.5,3.5 parent: 2 - - uid: 396 + - uid: 237 components: - type: Transform - pos: -7.5,1.5 + rot: 1.5707963267948966 rad + pos: 4.5,-6.5 parent: 2 - - uid: 397 + - uid: 238 components: - type: Transform - pos: 4.5,3.5 + rot: 1.5707963267948966 rad + pos: 4.5,-4.5 parent: 2 - - uid: 398 + - uid: 239 components: - type: Transform + rot: 1.5707963267948966 rad pos: 4.5,1.5 parent: 2 - - uid: 399 + - uid: 240 components: - type: Transform - pos: 4.5,-4.5 + rot: -1.5707963267948966 rad + pos: -7.5,-6.5 parent: 2 - - uid: 400 + - uid: 241 components: - type: Transform - pos: 4.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,-4.5 parent: 2 - - uid: 401 + - uid: 242 components: - type: Transform - pos: -7.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,1.5 parent: 2 - - uid: 402 + - uid: 243 components: - type: Transform - pos: -7.5,-4.5 + rot: -1.5707963267948966 rad + pos: -7.5,3.5 parent: 2 - proto: BedsheetMedical entities: @@ -947,105 +953,66 @@ entities: - type: Transform pos: -6.5,20.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 706 components: - type: Transform pos: -6.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 707 components: - type: Transform pos: -5.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 708 components: - type: Transform pos: -4.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 709 components: - type: Transform pos: -3.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 710 components: - type: Transform pos: -2.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 711 components: - type: Transform pos: -1.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 712 components: - type: Transform pos: -0.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 713 components: - type: Transform pos: 0.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 714 components: - type: Transform pos: 1.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 715 components: - type: Transform pos: 3.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 716 components: - type: Transform pos: 2.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 717 components: - type: Transform pos: 3.5,20.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - proto: BoozeDispenser entities: - uid: 451 @@ -2466,8 +2433,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 325 @@ -2476,8 +2441,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 317 @@ -2910,8 +2873,6 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 413 @@ -2920,60 +2881,44 @@ entities: rot: 3.141592653589793 rad pos: 3.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 414 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 415 components: - type: Transform pos: 3.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 416 components: - type: Transform pos: -6.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 417 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 418 components: - type: Transform rot: 1.5707963267948966 rad pos: -6.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 419 components: - type: Transform pos: 3.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 420 components: - type: Transform pos: -6.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorBasic15kW entities: - uid: 344 @@ -3947,7 +3892,7 @@ entities: - type: Transform pos: -0.5,-10.5 parent: 2 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 450 components: diff --git a/Resources/Maps/Shuttles/emergency_wode.yml b/Resources/Maps/Shuttles/emergency_wode.yml index 7dcd4a60eb..96c75d012a 100644 --- a/Resources/Maps/Shuttles/emergency_wode.yml +++ b/Resources/Maps/Shuttles/emergency_wode.yml @@ -18,26 +18,13 @@ tilemap: entities: - proto: "" entities: - - uid: 1 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - - type: LoadedMap - uid: 2 components: - type: MetaData name: NT Evac Wode - type: Transform pos: -0.70836353,-1.958334 - parent: 1 + parent: invalid - type: MapGrid chunks: 0,0: @@ -669,55 +656,55 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,17.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 1 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,11.5 + parent: 2 - uid: 215 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,19.5 + pos: -7.5,9.5 parent: 2 - uid: 216 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,17.5 + pos: -7.5,17.5 parent: 2 - uid: 295 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,9.5 + pos: -7.5,19.5 parent: 2 - uid: 296 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,9.5 + rot: 1.5707963267948966 rad + pos: 5.5,19.5 parent: 2 - uid: 342 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,19.5 + rot: 1.5707963267948966 rad + pos: 5.5,17.5 parent: 2 - uid: 374 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,17.5 + rot: 1.5707963267948966 rad + pos: 5.5,11.5 parent: 2 - uid: 385 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,11.5 - parent: 2 - - uid: 386 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,11.5 + rot: 1.5707963267948966 rad + pos: 5.5,9.5 parent: 2 - proto: BedsheetMedical entities: @@ -2271,7 +2258,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,18.5 parent: 2 - - type: DeviceNetwork - uid: 175 components: - type: Transform diff --git a/Resources/Maps/Shuttles/escape_pod_small.yml b/Resources/Maps/Shuttles/escape_pod_small.yml index d0670f3991..4746f0d297 100644 --- a/Resources/Maps/Shuttles/escape_pod_small.yml +++ b/Resources/Maps/Shuttles/escape_pod_small.yml @@ -121,7 +121,7 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,0.5 parent: 29 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 9 components: diff --git a/Resources/Maps/Shuttles/mining.yml b/Resources/Maps/Shuttles/mining.yml index f8a4f040b9..b72d361f77 100644 --- a/Resources/Maps/Shuttles/mining.yml +++ b/Resources/Maps/Shuttles/mining.yml @@ -564,23 +564,38 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,3.5 parent: 181 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 128 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-3.5 parent: 181 - uid: 129 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-2.5 parent: 181 - uid: 130 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-1.5 parent: 181 + - uid: 131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 181 + - uid: 133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 181 - proto: BlastDoorExterior1 entities: - uid: 37 @@ -588,25 +603,16 @@ entities: - type: Transform pos: -5.5,-2.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - uid: 47 components: - type: Transform pos: -5.5,-3.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - uid: 69 components: - type: Transform pos: -5.5,-1.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - proto: BorgModuleMining entities: - uid: 94 @@ -911,8 +917,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-4.5 parent: 181 - - type: AtmosDevice - joinedGrid: 181 - proto: GasVentPump entities: - uid: 26 @@ -921,8 +925,6 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,-4.5 parent: 181 - - type: AtmosDevice - joinedGrid: 181 - proto: GeneratorBasic entities: - uid: 40 diff --git a/Resources/Maps/Shuttles/pirate.yml b/Resources/Maps/Shuttles/pirate.yml index 8d2912dbda..b0b3929054 100644 --- a/Resources/Maps/Shuttles/pirate.yml +++ b/Resources/Maps/Shuttles/pirate.yml @@ -578,23 +578,25 @@ entities: - type: Transform pos: -0.67882204,3.741016 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 27 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,15.5 + rot: -1.5707963267948966 rad + pos: -11.5,2.5 parent: 1 - uid: 28 components: - type: Transform - pos: -11.5,2.5 + rot: 1.5707963267948966 rad + pos: 8.5,2.5 parent: 1 - uid: 772 components: - type: Transform - pos: 8.5,2.5 + rot: 3.141592653589793 rad + pos: 3.5,15.5 parent: 1 - proto: Bed entities: @@ -2255,8 +2257,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPassiveVent entities: - uid: 329 @@ -2265,40 +2265,30 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 331 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 332 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 333 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 334 @@ -2725,16 +2715,12 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 406 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPressurePump entities: - uid: 407 @@ -2743,24 +2729,18 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 408 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 409 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentPump entities: - uid: 410 @@ -2768,94 +2748,70 @@ entities: - type: Transform pos: 2.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 411 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 412 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 413 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 414 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 415 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 416 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 417 components: - type: Transform pos: -2.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 418 components: - type: Transform pos: 3.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 419 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,8.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 420 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 421 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentScrubber entities: - uid: 422 @@ -2863,31 +2819,23 @@ entities: - type: Transform pos: 2.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 423 components: - type: Transform pos: -6.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 424 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 425 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GeneratorBasic15kW entities: - uid: 426 @@ -3156,8 +3104,6 @@ entities: - type: Transform pos: 3.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: OxygenCanister entities: - uid: 470 @@ -3165,36 +3111,26 @@ entities: - type: Transform pos: 1.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 471 components: - type: Transform pos: -10.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 472 components: - type: Transform pos: -9.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 473 components: - type: Transform pos: -4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 474 components: - type: Transform pos: 7.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: PaperBin5 entities: - uid: 475 @@ -3691,7 +3627,7 @@ entities: - type: Transform pos: -3.5,-1.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 549 components: @@ -3797,8 +3733,6 @@ entities: - type: Transform pos: 4.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: SubstationBasic entities: - uid: 564 diff --git a/Resources/Maps/Shuttles/trading_outpost.yml b/Resources/Maps/Shuttles/trading_outpost.yml index 43dba98924..36432bb89a 100644 --- a/Resources/Maps/Shuttles/trading_outpost.yml +++ b/Resources/Maps/Shuttles/trading_outpost.yml @@ -402,8 +402,6 @@ entities: - 402 - 790 - 789 - - type: AtmosDevice - joinedGrid: 2 - uid: 803 components: - type: Transform @@ -419,8 +417,6 @@ entities: - 411 - 789 - 790 - - type: AtmosDevice - joinedGrid: 2 - uid: 805 components: - type: Transform @@ -436,8 +432,6 @@ entities: - 408 - 783 - 782 - - type: AtmosDevice - joinedGrid: 2 - uid: 806 components: - type: Transform @@ -453,8 +447,6 @@ entities: - 409 - 783 - 782 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 387 @@ -465,8 +457,6 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockCargo entities: - uid: 1 @@ -519,17 +509,17 @@ entities: parent: 2 - proto: AirlockExternalGlassShuttleLocked entities: - - uid: 313 + - uid: 20 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-3.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 560 + - uid: 313 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-5.5 + pos: -2.5,-3.5 parent: 2 - uid: 562 components: @@ -537,11 +527,11 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-3.5 parent: 2 - - uid: 563 + - uid: 950 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,-5.5 + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 parent: 2 - proto: AirSensor entities: @@ -594,46 +584,54 @@ entities: - type: Transform pos: 2.5,-14.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 947 + - uid: 560 components: - type: Transform - pos: 13.5,-5.5 + rot: 1.5707963267948966 rad + pos: 13.5,-6.5 parent: 2 - - uid: 948 + - uid: 563 components: - type: Transform + rot: 1.5707963267948966 rad pos: 13.5,-3.5 parent: 2 - - uid: 949 + - uid: 947 components: - type: Transform + rot: 1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - - uid: 950 + - uid: 948 components: - type: Transform - pos: 13.5,-6.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 951 + - uid: 949 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 - - uid: 952 + - uid: 951 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-5.5 parent: 2 - - uid: 953 + - uid: 952 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-3.5 parent: 2 - - uid: 954 + - uid: 953 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-2.5 parent: 2 - proto: BoxFolderClipboard @@ -2748,144 +2746,96 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 82 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 108 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 110 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 329 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 331 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 335 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 337 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 338 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 339 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 340 components: - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 359 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 362 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 363 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 364 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - proto: ExtinguisherCabinetFilled entities: - uid: 360 @@ -2944,8 +2894,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 397 @@ -2954,16 +2902,12 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 414 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 316 @@ -3537,9 +3481,13 @@ entities: - uid: 511 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 0.5,5.5 parent: 2 + - type: Physics + canCollide: True + bodyType: Dynamic - uid: 513 components: - type: Transform @@ -3651,8 +3599,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 398 @@ -3661,46 +3607,34 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 400 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 401 components: - type: Transform pos: 2.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 402 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 403 components: - type: Transform pos: 8.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 412 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentScrubber entities: - uid: 399 @@ -3709,46 +3643,34 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 408 components: - type: Transform pos: 1.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 409 components: - type: Transform pos: 9.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 410 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 411 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 413 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorRTG entities: - uid: 367 @@ -4332,8 +4254,6 @@ entities: - type: Transform pos: 5.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: LiquidOxygenCanister entities: - uid: 384 @@ -4341,8 +4261,6 @@ entities: - type: Transform pos: 4.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: Paper entities: - uid: 775 @@ -4912,49 +4830,31 @@ entities: - type: Transform pos: 1.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 809 components: - type: Transform pos: 2.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 810 components: - type: Transform pos: 3.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 811 components: - type: Transform pos: 7.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 812 components: - type: Transform pos: 8.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 813 components: - type: Transform pos: 9.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - proto: SignalButton entities: - uid: 807 diff --git a/Resources/Maps/Shuttles/wizard.yml b/Resources/Maps/Shuttles/wizard.yml index a46944361d..7bdb8ca83d 100644 --- a/Resources/Maps/Shuttles/wizard.yml +++ b/Resources/Maps/Shuttles/wizard.yml @@ -343,7 +343,6 @@ entities: 74: -9,-3 75: -9,-1 76: 8,-1 - 77: 8,-3 - node: color: '#FFFFFFFF' id: WarnLineN @@ -604,7 +603,7 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,5.5 parent: 768 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 338 components: @@ -615,20 +614,20 @@ entities: - uid: 339 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-2.5 + rot: -1.5707963267948966 rad + pos: -10.5,-2.5 parent: 768 - uid: 340 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,-0.5 + pos: 9.5,-2.5 parent: 768 - uid: 341 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-2.5 + rot: -1.5707963267948966 rad + pos: -10.5,-0.5 parent: 768 - proto: AtmosFixNitrogenMarker entities: @@ -668,13 +667,6 @@ entities: - type: Transform pos: -1.5,-11.5 parent: 768 -- proto: BookFishing - entities: - - uid: 587 - components: - - type: Transform - pos: 3.5160534,-11.342207 - parent: 768 - proto: BookRandom entities: - uid: 217 @@ -687,6 +679,13 @@ entities: - type: Transform pos: -7.700435,2.7283878 parent: 768 +- proto: BookRandomStory + entities: + - uid: 587 + components: + - type: Transform + pos: 3.5160534,-11.342207 + parent: 768 - proto: BooksBag entities: - uid: 219 @@ -2188,8 +2187,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasMinerOxygen entities: - uid: 248 @@ -2198,8 +2195,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasMixerFlipped entities: - uid: 250 @@ -2211,8 +2206,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 768 - proto: GasPassiveVent entities: - uid: 251 @@ -2221,16 +2214,12 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 252 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasPipeBend entities: - uid: 253 @@ -2619,8 +2608,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasVentPump entities: - uid: 261 @@ -2629,109 +2616,81 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-9.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 264 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 292 components: - type: Transform pos: 5.5,-6.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 293 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-10.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 294 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-10.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 303 components: - type: Transform pos: -0.5,-3.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 327 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 328 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 329 components: - type: Transform pos: -0.5,8.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 330 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,3.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 331 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,4.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 332 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 333 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-2.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 362 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-6.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GeneratorBasic15kW entities: - uid: 358 @@ -3079,8 +3038,6 @@ entities: - type: Transform pos: -9.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: OxygenCanister entities: - uid: 602 @@ -3088,8 +3045,6 @@ entities: - type: Transform pos: -8.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: Paper entities: - uid: 622 diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 93ae89e9c3..b2c74352e1 100755 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -24,6 +24,7 @@ tilemap: 3: FloorGrayConcrete 2: FloorGrayConcreteMono 56: FloorGreenCircuit + 6: FloorHull 59: FloorHullReinforced 60: FloorHydro 63: FloorLaundry @@ -266,7 +267,7 @@ entities: version: 6 2,1: ind: 2,1 - tiles: fgAAAAAAfgAAAAAAJgAAAAABJgAAAAAAJgAAAAAAJgAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACbAAAAAAAfgAAAAAAJgAAAAABLwAAAAABLwAAAAADLwAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAJgAAAAACLwAAAAABLwAAAAADLwAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADTQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAAATQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACTQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fgAAAAAAfgAAAAAAJgAAAAABJgAAAAAAJgAAAAAAJgAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAegAAAAAAegAAAAAAegAAAAAAXQAAAAABXQAAAAACbAAAAAAAfgAAAAAAJgAAAAABLwAAAAABLwAAAAADLwAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAJgAAAAACLwAAAAABLwAAAAADLwAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADTQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAAATQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACTQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 4,-2: ind: 4,-2 @@ -342,7 +343,7 @@ entities: version: 6 -5,1: ind: -5,1 - tiles: AAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -5,0: ind: -5,0 @@ -402,7 +403,7 @@ entities: version: 6 -6,1: ind: -6,1 - tiles: HwAAAAACHwAAAAABHwAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAHwAAAAAAHwAAAAADHwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAAAHwAAAAACHwAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: HwAAAAACHwAAAAABHwAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAHwAAAAAAHwAAAAADHwAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAHwAAAAAAHwAAAAACHwAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -7,1: ind: -7,1 @@ -4060,6 +4061,7 @@ entities: 2814: 44,-15 2837: 48,-19 3484: 44,-25 + 3982: 40,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale @@ -4385,6 +4387,7 @@ entities: 2813: 44,-9 2838: 47,-18 3476: 44,-17 + 3983: 33,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale180 @@ -6400,18 +6403,21 @@ entities: 1: 136 2,-4: 1: 4369 - 0: 52228 + 0: 4 + 2: 52224 2,-5: 1: 4352 0: 58379 2,-3: 1: 33825 - 0: 140 + 2: 140 3,-4: - 0: 65419 + 0: 52363 + 2: 13056 3,-3: - 0: 35007 + 2: 51 1: 12288 + 0: 34956 3,-1: 1: 8739 0: 34952 @@ -6739,10 +6745,10 @@ entities: 0: 56797 5,-8: 0: 15359 - 2: 32768 + 3: 32768 5,-7: 0: 61491 - 2: 136 + 3: 136 5,-6: 0: 65535 5,-5: @@ -6753,9 +6759,9 @@ entities: 0: 65311 6,-8: 0: 255 - 2: 28672 + 3: 28672 6,-7: - 2: 119 + 3: 119 0: 61952 6,-6: 0: 61695 @@ -7979,8 +7985,7 @@ entities: 9,3: 0: 49080 10,4: - 0: 13107 - 1: 128 + 0: 13115 10,5: 0: 65535 10,6: @@ -7991,8 +7996,8 @@ entities: 10,3: 0: 48059 11,4: - 1: 560 - 0: 2184 + 0: 2187 + 1: 512 11,5: 0: 32767 11,6: @@ -8007,7 +8012,7 @@ entities: 0: 112 1: 28672 17,-7: - 3: 1 + 4: 1 1: 4104 17,-6: 1: 4593 @@ -8106,17 +8111,17 @@ entities: -13,7: 1: 39312 -12,8: - 4: 12 - 5: 3072 + 5: 12 + 6: 3072 -11,5: 0: 63351 -11,6: 0: 4607 1: 49152 -11,8: - 4: 1 + 5: 1 1: 17476 - 5: 256 + 6: 256 -11,7: 1: 17484 -10,5: @@ -8214,10 +8219,10 @@ entities: 0: 255 1: 57344 -8,11: - 6: 816 + 7: 816 1: 34952 -9,11: - 6: 2176 + 7: 2176 1: 8738 -8,12: 1: 34959 @@ -8228,7 +8233,7 @@ entities: -7,11: 0: 20206 -7,12: - 1: 16385 + 1: 49153 0: 1228 -6,9: 0: 65518 @@ -8237,7 +8242,7 @@ entities: -6,11: 0: 4095 -6,12: - 6: 61166 + 7: 61166 -5,9: 0: 65535 -5,10: @@ -8245,7 +8250,7 @@ entities: -5,11: 0: 36863 -5,12: - 6: 30515 + 7: 30515 0: 12 -4,9: 0: 65535 @@ -8255,7 +8260,7 @@ entities: 0: 4095 -4,12: 0: 1 - 6: 65518 + 7: 65518 -4,13: 1: 61680 -5,13: @@ -8269,7 +8274,7 @@ entities: -5,15: 1: 17487 -3,12: - 6: 13107 + 7: 13107 1: 34944 -3,13: 1: 47792 @@ -8335,7 +8340,7 @@ entities: 1: 61713 -12,9: 0: 16 - 6: 3084 + 7: 3084 -13,9: 1: 39305 -13,10: @@ -8344,19 +8349,19 @@ entities: 1: 35033 0: 12544 -12,10: - 3: 12 - 6: 3072 + 4: 12 + 7: 3072 -12,11: - 6: 12 + 7: 12 -11,9: - 6: 257 + 7: 257 1: 17476 -11,10: - 3: 1 - 6: 256 + 4: 1 + 7: 256 1: 17476 -11,11: - 6: 1 + 7: 1 1: 17476 -11,12: 1: 17487 @@ -8410,8 +8415,8 @@ entities: 1: 15 -13,12: 1: 34952 - 5: 48 - 4: 12288 + 6: 48 + 5: 12288 -12,13: 1: 61455 -13,13: @@ -8444,11 +8449,11 @@ entities: 1: 62671 -7,14: 1: 244 - 6: 57344 + 7: 57344 0: 1024 -7,15: 1: 61440 - 6: 238 + 7: 238 0: 1024 -7,16: 1: 65524 @@ -8507,8 +8512,8 @@ entities: -14,12: 0: 1 1: 8738 - 5: 128 - 4: 32768 + 6: 128 + 5: 32768 -17,12: 0: 52232 -16,13: @@ -8985,6 +8990,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 103.92799 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 235 moles: @@ -9367,8 +9387,8 @@ entities: id: docking43669 localAnchorB: -47.5,-40 localAnchorA: 0.5,0 - damping: 1560.1493 - stiffness: 14003.869 + damping: 1560.1505 + stiffness: 14003.88 - proto: AcousticGuitarInstrument entities: - uid: 2133 @@ -10505,18 +10525,6 @@ entities: - 24361 - 24358 - 9016 - - uid: 24662 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-14.5 - parent: 60 - - type: DeviceList - devices: - - 24659 - - 24661 - - 24665 - - 24657 - proto: AirAlarmElectronics entities: - uid: 13488 @@ -10536,6 +10544,20 @@ entities: rot: -1.5707963267948966 rad pos: -1.5599055,29.41489 parent: 60 +- proto: AirAlarmVox + entities: + - uid: 930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-14.5 + parent: 60 + - type: DeviceList + devices: + - 24661 + - 24665 + - 24657 + - 24659 - proto: AirCanister entities: - uid: 1679 @@ -12972,19 +12994,19 @@ entities: rot: -1.5707963267948966 rad pos: 48.5,-15.5 parent: 60 -- proto: AirlockQuartermasterGlassLocked +- proto: AirlockQuartermasterLocked entities: - - uid: 13086 + - uid: 1622 components: - type: MetaData - name: Quartermaster's Office + name: QM Room - type: Transform pos: 44.5,11.5 parent: 60 -- proto: AirlockQuartermasterLocked - entities: - uid: 13039 components: + - type: MetaData + name: QM Room - type: Transform pos: 46.5,13.5 parent: 60 @@ -13752,7 +13774,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: AltarSpawner entities: - uid: 14509 @@ -15000,6 +15022,83 @@ entities: - type: Transform pos: -45.5,40.5 parent: 60 +- proto: AtmosFixVoxMarker + entities: + - uid: 2925 + components: + - type: Transform + pos: 10.5,-12.5 + parent: 60 + - uid: 21758 + components: + - type: Transform + pos: 10.5,-13.5 + parent: 60 + - uid: 21762 + components: + - type: Transform + pos: 10.5,-11.5 + parent: 60 + - uid: 24768 + components: + - type: Transform + pos: 11.5,-13.5 + parent: 60 + - uid: 24769 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 60 + - uid: 24770 + components: + - type: Transform + pos: 11.5,-11.5 + parent: 60 + - uid: 24771 + components: + - type: Transform + pos: 12.5,-13.5 + parent: 60 + - uid: 24772 + components: + - type: Transform + pos: 12.5,-12.5 + parent: 60 + - uid: 24773 + components: + - type: Transform + pos: 12.5,-11.5 + parent: 60 + - uid: 24774 + components: + - type: Transform + pos: 13.5,-13.5 + parent: 60 + - uid: 24775 + components: + - type: Transform + pos: 13.5,-12.5 + parent: 60 + - uid: 24776 + components: + - type: Transform + pos: 13.5,-11.5 + parent: 60 + - uid: 24777 + components: + - type: Transform + pos: 11.5,-10.5 + parent: 60 + - uid: 24778 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 60 + - uid: 24779 + components: + - type: Transform + pos: 13.5,-10.5 + parent: 60 - proto: Autolathe entities: - uid: 5288 @@ -15252,6 +15351,11 @@ entities: - type: Transform pos: 30.5,-14.5 parent: 60 + - uid: 2923 + components: + - type: Transform + pos: 45.5,16.5 + parent: 60 - uid: 3230 components: - type: Transform @@ -15262,11 +15366,6 @@ entities: - type: Transform pos: -63.5,3.5 parent: 60 - - uid: 4515 - components: - - type: Transform - pos: 44.5,15.5 - parent: 60 - uid: 4529 components: - type: Transform @@ -15541,10 +15640,10 @@ entities: parent: 60 - proto: BedsheetQM entities: - - uid: 2923 + - uid: 5932 components: - type: Transform - pos: 44.5,15.5 + pos: 45.5,16.5 parent: 60 - proto: BedsheetRD entities: @@ -55937,12 +56036,6 @@ entities: - type: Transform pos: -19.5,-16.5 parent: 60 - - uid: 2419 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.577686,12.682198 - parent: 60 - uid: 2590 components: - type: Transform @@ -55982,6 +56075,12 @@ entities: rot: -1.5707963267948966 rad pos: -66.5,12.5 parent: 60 + - uid: 4515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.634438,14.652265 + parent: 60 - uid: 4627 components: - type: Transform @@ -56120,11 +56219,6 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,9.5 parent: 60 - - uid: 13094 - components: - - type: Transform - pos: 44.5,14.5 - parent: 60 - uid: 13255 components: - type: Transform @@ -56282,6 +56376,12 @@ entities: - type: Transform pos: -44.5,-9.5 parent: 60 + - uid: 24780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.431313,14.60539 + parent: 60 - proto: ChairOfficeLight entities: - uid: 128 @@ -67326,15 +67426,15 @@ entities: - type: Transform pos: -44.5,2.5 parent: 60 - - uid: 5535 + - uid: 2419 components: - type: Transform - pos: -63.5,2.5 + pos: 43.5,15.5 parent: 60 - - uid: 5932 + - uid: 5535 components: - type: Transform - pos: 43.5,14.5 + pos: -63.5,2.5 parent: 60 - uid: 6352 components: @@ -67481,10 +67581,10 @@ entities: parent: 60 - proto: DresserQuarterMasterFilled entities: - - uid: 1622 + - uid: 12640 components: - type: Transform - pos: 45.5,15.5 + pos: 44.5,16.5 parent: 60 - proto: DresserResearchDirectorFilled entities: @@ -68611,11 +68711,6 @@ entities: - type: Transform pos: -53.5,8.5 parent: 60 - - uid: 15570 - components: - - type: Transform - pos: 10.5,17.5 - parent: 60 - uid: 16408 components: - type: Transform @@ -96513,7 +96608,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: GasVentScrubber entities: - uid: 61 @@ -97868,7 +97963,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - uid: 24665 components: - type: Transform @@ -97877,7 +97972,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: GasVolumePump entities: - uid: 14850 @@ -101566,6 +101661,11 @@ entities: - type: Transform pos: -79.5,12.5 parent: 60 + - uid: 13086 + components: + - type: Transform + pos: 44.5,17.5 + parent: 60 - uid: 13110 components: - type: Transform @@ -101616,26 +101716,6 @@ entities: - type: Transform pos: 58.5,10.5 parent: 60 - - uid: 13193 - components: - - type: Transform - pos: 45.5,16.5 - parent: 60 - - uid: 13194 - components: - - type: Transform - pos: 44.5,16.5 - parent: 60 - - uid: 13195 - components: - - type: Transform - pos: 43.5,16.5 - parent: 60 - - uid: 13196 - components: - - type: Transform - pos: 42.5,17.5 - parent: 60 - uid: 13197 components: - type: Transform @@ -101664,7 +101744,7 @@ entities: - uid: 13202 components: - type: Transform - pos: 46.5,17.5 + pos: 43.5,17.5 parent: 60 - uid: 13251 components: @@ -103232,6 +103312,11 @@ entities: - type: Transform pos: 22.5,10.5 parent: 60 + - uid: 19408 + components: + - type: Transform + pos: 45.5,17.5 + parent: 60 - uid: 19409 components: - type: Transform @@ -108042,10 +108127,10 @@ entities: parent: 60 - proto: LockerQuarterMasterFilled entities: - - uid: 6038 + - uid: 15570 components: - type: Transform - pos: 43.5,15.5 + pos: 43.5,16.5 parent: 60 - proto: LockerResearchDirectorFilledHardsuit entities: @@ -111911,6 +111996,11 @@ entities: - type: Transform pos: -41.5,25.5 parent: 60 + - uid: 13193 + components: + - type: Transform + pos: -11.5,-26.5 + parent: 60 - uid: 17268 components: - type: Transform @@ -112028,14 +112118,6 @@ entities: - type: Transform pos: 34.5,9.5 parent: 60 - - uid: 21187 - components: - - type: Transform - pos: -10.5,-26.5 - parent: 60 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - uid: 21363 components: - type: Transform @@ -115019,6 +115101,12 @@ entities: rot: -1.5707963267948966 rad pos: 61.5,-27.5 parent: 60 + - uid: 13194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,15.5 + parent: 60 - uid: 13484 components: - type: Transform @@ -115309,14 +115397,6 @@ entities: parent: 60 - type: ApcPowerReceiver powerLoad: 0 - - uid: 19408 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,14.5 - parent: 60 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 19410 components: - type: Transform @@ -120187,11 +120267,6 @@ entities: - type: Transform pos: 21.5,27.5 parent: 60 - - uid: 11746 - components: - - type: Transform - pos: 43.5,16.5 - parent: 60 - uid: 11749 components: - type: Transform @@ -120281,7 +120356,7 @@ entities: - uid: 11972 components: - type: Transform - pos: 45.5,16.5 + pos: 45.5,17.5 parent: 60 - uid: 11973 components: @@ -120384,21 +120459,11 @@ entities: - type: Transform pos: 51.5,30.5 parent: 60 - - uid: 12640 - components: - - type: Transform - pos: 42.5,17.5 - parent: 60 - uid: 12644 components: - type: Transform pos: 25.5,27.5 parent: 60 - - uid: 12653 - components: - - type: Transform - pos: 44.5,16.5 - parent: 60 - uid: 12656 components: - type: Transform @@ -120525,6 +120590,11 @@ entities: - type: Transform pos: 45.5,19.5 parent: 60 + - uid: 13094 + components: + - type: Transform + pos: 43.5,17.5 + parent: 60 - uid: 13097 components: - type: Transform @@ -120540,10 +120610,10 @@ entities: - type: Transform pos: 42.5,18.5 parent: 60 - - uid: 13192 + - uid: 13196 components: - type: Transform - pos: 46.5,17.5 + pos: 44.5,17.5 parent: 60 - uid: 13207 components: @@ -122580,6 +122650,18 @@ entities: - type: Transform pos: -33.5,-21.5 parent: 60 + - uid: 21085 + components: + - type: Transform + pos: 44.5,17.5 + parent: 60 + - uid: 21186 + components: + - type: Transform + pos: 43.5,17.5 + parent: 60 + - type: DeviceLinkSink + invokeCounter: 1 - uid: 21334 components: - type: Transform @@ -122603,33 +122685,18 @@ entities: - uid: 21753 components: - type: Transform - pos: 43.5,16.5 + pos: 43.5,11.5 parent: 60 - uid: 21754 components: - type: Transform - pos: 44.5,16.5 + pos: 45.5,17.5 parent: 60 - uid: 21755 - components: - - type: Transform - pos: 45.5,16.5 - parent: 60 - - uid: 21758 components: - type: Transform pos: 45.5,11.5 parent: 60 - - uid: 21759 - components: - - type: Transform - pos: 43.5,11.5 - parent: 60 - - uid: 21760 - components: - - type: Transform - pos: 44.5,11.5 - parent: 60 - uid: 22463 components: - type: Transform @@ -123180,25 +123247,6 @@ entities: linkedPorts: 11697: - Pressed: Toggle - - uid: 21762 - components: - - type: Transform - pos: 46.5,15.5 - parent: 60 - - type: DeviceLinkSource - linkedPorts: - 21753: - - Pressed: Toggle - 21754: - - Pressed: Toggle - 21755: - - Pressed: Toggle - 21759: - - Pressed: Toggle - 21760: - - Pressed: Toggle - 21758: - - Pressed: Toggle - proto: SignalButtonDirectional entities: - uid: 1240 @@ -123814,6 +123862,29 @@ entities: 24352: - On: On - Off: Off + - uid: 21187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,15.5 + parent: 60 + - type: DeviceLinkSource + linkedPorts: + 21186: + - On: Open + - Off: Close + 21085: + - On: Open + - Off: Close + 21754: + - On: Open + - Off: Close + 21753: + - On: Open + - Off: Close + 21755: + - On: Open + - Off: Close - proto: SignAnomaly entities: - uid: 9496 @@ -130930,17 +131001,26 @@ entities: - type: Transform pos: 4.5,-7.5 parent: 60 -- proto: SurveillanceCameraRouterGeneral +- proto: SurveillanceCameraRouterConstructed entities: - - uid: 21085 + - uid: 18878 components: - type: Transform - pos: 24.5,18.5 + pos: -106.5,26.5 parent: 60 - - uid: 21186 +- proto: SurveillanceCameraRouterEngineering + entities: + - uid: 11746 components: - type: Transform - pos: -49.5,7.5 + pos: 10.5,17.5 + parent: 60 +- proto: SurveillanceCameraRouterGeneral + entities: + - uid: 24662 + components: + - type: Transform + pos: 8.5,-29.5 parent: 60 - proto: SurveillanceCameraRouterMedical entities: @@ -130965,17 +131045,17 @@ entities: parent: 60 - proto: SurveillanceCameraRouterService entities: - - uid: 930 + - uid: 18645 components: - type: Transform - pos: -11.5,-26.5 + pos: -49.5,7.5 parent: 60 - proto: SurveillanceCameraRouterSupply entities: - - uid: 2925 + - uid: 6038 components: - type: Transform - pos: 8.5,-29.5 + pos: 43.5,12.5 parent: 60 - proto: SurveillanceCameraScience entities: @@ -131666,6 +131746,13 @@ entities: - SurveillanceCameraSupply nameSet: True id: Salvage Airlock 1 +- proto: SurveillanceCameraWirelessRouterConstructed + entities: + - uid: 21760 + components: + - type: Transform + pos: -116.5,26.5 + parent: 60 - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 17205 @@ -132340,6 +132427,11 @@ entities: - type: Transform pos: 36.5,-1.5 parent: 60 + - uid: 13192 + components: + - type: Transform + pos: 44.5,14.5 + parent: 60 - uid: 13204 components: - type: Transform @@ -134183,16 +134275,6 @@ entities: showEnts: False occludes: True ents: [] - - uid: 18645 - components: - - type: Transform - pos: -106.5,26.5 - parent: 60 - - uid: 18878 - components: - - type: Transform - pos: -116.5,26.5 - parent: 60 - uid: 18890 components: - type: Transform @@ -134338,6 +134420,11 @@ entities: - type: Transform pos: -51.5,8.5 parent: 60 + - uid: 21759 + components: + - type: Transform + pos: 24.5,18.5 + parent: 60 - proto: TelecomServerCircuitboard entities: - uid: 18879 @@ -141588,6 +141675,11 @@ entities: - type: Transform pos: 22.5,27.5 parent: 60 + - uid: 12653 + components: + - type: Transform + pos: 42.5,17.5 + parent: 60 - uid: 12674 components: - type: Transform @@ -141859,6 +141951,11 @@ entities: rot: -1.5707963267948966 rad pos: 57.5,16.5 parent: 60 + - uid: 13195 + components: + - type: Transform + pos: 46.5,17.5 + parent: 60 - uid: 13224 components: - type: Transform diff --git a/Resources/Maps/cog.yml b/Resources/Maps/cog.yml index 5f4fb44022..53aac9f5b7 100644 --- a/Resources/Maps/cog.yml +++ b/Resources/Maps/cog.yml @@ -99,7 +99,7 @@ entities: version: 6 -2,-2: ind: -2,-2 - tiles: gQAAAAAAYAAAAAABYAAAAAABYAAAAAABgQAAAAAAYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAYAAAAAADYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAABgQAAAAAAYAAAAAABYAAAAAABYAAAAAADgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAACYAAAAAABYAAAAAADcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAABYAAAAAAAYAAAAAABcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAAAYAAAAAADYAAAAAACYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAADcwAAAAABYAAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAADcwAAAAABcwAAAAABcwAAAAACcwAAAAABcwAAAAABYAAAAAADYAAAAAACUQAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAABcwAAAAACYAAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAABgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAB + tiles: gQAAAAAAYAAAAAABYAAAAAABYAAAAAABgQAAAAAAYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAYAAAAAADYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAABgQAAAAAAYAAAAAABYAAAAAABYAAAAAADgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAACYAAAAAABYAAAAAADcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAABYAAAAAAAYAAAAAABcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAAAYAAAAAADYAAAAAACYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAADcwAAAAABYAAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAADcwAAAAABcwAAAAABcwAAAAACcwAAAAABcwAAAAABYAAAAAADYAAAAAACUQAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAABcwAAAAACYAAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAABgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAB version: 6 -2,0: ind: -2,0 @@ -127,7 +127,7 @@ entities: version: 6 -3,-3: ind: -3,-3 - tiles: gQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAACcwAAAAABcwAAAAADgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAAAcwAAAAADcwAAAAADgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAACYAAAAAACYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAABcwAAAAACcwAAAAADcwAAAAADgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADcwAAAAACcwAAAAABcwAAAAADcwAAAAABcwAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAABYAAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAACcwAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAABYAAAAAABgQAAAAAAYAAAAAABYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAA + tiles: gQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAACcwAAAAABcwAAAAADgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAAAcwAAAAADcwAAAAADgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAACYAAAAAACYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAABcwAAAAACcwAAAAADcwAAAAADgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADcwAAAAACcwAAAAABcwAAAAADcwAAAAABcwAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAABYAAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAACcwAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAABYAAAAAABgQAAAAAAYAAAAAABYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAA version: 6 -4,-2: ind: -4,-2 @@ -179,7 +179,7 @@ entities: version: 6 2,0: ind: 2,0 - tiles: gQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAABwAAAAAAAwAAAAABBwAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAgAAAAABBwAAAAAAAgAAAAABBwAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAABwAAAAAAgQAAAAAAYAAAAAADBwAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAgAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: gQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAAwAAAAABBwAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAAgAAAAAAAwAAAAAAgQAAAAAAAgAAAAABBwAAAAAAAgAAAAABBwAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAABwAAAAAAgQAAAAAABwAAAAAAAwAAAAAAYAAAAAADBwAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 2,-2: ind: 2,-2 @@ -283,15 +283,15 @@ entities: version: 6 2,1: ind: 2,1 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACgQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAYAAAAAABYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAADQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAIAAAAAACIAAAAAACIAAAAAADIAAAAAAAgQAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAABgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAIAAAAAADIAAAAAABIAAAAAADIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAADgQAAAAAAgQAAAAAAQgAAAAAAQgAAAAAAgQAAAAAAYAAAAAABgQAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAAAIAAAAAABIAAAAAABIAAAAAAAgQAAAAAAIAAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAIAAAAAAAIAAAAAADIAAAAAABIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAAAIAAAAAACIAAAAAACQgAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAIAAAAAADIAAAAAABIAAAAAACIAAAAAAAgQAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAABgQAAAAAAgQAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAYAAAAAADCwAAAAAAYAAAAAACYAAAAAACgQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAYAAAAAABYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAADQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAIAAAAAACIAAAAAACIAAAAAADIAAAAAAAgQAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAABgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAIAAAAAADIAAAAAABIAAAAAADIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAADgQAAAAAAgQAAAAAAQgAAAAAAQgAAAAAAgQAAAAAAYAAAAAABgQAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAAAIAAAAAABIAAAAAABIAAAAAAAgQAAAAAAIAAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAIAAAAAAAIAAAAAADIAAAAAABIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAAAIAAAAAACIAAAAAACQgAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAIAAAAAADIAAAAAABIAAAAAACIAAAAAAAgQAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAABgQAAAAAAgQAAAAAA version: 6 3,0: ind: 3,0 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,1: ind: 3,1 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABYAAAAAADYAAAAAABAgAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAwAAAAACBwAAAAAAAgAAAAABAgAAAAABgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABgQAAAAAAIAAAAAACIAAAAAADgQAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAgQAAAAAAYAAAAAABYAAAAAACYAAAAAACYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAADgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABYAAAAAADYAAAAAABAgAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAwAAAAACBwAAAAAAAgAAAAABAgAAAAABgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABgQAAAAAAIAAAAAACIAAAAAADgQAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAgQAAAAAAYAAAAAABYAAAAAACYAAAAAACYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAADgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,2: ind: 3,2 @@ -387,7 +387,7 @@ entities: version: 6 -4,3: ind: -4,3 - tiles: gAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAA + tiles: gAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAA version: 6 -3,3: ind: -3,3 @@ -687,11 +687,6 @@ entities: 2847: 31,47 2848: 30,47 2849: 29,47 - 2850: 29,45 - 2851: 30,45 - 2852: 33,45 - 2853: 34,45 - 2854: 35,45 2855: 35,46 2856: 35,47 2948: 59,42 @@ -1167,8 +1162,6 @@ entities: 1276: 54,-37 1277: 54,-20 1355: 19,3 - 1716: 41,13 - 1717: 41,11 1781: 33,35 1782: 33,36 1783: 33,37 @@ -1360,18 +1353,11 @@ entities: 1575: 39,8 1576: 38,7 1577: 37,6 - 1578: 36,7 1579: 35,7 1580: 34,7 1581: 34,7 1582: 34,8 1583: 35,8 - 1584: 37,8 - 1585: 37,8 - 1586: 36,6 - 1587: 36,6 - 1588: 37,7 - 1589: 36,7 1590: 38,8 1591: 39,7 1592: 34,10 @@ -1379,9 +1365,6 @@ entities: 1594: 36,10 1595: 36,10 1596: 35,10 - 1597: 41,12 - 1598: 41,12 - 1599: 41,12 1679: 52,22 1680: 52,23 1681: 53,24 @@ -1578,9 +1561,7 @@ entities: 4412: -34,-27 4413: -33,-29 4414: -37,-28 - 4415: -33,-26 4416: -30,-26 - 4417: -32,-25 4418: -36,-25 4419: -39,-23 4420: -41,-24 @@ -1593,7 +1574,6 @@ entities: 4427: -33,-21 4428: -25,-31 4429: -22,-29 - 4430: -23,-31 4431: -36,-48 4432: -32,-47 4433: -31,-48 @@ -1678,7 +1658,6 @@ entities: 4906: -15,-31 4907: -17,-30 4908: -13,-28 - 4909: -22,-31 4910: -22,-29 4911: -25,-29 4912: 13,-11 @@ -1956,6 +1935,73 @@ entities: 5728: -24,65 5729: -22,65 5730: -23,64 + 5970: 37,10 + 5971: 34,11 + 5972: 33,11 + 5973: 33,12 + 5974: 32,12 + 5975: 37,14 + 5976: 36,14 + 5977: 35,14 + 5978: 35,15 + 5979: 35,15 + 5980: 35,17 + 5981: 35,17 + 5982: 35,18 + 5983: 38,16 + 5984: 37,17 + 5985: 37,18 + 5986: 39,18 + 5987: 39,19 + 5988: 44,14 + 5989: 46,14 + 5990: 48,14 + 5991: 50,14 + 5992: 48,14 + 5993: 47,14 + 5994: 46,14 + 5995: 45,14 + 5996: 44,14 + 5997: 46,14 + 5998: 46,14 + 5999: 47,14 + 6000: 48,14 + 6001: 49,14 + 6002: 49,14 + 6003: 51,14 + 6004: 51,14 + 6005: 52,15 + 6006: 51,15 + 6007: 51,16 + 6008: 51,16 + 6009: 52,16 + 6010: 52,17 + 6011: 53,17 + 6012: 53,17 + 6013: 54,17 + 6014: 54,17 + 6015: 48,10 + 6016: 47,11 + 6017: 45,11 + 6018: 44,10 + 6019: 44,11 + 6020: 45,11 + 6021: 47,10 + 6022: 48,10 + 6023: 48,11 + 6024: 48,11 + 6025: 47,12 + 6026: 49,12 + 6027: 50,12 + 6028: 51,12 + 6029: 52,13 + 6030: 52,13 + 6031: 52,12 + 6032: 40,11 + 6033: 38,12 + 6034: 38,11 + 6035: 36,11 + 6036: 37,10 - node: cleanable: True color: '#FFFFFFFF' @@ -2305,7 +2351,6 @@ entities: 3282: 40,48 3283: 40,49 3284: 40,47 - 3285: 34,45 3286: 32,46 3287: 31,45 3288: 29,46 @@ -2665,7 +2710,6 @@ entities: 3661: -22,-47 3662: -21,-45 3663: -23,-45 - 3664: -27,-44 3665: -30,-43 3666: -31,-44 3667: -35,-44 @@ -2684,15 +2728,11 @@ entities: 3681: -30,-29 3682: -30,-27 3683: -33,-28 - 3684: -33,-27 - 3685: -29,-25 3686: -27,-25 3687: -26,-25 3688: -25,-25 3689: -26,-31 - 3690: -26,-29 3691: -24,-31 - 3692: -23,-31 3693: -22,-30 3694: -20,-25 3695: -22,-21 @@ -3394,6 +3434,11 @@ entities: id: Grassa4 decals: 2155: -1.7855573,23.949152 + - node: + color: '#FFFFFFFF' + id: Grassb4 + decals: + 6047: 0.3860445,30.988146 - node: color: '#FFFFFFFF' id: Grassb5 @@ -3440,6 +3485,11 @@ entities: 4079: 68.65254,42.701946 4080: 69.952675,44.10507 4081: 74.31514,52.17988 + 6042: 0.5364504,30.177677 + 6043: 1.2951236,30.04314 + 6044: 0.95249677,30.984898 + 6045: -3.5628335,30.935976 + 6046: -3.489414,24.993238 - node: color: '#FFFFFFFF' id: Grassd3 @@ -4077,8 +4127,6 @@ entities: decals: 72: -29,-26 73: -28,-26 - 74: -27,-26 - 75: -26,-26 76: -25,-26 94: -36,-29 95: -35,-29 @@ -4108,7 +4156,6 @@ entities: 3947: -31,-22 3948: -30,-22 4514: -32,-22 - 4515: -22,-32 4516: -26,-32 5602: -32,-40 5603: -31,-40 @@ -4284,6 +4331,9 @@ entities: 2809: 32,45 2810: 31,45 4966: 8,0 + 6038: 30,45 + 6040: 33,45 + 6041: 34,45 - node: color: '#FA750096' id: HalfTileOverlayGreyscale180 @@ -4293,6 +4343,9 @@ entities: 194: -30,-45 195: -31,-45 196: -35,-45 + 6048: -34,-45 + 6049: -32,-45 + 6050: -33,-45 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -4447,11 +4500,9 @@ entities: 616: -18,-21 617: -18,-20 4506: -27,-31 - 4507: -27,-30 - 4508: -27,-29 - 4509: -27,-28 4728: -18,-24 5607: -46,27 + 6090: -27,-30 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale270 @@ -4786,6 +4837,7 @@ entities: 638: -15,-20 5599: -30,-38 5600: -30,-39 + 6087: -22,-31 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale90 @@ -4958,12 +5010,15 @@ entities: 1357: 22,-1 1358: 20,-1 1359: 21,-1 + 6106: -27,-28 + 6108: -26,-28 - node: - angle: 1.5707963267948966 rad + angle: 3.141592653589793 rad color: '#FFFFFFFF' id: LoadingArea decals: - 1702: 36,6 + 6080: -26,-26 + 6081: -27,-26 - node: color: '#D381C996' id: MiniTileBoxOverlay @@ -5233,6 +5288,20 @@ entities: 2840: 44,49 4980: 12,-7 4981: 13,-7 + - node: + color: '#FA750096' + id: QuarterTileOverlayGreyscale + decals: + 6062: -34,-44 + 6063: -33,-44 + 6064: -32,-44 + 6065: -31,-44 + 6066: -30,-44 + 6067: -29,-44 + 6068: -28,-44 + 6069: -27,-44 + 6070: -26,-44 + 6071: -35,-44 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale180 @@ -5458,7 +5527,15 @@ entities: color: '#FA750096' id: QuarterTileOverlayGreyscale180 decals: - 201: -32,-45 + 6053: -35,-43 + 6054: -34,-43 + 6055: -33,-43 + 6056: -32,-43 + 6057: -31,-43 + 6058: -30,-43 + 6059: -29,-43 + 6060: -28,-43 + 6061: -27,-43 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale270 @@ -5538,6 +5615,7 @@ entities: decals: 122: -31,-29 5606: -32,-36 + 6095: -27,-29 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale270 @@ -5658,11 +5736,6 @@ entities: 5776: 29,-9 5777: 29,-8 5778: 29,-7 - - node: - color: '#FA750096' - id: QuarterTileOverlayGreyscale270 - decals: - 202: -34,-45 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 @@ -5871,11 +5944,6 @@ entities: 2610: 22,69 4955: 13,-12 5046: 28,43 - - node: - color: '#FA750096' - id: QuarterTileOverlayGreyscale90 - decals: - 203: -26,-43 - node: color: '#FFFFFFFF' id: Rock01 @@ -6110,6 +6178,7 @@ entities: 125: -24,-26 234: -43,-31 5601: -30,-40 + 6086: -22,-32 - node: color: '#D4D4D428' id: ThreeQuarterTileOverlayGreyscale180 @@ -6144,6 +6213,7 @@ entities: 1385: -21,-8 1386: -20,-7 2830: 48,47 + 6039: 35,45 - node: color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale180 @@ -6230,6 +6300,7 @@ entities: 1384: -25,-8 2826: 43,47 4963: 7,0 + 6037: 29,45 - node: color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale270 @@ -6301,6 +6372,7 @@ entities: id: ThreeQuarterTileOverlayGreyscale90 decals: 126: -24,-24 + 6084: -24,-28 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale90 @@ -6344,6 +6416,8 @@ entities: decals: 5192: 66,50 5194: -26,-51 + 5966: 37,19 + 5967: 43,14 - node: angle: 3.141592653589793 rad color: '#000000FF' @@ -6376,7 +6450,6 @@ entities: decals: 249: -28,-50 717: 32,-19 - 1703: 37,8 2226: -33,53 2227: -32,48 - node: @@ -6392,6 +6465,12 @@ entities: decals: 5193: 66,50 5195: -26,-51 + - node: + color: '#8C347FFF' + id: WarnBoxGreyscale + decals: + 5968: 37,19 + 5969: 43,14 - node: color: '#52B4E9FF' id: WarnCornerNE @@ -6694,8 +6773,6 @@ entities: 1413: -28,-4 1414: -28,-3 1431: -37,-11 - 1705: 36,7 - 1706: 36,8 1715: 36,17 2060: -13,5 2061: -13,6 @@ -6800,7 +6877,6 @@ entities: 1421: -36,-10 1514: 15,0 1515: 16,0 - 1704: 37,7 2222: -31,49 2223: -30,49 2375: -37,62 @@ -7334,7 +7410,7 @@ entities: -8,-9: 0: 26231 -7,-7: - 0: 65454 + 0: 65422 -7,-6: 0: 65311 -7,-8: @@ -7529,7 +7605,7 @@ entities: -8,-12: 0: 61687 -9,-12: - 0: 61695 + 0: 62719 -8,-11: 0: 4095 -9,-11: @@ -7878,11 +7954,11 @@ entities: 0: 238 8,1: 2: 15 - 0: 60928 + 0: 28160 8,2: - 0: 3886 + 0: 50982 8,3: - 0: 36623 + 0: 40759 9,-4: 0: 65295 9,-3: @@ -7939,30 +8015,30 @@ entities: 2: 15 0: 65280 9,2: - 0: 3887 + 0: 65327 9,3: - 0: 3855 + 0: 36623 9,4: 0: 61182 10,1: 2: 35 0: 59528 10,2: - 0: 44847 + 0: 47919 10,3: - 0: 12207 + 0: 10799 10,4: 0: 48059 11,1: 0: 12288 11,2: - 0: 57103 + 0: 65295 11,3: 0: 4063 11,4: 0: 63487 12,2: - 0: 44815 + 0: 48911 12,3: 0: 44943 8,-9: @@ -9228,10 +9304,14 @@ entities: 2: 4095 -15,13: 2: 4095 + -15,15: + 0: 3212 -14,13: 2: 20309 -14,15: - 0: 3780 + 0: 4079 + -14,14: + 0: 35016 -14,16: 2: 17604 -13,15: @@ -9559,6 +9639,12 @@ entities: parent: 2922 - type: InstantAction container: 2922 + - uid: 12128 + components: + - type: Transform + parent: 23717 + - type: InstantAction + container: 23717 - uid: 27130 components: - type: Transform @@ -9573,6 +9659,18 @@ entities: parent: 8997 - type: InstantAction container: 8997 + - uid: 12036 + components: + - type: Transform + parent: 4313 + - type: InstantAction + container: 4313 + - uid: 12037 + components: + - type: Transform + parent: 12064 + - type: InstantAction + container: 12064 - uid: 18678 components: - type: Transform @@ -10065,6 +10163,20 @@ entities: - 5280 - 10003 - 10026 + - uid: 12032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -50.5,-24.5 + parent: 12 + - type: DeviceList + devices: + - 9988 + - 801 + - 9987 + - 800 + - 23933 + - 23934 - uid: 13076 components: - type: Transform @@ -10636,6 +10748,7 @@ entities: - 1306 - 2094 - 25373 + - 12725 - uid: 25516 components: - type: Transform @@ -11197,6 +11310,11 @@ entities: - type: Transform pos: -22.5,-7.5 parent: 12 + - uid: 12143 + components: + - type: Transform + pos: 31.5,47.5 + parent: 12 - uid: 13514 components: - type: Transform @@ -11212,11 +11330,6 @@ entities: - type: Transform pos: -4.5,11.5 parent: 12 - - uid: 23700 - components: - - type: Transform - pos: 33.5,45.5 - parent: 12 - uid: 23899 components: - type: Transform @@ -11227,6 +11340,11 @@ entities: - type: Transform pos: -20.5,61.5 parent: 12 + - uid: 26068 + components: + - type: Transform + pos: 38.5,12.5 + parent: 12 - uid: 26913 components: - type: Transform @@ -12334,6 +12452,12 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,71.5 parent: 12 + - uid: 22328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,59.5 + parent: 12 - proto: AirlockExternalGlassAtmosphericsLocked entities: - uid: 4390 @@ -12454,6 +12578,12 @@ entities: - DoorStatus: DoorBolt 478: - DoorStatus: DoorBolt + - uid: 1061 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,62.5 + parent: 12 - uid: 2041 components: - type: Transform @@ -12532,6 +12662,12 @@ entities: linkedPorts: 19847: - DoorStatus: DoorBolt + - uid: 22277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,60.5 + parent: 12 - uid: 27232 components: - type: Transform @@ -12684,6 +12820,12 @@ entities: - type: Transform pos: -16.5,-62.5 parent: 12 + - uid: 22322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,57.5 + parent: 12 - uid: 24238 components: - type: Transform @@ -12696,11 +12838,6 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-39.5 parent: 12 - - uid: 29395 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - proto: AirlockExternalGlassShuttleLocked entities: - uid: 1968 @@ -12765,17 +12902,23 @@ entities: - type: Transform pos: -36.5,13.5 parent: 12 - - uid: 26256 + - uid: 22320 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-48.5 + rot: -1.5707963267948966 rad + pos: -57.5,62.5 parent: 12 - - uid: 29394 + - uid: 22321 components: - type: Transform rot: -1.5707963267948966 rad - pos: -54.5,62.5 + pos: -57.5,60.5 + parent: 12 + - uid: 26256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,-48.5 parent: 12 - proto: AirlockExternalLocked entities: @@ -13471,6 +13614,27 @@ entities: rot: 3.141592653589793 rad pos: 31.5,23.5 parent: 12 + - uid: 12011 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 12019 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,12.5 + parent: 12 + - uid: 12028 + components: + - type: Transform + pos: 33.5,9.5 + parent: 12 + - uid: 12122 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 - uid: 14946 components: - type: Transform @@ -13536,6 +13700,11 @@ entities: - type: Transform pos: -12.5,-5.5 parent: 12 + - uid: 22304 + components: + - type: Transform + pos: 37.5,9.5 + parent: 12 - uid: 22340 components: - type: Transform @@ -13908,12 +14077,6 @@ entities: parent: 12 - proto: AirlockMedicalLocked entities: - - uid: 1081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-46.5 - parent: 12 - uid: 2431 components: - type: Transform @@ -13988,6 +14151,13 @@ entities: rot: 3.141592653589793 rad pos: -39.5,-48.5 parent: 12 +- proto: AirlockMedicalScienceLocked + entities: + - uid: 514 + components: + - type: Transform + pos: -36.5,-46.5 + parent: 12 - proto: AirlockQuartermasterLocked entities: - uid: 8437 @@ -14626,12 +14796,18 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,-26.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 9988 components: - type: Transform rot: 1.5707963267948966 rad pos: -53.5,-22.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 9989 components: - type: Transform @@ -15634,11 +15810,6 @@ entities: - type: Transform pos: 5.3721876,30.61469 parent: 12 - - uid: 23716 - components: - - type: Transform - pos: 33.66482,47.484264 - parent: 12 - uid: 26399 components: - type: Transform @@ -15753,6 +15924,11 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-9.5 parent: 12 + - uid: 2448 + components: + - type: Transform + pos: 31.5,15.5 + parent: 12 - uid: 2543 components: - type: Transform @@ -15909,11 +16085,11 @@ entities: - type: Transform pos: 43.5,26.5 parent: 12 - - uid: 12086 + - uid: 11512 components: - type: Transform rot: 1.5707963267948966 rad - pos: 36.5,19.5 + pos: 36.5,18.5 parent: 12 - uid: 12423 components: @@ -16364,11 +16540,6 @@ entities: rot: 1.5707963267948966 rad pos: 64.5,-13.5 parent: 12 - - uid: 8533 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - uid: 9039 components: - type: Transform @@ -16413,6 +16584,24 @@ entities: rot: -1.5707963267948966 rad pos: 23.5,76.5 parent: 12 + - uid: 12033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,57.5 + parent: 12 + - uid: 12057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,62.5 + parent: 12 + - uid: 12645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,60.5 + parent: 12 - uid: 13558 components: - type: Transform @@ -16461,12 +16650,6 @@ entities: rot: 3.141592653589793 rad pos: -18.5,74.5 parent: 12 - - uid: 25445 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -54.5,62.5 - parent: 12 - proto: AtmosFixBlockerMarker entities: - uid: 93 @@ -17644,11 +17827,6 @@ entities: parent: 12 - proto: BaseComputer entities: - - uid: 689 - components: - - type: Transform - pos: 36.5,8.5 - parent: 12 - uid: 9825 components: - type: Transform @@ -18362,16 +18540,6 @@ entities: - type: Transform pos: -47.5,51.5 parent: 12 - - uid: 11959 - components: - - type: Transform - pos: 38.5,14.5 - parent: 12 - - uid: 11960 - components: - - type: Transform - pos: 34.5,14.5 - parent: 12 - uid: 16503 components: - type: Transform @@ -18541,6 +18709,13 @@ entities: - type: Transform pos: 6.5,66.5 parent: 12 +- proto: BlockGameArcadeComputerCircuitboard + entities: + - uid: 22318 + components: + - type: Transform + pos: 34.946262,45.383537 + parent: 12 - proto: Bloodpack entities: - uid: 13830 @@ -19126,6 +19301,12 @@ entities: parent: 12 - proto: BoxingBell entities: + - uid: 12634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,53.5 + parent: 12 - uid: 22635 components: - type: Transform @@ -19621,6 +19802,11 @@ entities: - type: Transform pos: -43.5,-13.5 parent: 12 + - uid: 1087 + components: + - type: Transform + pos: 37.5,6.5 + parent: 12 - uid: 1315 components: - type: Transform @@ -22086,6 +22272,11 @@ entities: - type: Transform pos: 0.5,-34.5 parent: 12 + - uid: 3892 + components: + - type: Transform + pos: 51.5,12.5 + parent: 12 - uid: 4119 components: - type: Transform @@ -22506,6 +22697,11 @@ entities: - type: Transform pos: 63.5,-5.5 parent: 12 + - uid: 5038 + components: + - type: Transform + pos: 52.5,11.5 + parent: 12 - uid: 5052 components: - type: Transform @@ -22576,6 +22772,16 @@ entities: - type: Transform pos: 27.5,-1.5 parent: 12 + - uid: 5554 + components: + - type: Transform + pos: 52.5,10.5 + parent: 12 + - uid: 5555 + components: + - type: Transform + pos: 51.5,10.5 + parent: 12 - uid: 5643 components: - type: Transform @@ -25506,6 +25712,11 @@ entities: - type: Transform pos: -11.5,-8.5 parent: 12 + - uid: 8533 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 8773 components: - type: Transform @@ -25576,6 +25787,11 @@ entities: - type: Transform pos: 85.5,-33.5 parent: 12 + - uid: 8864 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 - uid: 8877 components: - type: Transform @@ -26526,6 +26742,11 @@ entities: - type: Transform pos: 47.5,-0.5 parent: 12 + - uid: 11366 + components: + - type: Transform + pos: -53.5,61.5 + parent: 12 - uid: 11367 components: - type: Transform @@ -26536,6 +26757,11 @@ entities: - type: Transform pos: 43.5,26.5 parent: 12 + - uid: 11400 + components: + - type: Transform + pos: -52.5,61.5 + parent: 12 - uid: 11484 components: - type: Transform @@ -26546,11 +26772,61 @@ entities: - type: Transform pos: 31.5,30.5 parent: 12 + - uid: 11980 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 + - uid: 11981 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 11985 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 11998 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 + - uid: 11999 + components: + - type: Transform + pos: 38.5,18.5 + parent: 12 + - uid: 12010 + components: + - type: Transform + pos: 30.5,17.5 + parent: 12 + - uid: 12012 + components: + - type: Transform + pos: 29.5,17.5 + parent: 12 + - uid: 12013 + components: + - type: Transform + pos: 28.5,17.5 + parent: 12 + - uid: 12029 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 - uid: 12072 components: - type: Transform pos: -42.5,53.5 parent: 12 + - uid: 12077 + components: + - type: Transform + pos: 38.5,16.5 + parent: 12 - uid: 12087 components: - type: Transform @@ -26611,16 +26887,6 @@ entities: - type: Transform pos: 37.5,8.5 parent: 12 - - uid: 12099 - components: - - type: Transform - pos: 36.5,8.5 - parent: 12 - - uid: 12100 - components: - - type: Transform - pos: 35.5,8.5 - parent: 12 - uid: 12101 components: - type: Transform @@ -26656,21 +26922,6 @@ entities: - type: Transform pos: 33.5,9.5 parent: 12 - - uid: 12108 - components: - - type: Transform - pos: 30.5,10.5 - parent: 12 - - uid: 12109 - components: - - type: Transform - pos: 31.5,10.5 - parent: 12 - - uid: 12110 - components: - - type: Transform - pos: 32.5,10.5 - parent: 12 - uid: 12111 components: - type: Transform @@ -26681,85 +26932,20 @@ entities: - type: Transform pos: 34.5,10.5 parent: 12 - - uid: 12113 - components: - - type: Transform - pos: 35.5,10.5 - parent: 12 - - uid: 12114 - components: - - type: Transform - pos: 36.5,10.5 - parent: 12 - uid: 12115 components: - type: Transform pos: 37.5,10.5 parent: 12 - - uid: 12116 - components: - - type: Transform - pos: 38.5,10.5 - parent: 12 - - uid: 12117 - components: - - type: Transform - pos: 39.5,10.5 - parent: 12 - - uid: 12118 - components: - - type: Transform - pos: 40.5,10.5 - parent: 12 - uid: 12119 components: - type: Transform pos: 41.5,10.5 parent: 12 - - uid: 12120 - components: - - type: Transform - pos: 42.5,10.5 - parent: 12 - - uid: 12121 - components: - - type: Transform - pos: 43.5,10.5 - parent: 12 - - uid: 12122 - components: - - type: Transform - pos: 44.5,10.5 - parent: 12 - - uid: 12123 - components: - - type: Transform - pos: 45.5,10.5 - parent: 12 - uid: 12124 components: - type: Transform - pos: 46.5,10.5 - parent: 12 - - uid: 12125 - components: - - type: Transform - pos: 47.5,10.5 - parent: 12 - - uid: 12126 - components: - - type: Transform - pos: 48.5,10.5 - parent: 12 - - uid: 12127 - components: - - type: Transform - pos: 49.5,10.5 - parent: 12 - - uid: 12128 - components: - - type: Transform - pos: 49.5,11.5 + pos: 50.5,12.5 parent: 12 - uid: 12129 components: @@ -26806,36 +26992,6 @@ entities: - type: Transform pos: 41.5,12.5 parent: 12 - - uid: 12138 - components: - - type: Transform - pos: 40.5,12.5 - parent: 12 - - uid: 12139 - components: - - type: Transform - pos: 39.5,12.5 - parent: 12 - - uid: 12140 - components: - - type: Transform - pos: 38.5,12.5 - parent: 12 - - uid: 12141 - components: - - type: Transform - pos: 37.5,12.5 - parent: 12 - - uid: 12142 - components: - - type: Transform - pos: 36.5,12.5 - parent: 12 - - uid: 12143 - components: - - type: Transform - pos: 35.5,12.5 - parent: 12 - uid: 12144 components: - type: Transform @@ -26851,46 +27007,11 @@ entities: - type: Transform pos: 32.5,12.5 parent: 12 - - uid: 12147 - components: - - type: Transform - pos: 31.5,12.5 - parent: 12 - - uid: 12148 - components: - - type: Transform - pos: 30.5,12.5 - parent: 12 - - uid: 12149 - components: - - type: Transform - pos: 30.5,11.5 - parent: 12 - - uid: 12150 - components: - - type: Transform - pos: 30.5,13.5 - parent: 12 - - uid: 12151 - components: - - type: Transform - pos: 30.5,14.5 - parent: 12 - - uid: 12152 - components: - - type: Transform - pos: 31.5,14.5 - parent: 12 - uid: 12153 components: - type: Transform pos: 32.5,14.5 parent: 12 - - uid: 12154 - components: - - type: Transform - pos: 33.5,14.5 - parent: 12 - uid: 12155 components: - type: Transform @@ -26921,11 +27042,6 @@ entities: - type: Transform pos: 39.5,14.5 parent: 12 - - uid: 12161 - components: - - type: Transform - pos: 40.5,14.5 - parent: 12 - uid: 12162 components: - type: Transform @@ -27246,6 +27362,11 @@ entities: - type: Transform pos: 12.5,22.5 parent: 12 + - uid: 12636 + components: + - type: Transform + pos: 52.5,12.5 + parent: 12 - uid: 12714 components: - type: Transform @@ -34811,6 +34932,31 @@ entities: - type: Transform pos: 8.5,5.5 parent: 12 + - uid: 22298 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 + - uid: 22299 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 22300 + components: + - type: Transform + pos: 32.5,17.5 + parent: 12 + - uid: 22305 + components: + - type: Transform + pos: 31.5,17.5 + parent: 12 + - uid: 22313 + components: + - type: Transform + pos: 38.5,17.5 + parent: 12 - uid: 22519 components: - type: Transform @@ -34836,6 +34982,26 @@ entities: - type: Transform pos: 42.5,43.5 parent: 12 + - uid: 24196 + components: + - type: Transform + pos: -54.5,61.5 + parent: 12 + - uid: 24255 + components: + - type: Transform + pos: -55.5,61.5 + parent: 12 + - uid: 24256 + components: + - type: Transform + pos: -56.5,61.5 + parent: 12 + - uid: 24300 + components: + - type: Transform + pos: -52.5,60.5 + parent: 12 - uid: 24332 components: - type: Transform @@ -34846,6 +35012,26 @@ entities: - type: Transform pos: -28.5,10.5 parent: 12 + - uid: 24340 + components: + - type: Transform + pos: -52.5,59.5 + parent: 12 + - uid: 24456 + components: + - type: Transform + pos: -52.5,58.5 + parent: 12 + - uid: 24642 + components: + - type: Transform + pos: -52.5,57.5 + parent: 12 + - uid: 24651 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 - uid: 24803 components: - type: Transform @@ -38671,11 +38857,6 @@ entities: - type: Transform pos: -52.5,62.5 parent: 12 - - uid: 29744 - components: - - type: Transform - pos: -53.5,62.5 - parent: 12 - uid: 29745 components: - type: Transform @@ -38811,21 +38992,6 @@ entities: - type: Transform pos: -41.5,68.5 parent: 12 - - uid: 29819 - components: - - type: Transform - pos: -53.5,61.5 - parent: 12 - - uid: 29821 - components: - - type: Transform - pos: -54.5,62.5 - parent: 12 - - uid: 29823 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - uid: 29856 components: - type: Transform @@ -42671,6 +42837,11 @@ entities: - type: Transform pos: 10.5,17.5 parent: 12 + - uid: 11292 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 - uid: 11313 components: - type: Transform @@ -42891,6 +43062,71 @@ entities: - type: Transform pos: -2.5,34.5 parent: 12 + - uid: 11986 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 + - uid: 11987 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 + - uid: 11988 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 + - uid: 11989 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 + - uid: 11990 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - uid: 11991 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 + - uid: 11992 + components: + - type: Transform + pos: 32.5,12.5 + parent: 12 + - uid: 11993 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 11994 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 + - uid: 11995 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 11996 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 + - uid: 12125 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 12140 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 - uid: 13080 components: - type: Transform @@ -51165,6 +51401,11 @@ entities: - type: Transform pos: -60.5,27.5 parent: 12 + - uid: 6281 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 - uid: 6891 components: - type: Transform @@ -52610,6 +52851,11 @@ entities: - type: Transform pos: -47.5,15.5 parent: 12 + - uid: 11359 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 - uid: 11450 components: - type: Transform @@ -52630,6 +52876,16 @@ entities: - type: Transform pos: -46.5,53.5 parent: 12 + - uid: 11487 + components: + - type: Transform + pos: -52.5,59.5 + parent: 12 + - uid: 11517 + components: + - type: Transform + pos: 36.5,18.5 + parent: 12 - uid: 11525 components: - type: Transform @@ -52640,6 +52896,21 @@ entities: - type: Transform pos: -23.5,-24.5 parent: 12 + - uid: 12014 + components: + - type: Transform + pos: 31.5,15.5 + parent: 12 + - uid: 12142 + components: + - type: Transform + pos: 37.5,18.5 + parent: 12 + - uid: 12292 + components: + - type: Transform + pos: 39.5,17.5 + parent: 12 - uid: 12346 components: - type: Transform @@ -52865,11 +53136,6 @@ entities: - type: Transform pos: 37.5,19.5 parent: 12 - - uid: 12391 - components: - - type: Transform - pos: 36.5,19.5 - parent: 12 - uid: 12412 components: - type: Transform @@ -52935,6 +53201,11 @@ entities: - type: Transform pos: 50.5,25.5 parent: 12 + - uid: 12640 + components: + - type: Transform + pos: -52.5,58.5 + parent: 12 - uid: 12856 components: - type: Transform @@ -57250,21 +57521,56 @@ entities: - type: Transform pos: 40.5,-5.5 parent: 12 + - uid: 22311 + components: + - type: Transform + pos: 39.5,18.5 + parent: 12 + - uid: 22330 + components: + - type: Transform + pos: -53.5,57.5 + parent: 12 - uid: 22336 components: - type: Transform pos: -53.5,52.5 parent: 12 + - uid: 22338 + components: + - type: Transform + pos: -53.5,56.5 + parent: 12 - uid: 22524 components: - type: Transform pos: -2.5,34.5 parent: 12 + - uid: 23122 + components: + - type: Transform + pos: -53.5,58.5 + parent: 12 - uid: 23123 components: - type: Transform pos: -31.5,70.5 parent: 12 + - uid: 23713 + components: + - type: Transform + pos: -55.5,61.5 + parent: 12 + - uid: 23715 + components: + - type: Transform + pos: -57.5,61.5 + parent: 12 + - uid: 23716 + components: + - type: Transform + pos: -56.5,61.5 + parent: 12 - uid: 23897 components: - type: Transform @@ -57880,11 +58186,6 @@ entities: - type: Transform pos: -29.5,-42.5 parent: 12 - - uid: 25387 - components: - - type: Transform - pos: -53.5,55.5 - parent: 12 - uid: 25388 components: - type: Transform @@ -57910,6 +58211,21 @@ entities: - type: Transform pos: -53.5,51.5 parent: 12 + - uid: 25441 + components: + - type: Transform + pos: 40.5,17.5 + parent: 12 + - uid: 25443 + components: + - type: Transform + pos: 41.5,17.5 + parent: 12 + - uid: 25445 + components: + - type: Transform + pos: 41.5,16.5 + parent: 12 - uid: 25446 components: - type: Transform @@ -57940,6 +58256,46 @@ entities: - type: Transform pos: -27.5,64.5 parent: 12 + - uid: 25471 + components: + - type: Transform + pos: 41.5,15.5 + parent: 12 + - uid: 25472 + components: + - type: Transform + pos: 41.5,14.5 + parent: 12 + - uid: 25473 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 + - uid: 25474 + components: + - type: Transform + pos: 41.5,12.5 + parent: 12 + - uid: 25475 + components: + - type: Transform + pos: 41.5,11.5 + parent: 12 + - uid: 25476 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 + - uid: 25477 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 + - uid: 25478 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 - uid: 25479 components: - type: Transform @@ -57955,16 +58311,46 @@ entities: - type: Transform pos: 80.5,-0.5 parent: 12 + - uid: 25482 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 25483 components: - type: Transform pos: 80.5,2.5 parent: 12 + - uid: 25484 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 - uid: 25539 components: - type: Transform pos: 12.5,-8.5 parent: 12 + - uid: 25542 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 25543 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 + - uid: 25544 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - uid: 25545 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 - uid: 25633 components: - type: Transform @@ -58095,6 +58481,21 @@ entities: - type: Transform pos: -30.5,12.5 parent: 12 + - uid: 25833 + components: + - type: Transform + pos: 32.5,12.5 + parent: 12 + - uid: 25837 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 25838 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 - uid: 25870 components: - type: Transform @@ -60240,7 +60641,7 @@ entities: - uid: 13243 components: - type: Transform - pos: 47.56619,32.22632 + pos: 47.5362,32.56305 parent: 12 - uid: 13252 components: @@ -60262,6 +60663,18 @@ entities: - type: Transform pos: 50.394928,18.488558 parent: 12 + - uid: 22262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,36.5 + parent: 12 + - uid: 22267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,38.5 + parent: 12 - uid: 25974 components: - type: Transform @@ -60292,6 +60705,30 @@ entities: rot: -1.5707963267948966 rad pos: 40.87812,39.779 parent: 12 + - uid: 26093 + components: + - type: Transform + pos: 55.5,39.5 + parent: 12 + - uid: 26094 + components: + - type: Transform + pos: 55.5,35.5 + parent: 12 +- proto: CandleSmall + entities: + - uid: 16858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,39.5 + parent: 12 + - uid: 22266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,35.5 + parent: 12 - proto: CannabisSeeds entities: - uid: 4189 @@ -62359,12 +62796,24 @@ entities: rot: -1.5707963267948966 rad pos: -37.5,-21.5 parent: 12 + - uid: 12116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,39.5 + parent: 12 - uid: 12806 components: - type: Transform rot: 1.5707963267948966 rad pos: 52.5,34.5 parent: 12 + - uid: 12884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,38.5 + parent: 12 - uid: 13096 components: - type: Transform @@ -62461,12 +62910,6 @@ entities: rot: 1.5707963267948966 rad pos: 48.5,38.5 parent: 12 - - uid: 13188 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 49.5,39.5 - parent: 12 - uid: 13189 components: - type: Transform @@ -62533,12 +62976,6 @@ entities: rot: 1.5707963267948966 rad pos: 51.5,41.5 parent: 12 - - uid: 13210 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,38.5 - parent: 12 - uid: 13211 components: - type: Transform @@ -63003,6 +63440,26 @@ entities: rot: -1.5707963267948966 rad pos: -39.5,-53.5 parent: 12 + - uid: 2301 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 + - uid: 2311 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 + - uid: 2322 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 + - uid: 2324 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 - uid: 2487 components: - type: Transform @@ -63365,6 +63822,30 @@ entities: rot: 1.5707963267948966 rad pos: 9.5,10.5 parent: 12 + - uid: 5556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,14.5 + parent: 12 + - uid: 5559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - uid: 5560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 + - uid: 5561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 - uid: 5805 components: - type: Transform @@ -64283,6 +64764,11 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-9.5 parent: 12 + - uid: 9511 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 9528 components: - type: Transform @@ -64634,6 +65120,11 @@ entities: rot: 1.5707963267948966 rad pos: -19.5,68.5 parent: 12 + - uid: 11233 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 - uid: 11285 components: - type: Transform @@ -64705,6 +65196,11 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,26.5 parent: 12 + - uid: 11333 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 - uid: 11338 components: - type: Transform @@ -64715,6 +65211,11 @@ entities: - type: Transform pos: -3.5,9.5 parent: 12 + - uid: 11356 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 - uid: 11357 components: - type: Transform @@ -64802,6 +65303,58 @@ entities: rot: 1.5707963267948966 rad pos: 23.5,62.5 parent: 12 + - uid: 12004 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 + - uid: 12052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,12.5 + parent: 12 + - uid: 12073 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,13.5 + parent: 12 + - uid: 12075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,13.5 + parent: 12 + - uid: 12086 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,12.5 + parent: 12 + - uid: 12108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,12.5 + parent: 12 + - uid: 12109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,12.5 + parent: 12 + - uid: 12147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,12.5 + parent: 12 + - uid: 12161 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 - uid: 12701 components: - type: Transform @@ -65814,6 +66367,23 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-0.5 parent: 12 + - uid: 22286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - uid: 22291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,12.5 + parent: 12 + - uid: 22317 + components: + - type: Transform + pos: 41.5,10.5 + parent: 12 - uid: 22470 components: - type: Transform @@ -66494,6 +67064,34 @@ entities: - type: Transform pos: 32.5,17.5 parent: 12 + - uid: 24647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,12.5 + parent: 12 + - uid: 24648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,12.5 + parent: 12 + - uid: 24649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,11.5 + parent: 12 + - uid: 24652 + components: + - type: Transform + pos: 41.5,11.5 + parent: 12 + - uid: 24653 + components: + - type: Transform + pos: 41.5,12.5 + parent: 12 - uid: 24670 components: - type: Transform @@ -68226,6 +68824,11 @@ entities: rot: 3.141592653589793 rad pos: 37.48719,-39.759666 parent: 12 + - uid: 22319 + components: + - type: Transform + pos: 35.647026,45.447662 + parent: 12 - proto: CentrifugeMachineCircuitboard entities: - uid: 13003 @@ -68509,6 +69112,12 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,23.5 parent: 12 + - uid: 12020 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,10.5 + parent: 12 - uid: 12281 components: - type: Transform @@ -68575,12 +69184,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,28.5 parent: 12 - - uid: 13481 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,33.5 - parent: 12 - uid: 13482 components: - type: Transform @@ -70083,10 +70686,10 @@ entities: parent: 12 - proto: ChemistryHotplate entities: - - uid: 2301 + - uid: 12644 components: - type: Transform - pos: -32.5,-43.5 + pos: -32.5,-44.5 parent: 12 - uid: 26234 components: @@ -70141,6 +70744,14 @@ entities: rot: 3.141592653589793 rad pos: -14.476033,37.570534 parent: 12 +- proto: ChurchBell + entities: + - uid: 11461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,33.5 + parent: 12 - proto: ChurchOrganInstrument entities: - uid: 13110 @@ -70307,11 +70918,6 @@ entities: - type: Transform pos: 5.5,-15.5 parent: 12 - - uid: 8884 - components: - - type: Transform - pos: 55.5,-31.5 - parent: 12 - uid: 9567 components: - type: Transform @@ -70327,6 +70933,21 @@ entities: - type: Transform pos: -26.5,-5.5 parent: 12 + - uid: 11467 + components: + - type: Transform + pos: 76.5,-30.5 + parent: 12 + - uid: 12024 + components: + - type: Transform + pos: 49.5,11.5 + parent: 12 + - uid: 12031 + components: + - type: Transform + pos: 29.5,16.5 + parent: 12 - uid: 13940 components: - type: Transform @@ -70594,6 +71215,11 @@ entities: - type: Transform pos: 47.5,-36.5 parent: 12 + - uid: 12023 + components: + - type: Transform + pos: 49.5,10.5 + parent: 12 - uid: 13942 components: - type: Transform @@ -70836,10 +71462,20 @@ entities: - type: Transform pos: 37.5,-23.5 parent: 12 - - uid: 9511 + - uid: 12021 components: - type: Transform - pos: -52.5,61.5 + pos: 43.5,10.5 + parent: 12 + - uid: 12022 + components: + - type: Transform + pos: 36.5,10.5 + parent: 12 + - uid: 12113 + components: + - type: Transform + pos: -52.5,56.5 parent: 12 - uid: 12246 components: @@ -70916,6 +71552,11 @@ entities: - type: Transform pos: 0.5,54.5 parent: 12 + - uid: 24655 + components: + - type: Transform + pos: 30.5,10.5 + parent: 12 - uid: 24994 components: - type: Transform @@ -71176,6 +71817,11 @@ entities: - type: Transform pos: -26.5,52.5 parent: 12 + - uid: 23712 + components: + - type: Transform + pos: -54.5,63.5 + parent: 12 - uid: 25358 components: - type: Transform @@ -71200,6 +71846,11 @@ entities: - type: Transform pos: -27.5,49.5 parent: 12 + - uid: 23760 + components: + - type: Transform + pos: -52.5,63.5 + parent: 12 - uid: 25345 components: - type: Transform @@ -71223,7 +71874,7 @@ entities: - uid: 2043 components: - type: Transform - pos: -21.5,-19.5 + pos: -18.489782,-21.02709 parent: 12 - uid: 9108 components: @@ -71235,6 +71886,11 @@ entities: - type: Transform pos: -19.5,-3.5 parent: 12 + - uid: 12034 + components: + - type: Transform + pos: 29.404346,45.5935 + parent: 12 - uid: 16475 components: - type: Transform @@ -71540,11 +72196,6 @@ entities: - type: Transform pos: -21.489107,31.8025 parent: 12 - - uid: 23720 - components: - - type: Transform - pos: 33.493465,47.80226 - parent: 12 - proto: ClothingHeadHelmetRiot entities: - uid: 20866 @@ -71907,11 +72558,6 @@ entities: - type: Transform pos: -21.760761,31.400925 parent: 12 - - uid: 23721 - components: - - type: Transform - pos: 33.493465,47.484264 - parent: 12 - proto: ClothingOuterSuitMonkey entities: - uid: 2751 @@ -72545,6 +73191,11 @@ entities: rot: -1.5707963267948966 rad pos: 52.5,22.5 parent: 12 + - uid: 22307 + components: + - type: Transform + pos: 36.5,8.5 + parent: 12 - proto: ComputerCargoBounty entities: - uid: 8469 @@ -72850,10 +73501,11 @@ entities: parent: 12 - proto: ComputerRoboticsControl entities: - - uid: 2072 + - uid: 12138 components: - type: Transform - pos: -25.5,-27.5 + rot: 1.5707963267948966 rad + pos: -26.5,-30.5 parent: 12 - proto: ComputerSalvageExpedition entities: @@ -73507,6 +74159,102 @@ entities: rot: -1.5707963267948966 rad pos: 75.5,-37.5 parent: 12 + - uid: 11462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,-38.5 + parent: 12 + - uid: 11497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,16.5 + parent: 12 + - uid: 11498 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,14.5 + parent: 12 + - uid: 11499 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,14.5 + parent: 12 + - uid: 11507 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,14.5 + parent: 12 + - uid: 11518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,14.5 + parent: 12 + - uid: 11519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,14.5 + parent: 12 + - uid: 11528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,14.5 + parent: 12 + - uid: 11529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,14.5 + parent: 12 + - uid: 11531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,14.5 + parent: 12 + - uid: 11532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,14.5 + parent: 12 + - uid: 11533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,14.5 + parent: 12 + - uid: 11534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 12 + - uid: 11958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,14.5 + parent: 12 + - uid: 11959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,16.5 + parent: 12 + - uid: 11960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,15.5 + parent: 12 - uid: 11972 components: - type: Transform @@ -73533,514 +74281,106 @@ entities: pos: 35.5,15.5 parent: 12 - uid: 11977 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,14.5 - parent: 12 - - uid: 11978 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 36.5,14.5 - parent: 12 - - uid: 11979 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,14.5 - parent: 12 - - uid: 11980 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,14.5 - parent: 12 - - uid: 11981 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,14.5 - parent: 12 - - uid: 11982 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,14.5 - parent: 12 - - uid: 11983 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,14.5 - parent: 12 - - uid: 11985 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,8.5 - parent: 12 - - uid: 11986 components: - type: Transform rot: 3.141592653589793 rad - pos: 37.5,9.5 - parent: 12 - - uid: 11987 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,10.5 - parent: 12 - - uid: 11988 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,14.5 - parent: 12 - - uid: 11989 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,14.5 + pos: 52.5,14.5 parent: 12 - - uid: 11990 + - uid: 12030 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,14.5 + pos: 34.5,14.5 parent: 12 - - uid: 11991 + - uid: 12079 components: - type: Transform rot: 1.5707963267948966 rad - pos: 43.5,14.5 + pos: 52.5,17.5 parent: 12 - - uid: 11992 + - uid: 12081 components: - type: Transform rot: 1.5707963267948966 rad - pos: 44.5,14.5 + pos: 53.5,17.5 parent: 12 - - uid: 11993 + - uid: 12082 components: - type: Transform rot: 1.5707963267948966 rad - pos: 45.5,14.5 + pos: 54.5,17.5 parent: 12 - - uid: 11994 + - uid: 12083 components: - type: Transform rot: 1.5707963267948966 rad - pos: 46.5,14.5 + pos: 55.5,17.5 parent: 12 - - uid: 11995 + - uid: 12123 components: - type: Transform rot: 1.5707963267948966 rad - pos: 47.5,14.5 + pos: 35.5,14.5 parent: 12 - - uid: 11996 + - uid: 12290 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,14.5 + pos: 35.5,6.5 parent: 12 - - uid: 11997 + - uid: 12610 components: - type: Transform rot: 1.5707963267948966 rad - pos: 49.5,14.5 + pos: 56.5,40.5 parent: 12 - - uid: 11998 + - uid: 12611 components: - type: Transform rot: 1.5707963267948966 rad - pos: 50.5,14.5 + pos: 57.5,40.5 parent: 12 - - uid: 11999 + - uid: 12612 components: - type: Transform rot: 1.5707963267948966 rad - pos: 51.5,14.5 - parent: 12 - - uid: 12000 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,14.5 - parent: 12 - - uid: 12001 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,15.5 - parent: 12 - - uid: 12002 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,16.5 - parent: 12 - - uid: 12003 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,11.5 - parent: 12 - - uid: 12004 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,12.5 - parent: 12 - - uid: 12005 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,13.5 - parent: 12 - - uid: 12006 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,14.5 - parent: 12 - - uid: 12007 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,10.5 - parent: 12 - - uid: 12008 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,10.5 - parent: 12 - - uid: 12009 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,10.5 - parent: 12 - - uid: 12010 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,10.5 - parent: 12 - - uid: 12011 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,9.5 - parent: 12 - - uid: 12012 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,8.5 - parent: 12 - - uid: 12013 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,8.5 - parent: 12 - - uid: 12014 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,8.5 + pos: 58.5,40.5 parent: 12 - - uid: 12015 + - uid: 12613 components: - type: Transform rot: 1.5707963267948966 rad - pos: 35.5,7.5 + pos: 59.5,40.5 parent: 12 - - uid: 12016 + - uid: 12632 components: - type: Transform rot: 1.5707963267948966 rad - pos: 34.5,7.5 - parent: 12 - - uid: 12017 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,7.5 - parent: 12 - - uid: 12018 - components: - - type: Transform - rot: -1.5707963267948966 rad pos: 33.5,6.5 parent: 12 - - uid: 12019 + - uid: 12633 components: - type: Transform - rot: -1.5707963267948966 rad + rot: 1.5707963267948966 rad pos: 34.5,6.5 parent: 12 - - uid: 12020 + - uid: 12642 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,6.5 - parent: 12 - - uid: 12021 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,10.5 - parent: 12 - - uid: 12022 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 39.5,10.5 - parent: 12 - - uid: 12023 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,10.5 - parent: 12 - - uid: 12024 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,10.5 - parent: 12 - - uid: 12025 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,10.5 - parent: 12 - - uid: 12026 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,10.5 - parent: 12 - - uid: 12027 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,10.5 - parent: 12 - - uid: 12028 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,10.5 - parent: 12 - - uid: 12029 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,10.5 - parent: 12 - - uid: 12030 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,10.5 + pos: 77.5,-38.5 parent: 12 - - uid: 12031 + - uid: 22295 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,10.5 - parent: 12 - - uid: 12032 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,10.5 - parent: 12 - - uid: 12033 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,11.5 - parent: 12 - - uid: 12034 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,12.5 - parent: 12 - - uid: 12035 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,12.5 - parent: 12 - - uid: 12036 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,12.5 - parent: 12 - - uid: 12037 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,12.5 - parent: 12 - - uid: 12038 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,12.5 - parent: 12 - - uid: 12039 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,12.5 - parent: 12 - - uid: 12040 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,12.5 - parent: 12 - - uid: 12041 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,12.5 - parent: 12 - - uid: 12042 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,12.5 - parent: 12 - - uid: 12043 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,12.5 - parent: 12 - - uid: 12044 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,12.5 + pos: 36.5,6.5 parent: 12 - - uid: 12045 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,12.5 - parent: 12 - - uid: 12046 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,12.5 - parent: 12 - - uid: 12047 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,12.5 - parent: 12 - - uid: 12048 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,12.5 - parent: 12 - - uid: 12049 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,12.5 - parent: 12 - - uid: 12050 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,12.5 - parent: 12 - - uid: 12051 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,12.5 - parent: 12 - - uid: 12052 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,12.5 - parent: 12 - - uid: 12053 + - uid: 22312 components: - type: Transform rot: 3.141592653589793 rad - pos: 31.5,13.5 - parent: 12 - - uid: 12054 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,14.5 - parent: 12 - - uid: 12079 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 52.5,17.5 - parent: 12 - - uid: 12081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 53.5,17.5 - parent: 12 - - uid: 12082 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 54.5,17.5 - parent: 12 - - uid: 12083 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 55.5,17.5 - parent: 12 - - uid: 12610 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 56.5,40.5 - parent: 12 - - uid: 12611 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 57.5,40.5 - parent: 12 - - uid: 12612 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,40.5 - parent: 12 - - uid: 12613 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 59.5,40.5 + pos: 39.5,15.5 parent: 12 - proto: CrateAirlockKit entities: @@ -74746,11 +75086,6 @@ entities: - type: Transform pos: -21.553009,31.481783 parent: 12 - - uid: 23719 - components: - - type: Transform - pos: 33.38331,47.39865 - parent: 12 - proto: CryogenicSleepUnit entities: - uid: 21356 @@ -75166,6 +75501,11 @@ entities: parent: 12 - proto: DefaultStationBeaconEscapePod entities: + - uid: 509 + components: + - type: Transform + pos: -52.5,57.5 + parent: 12 - uid: 627 components: - type: Transform @@ -75181,11 +75521,6 @@ entities: - type: Transform pos: -16.5,-61.5 parent: 12 - - uid: 6281 - components: - - type: Transform - pos: 34.5,-42.5 - parent: 12 - uid: 7275 components: - type: Transform @@ -75201,11 +75536,6 @@ entities: - type: Transform pos: -22.5,65.5 parent: 12 - - uid: 29722 - components: - - type: Transform - pos: -53.5,61.5 - parent: 12 - proto: DefaultStationBeaconEvac entities: - uid: 7264 @@ -76018,6 +76348,28 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,17.5 parent: 12 + - uid: 12006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,12.5 + parent: 12 + - uid: 12007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - uid: 12008 + components: + - type: Transform + pos: 46.5,14.5 + parent: 12 + - uid: 12139 + components: + - type: Transform + pos: 41.5,19.5 + parent: 12 - uid: 12304 components: - type: Transform @@ -77202,6 +77554,12 @@ entities: rot: -1.5707963267948966 rad pos: -31.5,-42.5 parent: 12 + - uid: 789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,19.5 + parent: 12 - uid: 886 components: - type: Transform @@ -77220,6 +77578,18 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-10.5 parent: 12 + - uid: 1084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - uid: 1086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,19.5 + parent: 12 - uid: 1864 components: - type: Transform @@ -80011,6 +80381,26 @@ entities: rot: 1.5707963267948966 rad pos: 22.5,-17.5 parent: 12 + - uid: 11492 + components: + - type: Transform + pos: 41.5,18.5 + parent: 12 + - uid: 11493 + components: + - type: Transform + pos: 41.5,17.5 + parent: 12 + - uid: 11495 + components: + - type: Transform + pos: 41.5,15.5 + parent: 12 + - uid: 11496 + components: + - type: Transform + pos: 41.5,14.5 + parent: 12 - uid: 11961 components: - type: Transform @@ -80047,6 +80437,24 @@ entities: rot: 3.141592653589793 rad pos: 39.5,20.5 parent: 12 + - uid: 12002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 + - uid: 12003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,13.5 + parent: 12 + - uid: 12099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 - uid: 12295 components: - type: Transform @@ -80101,6 +80509,17 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,17.5 parent: 12 + - uid: 12391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,14.5 + parent: 12 + - uid: 12635 + components: + - type: Transform + pos: 41.5,16.5 + parent: 12 - uid: 12660 components: - type: Transform @@ -80279,6 +80698,12 @@ entities: rot: 1.5707963267948966 rad pos: 33.5,23.5 parent: 12 + - uid: 13188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,12.5 + parent: 12 - uid: 13597 components: - type: Transform @@ -82321,6 +82746,17 @@ entities: - type: Transform pos: -25.5,27.5 parent: 12 + - uid: 22275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,19.5 + parent: 12 + - uid: 22308 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 - uid: 22418 components: - type: Transform @@ -84914,6 +85350,18 @@ entities: rot: -1.5707963267948966 rad pos: 47.5,17.5 parent: 12 + - uid: 12333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 12 + - uid: 12637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,19.5 + parent: 12 - uid: 12702 components: - type: Transform @@ -85346,6 +85794,13 @@ entities: - type: Transform pos: -8.5,-24.5 parent: 12 + - uid: 11503 + components: + - type: MetaData + name: disposal unit to waste ejection + - type: Transform + pos: 37.5,19.5 + parent: 12 - uid: 12307 components: - type: Transform @@ -86158,6 +86613,13 @@ entities: - type: Transform pos: 77.61463,48.901142 parent: 12 +- proto: ElectricGuitarInstrument + entities: + - uid: 13481 + components: + - type: Transform + pos: -31.423407,7.5807095 + parent: 12 - proto: EmergencyFunnyOxygenTankFilled entities: - uid: 27129 @@ -87809,6 +88271,21 @@ entities: - type: Transform pos: -21.497362,-25.426727 parent: 12 + - uid: 12149 + components: + - type: Transform + pos: 80.2891,-38.43335 + parent: 12 + - uid: 12293 + components: + - type: Transform + pos: 80.56647,-38.438786 + parent: 12 + - uid: 12921 + components: + - type: Transform + pos: 80.773125,-38.438786 + parent: 12 - uid: 13505 components: - type: Transform @@ -87844,16 +88321,6 @@ entities: - type: Transform pos: 49.010647,46.51752 parent: 12 - - uid: 23711 - components: - - type: Transform - pos: 35.217464,45.578423 - parent: 12 - - uid: 23722 - components: - - type: Transform - pos: 33.741333,47.545418 - parent: 12 - proto: FirelockEdge entities: - uid: 2114 @@ -89264,6 +89731,15 @@ entities: rot: 3.141592653589793 rad pos: 36.5,23.5 parent: 12 + - uid: 12725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-45.5 + parent: 12 + - type: DeviceNetwork + deviceLists: + - 25448 - uid: 13165 components: - type: Transform @@ -90911,6 +91387,7 @@ entities: deviceLists: - 23930 - 1699 + - 12032 - uid: 23934 components: - type: Transform @@ -90920,6 +91397,7 @@ entities: deviceLists: - 23930 - 1699 + - 12032 - uid: 23935 components: - type: Transform @@ -91276,23 +91754,41 @@ entities: - uid: 4313 components: - type: Transform - pos: 78.68511,-38.520813 + pos: 79.504265,-32.459354 parent: 12 + - type: HandheldLight + toggleActionEntity: 12036 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 12036 + - type: ActionsContainer - uid: 12064 components: - type: Transform - pos: 78.33654,-38.539158 - parent: 12 - - uid: 23759 - components: - - type: Transform - pos: 71.5,42.5 - parent: 12 - - uid: 23760 - components: - - type: Transform - pos: 71.5,55.5 + pos: 78.500854,-32.475662 parent: 12 + - type: HandheldLight + toggleActionEntity: 12037 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 12037 + - type: ActionsContainer - proto: FloorDrain entities: - uid: 2303 @@ -93457,6 +93953,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' + - uid: 12047 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12671 components: - type: Transform @@ -94200,6 +94703,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 22316 + components: + - type: Transform + pos: 48.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22552 components: - type: Transform @@ -94732,6 +95242,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 25092 components: - type: Transform @@ -96610,6 +97128,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 2072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2110 components: - type: Transform @@ -102966,6 +103492,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 10693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 10891 components: - type: Transform @@ -103470,6 +104004,22 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' + - uid: 11426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11427 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 11863 components: - type: Transform @@ -103598,6 +104148,70 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 11979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,9.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,8.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12041 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,14.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,10.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12276 components: - type: Transform @@ -112866,14 +113480,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 23122 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 23125 components: - type: Transform @@ -113667,6 +114273,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 23711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 23884 components: - type: Transform @@ -114010,6 +114624,22 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 24644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 24804 components: - type: Transform @@ -114041,13 +114671,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 26070 - components: - - type: Transform - pos: 41.5,11.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 26201 components: - type: Transform @@ -115140,14 +115763,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#990000FF' - - uid: 27736 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 27894 components: - type: Transform @@ -115228,22 +115843,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' - - uid: 27914 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27915 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 27916 components: - type: Transform @@ -115268,38 +115867,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 27919 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27920 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27921 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 28216 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 28217 components: - type: Transform @@ -116621,6 +117188,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#990000FF' + - uid: 2309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,13.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2637 components: - type: Transform @@ -117168,14 +117743,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6154 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6751 components: - type: Transform @@ -117716,6 +118283,30 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 12043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12265 components: - type: Transform @@ -119050,6 +119641,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 23720 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 23948 components: - type: Transform @@ -119673,6 +120271,11 @@ entities: targetPressure: 4500 - type: AtmosPipeColor color: '#FF0000FF' + - uid: 12050 + components: + - type: Transform + pos: -45.5,-21.5 + parent: 12 - uid: 13521 components: - type: Transform @@ -119835,13 +120438,6 @@ entities: bodyType: Dynamic - proto: GasValve entities: - - uid: 789 - components: - - type: Transform - pos: -45.5,-21.5 - parent: 12 - - type: GasValve - open: False - uid: 4780 components: - type: Transform @@ -120438,6 +121034,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 12049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12735 components: - type: Transform @@ -120491,14 +121095,6 @@ entities: - 2611 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 12884 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,14.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 12998 components: - type: Transform @@ -121107,6 +121703,14 @@ entities: - 22248 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 22310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,7.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22331 components: - type: Transform @@ -121331,6 +121935,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,13.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 26312 components: - type: Transform @@ -121627,12 +122239,18 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,-27.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 801 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,-23.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 993 components: - type: Transform @@ -123150,15 +123768,15 @@ entities: - type: Transform pos: 28.5,13.5 parent: 12 - - uid: 11532 + - uid: 11535 components: - type: Transform - pos: 47.5,11.5 + pos: 47.5,13.5 parent: 12 - - uid: 11535 + - uid: 11983 components: - type: Transform - pos: 47.5,13.5 + pos: 34.5,10.5 parent: 12 - uid: 12065 components: @@ -123183,6 +123801,12 @@ entities: - type: Transform pos: -3.5,16.5 parent: 12 + - uid: 22309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,11.5 + parent: 12 - uid: 23438 components: - type: Transform @@ -123251,11 +123875,6 @@ entities: - type: Transform pos: -44.677162,44.579002 parent: 12 - - uid: 23712 - components: - - type: Transform - pos: 35.731533,45.223732 - parent: 12 - uid: 29613 components: - type: Transform @@ -123806,12 +124425,6 @@ entities: rot: 3.141592653589793 rad pos: -30.5,0.5 parent: 12 - - uid: 508 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-26.5 - parent: 12 - uid: 520 components: - type: Transform @@ -124243,12 +124856,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-45.5 parent: 12 - - uid: 1061 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-45.5 - parent: 12 - uid: 1062 components: - type: Transform @@ -124261,6 +124868,12 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-45.5 parent: 12 + - uid: 1065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,56.5 + parent: 12 - uid: 1285 components: - type: Transform @@ -124337,6 +124950,11 @@ entities: rot: 1.5707963267948966 rad pos: -38.5,-11.5 parent: 12 + - uid: 2048 + components: + - type: Transform + pos: 35.5,8.5 + parent: 12 - uid: 2090 components: - type: Transform @@ -125341,11 +125959,6 @@ entities: - type: Transform pos: 46.5,0.5 parent: 12 - - uid: 5038 - components: - - type: Transform - pos: 42.5,-2.5 - parent: 12 - uid: 5079 components: - type: Transform @@ -125465,11 +126078,6 @@ entities: rot: 3.141592653589793 rad pos: -53.5,65.5 parent: 12 - - uid: 5858 - components: - - type: Transform - pos: -54.5,61.5 - parent: 12 - uid: 5878 components: - type: Transform @@ -127339,11 +127947,6 @@ entities: rot: 3.141592653589793 rad pos: 12.5,22.5 parent: 12 - - uid: 11233 - components: - - type: Transform - pos: 44.5,-5.5 - parent: 12 - uid: 11242 components: - type: Transform @@ -127398,11 +128001,6 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,27.5 parent: 12 - - uid: 11292 - components: - - type: Transform - pos: 45.5,-1.5 - parent: 12 - uid: 11301 components: - type: Transform @@ -127415,16 +128013,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 12 - - uid: 11356 - components: - - type: Transform - pos: 42.5,5.5 - parent: 12 - - uid: 11359 - components: - - type: Transform - pos: 44.5,5.5 - parent: 12 - uid: 11360 components: - type: Transform @@ -127435,16 +128023,6 @@ entities: - type: Transform pos: 53.5,19.5 parent: 12 - - uid: 11428 - components: - - type: Transform - pos: 32.5,15.5 - parent: 12 - - uid: 11429 - components: - - type: Transform - pos: 33.5,15.5 - parent: 12 - uid: 11448 components: - type: Transform @@ -127462,16 +128040,6 @@ entities: - type: Transform pos: 51.5,11.5 parent: 12 - - uid: 11461 - components: - - type: Transform - pos: 51.5,13.5 - parent: 12 - - uid: 11462 - components: - - type: Transform - pos: 52.5,13.5 - parent: 12 - uid: 11468 components: - type: Transform @@ -127499,16 +128067,6 @@ entities: - type: Transform pos: 37.5,15.5 parent: 12 - - uid: 11511 - components: - - type: Transform - pos: 39.5,15.5 - parent: 12 - - uid: 11512 - components: - - type: Transform - pos: 40.5,15.5 - parent: 12 - uid: 11513 components: - type: Transform @@ -127524,36 +128082,11 @@ entities: - type: Transform pos: 49.5,15.5 parent: 12 - - uid: 11528 - components: - - type: Transform - pos: 46.5,11.5 - parent: 12 - - uid: 11529 - components: - - type: Transform - pos: 46.5,13.5 - parent: 12 - uid: 11530 components: - type: Transform pos: 44.5,13.5 parent: 12 - - uid: 11531 - components: - - type: Transform - pos: 43.5,13.5 - parent: 12 - - uid: 11533 - components: - - type: Transform - pos: 44.5,11.5 - parent: 12 - - uid: 11534 - components: - - type: Transform - pos: 43.5,11.5 - parent: 12 - uid: 11536 components: - type: Transform @@ -127920,6 +128453,17 @@ entities: - type: Transform pos: 59.5,38.5 parent: 12 + - uid: 11982 + components: + - type: Transform + pos: 33.5,13.5 + parent: 12 + - uid: 12055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 12 - uid: 12231 components: - type: Transform @@ -130477,6 +131021,38 @@ entities: rot: 3.141592653589793 rad pos: -34.5,75.5 parent: 12 + - uid: 22276 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 + - uid: 22294 + components: + - type: Transform + pos: 35.5,7.5 + parent: 12 + - uid: 22302 + components: + - type: Transform + pos: 45.5,15.5 + parent: 12 + - uid: 22303 + components: + - type: Transform + pos: 46.5,15.5 + parent: 12 + - uid: 22323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,61.5 + parent: 12 + - uid: 22325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,58.5 + parent: 12 - uid: 22337 components: - type: Transform @@ -130529,11 +131105,22 @@ entities: rot: 3.141592653589793 rad pos: -30.5,75.5 parent: 12 + - uid: 23759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,61.5 + parent: 12 - uid: 23887 components: - type: Transform pos: 49.5,9.5 parent: 12 + - uid: 24654 + components: + - type: Transform + pos: 30.5,11.5 + parent: 12 - uid: 24664 components: - type: Transform @@ -130573,16 +131160,6 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,51.5 parent: 12 - - uid: 25441 - components: - - type: Transform - pos: 45.5,0.5 - parent: 12 - - uid: 25443 - components: - - type: Transform - pos: -52.5,60.5 - parent: 12 - uid: 25447 components: - type: Transform @@ -131620,11 +132197,6 @@ entities: - type: Transform pos: -32.5,-45.5 parent: 12 - - uid: 27734 - components: - - type: Transform - pos: -33.5,-45.5 - parent: 12 - uid: 27843 components: - type: Transform @@ -131993,11 +132565,6 @@ entities: - type: Transform pos: 74.5,-6.5 parent: 12 - - uid: 29095 - components: - - type: Transform - pos: 42.5,1.5 - parent: 12 - uid: 29096 components: - type: Transform @@ -132016,33 +132583,11 @@ entities: rot: 3.141592653589793 rad pos: 42.5,2.5 parent: 12 - - uid: 29099 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-5.5 - parent: 12 - - uid: 29104 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-6.5 - parent: 12 - - uid: 29113 - components: - - type: Transform - pos: 44.5,1.5 - parent: 12 - uid: 29148 components: - type: Transform pos: 49.5,-1.5 parent: 12 - - uid: 29160 - components: - - type: Transform - pos: 44.5,-2.5 - parent: 12 - uid: 29210 components: - type: Transform @@ -132284,6 +132829,11 @@ entities: - type: Transform pos: 44.5,-16.5 parent: 12 + - uid: 12027 + components: + - type: Transform + pos: 46.5,13.5 + parent: 12 - uid: 12315 components: - type: Transform @@ -132773,6 +133323,18 @@ entities: - type: Transform pos: 66.5,45.5 parent: 12 + - uid: 12038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,42.5 + parent: 12 + - uid: 12039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,55.5 + parent: 12 - uid: 21359 components: - type: Transform @@ -132875,6 +133437,13 @@ entities: - type: Transform pos: 66.5,52.5 parent: 12 +- proto: HydroponicsTrayMachineCircuitboard + entities: + - uid: 12053 + components: + - type: Transform + pos: 35.258915,45.758537 + parent: 12 - proto: InflatableDoor entities: - uid: 28196 @@ -134351,6 +134920,11 @@ entities: parent: 12 - proto: LootSpawnerIndustrialFluff entities: + - uid: 2310 + components: + - type: Transform + pos: 34.5,6.5 + parent: 12 - uid: 2514 components: - type: Transform @@ -134396,11 +134970,6 @@ entities: - type: Transform pos: -12.5,68.5 parent: 12 - - uid: 25837 - components: - - type: Transform - pos: 35.5,12.5 - parent: 12 - uid: 27004 components: - type: Transform @@ -134418,11 +134987,6 @@ entities: - type: Transform pos: 39.5,-19.5 parent: 12 - - uid: 25839 - components: - - type: Transform - pos: 31.5,14.5 - parent: 12 - uid: 25951 components: - type: Transform @@ -134435,11 +134999,6 @@ entities: - type: Transform pos: -22.5,14.5 parent: 12 - - uid: 25840 - components: - - type: Transform - pos: 49.5,10.5 - parent: 12 - proto: LootSpawnerMedicalClassy entities: - uid: 26302 @@ -134484,11 +135043,6 @@ entities: - type: Transform pos: -23.5,50.5 parent: 12 - - uid: 25838 - components: - - type: Transform - pos: 33.5,8.5 - parent: 12 - uid: 25952 components: - type: Transform @@ -134565,17 +135119,17 @@ entities: parent: 12 - proto: MachineCentrifuge entities: - - uid: 2324 + - uid: 12069 components: - type: Transform - pos: -30.5,-43.5 + pos: -30.5,-44.5 parent: 12 - proto: MachineElectrolysisUnit entities: - - uid: 2322 + - uid: 26090 components: - type: Transform - pos: -31.5,-43.5 + pos: -31.5,-44.5 parent: 12 - proto: MachineFrame entities: @@ -134691,6 +135245,11 @@ entities: - type: Transform pos: 35.5,-11.5 parent: 12 + - uid: 11490 + components: + - type: Transform + pos: 37.5,21.5 + parent: 12 - uid: 19550 components: - type: Transform @@ -134793,11 +135352,31 @@ entities: - type: Transform pos: 42.5,58.5 parent: 12 + - uid: 24658 + components: + - type: Transform + pos: 33.5,14.5 + parent: 12 + - uid: 24659 + components: + - type: Transform + pos: 40.5,19.5 + parent: 12 + - uid: 24660 + components: + - type: Transform + pos: 39.5,10.5 + parent: 12 - uid: 24684 components: - type: Transform pos: 23.5,61.5 parent: 12 + - uid: 25058 + components: + - type: Transform + pos: 46.5,13.5 + parent: 12 - uid: 25809 components: - type: Transform @@ -134825,6 +135404,11 @@ entities: parent: 12 - proto: MaintenanceToolSpawner entities: + - uid: 689 + components: + - type: Transform + pos: 37.5,25.5 + parent: 12 - uid: 892 components: - type: Transform @@ -134880,6 +135464,11 @@ entities: - type: Transform pos: 2.5,64.5 parent: 12 + - uid: 24657 + components: + - type: Transform + pos: 30.5,14.5 + parent: 12 - uid: 24685 components: - type: Transform @@ -135144,7 +135733,7 @@ entities: - uid: 23435 components: - type: Transform - pos: 30.520699,45.458954 + pos: 30.665386,45.27058 parent: 12 - uid: 26224 components: @@ -135219,6 +135808,13 @@ entities: - type: Transform pos: 13.5,52.5 parent: 12 +- proto: MicrowaveMachineCircuitboard + entities: + - uid: 12035 + components: + - type: Transform + pos: 34.227154,45.685623 + parent: 12 - proto: Mirror entities: - uid: 60 @@ -135516,6 +136112,11 @@ entities: - type: Transform pos: -20.5,63.5 parent: 12 + - uid: 25839 + components: + - type: Transform + pos: 36.5,12.5 + parent: 12 - uid: 26386 components: - type: Transform @@ -135754,6 +136355,16 @@ entities: - type: Transform pos: -20.5,62.5 parent: 12 + - uid: 25840 + components: + - type: Transform + pos: 37.5,12.5 + parent: 12 + - uid: 26089 + components: + - type: Transform + pos: 30.5,16.5 + parent: 12 - uid: 26385 components: - type: Transform @@ -135809,8 +136420,16 @@ entities: - uid: 23717 components: - type: Transform - pos: 29.491083,45.55183 + pos: 30.165138,45.510162 parent: 12 + - type: GasTank + toggleActionEntity: 12128 + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 12128 - proto: PackPaperRollingFilters entities: - uid: 506 @@ -136576,11 +137195,6 @@ entities: parent: 12 - proto: PlasticFlapsClear entities: - - uid: 514 - components: - - type: Transform - pos: -26.5,-26.5 - parent: 12 - uid: 7468 components: - type: Transform @@ -136591,25 +137205,15 @@ entities: - type: Transform pos: 47.5,-21.5 parent: 12 - - uid: 12056 - components: - - type: Transform - pos: 37.5,9.5 - parent: 12 - - uid: 12057 - components: - - type: Transform - pos: 33.5,9.5 - parent: 12 - - uid: 12058 + - uid: 11511 components: - type: Transform - pos: 35.5,16.5 + pos: 39.5,15.5 parent: 12 - - uid: 12059 + - uid: 22293 components: - type: Transform - pos: 40.5,14.5 + pos: 35.5,6.5 parent: 12 - proto: PlasticFlapsOpaque entities: @@ -136633,6 +137237,16 @@ entities: - type: Transform pos: 41.5,-15.5 parent: 12 + - uid: 12001 + components: + - type: Transform + pos: 34.5,14.5 + parent: 12 + - uid: 12141 + components: + - type: Transform + pos: 35.5,16.5 + parent: 12 - proto: Plunger entities: - uid: 22413 @@ -136745,6 +137359,11 @@ entities: - type: Transform pos: -35.5,-9.5 parent: 12 + - uid: 12025 + components: + - type: Transform + pos: 40.5,10.5 + parent: 12 - uid: 15859 components: - type: Transform @@ -136862,6 +137481,11 @@ entities: - type: Transform pos: 34.5,-30.5 parent: 12 + - uid: 12631 + components: + - type: Transform + pos: 33.5,47.5 + parent: 12 - uid: 16570 components: - type: Transform @@ -136877,11 +137501,6 @@ entities: - type: Transform pos: -24.5,20.5 parent: 12 - - uid: 23701 - components: - - type: Transform - pos: 31.5,47.5 - parent: 12 - uid: 23702 components: - type: Transform @@ -136904,12 +137523,6 @@ entities: parent: 12 - proto: PosterBroken entities: - - uid: 12227 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,11.5 - parent: 12 - uid: 12228 components: - type: Transform @@ -137847,11 +138460,6 @@ entities: - type: Transform pos: -26.5,-41.5 parent: 12 - - uid: 2478 - components: - - type: Transform - pos: -23.5,-41.5 - parent: 12 - uid: 2479 components: - type: Transform @@ -138739,6 +139347,48 @@ entities: rot: -1.5707963267948966 rad pos: -40.5,-33.5 parent: 12 + - uid: 12016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,18.5 + parent: 12 + - uid: 12148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-45.5 + parent: 12 + - uid: 12151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,55.5 + parent: 12 + - uid: 12152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,42.5 + parent: 12 + - uid: 12154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,55.5 + parent: 12 + - uid: 12227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,6.5 + parent: 12 + - uid: 12243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,29.5 + parent: 12 - uid: 12507 components: - type: Transform @@ -138788,12 +139438,6 @@ entities: - type: Transform pos: 42.5,31.5 parent: 12 - - uid: 12910 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,27.5 - parent: 12 - uid: 12914 components: - type: Transform @@ -139301,24 +139945,12 @@ entities: - type: Transform pos: 65.5,50.5 parent: 12 - - uid: 16852 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 69.5,42.5 - parent: 12 - uid: 16853 components: - type: Transform rot: 1.5707963267948966 rad pos: 66.5,43.5 parent: 12 - - uid: 16854 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 73.5,42.5 - parent: 12 - uid: 16855 components: - type: Transform @@ -139331,16 +139963,6 @@ entities: rot: -1.5707963267948966 rad pos: 77.5,51.5 parent: 12 - - uid: 16857 - components: - - type: Transform - pos: 73.5,55.5 - parent: 12 - - uid: 16858 - components: - - type: Transform - pos: 69.5,55.5 - parent: 12 - uid: 16859 components: - type: Transform @@ -139376,12 +139998,6 @@ entities: - type: Transform pos: 72.5,45.5 parent: 12 - - uid: 16865 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,54.5 - parent: 12 - uid: 16866 components: - type: Transform @@ -139843,6 +140459,12 @@ entities: rot: 3.141592653589793 rad pos: -38.5,-24.5 parent: 12 + - uid: 22329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,42.5 + parent: 12 - uid: 22499 components: - type: Transform @@ -140448,62 +141070,26 @@ entities: - type: Transform pos: 54.5,-18.5 parent: 12 - - uid: 12069 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,6.5 - parent: 12 - - uid: 12070 - components: - - type: Transform - pos: 34.5,8.5 - parent: 12 - - uid: 12071 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,11.5 - parent: 12 - - uid: 12073 + - uid: 12005 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,17.5 + pos: 40.5,25.5 parent: 12 - uid: 12074 components: - type: Transform pos: 29.5,17.5 parent: 12 - - uid: 12075 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,13.5 - parent: 12 - - uid: 12076 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,20.5 - parent: 12 - - uid: 12077 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,16.5 - parent: 12 - uid: 12078 components: - type: Transform pos: 50.5,20.5 parent: 12 - - uid: 12921 + - uid: 12291 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,24.5 + rot: 1.5707963267948966 rad + pos: 37.5,16.5 parent: 12 - uid: 12922 components: @@ -140517,12 +141103,6 @@ entities: rot: 1.5707963267948966 rad pos: 34.5,27.5 parent: 12 - - uid: 12924 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,22.5 - parent: 12 - uid: 12925 components: - type: Transform @@ -140772,6 +141352,12 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,54.5 parent: 12 + - uid: 22296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 12 - uid: 22709 components: - type: Transform @@ -140828,6 +141414,12 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,47.5 parent: 12 + - uid: 25413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,13.5 + parent: 12 - uid: 25586 components: - type: Transform @@ -141257,12 +141849,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,64.5 parent: 12 - - uid: 16374 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,-19.5 - parent: 12 - uid: 16451 components: - type: Transform @@ -141402,28 +141988,16 @@ entities: - type: Transform pos: 48.5,53.5 parent: 12 - - uid: 23704 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,45.5 - parent: 12 - uid: 23705 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,46.5 parent: 12 - - uid: 23706 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,47.5 - parent: 12 - - uid: 23715 + - uid: 24656 components: - type: Transform - pos: 33.5,47.5 + pos: 30.5,14.5 parent: 12 - uid: 25008 components: @@ -141879,17 +142453,17 @@ entities: - type: Transform pos: -29.5,-9.5 parent: 12 - - uid: 12290 + - uid: 12017 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,8.5 + rot: 3.141592653589793 rad + pos: 52.5,13.5 parent: 12 - - uid: 12291 + - uid: 12294 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,7.5 + rot: -1.5707963267948966 rad + pos: 40.5,16.5 parent: 12 - uid: 19862 components: @@ -141897,6 +142471,12 @@ entities: rot: 3.141592653589793 rad pos: 7.5,2.5 parent: 12 + - uid: 22287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,13.5 + parent: 12 - uid: 22594 components: - type: Transform @@ -142498,6 +143078,26 @@ entities: rot: 3.141592653589793 rad pos: -2.5,18.5 parent: 12 + - uid: 24665 + components: + - type: Transform + pos: 34.5,13.5 + parent: 12 + - uid: 25387 + components: + - type: Transform + pos: 34.5,9.5 + parent: 12 + - uid: 25394 + components: + - type: Transform + pos: 49.5,13.5 + parent: 12 + - uid: 25395 + components: + - type: Transform + pos: 36.5,19.5 + parent: 12 - uid: 25713 components: - type: Transform @@ -142540,6 +143140,11 @@ entities: - type: Transform pos: 9.5,-28.5 parent: 12 + - uid: 12628 + components: + - type: Transform + pos: 16.5,54.5 + parent: 12 - uid: 18633 components: - type: Transform @@ -142635,12 +143240,6 @@ entities: rot: 3.141592653589793 rad pos: 32.5,52.5 parent: 12 - - uid: 24300 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,53.5 - parent: 12 - uid: 24301 components: - type: Transform @@ -142836,11 +143435,21 @@ entities: - type: Transform pos: 31.5,10.5 parent: 12 + - uid: 5858 + components: + - type: Transform + pos: 36.5,14.5 + parent: 12 - uid: 6153 components: - type: Transform pos: 48.5,25.5 parent: 12 + - uid: 6154 + components: + - type: Transform + pos: 35.5,17.5 + parent: 12 - uid: 6156 components: - type: Transform @@ -142856,25 +143465,30 @@ entities: - type: Transform pos: 30.5,12.5 parent: 12 - - uid: 13969 + - uid: 13971 components: - type: Transform - pos: 36.5,14.5 + pos: 40.5,12.5 parent: 12 - - uid: 13970 + - uid: 21705 components: - type: Transform - pos: 45.5,10.5 + pos: 16.5,7.5 parent: 12 - - uid: 13971 + - uid: 23706 components: - type: Transform - pos: 40.5,12.5 + pos: -44.5,58.5 parent: 12 - - uid: 21705 + - uid: 23721 components: - type: Transform - pos: 16.5,7.5 + pos: -56.5,62.5 + parent: 12 + - uid: 23722 + components: + - type: Transform + pos: -52.5,60.5 parent: 12 - uid: 23982 components: @@ -143749,11 +144363,17 @@ entities: parent: 12 - proto: Recycler entities: - - uid: 28462 + - uid: 12076 components: - type: Transform rot: -1.5707963267948966 rad - pos: 39.5,14.5 + pos: 38.5,14.5 + parent: 12 + - uid: 26092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-38.5 parent: 12 - proto: ReinforcedPlasmaWindow entities: @@ -144155,10 +144775,11 @@ entities: rot: 3.141592653589793 rad pos: -30.5,0.5 parent: 12 - - uid: 509 + - uid: 510 components: - type: Transform - pos: -23.5,-26.5 + rot: -1.5707963267948966 rad + pos: -53.5,56.5 parent: 12 - uid: 519 components: @@ -144511,12 +145132,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-45.5 parent: 12 - - uid: 1065 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-45.5 - parent: 12 - uid: 1066 components: - type: Transform @@ -144632,11 +145247,6 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-62.5 parent: 12 - - uid: 2448 - components: - - type: Transform - pos: -52.5,60.5 - parent: 12 - uid: 2454 components: - type: Transform @@ -144937,11 +145547,6 @@ entities: - type: Transform pos: 20.5,-33.5 parent: 12 - - uid: 3892 - components: - - type: Transform - pos: 45.5,0.5 - parent: 12 - uid: 4110 components: - type: Transform @@ -146944,11 +147549,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 12 - - uid: 11333 - components: - - type: Transform - pos: 44.5,-2.5 - parent: 12 - uid: 11336 components: - type: Transform @@ -146960,27 +147560,22 @@ entities: - type: Transform pos: 42.5,4.5 parent: 12 - - uid: 11363 - components: - - type: Transform - pos: 42.5,5.5 - parent: 12 - uid: 11365 components: - type: Transform pos: 44.5,4.5 parent: 12 - - uid: 11366 - components: - - type: Transform - pos: 44.5,5.5 - parent: 12 - uid: 11444 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-44.5 parent: 12 + - uid: 11516 + components: + - type: Transform + pos: 45.5,15.5 + parent: 12 - uid: 11584 components: - type: Transform @@ -147264,6 +147859,11 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,-46.5 parent: 12 + - uid: 12015 + components: + - type: Transform + pos: 46.5,15.5 + parent: 12 - uid: 12224 components: - type: Transform @@ -147601,6 +148201,12 @@ entities: - type: Transform pos: 64.5,59.5 parent: 12 + - uid: 12639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 12 - uid: 13049 components: - type: Transform @@ -149000,11 +149606,6 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,-7.5 parent: 12 - - uid: 22025 - components: - - type: Transform - pos: -54.5,61.5 - parent: 12 - uid: 22074 components: - type: Transform @@ -149055,6 +149656,22 @@ entities: - type: Transform pos: -10.5,-13.5 parent: 12 + - uid: 22314 + components: + - type: Transform + pos: 44.5,15.5 + parent: 12 + - uid: 22315 + components: + - type: Transform + pos: 43.5,15.5 + parent: 12 + - uid: 22326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,58.5 + parent: 12 - uid: 22856 components: - type: Transform @@ -149073,10 +149690,17 @@ entities: rot: 3.141592653589793 rad pos: 13.5,22.5 parent: 12 - - uid: 23177 + - uid: 23710 components: - type: Transform - pos: 45.5,-1.5 + rot: -1.5707963267948966 rad + pos: -57.5,61.5 + parent: 12 + - uid: 23896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,61.5 parent: 12 - uid: 24192 components: @@ -149202,11 +149826,6 @@ entities: rot: 1.5707963267948966 rad pos: -59.5,-26.5 parent: 12 - - uid: 25833 - components: - - type: Transform - pos: 42.5,-2.5 - parent: 12 - uid: 25871 components: - type: Transform @@ -149634,11 +150253,6 @@ entities: rot: 1.5707963267948966 rad pos: -59.5,-25.5 parent: 12 - - uid: 27735 - components: - - type: Transform - pos: -33.5,-45.5 - parent: 12 - uid: 27854 components: - type: Transform @@ -149896,17 +150510,6 @@ entities: rot: 3.141592653589793 rad pos: 50.5,-1.5 parent: 12 - - uid: 29094 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,-5.5 - parent: 12 - - uid: 29101 - components: - - type: Transform - pos: 42.5,1.5 - parent: 12 - uid: 29102 components: - type: Transform @@ -149919,18 +150522,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-4.5 parent: 12 - - uid: 29105 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-6.5 - parent: 12 - - uid: 29106 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-5.5 - parent: 12 - uid: 29107 components: - type: Transform @@ -149943,11 +150534,6 @@ entities: rot: 3.141592653589793 rad pos: 42.5,-3.5 parent: 12 - - uid: 29109 - components: - - type: Transform - pos: 44.5,1.5 - parent: 12 - uid: 29114 components: - type: Transform @@ -150826,6 +151412,11 @@ entities: - type: Transform pos: 59.56368,-40.504784 parent: 12 + - uid: 12121 + components: + - type: Transform + pos: 81.46926,-38.476837 + parent: 12 - uid: 22201 components: - type: Transform @@ -150925,11 +151516,23 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-22.5 parent: 12 + - uid: 11491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-26.5 + parent: 12 - uid: 14198 components: - type: Transform pos: 41.5,62.5 parent: 12 + - uid: 22278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-26.5 + parent: 12 - uid: 29667 components: - type: Transform @@ -151653,18 +152256,6 @@ entities: - Pressed: Toggle 9718: - Pressed: Toggle - - uid: 11958 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,15.5 - parent: 12 - - type: DeviceLinkSource - linkedPorts: - 11960: - - Pressed: Toggle - 11959: - - Pressed: Toggle - uid: 13643 components: - type: Transform @@ -152714,10 +153305,11 @@ entities: parent: 12 - proto: SignRobo entities: - - uid: 2048 + - uid: 12638 components: - type: Transform - pos: -25.5,-26.5 + rot: 3.141592653589793 rad + pos: -23.5,-26.5 parent: 12 - proto: SignSalvage entities: @@ -152982,17 +153574,23 @@ entities: parent: 12 - proto: SmallLight entities: - - uid: 25412 + - uid: 13210 components: - type: Transform rot: -1.5707963267948966 rad - pos: -41.5,65.5 + pos: -52.5,57.5 parent: 12 - - uid: 25413 + - uid: 24254 components: - type: Transform - rot: 3.141592653589793 rad - pos: -52.5,61.5 + rot: 1.5707963267948966 rad + pos: -56.5,61.5 + parent: 12 + - uid: 25412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,65.5 parent: 12 - uid: 27184 components: @@ -154379,15 +154977,6 @@ entities: parent: 12 - type: Stack count: 110 -- proto: SpaceCash1000 - entities: - - uid: 17437 - components: - - type: Transform - pos: -31.339855,7.33164 - parent: 12 - - type: Stack - count: 2000 - proto: SpaceVillainArcadeFilled entities: - uid: 12223 @@ -155854,6 +156443,12 @@ entities: parent: 12 - proto: Stool entities: + - uid: 1081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.443993,16.6724 + parent: 12 - uid: 2240 components: - type: Transform @@ -155886,192 +156481,12 @@ entities: - type: Transform pos: 44.528526,-31.458952 parent: 12 - - uid: 12333 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 36.498535,7.7225566 - parent: 12 - - uid: 12628 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12629 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12630 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,34.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12631 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,33.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12632 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,38.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12633 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12634 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,40.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12635 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,41.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12636 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,41.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12637 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,40.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12638 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12639 + - uid: 11438 components: - type: Transform - anchored: True rot: 1.5707963267948966 rad pos: 52.5,38.5 parent: 12 - - type: Physics - bodyType: Static - - uid: 12640 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12641 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12642 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,34.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12643 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,33.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12644 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12645 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12646 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,38.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12647 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - uid: 12652 components: - type: Transform @@ -156108,6 +156523,12 @@ entities: - type: Transform pos: 43.618725,30.520502 parent: 12 + - uid: 13970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,38.5 + parent: 12 - uid: 14949 components: - type: Transform @@ -156132,6 +156553,12 @@ entities: rot: 3.141592653589793 rad pos: 9.5,31.5 parent: 12 + - uid: 16374 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,35.5 + parent: 12 - uid: 16513 components: - type: Transform @@ -156155,6 +156582,30 @@ entities: rot: 1.5707963267948966 rad pos: -14.507796,2.708015 parent: 12 + - uid: 16852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,34.5 + parent: 12 + - uid: 16854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,33.5 + parent: 12 + - uid: 16857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,36.5 + parent: 12 + - uid: 16865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,39.5 + parent: 12 - uid: 17114 components: - type: Transform @@ -156185,6 +156636,12 @@ entities: rot: 3.141592653589793 rad pos: 5.5,52.5 parent: 12 + - uid: 17437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,40.5 + parent: 12 - uid: 21348 components: - type: Transform @@ -156232,6 +156689,66 @@ entities: rot: 3.141592653589793 rad pos: -31.5,55.5 parent: 12 + - uid: 22025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,39.5 + parent: 12 + - uid: 22255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,41.5 + parent: 12 + - uid: 22256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,40.5 + parent: 12 + - uid: 22257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,39.5 + parent: 12 + - uid: 22258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,33.5 + parent: 12 + - uid: 22259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,38.5 + parent: 12 + - uid: 22260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,34.5 + parent: 12 + - uid: 22263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,36.5 + parent: 12 + - uid: 22264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,35.5 + parent: 12 + - uid: 22265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,41.5 + parent: 12 - uid: 22601 components: - type: Transform @@ -156292,6 +156809,29 @@ entities: rot: 3.141592653589793 rad pos: 8.585284,67.665504 parent: 12 + - uid: 26069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,7.5 + parent: 12 + - uid: 26070 + components: + - type: Transform + pos: 34.5,7.5 + parent: 12 + - uid: 26091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,36.5 + parent: 12 + - uid: 26095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,35.5 + parent: 12 - proto: StoolBar entities: - uid: 14997 @@ -157608,6 +158148,17 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Ship construction tool room + - uid: 25396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,18.5 + parent: 12 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Disposals - uid: 28426 components: - type: Transform @@ -158565,6 +159116,11 @@ entities: parent: 12 - proto: Table entities: + - uid: 508 + components: + - type: Transform + pos: 33.5,45.5 + parent: 12 - uid: 1196 components: - type: Transform @@ -158721,21 +159277,6 @@ entities: - type: Transform pos: -6.5,-52.5 parent: 12 - - uid: 2309 - components: - - type: Transform - pos: -32.5,-43.5 - parent: 12 - - uid: 2310 - components: - - type: Transform - pos: -31.5,-43.5 - parent: 12 - - uid: 2311 - components: - - type: Transform - pos: -30.5,-43.5 - parent: 12 - uid: 2472 components: - type: Transform @@ -159170,6 +159711,12 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,24.5 parent: 12 + - uid: 11437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-44.5 + parent: 12 - uid: 11524 components: - type: Transform @@ -159182,6 +159729,12 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,7.5 parent: 12 + - uid: 12120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-44.5 + parent: 12 - uid: 12271 components: - type: Transform @@ -159192,6 +159745,17 @@ entities: - type: Transform pos: 46.5,18.5 parent: 12 + - uid: 12629 + components: + - type: Transform + pos: 34.5,45.5 + parent: 12 + - uid: 12643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-44.5 + parent: 12 - uid: 12717 components: - type: Transform @@ -159867,6 +160431,29 @@ entities: rot: 1.5707963267948966 rad pos: -50.5,36.5 parent: 12 + - uid: 22269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-41.5 + parent: 12 + - uid: 22270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-44.5 + parent: 12 + - uid: 22271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-41.5 + parent: 12 + - uid: 22274 + components: + - type: Transform + pos: 35.5,45.5 + parent: 12 - uid: 22364 components: - type: Transform @@ -160344,25 +160931,6 @@ entities: parent: 12 - proto: TableCounterMetal entities: - - uid: 1084 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -35.5,-44.5 - parent: 12 - - uid: 1086 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-41.5 - parent: 12 - - type: Label - - uid: 1087 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,-41.5 - parent: 12 - uid: 1726 components: - type: Transform @@ -160858,6 +161426,12 @@ entities: rot: 1.5707963267948966 rad pos: -28.5,65.5 parent: 12 + - uid: 12114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-45.5 + parent: 12 - uid: 13789 components: - type: Transform @@ -162010,7 +162584,7 @@ entities: - uid: 23708 components: - type: Transform - pos: 35.758244,47.302937 + pos: 33.80236,45.260162 parent: 12 - proto: ThermomachineHeaterMachineCircuitBoard entities: @@ -162022,7 +162596,7 @@ entities: - uid: 23707 components: - type: Transform - pos: 35.45225,47.645393 + pos: 33.333378,45.58308 parent: 12 - proto: Thruster entities: @@ -162246,6 +162820,11 @@ entities: - type: Transform pos: -7.5195446,10.430849 parent: 12 + - uid: 22272 + components: + - type: Transform + pos: 35.611034,46.54325 + parent: 12 - uid: 23672 components: - type: Transform @@ -162261,7 +162840,7 @@ entities: - uid: 8874 components: - type: Transform - pos: 79.6497,-38.50015 + pos: 79.54402,-38.46053 parent: 12 - uid: 9250 components: @@ -162283,11 +162862,6 @@ entities: - type: Transform pos: 17.45795,68.52991 parent: 12 - - uid: 23713 - components: - - type: Transform - pos: 35.611134,46.38351 - parent: 12 - uid: 23714 components: - type: Transform @@ -162337,6 +162911,11 @@ entities: - type: Transform pos: -22.5,-4.5 parent: 12 + - uid: 11488 + components: + - type: Transform + pos: 35.4026,46.314083 + parent: 12 - uid: 16474 components: - type: Transform @@ -163103,15 +163682,11 @@ entities: - Left: Forward - Middle: Off - Right: Forward - 11980: - - Left: Forward - - Right: Reverse - - Middle: Off - 11979: + 11959: - Left: Forward - Right: Reverse - Middle: Off - 11978: + 11960: - Left: Forward - Right: Reverse - Middle: Off @@ -163119,214 +163694,67 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 11981: - - Left: Forward - - Right: Reverse - - Middle: Off - 11982: - - Left: Forward - - Right: Reverse - - Middle: Off - 11983: - - Left: Forward - - Right: Reverse - - Middle: Off - 28462: - - Left: Forward - - Right: Reverse - - Middle: Off - 11988: - - Left: Forward - - Right: Reverse - - Middle: Off - 11989: - - Left: Forward - - Right: Reverse - - Middle: Off - 11990: - - Left: Forward - - Right: Reverse - - Middle: Off - 11991: - - Left: Forward - - Right: Reverse - - Middle: Off - 11992: - - Left: Forward - - Right: Reverse - - Middle: Off - 11993: - - Left: Forward - - Right: Reverse - - Middle: Off - 11995: - - Left: Forward - - Right: Reverse - - Middle: Off - 11994: - - Left: Forward - - Right: Reverse - - Middle: Off - 11996: - - Left: Forward - - Right: Reverse - - Middle: Off - 11997: - - Left: Forward - - Right: Reverse - - Middle: Off - 11998: - - Left: Forward - - Right: Reverse - - Middle: Off - 11999: + 11518: - Left: Forward - Right: Reverse - Middle: Off - 12006: + 11519: - Left: Forward - Right: Reverse - Middle: Off - 12005: + 11531: - Left: Forward - Right: Reverse - Middle: Off - 12004: + 11529: - Left: Forward - Right: Reverse - Middle: Off - 12003: - - Left: Forward - - Right: Reverse - - Middle: Off - 12007: - - Left: Forward - - Right: Reverse - - Middle: Off - 12008: - - Left: Forward - - Right: Reverse - - Middle: Off - 12009: - - Left: Forward - - Right: Reverse - - Middle: Off - 12010: - - Left: Forward - - Right: Reverse - - Middle: Off - 12011: - - Left: Forward - - Right: Reverse - - Middle: Off - 12012: - - Left: Forward - - Right: Reverse - - Middle: Off - 12013: - - Left: Forward - - Right: Reverse - - Middle: Off - 12014: - - Left: Forward - - Right: Reverse - - Middle: Off - 12017: - - Left: Forward - - Right: Reverse - - Middle: Off - 12016: - - Left: Forward - - Right: Reverse - - Middle: Off - 12015: - - Left: Forward - - Right: Reverse - - Middle: Off - 12018: - - Left: Forward - - Right: Reverse - - Middle: Off - 12019: - - Left: Forward - - Right: Reverse - - Middle: Off - 12020: - - Left: Forward - - Right: Reverse - - Middle: Off - 12054: - - Left: Forward - - Right: Reverse - - Middle: Off - 12000: - - Left: Forward - - Right: Reverse - - Middle: Off - 12001: - - Left: Forward - - Right: Reverse - - Middle: Off - 12002: - - Left: Forward - - Right: Reverse - - Middle: Off - 2489: - - Left: Forward - - Middle: Off - - Right: Forward - - uid: 12055 - components: - - type: Transform - pos: 38.5,8.5 - parent: 12 - - type: DeviceLinkSource - linkedPorts: - 11985: + 11532: - Left: Forward - Right: Reverse - Middle: Off - 11986: + 11533: - Left: Forward - Right: Reverse - Middle: Off - 11987: + 11534: - Left: Forward - Right: Reverse - Middle: Off - 12021: + 11497: - Left: Forward - Right: Reverse - Middle: Off - 12022: + 11958: - Left: Forward - Right: Reverse - Middle: Off - 12023: + 22312: - Left: Forward - Right: Reverse - Middle: Off - 12024: + 11507: - Left: Forward - Right: Reverse - Middle: Off - 12025: + 12076: - Left: Forward - Right: Reverse - Middle: Off - 12026: + 11498: - Left: Forward - Right: Reverse - Middle: Off - 12027: + 11528: - Left: Forward - Right: Reverse - Middle: Off - 12028: + 11499: - Left: Forward - Right: Reverse - Middle: Off - 12029: + 12123: - Left: Forward - Right: Reverse - Middle: Off @@ -163334,145 +163762,114 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 12031: - - Left: Forward - - Right: Reverse - - Middle: Off - 12032: - - Left: Forward - - Right: Reverse - - Middle: Off - 12033: - - Left: Forward - - Right: Reverse - - Middle: Off - 12034: - - Left: Forward - - Right: Reverse - - Middle: Off - 12035: - - Left: Forward - - Right: Reverse - - Middle: Off - 12036: - - Left: Forward - - Right: Reverse - - Middle: Off - 12037: - - Left: Forward - - Right: Reverse - - Middle: Off - 12038: - - Left: Forward - - Right: Reverse - - Middle: Off - 12039: - - Left: Forward - - Right: Reverse - - Middle: Off - 12040: - - Left: Forward - - Right: Reverse - - Middle: Off - 12041: - - Left: Forward - - Right: Reverse - - Middle: Off - 12042: - - Left: Forward - - Right: Reverse - - Middle: Off - 12043: - - Left: Forward - - Right: Reverse - - Middle: Off - 12044: - - Left: Forward - - Right: Reverse - - Middle: Off - 12045: - - Left: Forward - - Right: Reverse - - Middle: Off - 12046: + 2489: - Left: Forward - - Right: Reverse - Middle: Off - 12047: + - Right: Forward + - uid: 12085 + components: + - type: Transform + pos: 51.5,16.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12083: - Left: Forward - Right: Reverse - Middle: Off - 12049: + 12082: - Left: Forward - Right: Reverse - Middle: Off - 12048: + 12081: - Left: Forward - Right: Reverse - Middle: Off - 12050: + 12079: - Left: Forward - Right: Reverse - Middle: Off - 12051: + - uid: 12127 + components: + - type: Transform + pos: 78.5,-38.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12642: - Left: Forward - Right: Reverse - Middle: Off - 12052: + 26092: - Left: Forward - Right: Reverse - Middle: Off - 12053: + 11462: - Left: Forward - Right: Reverse - Middle: Off - - uid: 12085 + - uid: 12615 components: - type: Transform - pos: 51.5,16.5 + pos: 56.5,39.5 parent: 12 - type: DeviceLinkSource linkedPorts: - 12083: + 12614: + - Left: Open + - Right: Open + - Middle: Close + 12613: - Left: Forward - Right: Reverse - Middle: Off - 12082: + 12612: - Left: Forward - Right: Reverse - Middle: Off - 12081: + 12611: - Left: Forward - Right: Reverse - Middle: Off - 12079: + 12610: - Left: Forward - Right: Reverse - Middle: Off - - uid: 12615 + - uid: 12924 components: - type: Transform - pos: 56.5,39.5 + pos: -25.5,-28.5 parent: 12 - type: DeviceLinkSource linkedPorts: - 12614: + 11491: - Left: Open - Right: Open - Middle: Close - 12613: + 22278: + - Left: Open + - Right: Open + - Middle: Close + - uid: 13969 + components: + - type: Transform + pos: 33.5,7.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12632: - Left: Forward - Right: Reverse - Middle: Off - 12612: + 12633: - Left: Forward - Right: Reverse - Middle: Off - 12611: + 12290: - Left: Forward - Right: Reverse - Middle: Off - 12610: + 22295: - Left: Forward - Right: Reverse - Middle: Off @@ -164128,10 +164525,10 @@ entities: parent: 12 - proto: VendingMachineTankDispenserEVA entities: - - uid: 8864 + - uid: 12059 components: - type: Transform - pos: 76.5,-30.5 + pos: 55.5,-31.5 parent: 12 - uid: 16412 components: @@ -164182,15 +164579,15 @@ entities: - type: Transform pos: 43.5,-38.5 parent: 12 - - uid: 23651 + - uid: 12630 components: - type: Transform - pos: 48.5,52.5 + pos: 35.5,47.5 parent: 12 - - uid: 23703 + - uid: 23651 components: - type: Transform - pos: 34.5,45.5 + pos: 48.5,52.5 parent: 12 - proto: VendingMachineViroDrobe entities: @@ -170207,15 +170604,21 @@ entities: - type: Transform pos: 27.5,20.5 parent: 12 - - uid: 11435 + - uid: 11428 components: - type: Transform - pos: 36.5,15.5 + rot: 1.5707963267948966 rad + pos: 36.5,19.5 parent: 12 - - uid: 11437 + - uid: 11429 components: - type: Transform - pos: 36.5,19.5 + pos: 42.5,1.5 + parent: 12 + - uid: 11435 + components: + - type: Transform + pos: 36.5,15.5 parent: 12 - uid: 11439 components: @@ -170623,6 +171026,41 @@ entities: - type: Transform pos: 59.5,37.5 parent: 12 + - uid: 12009 + components: + - type: Transform + pos: 42.5,14.5 + parent: 12 + - uid: 12056 + components: + - type: Transform + pos: 44.5,-2.5 + parent: 12 + - uid: 12058 + components: + - type: Transform + pos: 42.5,5.5 + parent: 12 + - uid: 12100 + components: + - type: Transform + pos: 43.5,13.5 + parent: 12 + - uid: 12110 + components: + - type: Transform + pos: 44.5,1.5 + parent: 12 + - uid: 12117 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 12 + - uid: 12118 + components: + - type: Transform + pos: 42.5,-6.5 + parent: 12 - uid: 12392 components: - type: Transform @@ -170713,6 +171151,21 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,28.5 parent: 12 + - uid: 12641 + components: + - type: Transform + pos: 45.5,0.5 + parent: 12 + - uid: 12646 + components: + - type: Transform + pos: 45.5,-1.5 + parent: 12 + - uid: 12647 + components: + - type: Transform + pos: 42.5,-2.5 + parent: 12 - uid: 12724 components: - type: Transform @@ -170729,6 +171182,16 @@ entities: - type: Transform pos: 31.5,26.5 parent: 12 + - uid: 12868 + components: + - type: Transform + pos: 44.5,5.5 + parent: 12 + - uid: 12910 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 12 - uid: 13197 components: - type: Transform @@ -173461,6 +173924,53 @@ entities: rot: -1.5707963267948966 rad pos: 32.5,-5.5 parent: 12 + - uid: 22279 + components: + - type: Transform + pos: 29.5,-19.5 + parent: 12 + - uid: 22280 + components: + - type: Transform + pos: 29.5,-24.5 + parent: 12 + - uid: 22281 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 12 + - uid: 22282 + components: + - type: Transform + pos: 36.5,-23.5 + parent: 12 + - uid: 22283 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 12 + - uid: 22284 + components: + - type: Transform + pos: 35.5,-24.5 + parent: 12 + - uid: 22290 + components: + - type: Transform + pos: 42.5,13.5 + parent: 12 + - uid: 22324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,59.5 + parent: 12 + - uid: 22327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,55.5 + parent: 12 - uid: 22339 components: - type: Transform @@ -173496,6 +174006,48 @@ entities: rot: 3.141592653589793 rad pos: 14.5,22.5 parent: 12 + - uid: 23177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,63.5 + parent: 12 + - uid: 23700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,59.5 + parent: 12 + - uid: 23701 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -54.5,59.5 + parent: 12 + - uid: 23703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,63.5 + parent: 12 + - uid: 23704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,59.5 + parent: 12 + - uid: 23709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,59.5 + parent: 12 + - uid: 23719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,63.5 + parent: 12 - uid: 23773 components: - type: Transform @@ -175083,12 +175635,6 @@ entities: rot: -1.5707963267948966 rad pos: 31.5,18.5 parent: 12 - - uid: 11438 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,15.5 - parent: 12 - uid: 11441 components: - type: Transform @@ -175376,11 +175922,6 @@ entities: rot: 1.5707963267948966 rad pos: -11.5,-20.5 parent: 12 - - uid: 25396 - components: - - type: Transform - pos: -54.5,60.5 - parent: 12 - uid: 25403 components: - type: Transform @@ -175687,11 +176228,6 @@ entities: - type: Transform pos: -18.5,-23.5 parent: 12 - - uid: 510 - components: - - type: Transform - pos: -25.5,-26.5 - parent: 12 - uid: 511 components: - type: Transform @@ -176379,6 +176915,12 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-46.5 parent: 12 + - uid: 2478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,10.5 + parent: 12 - uid: 2596 components: - type: Transform @@ -177073,21 +177615,6 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,-32.5 parent: 12 - - uid: 5554 - components: - - type: Transform - pos: 29.5,-19.5 - parent: 12 - - uid: 5555 - components: - - type: Transform - pos: 29.5,-24.5 - parent: 12 - - uid: 5556 - components: - - type: Transform - pos: 32.5,-24.5 - parent: 12 - uid: 5557 components: - type: Transform @@ -177098,21 +177625,6 @@ entities: - type: Transform pos: -22.5,-17.5 parent: 12 - - uid: 5559 - components: - - type: Transform - pos: 35.5,-24.5 - parent: 12 - - uid: 5560 - components: - - type: Transform - pos: 36.5,-24.5 - parent: 12 - - uid: 5561 - components: - - type: Transform - pos: 36.5,-23.5 - parent: 12 - uid: 5577 components: - type: Transform @@ -177897,6 +178409,11 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,26.5 parent: 12 + - uid: 8884 + components: + - type: Transform + pos: 35.5,10.5 + parent: 12 - uid: 9133 components: - type: Transform @@ -178176,12 +178693,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,18.5 parent: 12 - - uid: 10693 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,16.5 - parent: 12 - uid: 10694 components: - type: Transform @@ -178321,6 +178832,11 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,20.5 parent: 12 + - uid: 11363 + components: + - type: Transform + pos: 40.5,14.5 + parent: 12 - uid: 11390 components: - type: Transform @@ -178368,11 +178884,6 @@ entities: - type: Transform pos: 48.5,13.5 parent: 12 - - uid: 11467 - components: - - type: Transform - pos: 48.5,11.5 - parent: 12 - uid: 11475 components: - type: Transform @@ -178403,66 +178914,6 @@ entities: - type: Transform pos: 39.5,9.5 parent: 12 - - uid: 11487 - components: - - type: Transform - pos: 42.5,11.5 - parent: 12 - - uid: 11488 - components: - - type: Transform - pos: 42.5,13.5 - parent: 12 - - uid: 11490 - components: - - type: Transform - pos: 45.5,11.5 - parent: 12 - - uid: 11491 - components: - - type: Transform - pos: 40.5,11.5 - parent: 12 - - uid: 11492 - components: - - type: Transform - pos: 39.5,11.5 - parent: 12 - - uid: 11493 - components: - - type: Transform - pos: 38.5,11.5 - parent: 12 - - uid: 11495 - components: - - type: Transform - pos: 36.5,11.5 - parent: 12 - - uid: 11496 - components: - - type: Transform - pos: 35.5,11.5 - parent: 12 - - uid: 11497 - components: - - type: Transform - pos: 34.5,11.5 - parent: 12 - - uid: 11498 - components: - - type: Transform - pos: 33.5,11.5 - parent: 12 - - uid: 11499 - components: - - type: Transform - pos: 32.5,11.5 - parent: 12 - - uid: 11503 - components: - - type: Transform - pos: 33.5,13.5 - parent: 12 - uid: 11504 components: - type: Transform @@ -178478,11 +178929,6 @@ entities: - type: Transform pos: 36.5,13.5 parent: 12 - - uid: 11507 - components: - - type: Transform - pos: 37.5,13.5 - parent: 12 - uid: 11508 components: - type: Transform @@ -179135,6 +179581,17 @@ entities: - type: Transform pos: 41.5,33.5 parent: 12 + - uid: 12000 + components: + - type: Transform + pos: 40.5,15.5 + parent: 12 + - uid: 12054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-26.5 + parent: 12 - uid: 12066 components: - type: Transform @@ -181596,11 +182053,6 @@ entities: - type: Transform pos: 51.5,9.5 parent: 12 - - uid: 25471 - components: - - type: Transform - pos: 46.5,15.5 - parent: 12 - uid: 25492 components: - type: Transform @@ -181738,11 +182190,6 @@ entities: rot: 3.141592653589793 rad pos: -43.5,61.5 parent: 12 - - uid: 26542 - components: - - type: Transform - pos: 45.5,15.5 - parent: 12 - uid: 26939 components: - type: Transform @@ -181910,12 +182357,6 @@ entities: - type: Transform pos: -48.5,66.5 parent: 12 - - uid: 11400 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,11.5 - parent: 12 - uid: 11520 components: - type: Transform @@ -181928,10 +182369,22 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,34.5 parent: 12 - - uid: 12868 + - uid: 11978 components: - type: Transform - pos: 32.5,13.5 + pos: 33.5,11.5 + parent: 12 + - uid: 12018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,11.5 + parent: 12 + - uid: 12071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,15.5 parent: 12 - uid: 12953 components: @@ -182194,12 +182647,33 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,64.5 parent: 12 + - uid: 22273 + components: + - type: Transform + pos: 32.5,11.5 + parent: 12 + - uid: 22285 + components: + - type: Transform + pos: 37.5,13.5 + parent: 12 + - uid: 22301 + components: + - type: Transform + pos: 36.5,16.5 + parent: 12 - uid: 23894 components: - type: Transform rot: -1.5707963267948966 rad pos: 41.5,63.5 parent: 12 + - uid: 24650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,12.5 + parent: 12 - uid: 25591 components: - type: Transform @@ -182647,11 +183121,6 @@ entities: - type: Transform pos: 53.5,-10.5 parent: 12 - - uid: 12725 - components: - - type: Transform - pos: 49.5,32.5 - parent: 12 - uid: 16645 components: - type: Transform @@ -182677,6 +183146,11 @@ entities: - type: Transform pos: -6.5,58.5 parent: 12 + - uid: 22306 + components: + - type: Transform + pos: 49.5,32.5 + parent: 12 - uid: 24169 components: - type: Transform @@ -183053,15 +183527,15 @@ entities: - type: Transform pos: 43.5,47.5 parent: 12 - - uid: 12243 + - uid: 12026 components: - type: Transform - pos: 50.5,16.5 + pos: 46.5,10.5 parent: 12 - - uid: 12294 + - uid: 12070 components: - type: Transform - pos: 32.5,16.5 + pos: 33.5,17.5 parent: 12 - uid: 16463 components: @@ -183113,11 +183587,6 @@ entities: - type: Transform pos: 48.5,-32.5 parent: 12 - - uid: 25058 - components: - - type: Transform - pos: 52.5,11.5 - parent: 12 - uid: 26803 components: - type: Transform @@ -183443,6 +183912,11 @@ entities: rot: 3.141592653589793 rad pos: 52.5,-30.5 parent: 12 + - uid: 12126 + components: + - type: Transform + pos: -33.5,-45.5 + parent: 12 - uid: 12234 components: - type: Transform @@ -183617,6 +184091,12 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,-43.5 parent: 12 + - uid: 22268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-45.5 + parent: 12 - proto: WindoorSecureCommandLocked entities: - uid: 6 @@ -184157,16 +184637,6 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,14.5 parent: 12 - - uid: 11426 - components: - - type: Transform - pos: 32.5,15.5 - parent: 12 - - uid: 11427 - components: - - type: Transform - pos: 33.5,15.5 - parent: 12 - uid: 11485 components: - type: Transform @@ -184182,26 +184652,6 @@ entities: - type: Transform pos: 37.5,15.5 parent: 12 - - uid: 11516 - components: - - type: Transform - pos: 39.5,15.5 - parent: 12 - - uid: 11517 - components: - - type: Transform - pos: 40.5,15.5 - parent: 12 - - uid: 11518 - components: - - type: Transform - pos: 43.5,15.5 - parent: 12 - - uid: 11519 - components: - - type: Transform - pos: 44.5,15.5 - parent: 12 - uid: 11538 components: - type: Transform @@ -184282,6 +184732,11 @@ entities: - type: Transform pos: 41.5,35.5 parent: 12 + - uid: 11997 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 - uid: 12524 components: - type: Transform @@ -184802,6 +185257,16 @@ entities: - type: Transform pos: 53.5,10.5 parent: 12 + - uid: 22292 + components: + - type: Transform + pos: 35.5,7.5 + parent: 12 + - uid: 22297 + components: + - type: Transform + pos: 35.5,8.5 + parent: 12 - uid: 22688 components: - type: Transform @@ -185516,18 +185981,6 @@ entities: - type: Transform pos: 46.5,-12.5 parent: 12 - - uid: 12292 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,12.5 - parent: 12 - - uid: 12293 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,13.5 - parent: 12 - uid: 12326 components: - type: Transform @@ -186124,18 +186577,6 @@ entities: - type: Transform pos: 44.512337,53.244392 parent: 12 - - uid: 23709 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.45002,45.578423 - parent: 12 - - uid: 23710 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.596897,45.394962 - parent: 12 - uid: 27207 components: - type: Transform diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml index 2f80b9d840..2065fa90eb 100644 --- a/Resources/Maps/marathon.yml +++ b/Resources/Maps/marathon.yml @@ -129,7 +129,7 @@ entities: version: 6 -2,2: ind: -2,2 - tiles: XQAAAAADXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAegAAAAADegAAAAADegAAAAADJgAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAACegAAAAACegAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAABegAAAAAAegAAAAACegAAAAABfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAAAegAAAAADegAAAAACegAAAAADfgAAAAAAXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAABHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAdAAAAAACcwAAAAAAdAAAAAADdAAAAAABfgAAAAAAbAAAAAAAfgAAAAAAbQAAAAAAHwAAAAACHwAAAAAAHwAAAAABHwAAAAADJAAAAAACHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAJAAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATQAAAAACTQAAAAACTQAAAAABfQAAAAAAfgAAAAAAXQAAAAACXQAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAHwAAAAABHwAAAAADHwAAAAACfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAXQAAAAACXQAAAAADXQAAAAADbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAXQAAAAADXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAA + tiles: XQAAAAADXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAegAAAAADegAAAAADegAAAAADJgAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAACegAAAAACegAAAAADegAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAABegAAAAAAegAAAAACegAAAAABfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAAAegAAAAADegAAAAACegAAAAADfgAAAAAAXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAABHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAdAAAAAACcwAAAAAAdAAAAAADdAAAAAABfgAAAAAAbAAAAAAAfgAAAAAAbQAAAAAAHwAAAAACHwAAAAAAHwAAAAABHwAAAAADJAAAAAACHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAJAAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATQAAAAACTQAAAAACTQAAAAABfQAAAAAAfgAAAAAAXQAAAAACXQAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABfgAAAAAAHwAAAAABHwAAAAADHwAAAAACfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAA version: 6 -3,2: ind: -3,2 @@ -153,7 +153,7 @@ entities: version: 6 -2,3: ind: -2,3 - tiles: XQAAAAACXQAAAAACXQAAAAAAHwAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAACHwAAAAABfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAACXQAAAAADHwAAAAADHwAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAABHwAAAAADHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAAAHwAAAAABfgAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAABXQAAAAABHwAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAABegAAAAACegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAUgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: XQAAAAACXQAAAAACXQAAAAAAHwAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAACHwAAAAABfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAACXQAAAAADHwAAAAADHwAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAABHwAAAAADHwAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAAAXQAAAAAAHwAAAAABfgAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAABXQAAAAABHwAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAABegAAAAACegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -3,4: ind: -3,4 @@ -165,15 +165,15 @@ entities: version: 6 -1,2: ind: -1,2 - tiles: HwAAAAAAHwAAAAABHwAAAAABQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAHwAAAAABHwAAAAACHwAAAAAAJAAAAAADHwAAAAACegAAAAADHwAAAAACHwAAAAADfgAAAAAAQAAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAACQAAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAHwAAAAACegAAAAABHwAAAAADHwAAAAABfgAAAAAAQAAAAAAAegAAAAACLwAAAAAALwAAAAADLwAAAAADegAAAAACQAAAAAAAfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAegAAAAACegAAAAADegAAAAABegAAAAAAegAAAAABQAAAAAAAfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAegAAAAABegAAAAAAHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAAAbAAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADJAAAAAADHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAAAHwAAAAABHwAAAAACJAAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAACHwAAAAADDAAAAAACDAAAAAACDAAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADHwAAAAADHwAAAAAAHwAAAAADHwAAAAADHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAADHwAAAAACHwAAAAABJAAAAAACHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAA + tiles: HwAAAAAAHwAAAAABHwAAAAABQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAHwAAAAABHwAAAAACHwAAAAAAJAAAAAADHwAAAAACegAAAAADHwAAAAACHwAAAAADfgAAAAAAQAAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAACQAAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAHwAAAAACegAAAAABHwAAAAADHwAAAAABfgAAAAAAQAAAAAAAegAAAAACLwAAAAAALwAAAAADLwAAAAADegAAAAACQAAAAAAAfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAegAAAAACegAAAAADegAAAAABegAAAAAAegAAAAABQAAAAAAAfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAegAAAAABegAAAAAAHwAAAAABHwAAAAADfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAAAbAAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADHwAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADJAAAAAADHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAAAHwAAAAABHwAAAAACJAAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAACHwAAAAADDAAAAAACDAAAAAACDAAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADHwAAAAADHwAAAAAAHwAAAAADHwAAAAADHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAADHwAAAAACHwAAAAABJAAAAAACHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAACHwAAAAABHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAA version: 6 0,2: ind: 0,2 - tiles: egAAAAADegAAAAADegAAAAABegAAAAADegAAAAABegAAAAACfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAACegAAAAACegAAAAACegAAAAABKAAAAAABXQAAAAADXQAAAAADXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAOAAAAAAAHwAAAAADOAAAAAAAHwAAAAADfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAABfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAA + tiles: egAAAAADegAAAAADegAAAAABegAAAAADegAAAAABegAAAAACfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAACegAAAAACegAAAAACegAAAAABKAAAAAABXQAAAAADXQAAAAADXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADHwAAAAACHwAAAAABfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAOAAAAAAAHwAAAAADOAAAAAAAHwAAAAADfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAHwAAAAABfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAA version: 6 -1,3: ind: -1,3 - tiles: AAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAA + tiles: AAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAA version: 6 1,1: ind: 1,1 @@ -285,7 +285,7 @@ entities: version: 6 0,3: ind: 0,3 - tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAADfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAAAegAAAAABegAAAAACAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAADfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAADfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAAAegAAAAABegAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAABegAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAADfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 3,2: ind: 3,2 @@ -373,19 +373,19 @@ entities: version: 6 0,4: ind: 0,4 - tiles: HwAAAAACHwAAAAADfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHwAAAAADHwAAAAACbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: HwAAAAACHwAAAAADfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHwAAAAADHwAAAAACbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAcAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,4: ind: -1,4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAHwAAAAABHwAAAAABHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACTwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAHwAAAAABHwAAAAABHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAcAAAAAAATwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAA version: 6 -1,5: ind: -1,5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAATwAAAAAAEQAAAAAAHwAAAAACHwAAAAABHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAATwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAATwAAAAAAEQAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAATwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,5: ind: 0,5 - tiles: fgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAHwAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAACHwAAAAADEQAAAAAATwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAABfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAHwAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAACHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAEQAAAAAATwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAEQAAAAAATwAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAcAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,3: ind: 2,3 @@ -9136,13 +9136,6 @@ entities: parent: 30 - proto: AirlockCaptainLocked entities: - - uid: 1357 - components: - - type: MetaData - name: Drone Storage - - type: Transform - pos: -37.5,25.5 - parent: 30 - uid: 4935 components: - type: Transform @@ -9341,6 +9334,18 @@ entities: - type: Transform pos: -19.5,41.5 parent: 30 + - uid: 20883 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,73.5 + parent: 30 + - uid: 20885 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,67.5 + parent: 30 - proto: AirlockDetectiveLocked entities: - uid: 783 @@ -9427,6 +9432,11 @@ entities: - type: Transform pos: -40.5,16.5 parent: 30 + - uid: 1357 + components: + - type: Transform + pos: -37.5,25.5 + parent: 30 - uid: 3198 components: - type: Transform @@ -10572,6 +10582,52 @@ entities: - type: Transform pos: -8.5,-13.5 parent: 30 +- proto: AirlockMaintCommandLocked + entities: + - uid: 20265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,66.5 + parent: 30 + - uid: 20266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,66.5 + parent: 30 + - uid: 20267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,74.5 + parent: 30 + - uid: 20736 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,74.5 + parent: 30 + - uid: 20981 + components: + - type: Transform + pos: 5.5,73.5 + parent: 30 + - uid: 20983 + components: + - type: Transform + pos: -6.5,73.5 + parent: 30 + - uid: 20985 + components: + - type: Transform + pos: 5.5,67.5 + parent: 30 + - uid: 20987 + components: + - type: Transform + pos: -6.5,67.5 + parent: 30 - proto: AirlockMaintDetectiveLocked entities: - uid: 1423 @@ -10810,46 +10866,6 @@ entities: - type: Transform pos: -45.5,-25.5 parent: 30 - - uid: 20264 - components: - - type: Transform - pos: -3.5,66.5 - parent: 30 - - uid: 20265 - components: - - type: Transform - pos: -6.5,67.5 - parent: 30 - - uid: 20266 - components: - - type: Transform - pos: 2.5,66.5 - parent: 30 - - uid: 20267 - components: - - type: Transform - pos: 5.5,67.5 - parent: 30 - - uid: 20268 - components: - - type: Transform - pos: 2.5,74.5 - parent: 30 - - uid: 20269 - components: - - type: Transform - pos: 5.5,73.5 - parent: 30 - - uid: 20270 - components: - - type: Transform - pos: -3.5,74.5 - parent: 30 - - uid: 20271 - components: - - type: Transform - pos: -6.5,73.5 - parent: 30 - proto: AirlockMaintMedLocked entities: - uid: 7067 @@ -10999,7 +11015,7 @@ entities: pos: -20.5,-5.5 parent: 30 - type: Door - secondsUntilStateChange: -22976.215 + secondsUntilStateChange: -25025.113 state: Opening - type: DeviceLinkSource lastSignals: @@ -12297,11 +12313,29 @@ entities: - type: Transform pos: 0.5,85.5 parent: 30 + - uid: 20226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,66.5 + parent: 30 + - uid: 20227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,75.5 + parent: 30 - uid: 20367 components: - type: Transform pos: 1.5,-42.5 parent: 30 + - uid: 20828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,66.5 + parent: 30 - uid: 22213 components: - type: MetaData @@ -19213,6 +19247,11 @@ entities: - type: Transform pos: 9.5,35.5 parent: 30 + - uid: 5646 + components: + - type: Transform + pos: -3.5,75.5 + parent: 30 - uid: 5735 components: - type: Transform @@ -27158,6 +27197,11 @@ entities: - type: Transform pos: -79.5,-57.5 parent: 30 + - uid: 18249 + components: + - type: Transform + pos: -2.5,75.5 + parent: 30 - uid: 18814 components: - type: Transform @@ -29468,16 +29512,6 @@ entities: - type: Transform pos: -0.5,78.5 parent: 30 - - uid: 20206 - components: - - type: Transform - pos: -0.5,77.5 - parent: 30 - - uid: 20207 - components: - - type: Transform - pos: -0.5,76.5 - parent: 30 - uid: 20208 components: - type: Transform @@ -29568,16 +29602,6 @@ entities: - type: Transform pos: -2.5,66.5 parent: 30 - - uid: 20226 - components: - - type: Transform - pos: -3.5,66.5 - parent: 30 - - uid: 20227 - components: - - type: Transform - pos: -4.5,66.5 - parent: 30 - uid: 20228 components: - type: Transform @@ -29636,12 +29660,7 @@ entities: - uid: 20239 components: - type: Transform - pos: -4.5,74.5 - parent: 30 - - uid: 20240 - components: - - type: Transform - pos: -3.5,74.5 + pos: -8.5,66.5 parent: 30 - uid: 20241 components: @@ -29663,16 +29682,6 @@ entities: - type: Transform pos: 1.5,74.5 parent: 30 - - uid: 20245 - components: - - type: Transform - pos: 2.5,74.5 - parent: 30 - - uid: 20246 - components: - - type: Transform - pos: 3.5,74.5 - parent: 30 - uid: 20247 components: - type: Transform @@ -29726,17 +29735,12 @@ entities: - uid: 20257 components: - type: Transform - pos: 4.5,66.5 - parent: 30 - - uid: 20258 - components: - - type: Transform - pos: 3.5,66.5 + pos: -7.5,66.5 parent: 30 - uid: 20259 components: - type: Transform - pos: 2.5,66.5 + pos: 7.5,66.5 parent: 30 - uid: 20260 components: @@ -29748,6 +29752,11 @@ entities: - type: Transform pos: 0.5,66.5 parent: 30 + - uid: 20263 + components: + - type: Transform + pos: 6.5,66.5 + parent: 30 - uid: 20320 components: - type: Transform @@ -30478,6 +30487,31 @@ entities: - type: Transform pos: -56.5,51.5 parent: 30 + - uid: 21240 + components: + - type: Transform + pos: 5.5,65.5 + parent: 30 + - uid: 21243 + components: + - type: Transform + pos: 5.5,64.5 + parent: 30 + - uid: 21246 + components: + - type: Transform + pos: 6.5,64.5 + parent: 30 + - uid: 21247 + components: + - type: Transform + pos: -7.5,65.5 + parent: 30 + - uid: 21248 + components: + - type: Transform + pos: -7.5,64.5 + parent: 30 - uid: 21263 components: - type: Transform @@ -36997,6 +37031,326 @@ entities: - type: Transform pos: -26.5,-41.5 parent: 30 + - uid: 20737 + components: + - type: Transform + pos: -2.5,37.5 + parent: 30 + - uid: 20738 + components: + - type: Transform + pos: -0.5,40.5 + parent: 30 + - uid: 20739 + components: + - type: Transform + pos: -0.5,39.5 + parent: 30 + - uid: 20740 + components: + - type: Transform + pos: -0.5,38.5 + parent: 30 + - uid: 20741 + components: + - type: Transform + pos: -0.5,37.5 + parent: 30 + - uid: 20742 + components: + - type: Transform + pos: -1.5,37.5 + parent: 30 + - uid: 20753 + components: + - type: Transform + pos: -0.5,41.5 + parent: 30 + - uid: 20754 + components: + - type: Transform + pos: -0.5,43.5 + parent: 30 + - uid: 20755 + components: + - type: Transform + pos: -0.5,42.5 + parent: 30 + - uid: 20756 + components: + - type: Transform + pos: -0.5,44.5 + parent: 30 + - uid: 20757 + components: + - type: Transform + pos: -0.5,45.5 + parent: 30 + - uid: 20758 + components: + - type: Transform + pos: -0.5,46.5 + parent: 30 + - uid: 20759 + components: + - type: Transform + pos: -0.5,48.5 + parent: 30 + - uid: 20760 + components: + - type: Transform + pos: -0.5,47.5 + parent: 30 + - uid: 20761 + components: + - type: Transform + pos: -0.5,49.5 + parent: 30 + - uid: 20762 + components: + - type: Transform + pos: -0.5,50.5 + parent: 30 + - uid: 20763 + components: + - type: Transform + pos: -0.5,51.5 + parent: 30 + - uid: 20764 + components: + - type: Transform + pos: -0.5,52.5 + parent: 30 + - uid: 20765 + components: + - type: Transform + pos: -0.5,53.5 + parent: 30 + - uid: 20766 + components: + - type: Transform + pos: -0.5,54.5 + parent: 30 + - uid: 20767 + components: + - type: Transform + pos: -0.5,55.5 + parent: 30 + - uid: 20768 + components: + - type: Transform + pos: -0.5,56.5 + parent: 30 + - uid: 20769 + components: + - type: Transform + pos: -0.5,57.5 + parent: 30 + - uid: 20770 + components: + - type: Transform + pos: -0.5,58.5 + parent: 30 + - uid: 20771 + components: + - type: Transform + pos: -0.5,59.5 + parent: 30 + - uid: 20772 + components: + - type: Transform + pos: -0.5,60.5 + parent: 30 + - uid: 20773 + components: + - type: Transform + pos: -0.5,61.5 + parent: 30 + - uid: 20774 + components: + - type: Transform + pos: -0.5,62.5 + parent: 30 + - uid: 20775 + components: + - type: Transform + pos: -0.5,63.5 + parent: 30 + - uid: 20776 + components: + - type: Transform + pos: -0.5,64.5 + parent: 30 + - uid: 20777 + components: + - type: Transform + pos: -0.5,65.5 + parent: 30 + - uid: 20779 + components: + - type: Transform + pos: -0.5,66.5 + parent: 30 + - uid: 20780 + components: + - type: Transform + pos: -0.5,67.5 + parent: 30 + - uid: 20781 + components: + - type: Transform + pos: -0.5,69.5 + parent: 30 + - uid: 20782 + components: + - type: Transform + pos: -0.5,68.5 + parent: 30 + - uid: 20783 + components: + - type: Transform + pos: -0.5,70.5 + parent: 30 + - uid: 20784 + components: + - type: Transform + pos: -0.5,71.5 + parent: 30 + - uid: 20785 + components: + - type: Transform + pos: -0.5,73.5 + parent: 30 + - uid: 20786 + components: + - type: Transform + pos: -0.5,74.5 + parent: 30 + - uid: 20794 + components: + - type: Transform + pos: -0.5,75.5 + parent: 30 + - uid: 20795 + components: + - type: Transform + pos: -0.5,72.5 + parent: 30 + - uid: 20796 + components: + - type: Transform + pos: -0.5,76.5 + parent: 30 + - uid: 20797 + components: + - type: Transform + pos: -0.5,77.5 + parent: 30 + - uid: 20800 + components: + - type: Transform + pos: -0.5,78.5 + parent: 30 + - uid: 20801 + components: + - type: Transform + pos: 0.5,78.5 + parent: 30 + - uid: 20802 + components: + - type: Transform + pos: 1.5,78.5 + parent: 30 + - uid: 20803 + components: + - type: Transform + pos: 2.5,78.5 + parent: 30 + - uid: 20804 + components: + - type: Transform + pos: 3.5,78.5 + parent: 30 + - uid: 20808 + components: + - type: Transform + pos: 4.5,78.5 + parent: 30 + - uid: 20809 + components: + - type: Transform + pos: 4.5,79.5 + parent: 30 + - uid: 20810 + components: + - type: Transform + pos: 4.5,80.5 + parent: 30 + - uid: 20811 + components: + - type: Transform + pos: 4.5,81.5 + parent: 30 + - uid: 20812 + components: + - type: Transform + pos: 4.5,82.5 + parent: 30 + - uid: 20813 + components: + - type: Transform + pos: 4.5,83.5 + parent: 30 + - uid: 20814 + components: + - type: Transform + pos: 3.5,83.5 + parent: 30 + - uid: 20815 + components: + - type: Transform + pos: 2.5,83.5 + parent: 30 + - uid: 20816 + components: + - type: Transform + pos: 1.5,83.5 + parent: 30 + - uid: 20817 + components: + - type: Transform + pos: 0.5,83.5 + parent: 30 + - uid: 20991 + components: + - type: Transform + pos: -1.5,74.5 + parent: 30 + - uid: 20993 + components: + - type: Transform + pos: -2.5,74.5 + parent: 30 + - uid: 20994 + components: + - type: Transform + pos: -3.5,74.5 + parent: 30 + - uid: 20995 + components: + - type: Transform + pos: -4.5,74.5 + parent: 30 + - uid: 20996 + components: + - type: Transform + pos: -4.5,75.5 + parent: 30 + - uid: 20997 + components: + - type: Transform + pos: -4.5,76.5 + parent: 30 - uid: 21289 components: - type: Transform @@ -38466,6 +38820,21 @@ entities: - type: Transform pos: 8.5,42.5 parent: 30 + - uid: 5642 + components: + - type: Transform + pos: -4.5,83.5 + parent: 30 + - uid: 5643 + components: + - type: Transform + pos: -4.5,82.5 + parent: 30 + - uid: 5645 + components: + - type: Transform + pos: -3.5,83.5 + parent: 30 - uid: 5863 components: - type: Transform @@ -40891,6 +41260,11 @@ entities: - type: Transform pos: 23.5,-5.5 parent: 30 + - uid: 16931 + components: + - type: Transform + pos: -3.5,78.5 + parent: 30 - uid: 17584 components: - type: Transform @@ -41556,6 +41930,51 @@ entities: - type: Transform pos: 0.5,85.5 parent: 30 + - uid: 20206 + components: + - type: Transform + pos: -4.5,78.5 + parent: 30 + - uid: 20207 + components: + - type: Transform + pos: -4.5,81.5 + parent: 30 + - uid: 20240 + components: + - type: Transform + pos: -0.5,78.5 + parent: 30 + - uid: 20245 + components: + - type: Transform + pos: -1.5,78.5 + parent: 30 + - uid: 20246 + components: + - type: Transform + pos: -4.5,80.5 + parent: 30 + - uid: 20258 + components: + - type: Transform + pos: -2.5,78.5 + parent: 30 + - uid: 20262 + components: + - type: Transform + pos: 0.5,78.5 + parent: 30 + - uid: 20268 + components: + - type: Transform + pos: -2.5,83.5 + parent: 30 + - uid: 20269 + components: + - type: Transform + pos: -4.5,79.5 + parent: 30 - uid: 20338 components: - type: Transform @@ -41581,6 +42000,266 @@ entities: - type: Transform pos: 1.5,-42.5 parent: 30 + - uid: 20829 + components: + - type: Transform + pos: 1.5,78.5 + parent: 30 + - uid: 20830 + components: + - type: Transform + pos: 2.5,78.5 + parent: 30 + - uid: 20831 + components: + - type: Transform + pos: 3.5,78.5 + parent: 30 + - uid: 20832 + components: + - type: Transform + pos: 3.5,79.5 + parent: 30 + - uid: 20833 + components: + - type: Transform + pos: 3.5,80.5 + parent: 30 + - uid: 20834 + components: + - type: Transform + pos: 3.5,81.5 + parent: 30 + - uid: 20835 + components: + - type: Transform + pos: 3.5,82.5 + parent: 30 + - uid: 20836 + components: + - type: Transform + pos: 3.5,83.5 + parent: 30 + - uid: 20837 + components: + - type: Transform + pos: 2.5,83.5 + parent: 30 + - uid: 20838 + components: + - type: Transform + pos: 1.5,83.5 + parent: 30 + - uid: 20839 + components: + - type: Transform + pos: -0.5,77.5 + parent: 30 + - uid: 20840 + components: + - type: Transform + pos: -0.5,76.5 + parent: 30 + - uid: 20841 + components: + - type: Transform + pos: -0.5,75.5 + parent: 30 + - uid: 20842 + components: + - type: Transform + pos: -0.5,74.5 + parent: 30 + - uid: 20843 + components: + - type: Transform + pos: -0.5,73.5 + parent: 30 + - uid: 20844 + components: + - type: Transform + pos: -0.5,72.5 + parent: 30 + - uid: 20845 + components: + - type: Transform + pos: -0.5,71.5 + parent: 30 + - uid: 20846 + components: + - type: Transform + pos: -0.5,70.5 + parent: 30 + - uid: 20847 + components: + - type: Transform + pos: -0.5,69.5 + parent: 30 + - uid: 20848 + components: + - type: Transform + pos: -0.5,68.5 + parent: 30 + - uid: 20849 + components: + - type: Transform + pos: -0.5,67.5 + parent: 30 + - uid: 20850 + components: + - type: Transform + pos: -0.5,66.5 + parent: 30 + - uid: 20851 + components: + - type: Transform + pos: -1.5,66.5 + parent: 30 + - uid: 20852 + components: + - type: Transform + pos: -2.5,66.5 + parent: 30 + - uid: 20853 + components: + - type: Transform + pos: -3.5,66.5 + parent: 30 + - uid: 20854 + components: + - type: Transform + pos: -4.5,66.5 + parent: 30 + - uid: 20855 + components: + - type: Transform + pos: -5.5,66.5 + parent: 30 + - uid: 20856 + components: + - type: Transform + pos: -6.5,66.5 + parent: 30 + - uid: 20857 + components: + - type: Transform + pos: -8.5,66.5 + parent: 30 + - uid: 20858 + components: + - type: Transform + pos: -7.5,66.5 + parent: 30 + - uid: 20859 + components: + - type: Transform + pos: 0.5,66.5 + parent: 30 + - uid: 20860 + components: + - type: Transform + pos: 1.5,66.5 + parent: 30 + - uid: 20861 + components: + - type: Transform + pos: 2.5,66.5 + parent: 30 + - uid: 20862 + components: + - type: Transform + pos: 3.5,66.5 + parent: 30 + - uid: 20863 + components: + - type: Transform + pos: 4.5,66.5 + parent: 30 + - uid: 20864 + components: + - type: Transform + pos: 5.5,66.5 + parent: 30 + - uid: 20865 + components: + - type: Transform + pos: 6.5,66.5 + parent: 30 + - uid: 20866 + components: + - type: Transform + pos: 7.5,66.5 + parent: 30 + - uid: 20867 + components: + - type: Transform + pos: -1.5,74.5 + parent: 30 + - uid: 20868 + components: + - type: Transform + pos: -2.5,74.5 + parent: 30 + - uid: 20869 + components: + - type: Transform + pos: -3.5,74.5 + parent: 30 + - uid: 20870 + components: + - type: Transform + pos: -3.5,75.5 + parent: 30 + - uid: 20871 + components: + - type: Transform + pos: -6.5,67.5 + parent: 30 + - uid: 20872 + components: + - type: Transform + pos: -6.5,68.5 + parent: 30 + - uid: 20873 + components: + - type: Transform + pos: -6.5,69.5 + parent: 30 + - uid: 20874 + components: + - type: Transform + pos: -6.5,70.5 + parent: 30 + - uid: 20875 + components: + - type: Transform + pos: -6.5,71.5 + parent: 30 + - uid: 20876 + components: + - type: Transform + pos: -6.5,72.5 + parent: 30 + - uid: 20877 + components: + - type: Transform + pos: -6.5,73.5 + parent: 30 + - uid: 20878 + components: + - type: Transform + pos: -6.5,74.5 + parent: 30 + - uid: 20879 + components: + - type: Transform + pos: -5.5,74.5 + parent: 30 + - uid: 20882 + components: + - type: Transform + pos: -4.5,74.5 + parent: 30 - uid: 20893 components: - type: Transform @@ -46782,6 +47461,71 @@ entities: - type: Transform pos: -59.5,4.5 parent: 30 + - uid: 21002 + components: + - type: Transform + pos: -4.5,74.5 + parent: 30 + - uid: 21003 + components: + - type: Transform + pos: -5.5,74.5 + parent: 30 + - uid: 21005 + components: + - type: Transform + pos: -6.5,74.5 + parent: 30 + - uid: 21006 + components: + - type: Transform + pos: -6.5,68.5 + parent: 30 + - uid: 21034 + components: + - type: Transform + pos: -6.5,69.5 + parent: 30 + - uid: 21048 + components: + - type: Transform + pos: -6.5,70.5 + parent: 30 + - uid: 21049 + components: + - type: Transform + pos: -6.5,71.5 + parent: 30 + - uid: 21164 + components: + - type: Transform + pos: -6.5,72.5 + parent: 30 + - uid: 21181 + components: + - type: Transform + pos: 5.5,72.5 + parent: 30 + - uid: 21183 + components: + - type: Transform + pos: 5.5,71.5 + parent: 30 + - uid: 21184 + components: + - type: Transform + pos: 5.5,70.5 + parent: 30 + - uid: 21186 + components: + - type: Transform + pos: 5.5,69.5 + parent: 30 + - uid: 21191 + components: + - type: Transform + pos: 5.5,68.5 + parent: 30 - uid: 21610 components: - type: Transform @@ -51947,6 +52691,11 @@ entities: - type: Transform pos: -61.5,-20.5 parent: 30 + - uid: 20887 + components: + - type: Transform + pos: -6.5,76.5 + parent: 30 - proto: ComputerAnalysisConsole entities: - uid: 15282 @@ -52121,25 +52870,17 @@ entities: parent: 30 - proto: ComputerFrame entities: - - uid: 20279 - components: - - type: Transform - pos: -6.5,76.5 - parent: 30 - - uid: 20280 + - uid: 21198 components: - type: Transform - pos: -4.5,76.5 - parent: 30 - - uid: 20281 - components: - - type: Transform - pos: -5.5,76.5 + rot: 1.5707963267948966 rad + pos: -3.5,62.5 parent: 30 - - uid: 20283 + - uid: 21199 components: - type: Transform - pos: 4.5,76.5 + rot: 1.5707963267948966 rad + pos: -3.5,64.5 parent: 30 - proto: ComputerId entities: @@ -52217,6 +52958,11 @@ entities: rot: 1.5707963267948966 rad pos: -8.5,-45.5 parent: 30 + - uid: 20886 + components: + - type: Transform + pos: -5.5,76.5 + parent: 30 - proto: ComputerRadar entities: - uid: 22100 @@ -52254,6 +53000,11 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,9.5 parent: 30 + - uid: 20961 + components: + - type: Transform + pos: 4.5,76.5 + parent: 30 - proto: ComputerRoboticsControl entities: - uid: 10251 @@ -52307,6 +53058,11 @@ entities: - type: Transform pos: -64.5,44.5 parent: 30 + - uid: 20888 + components: + - type: Transform + pos: -4.5,76.5 + parent: 30 - proto: ComputerStationRecords entities: - uid: 1397 @@ -59842,6 +60598,11 @@ entities: - type: Transform pos: 22.5,22.5 parent: 30 + - uid: 20960 + components: + - type: Transform + pos: 5.5,76.5 + parent: 30 - proto: ExtendedEmergencyOxygenTankFilled entities: - uid: 20295 @@ -94815,16 +95576,6 @@ entities: - type: Transform pos: -0.5,76.5 parent: 30 - - uid: 20262 - components: - - type: Transform - pos: -0.5,67.5 - parent: 30 - - uid: 20263 - components: - - type: Transform - pos: -0.5,73.5 - parent: 30 - proto: HolofanProjector entities: - uid: 21278 @@ -95187,11 +95938,17 @@ entities: parent: 30 - proto: IntercomCommand entities: - - uid: 22513 + - uid: 21194 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,82.5 + rot: 3.141592653589793 rad + pos: 0.5,73.5 + parent: 30 + - uid: 21195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,62.5 parent: 30 - proto: IntercomCommon entities: @@ -95240,12 +95997,6 @@ entities: rot: -1.5707963267948966 rad pos: 8.5,-33.5 parent: 30 - - uid: 22514 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,82.5 - parent: 30 - proto: IntercomMedical entities: - uid: 7346 @@ -95260,11 +96011,6 @@ entities: rot: 1.5707963267948966 rad pos: -16.5,-8.5 parent: 30 - - uid: 22516 - components: - - type: Transform - pos: -1.5,85.5 - parent: 30 - proto: IntercomScience entities: - uid: 14357 @@ -95285,12 +96031,6 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,23.5 parent: 30 - - uid: 22518 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,84.5 - parent: 30 - proto: IntercomSecurity entities: - uid: 4377 @@ -95316,12 +96056,6 @@ entities: rot: 1.5707963267948966 rad pos: -49.5,44.5 parent: 30 - - uid: 22515 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,81.5 - parent: 30 - proto: IntercomService entities: - uid: 4386 @@ -95340,11 +96074,6 @@ entities: - type: Transform pos: -9.5,15.5 parent: 30 - - uid: 22517 - components: - - type: Transform - pos: -0.5,85.5 - parent: 30 - proto: IntercomSupply entities: - uid: 22295 @@ -95359,12 +96088,6 @@ entities: rot: 3.141592653589793 rad pos: 30.5,-8.5 parent: 30 - - uid: 22519 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,84.5 - parent: 30 - proto: IronRockMining entities: - uid: 1955 @@ -100049,7 +100772,7 @@ entities: - uid: 20308 components: - type: Transform - pos: -0.61799335,65.47986 + pos: 2.470478,63.557354 parent: 30 - proto: PhoneInstrument entities: @@ -100377,11 +101100,6 @@ entities: - type: Transform pos: -19.5,-37.5 parent: 30 - - uid: 21948 - components: - - type: Transform - pos: 0.5,84.5 - parent: 30 - proto: PortableScrubber entities: - uid: 8285 @@ -103781,6 +104499,12 @@ entities: parent: 30 - type: ApcPowerReceiver powerLoad: 0 + - uid: 21229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,42.5 + parent: 30 - uid: 21362 components: - type: Transform @@ -103843,6 +104567,48 @@ entities: - type: Transform pos: -12.5,-58.5 parent: 30 + - uid: 20747 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,71.5 + parent: 30 + - uid: 20749 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,71.5 + parent: 30 + - uid: 20751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,63.5 + parent: 30 + - uid: 20752 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,63.5 + parent: 30 + - uid: 21230 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,84.5 + parent: 30 + - uid: 21238 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,84.5 + parent: 30 + - uid: 21239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,90.5 + parent: 30 - proto: PoweredlightLED entities: - uid: 10291 @@ -110661,6 +111427,11 @@ entities: - type: Transform pos: -25.514673,-43.671646 parent: 30 + - uid: 20979 + components: + - type: Transform + pos: 3.6399727,76.41426 + parent: 30 - proto: SheetPlasma entities: - uid: 11365 @@ -110894,6 +111665,11 @@ entities: - type: Transform pos: -21.483423,-47.53102 parent: 30 + - uid: 20966 + components: + - type: Transform + pos: 3.4368477,76.554886 + parent: 30 - proto: SheetUranium entities: - uid: 19800 @@ -111398,6 +112174,11 @@ entities: - type: Transform pos: -1.5,60.5 parent: 30 + - uid: 20734 + components: + - type: Transform + pos: -18.5,41.5 + parent: 30 - proto: SignalButton entities: - uid: 381 @@ -113034,11 +113815,6 @@ entities: - type: Transform pos: -20.5,41.5 parent: 30 - - uid: 22461 - components: - - type: Transform - pos: -18.5,41.5 - parent: 30 - proto: SignSecureMedRed entities: - uid: 2407 @@ -116385,6 +117161,252 @@ entities: parent: 30 - proto: SurveillanceCameraCommand entities: + - uid: 20270 + components: + - type: Transform + pos: -0.5,87.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,83.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20279 + components: + - type: Transform + pos: 4.5,74.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: 'AI Core ' + - uid: 20280 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,79.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,84.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext E + - uid: 20283 + components: + - type: Transform + pos: 0.5,74.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: 'AI Core ' + - uid: 20284 + components: + - type: Transform + pos: -5.5,74.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: 'AI Core ' + - uid: 20307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,84.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext W + - uid: 20735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,83.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core + - uid: 20743 + components: + - type: Transform + pos: -3.5,68.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20744 + components: + - type: Transform + pos: 2.5,68.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,72.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20746 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,72.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Bridge + - uid: 20818 + components: + - type: Transform + pos: -0.5,90.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext N + - uid: 20819 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,84.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Core Core + - uid: 20820 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,66.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Entrance + - uid: 20821 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,66.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core + - uid: 20822 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,66.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core + - uid: 20823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,71.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext W + - uid: 20824 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,71.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext E + - uid: 20825 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,63.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext SE + - uid: 20826 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,63.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext SW + - uid: 20827 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,58.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext S - uid: 21172 components: - type: Transform @@ -116471,6 +117493,70 @@ entities: - SurveillanceCameraCommand nameSet: True id: Vault + - uid: 21201 + components: + - type: Transform + pos: 0.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Airlock + - uid: 21202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,38.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Airlock + - uid: 21209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,35.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP Bedroom + - uid: 21218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,39.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Bathroom + - uid: 21227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,40.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Junction + - uid: 21228 + components: + - type: Transform + pos: -18.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Tube - uid: 21286 components: - type: Transform @@ -116666,6 +117752,166 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Atmos Hall + - uid: 21313 + components: + - type: Transform + pos: 1.5,-41.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Entrance + - uid: 21314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-47.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Room + - uid: 21356 + components: + - type: Transform + pos: -1.5,-53.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Room + - uid: 21361 + components: + - type: Transform + pos: -5.5,-36.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: CE Office + - uid: 21377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,-42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering + - uid: 21392 + components: + - type: Transform + pos: -15.5,-37.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Secure Storage + - uid: 21393 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,-47.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: AME Room + - uid: 21394 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,-39.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Breakroom + - uid: 21395 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-46.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Lockerroom + - uid: 21396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-47.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: PA Entrance + - uid: 21397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-54.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Particle Accelerator + - uid: 21398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-58.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Singulo Cage + - uid: 21399 + components: + - type: Transform + pos: -9.5,-56.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Tesla Storage + - uid: 21451 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -38.5,26.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Materials Room + - uid: 21452 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -63.5,44.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars NW - proto: SurveillanceCameraGeneral entities: - uid: 1039 @@ -116711,6 +117957,49 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Game Room + - uid: 21210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,27.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bridge Hallway + - uid: 21214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,27.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Toolroom + - uid: 21216 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,24.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Material Room + - uid: 21217 + components: + - type: Transform + pos: -33.5,35.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Security - uid: 21231 components: - type: Transform @@ -116777,6 +118066,313 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Tool Room + - uid: 21254 + components: + - type: Transform + pos: 14.5,25.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall robotics + - uid: 21255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,28.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Dorms + - uid: 21256 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.5,27.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bathroom + - uid: 21280 + components: + - type: Transform + pos: 21.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Laundry Room + - uid: 21308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.5,29.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Shower Room + - uid: 21309 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cryosleep + - uid: 21400 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-18.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Atmos + - uid: 21401 + components: + - type: Transform + pos: -60.5,-35.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Courtyard + - uid: 21402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -60.5,-51.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Farm + - uid: 21403 + components: + - type: Transform + pos: -79.5,-40.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chaplain Office + - uid: 21404 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -73.5,-42.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Courtyard + - uid: 21405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,-39.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Airlock + - uid: 21406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -63.5,-62.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Library + - uid: 21407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -73.5,-53.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Kitchen + - uid: 21408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -75.5,-53.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Kitchen + - uid: 21409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -48.5,-22.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel Tunnel + - uid: 21410 + components: + - type: Transform + pos: -58.5,-9.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 21411 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -53.5,10.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 21424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -45.5,0.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 21426 + components: + - type: Transform + pos: -31.5,1.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Jani + - uid: 21430 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,11.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Arrivals + - uid: 21450 + components: + - type: Transform + pos: -43.5,13.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Evac + - uid: 21453 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,23.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Musician Room + - uid: 21459 + components: + - type: Transform + pos: 3.5,6.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bar + - uid: 21460 + components: + - type: Transform + pos: 3.5,13.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Theater Room + - uid: 21461 + components: + - type: Transform + pos: 10.5,1.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Cargo + - uid: 21466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 9.5,-3.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Spacebucks + - uid: 21469 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Spacebucks + - uid: 21495 + components: + - type: Transform + pos: -20.5,1.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Botany - proto: SurveillanceCameraMedical entities: - uid: 8290 @@ -117085,6 +118681,48 @@ entities: - SurveillanceCameraScience nameSet: True id: Sci Lobby + - uid: 21257 + components: + - type: Transform + pos: 30.5,18.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Anomaly Gen + - uid: 21258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 25.5,13.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: RD Bedroom + - uid: 21261 + components: + - type: Transform + pos: 26.5,7.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: RND + - uid: 21279 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,11.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Sci Server Room - proto: SurveillanceCameraSecurity entities: - uid: 1947 @@ -117288,6 +118926,17 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Lawyer's Office + - uid: 21310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,41.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Court Room - proto: SurveillanceCameraService entities: - uid: 1944 @@ -117367,6 +119016,37 @@ entities: - SurveillanceCameraService nameSet: True id: Freezer + - uid: 21429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,6.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Jani Closet + - uid: 21457 + components: + - type: Transform + pos: -23.5,15.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Backroom + - uid: 21458 + components: + - type: Transform + pos: -30.5,12.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Jani Backroom - proto: SurveillanceCameraSupply entities: - uid: 15202 @@ -117445,6 +119125,27 @@ entities: - SurveillanceCameraSupply nameSet: True id: Quartermaster's Room + - uid: 21311 + components: + - type: Transform + pos: 37.5,-6.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 2 + - uid: 21312 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-2.5 + parent: 30 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 1 - proto: SynthesizerInstrument entities: - uid: 15112 @@ -118548,6 +120249,12 @@ entities: rot: 3.141592653589793 rad pos: 12.5,-26.5 parent: 30 + - uid: 20264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,63.5 + parent: 30 - uid: 20272 components: - type: Transform @@ -120499,13 +122206,6 @@ entities: - type: Transform pos: 6.5231524,64.57765 parent: 30 -- proto: ToyAi - entities: - - uid: 20307 - components: - - type: Transform - pos: -0.49299335,82.64046 - parent: 30 - proto: ToyFigurineSpaceDragon entities: - uid: 20547 @@ -120784,11 +122484,6 @@ entities: - type: Transform pos: 23.5,22.5 parent: 30 - - uid: 20284 - components: - - type: Transform - pos: 5.5,76.5 - parent: 30 - uid: 21161 components: - type: Transform @@ -136787,58 +138482,6 @@ entities: - type: Transform pos: -22.590364,53.546127 parent: 30 -- proto: WeaponTurretSyndicateBroken - entities: - - uid: 22089 - components: - - type: Transform - pos: -4.5,79.5 - parent: 30 - - uid: 22090 - components: - - type: Transform - pos: 3.5,79.5 - parent: 30 - - uid: 22091 - components: - - type: Transform - pos: 4.5,83.5 - parent: 30 - - uid: 22092 - components: - - type: Transform - pos: 3.5,87.5 - parent: 30 - - uid: 22093 - components: - - type: Transform - pos: -4.5,87.5 - parent: 30 - - uid: 22094 - components: - - type: Transform - pos: -5.5,83.5 - parent: 30 - - uid: 22095 - components: - - type: Transform - pos: -3.5,71.5 - parent: 30 - - uid: 22096 - components: - - type: Transform - pos: -3.5,69.5 - parent: 30 - - uid: 22097 - components: - - type: Transform - pos: 2.5,69.5 - parent: 30 - - uid: 22098 - components: - - type: Transform - pos: 2.5,71.5 - parent: 30 - proto: Welder entities: - uid: 1633 @@ -137905,33 +139548,12 @@ entities: rot: -1.5707963267948966 rad pos: -17.5,43.5 parent: 30 - - uid: 5642 - components: - - type: Transform - pos: -19.5,44.5 - parent: 30 - - uid: 5643 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,43.5 - parent: 30 - uid: 5644 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,42.5 parent: 30 - - uid: 5645 - components: - - type: Transform - pos: -18.5,44.5 - parent: 30 - - uid: 5646 - components: - - type: Transform - pos: -20.5,44.5 - parent: 30 - uid: 5827 components: - type: Transform @@ -138502,17 +140124,17 @@ entities: rot: 1.5707963267948966 rad pos: -35.5,-34.5 parent: 30 - - uid: 22456 + - uid: 20748 components: - type: Transform - rot: 3.141592653589793 rad - pos: -19.5,43.5 + rot: -1.5707963267948966 rad + pos: -17.5,44.5 parent: 30 - - uid: 22457 + - uid: 20750 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,43.5 + rot: 1.5707963267948966 rad + pos: -18.5,44.5 parent: 30 - uid: 22458 components: diff --git a/Resources/Maps/meta.yml b/Resources/Maps/meta.yml index b9844b5a3b..2e577ea311 100644 --- a/Resources/Maps/meta.yml +++ b/Resources/Maps/meta.yml @@ -171,7 +171,7 @@ entities: version: 6 3,-2: ind: 3,-2 - tiles: eQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 3,-1: ind: 3,-1 @@ -283,11 +283,11 @@ entities: version: 6 4,-1: ind: 4,-1 - tiles: eQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: eQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 4,-2: ind: 4,-2 - tiles: eAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATgAAAAAATgAAAAAATgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAA + tiles: eAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAA version: 6 3,-3: ind: 3,-3 @@ -411,7 +411,7 @@ entities: version: 6 6,0: ind: 6,0 - tiles: HQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAADHQAAAAAAHQAAAAABHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAADHQAAAAABHQAAAAACHQAAAAACeQAAAAAAHQAAAAAAHQAAAAABHQAAAAABeQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAABeAAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACeQAAAAAAHQAAAAADHQAAAAADHQAAAAACHQAAAAABHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAACHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAEQAAAAAAHQAAAAACEQAAAAAAEQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAEQAAAAAAeQAAAAAANgAAAAAAeQAAAAAAEQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAANgAAAAAAHQAAAAABEQAAAAAAHQAAAAACHQAAAAABHQAAAAACEQAAAAAAHQAAAAADNgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAADHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAHQAAAAABeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA + tiles: HQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAADHQAAAAAAHQAAAAABHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAADHQAAAAABHQAAAAACHQAAAAACeQAAAAAAHQAAAAAAHQAAAAABHQAAAAABeQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAABeAAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACeQAAAAAATQAAAAAAHQAAAAADHQAAAAACHQAAAAABTQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAACHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAEQAAAAAAHQAAAAACEQAAAAAAEQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAEQAAAAAAeQAAAAAANgAAAAAAeQAAAAAAEQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAANgAAAAAAHQAAAAABEQAAAAAAHQAAAAACHQAAAAABHQAAAAACEQAAAAAAHQAAAAADNgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAADHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAHQAAAAABeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA version: 6 6,-1: ind: 6,-1 @@ -630,6 +630,7 @@ entities: 3259: 45,17 3260: 49,7 3261: 49,9 + 3515: 62,-1 - node: color: '#FFFFFFFF' id: BotGreyscale @@ -3616,6 +3617,11 @@ entities: 95: -16,-17 1967: 106,-1 1968: 105,-1 + 3504: 59,-3 + 3505: 61,-3 + 3506: 58,-3 + 3507: 60,-3 + 3508: 62,-3 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale180 @@ -4214,6 +4220,12 @@ entities: 1944: 106,1 1945: 105,1 1946: 105,2 + 3509: 62,1 + 3510: 61,1 + 3511: 60,1 + 3512: 59,1 + 3513: 58,1 + 3514: 57,1 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale90 @@ -10244,13 +10256,6 @@ entities: - type: Transform pos: 9.5,2.5 parent: 5350 - - uid: 8919 - components: - - type: MetaData - name: Drone Closet - - type: Transform - pos: 44.5,-1.5 - parent: 5350 - proto: AirlockCargoGlassLocked entities: - uid: 3393 @@ -10420,6 +10425,18 @@ entities: - type: Transform pos: 0.5,-17.5 parent: 5350 + - uid: 10775 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-1.5 + parent: 5350 + - uid: 12075 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-2.5 + parent: 5350 - uid: 26226 components: - type: Transform @@ -10483,6 +10500,11 @@ entities: - DoorStatus: DoorBolt - proto: AirlockEngineeringLocked entities: + - uid: 1032 + components: + - type: Transform + pos: 44.5,-1.5 + parent: 5350 - uid: 1109 components: - type: Transform @@ -10804,7 +10826,7 @@ entities: pos: -42.5,29.5 parent: 5350 - type: Door - secondsUntilStateChange: -2186.3599 + secondsUntilStateChange: -3920.309 state: Opening - type: DeviceLinkSink invokeCounter: 2 @@ -15461,6 +15483,12 @@ entities: - type: Transform pos: 57.5,1.5 parent: 5350 + - uid: 26810 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,0.5 + parent: 5350 - proto: BoxBeaker entities: - uid: 3708 @@ -34400,6 +34428,56 @@ entities: - type: Transform pos: 18.5,-27.5 parent: 5350 + - uid: 26658 + components: + - type: Transform + pos: 7.5,-14.5 + parent: 5350 + - uid: 26659 + components: + - type: Transform + pos: 6.5,-14.5 + parent: 5350 + - uid: 26660 + components: + - type: Transform + pos: 9.5,-14.5 + parent: 5350 + - uid: 26686 + components: + - type: Transform + pos: 10.5,-14.5 + parent: 5350 + - uid: 26767 + components: + - type: Transform + pos: -6.5,61.5 + parent: 5350 + - uid: 26768 + components: + - type: Transform + pos: -7.5,61.5 + parent: 5350 + - uid: 26769 + components: + - type: Transform + pos: -5.5,61.5 + parent: 5350 + - uid: 26842 + components: + - type: Transform + pos: 76.5,5.5 + parent: 5350 + - uid: 26843 + components: + - type: Transform + pos: 76.5,4.5 + parent: 5350 + - uid: 26844 + components: + - type: Transform + pos: 76.5,3.5 + parent: 5350 - proto: CableApcStack entities: - uid: 1550 @@ -37644,6 +37722,11 @@ entities: - type: Transform pos: 42.5,-17.5 parent: 5350 + - uid: 12076 + components: + - type: Transform + pos: 97.5,0.5 + parent: 5350 - uid: 12385 components: - type: Transform @@ -42589,11 +42672,26 @@ entities: - type: Transform pos: 31.5,-46.5 parent: 5350 + - uid: 22700 + components: + - type: Transform + pos: 99.5,0.5 + parent: 5350 + - uid: 22704 + components: + - type: Transform + pos: 95.5,0.5 + parent: 5350 - uid: 22769 components: - type: Transform pos: -11.5,-43.5 parent: 5350 + - uid: 23129 + components: + - type: Transform + pos: 96.5,0.5 + parent: 5350 - uid: 23399 components: - type: Transform @@ -43234,6 +43332,11 @@ entities: - type: Transform pos: 47.5,-23.5 parent: 5350 + - uid: 25808 + components: + - type: Transform + pos: 104.5,13.5 + parent: 5350 - uid: 25988 components: - type: Transform @@ -43254,6 +43357,21 @@ entities: - type: Transform pos: 111.5,2.5 parent: 5350 + - uid: 26232 + components: + - type: Transform + pos: 100.5,0.5 + parent: 5350 + - uid: 26304 + components: + - type: Transform + pos: 101.5,0.5 + parent: 5350 + - uid: 26305 + components: + - type: Transform + pos: 102.5,0.5 + parent: 5350 - uid: 26389 components: - type: Transform @@ -43274,6 +43392,101 @@ entities: - type: Transform pos: 110.5,-0.5 parent: 5350 + - uid: 26416 + components: + - type: Transform + pos: 103.5,0.5 + parent: 5350 + - uid: 26417 + components: + - type: Transform + pos: 104.5,0.5 + parent: 5350 + - uid: 26811 + components: + - type: Transform + pos: 98.5,0.5 + parent: 5350 + - uid: 26812 + components: + - type: Transform + pos: 104.5,1.5 + parent: 5350 + - uid: 26813 + components: + - type: Transform + pos: 104.5,2.5 + parent: 5350 + - uid: 26814 + components: + - type: Transform + pos: 104.5,3.5 + parent: 5350 + - uid: 26815 + components: + - type: Transform + pos: 104.5,4.5 + parent: 5350 + - uid: 26816 + components: + - type: Transform + pos: 104.5,5.5 + parent: 5350 + - uid: 26817 + components: + - type: Transform + pos: 104.5,6.5 + parent: 5350 + - uid: 26818 + components: + - type: Transform + pos: 103.5,6.5 + parent: 5350 + - uid: 26819 + components: + - type: Transform + pos: 102.5,6.5 + parent: 5350 + - uid: 26820 + components: + - type: Transform + pos: 102.5,7.5 + parent: 5350 + - uid: 26821 + components: + - type: Transform + pos: 102.5,8.5 + parent: 5350 + - uid: 26822 + components: + - type: Transform + pos: 102.5,9.5 + parent: 5350 + - uid: 26823 + components: + - type: Transform + pos: 102.5,10.5 + parent: 5350 + - uid: 26824 + components: + - type: Transform + pos: 102.5,11.5 + parent: 5350 + - uid: 26825 + components: + - type: Transform + pos: 102.5,12.5 + parent: 5350 + - uid: 26826 + components: + - type: Transform + pos: 103.5,12.5 + parent: 5350 + - uid: 26827 + components: + - type: Transform + pos: 103.5,13.5 + parent: 5350 - proto: CableHVStack entities: - uid: 1551 @@ -50188,11 +50401,6 @@ entities: - type: Transform pos: 105.5,6.5 parent: 5350 - - uid: 25976 - components: - - type: Transform - pos: 105.5,7.5 - parent: 5350 - uid: 25977 components: - type: Transform @@ -50353,6 +50561,56 @@ entities: - type: Transform pos: 8.5,-27.5 parent: 5350 + - uid: 26830 + components: + - type: Transform + pos: 104.5,13.5 + parent: 5350 + - uid: 26831 + components: + - type: Transform + pos: 104.5,12.5 + parent: 5350 + - uid: 26832 + components: + - type: Transform + pos: 105.5,12.5 + parent: 5350 + - uid: 26833 + components: + - type: Transform + pos: 106.5,12.5 + parent: 5350 + - uid: 26834 + components: + - type: Transform + pos: 106.5,11.5 + parent: 5350 + - uid: 26835 + components: + - type: Transform + pos: 106.5,10.5 + parent: 5350 + - uid: 26836 + components: + - type: Transform + pos: 106.5,9.5 + parent: 5350 + - uid: 26837 + components: + - type: Transform + pos: 106.5,8.5 + parent: 5350 + - uid: 26838 + components: + - type: Transform + pos: 106.5,7.5 + parent: 5350 + - uid: 26839 + components: + - type: Transform + pos: 105.5,7.5 + parent: 5350 - proto: CableMVStack entities: - uid: 1548 @@ -50434,6 +50692,12 @@ entities: rot: 3.141592653589793 rad pos: 47.5,-24.5 parent: 5350 + - uid: 25869 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 103.5,12.5 + parent: 5350 - uid: 25992 components: - type: Transform @@ -60650,6 +60914,11 @@ entities: - type: Transform pos: 41.583923,-36.62425 parent: 5350 + - uid: 26807 + components: + - type: Transform + pos: 61.47438,1.4628983 + parent: 5350 - proto: ClothingMaskBreathMedical entities: - uid: 15675 @@ -62662,6 +62931,11 @@ entities: - 0 - 0 - 0 + - uid: 26793 + components: + - type: Transform + pos: 42.5,-0.5 + parent: 5350 - proto: CrateEngineeringCableHV entities: - uid: 17216 @@ -63049,6 +63323,11 @@ entities: - type: Transform pos: 22.529781,-29.351112 parent: 5350 + - uid: 26804 + components: + - type: Transform + pos: 59.646255,1.4628983 + parent: 5350 - proto: CrowbarRed entities: - uid: 1535 @@ -70419,6 +70698,11 @@ entities: - type: Transform pos: -26.549986,39.52742 parent: 5350 + - uid: 26806 + components: + - type: Transform + pos: 61.38063,1.6503983 + parent: 5350 - proto: EmergencyRollerBedSpawnFolded entities: - uid: 22948 @@ -73360,6 +73644,11 @@ entities: - type: Transform pos: 12.432602,37.803913 parent: 5350 + - uid: 26805 + components: + - type: Transform + pos: 60.427505,1.5878983 + parent: 5350 - proto: FlashlightSeclite entities: - uid: 10004 @@ -115114,16 +115403,6 @@ entities: - type: Transform pos: 56.5,37.5 parent: 5350 - - uid: 12075 - components: - - type: Transform - pos: 57.5,-2.5 - parent: 5350 - - uid: 12076 - components: - - type: Transform - pos: 57.5,-1.5 - parent: 5350 - uid: 26234 components: - type: Transform @@ -115564,6 +115843,12 @@ entities: rot: 1.5707963267948966 rad pos: 103.5,8.5 parent: 5350 + - uid: 26808 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,-0.5 + parent: 5350 - proto: IntercomCommon entities: - uid: 24804 @@ -124117,6 +124402,11 @@ entities: parent: 5350 - type: ApcPowerReceiver powerLoad: 0 + - uid: 26845 + components: + - type: Transform + pos: 76.5,1.5 + parent: 5350 - proto: PoweredlightSodium entities: - uid: 23878 @@ -131986,26 +132276,6 @@ entities: - type: Transform pos: 1.5,-13.5 parent: 5350 - - uid: 26459 - components: - - type: Transform - pos: 103.5,2.5 - parent: 5350 - - uid: 26460 - components: - - type: Transform - pos: 105.5,2.5 - parent: 5350 - - uid: 26461 - components: - - type: Transform - pos: 105.5,-2.5 - parent: 5350 - - uid: 26462 - components: - - type: Transform - pos: 103.5,-2.5 - parent: 5350 - proto: ShowcaseRobotAntique entities: - uid: 1975 @@ -132659,6 +132929,13 @@ entities: - type: Transform pos: 56.5,-0.5 parent: 5350 +- proto: SignAiUpload + entities: + - uid: 24179 + components: + - type: Transform + pos: -8.5,11.5 + parent: 5350 - proto: SignalButton entities: - uid: 1369 @@ -134064,6 +134341,30 @@ entities: - type: Transform pos: 74.5,31.5 parent: 5350 +- proto: SignRedOne + entities: + - uid: 26775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,49.5 + parent: 5350 +- proto: SignRedThree + entities: + - uid: 26777 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,49.5 + parent: 5350 +- proto: SignRedTwo + entities: + - uid: 26776 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,49.5 + parent: 5350 - proto: SignRND entities: - uid: 22989 @@ -134167,11 +134468,6 @@ entities: - type: Transform pos: -12.5,11.5 parent: 5350 - - uid: 10775 - components: - - type: Transform - pos: -8.5,11.5 - parent: 5350 - uid: 14060 components: - type: Transform @@ -134197,6 +134493,12 @@ entities: - type: Transform pos: 20.5,-48.5 parent: 5350 + - uid: 26809 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,-3.5 + parent: 5350 - proto: SignSecureMedRed entities: - uid: 10471 @@ -134781,10 +135083,10 @@ entities: - type: Transform pos: 109.5,2.5 parent: 5350 - - uid: 25869 + - uid: 26828 components: - type: Transform - pos: 104.5,13.5 + pos: 103.5,13.5 parent: 5350 - proto: SmokingPipeFilledCannabis entities: @@ -137820,6 +138122,11 @@ entities: - type: Transform pos: 108.5,2.5 parent: 5350 + - uid: 26829 + components: + - type: Transform + pos: 104.5,13.5 + parent: 5350 - proto: SuitStorageCaptain entities: - uid: 1505 @@ -138111,6 +138418,17 @@ entities: - SurveillanceCameraCommand nameSet: True id: Vault + - uid: 8919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 112.5,-4.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Ext E - uid: 10749 components: - type: Transform @@ -138174,6 +138492,17 @@ entities: - SurveillanceCameraCommand nameSet: True id: Telecomms + - uid: 25814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 69.5,1.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Tunnel - uid: 26400 components: - type: Transform @@ -138282,6 +138611,60 @@ entities: rot: 3.141592653589793 rad pos: 92.5,5.5 parent: 5350 + - uid: 26418 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Bathroom + - uid: 26657 + components: + - type: Transform + pos: -4.5,-16.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Showroom + - uid: 26782 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,-0.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Tunnel + - uid: 26801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 105.5,-2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Telecomms Command Room + - uid: 26846 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 78.5,2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Core Tunnel - proto: SurveillanceCameraEngineering entities: - uid: 11516 @@ -138490,6 +138873,167 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Grav Gen + - uid: 26745 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-5.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Desk + - uid: 26764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,44.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars NW + - uid: 26783 + components: + - type: Transform + pos: 56.5,-30.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Oxy + - uid: 26784 + components: + - type: Transform + pos: 52.5,-30.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Nitro + - uid: 26785 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-19.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Co2 + - uid: 26786 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Plasma + - uid: 26787 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-11.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Waste + - uid: 26788 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 69.5,-7.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Tank Mixer + - uid: 26789 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,-23.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Exterior + - uid: 26792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-0.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Materials Room + - uid: 26794 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars NE + - uid: 26795 + components: + - type: Transform + pos: 56.5,43.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Grav Gen Exterior + - uid: 26802 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 99.5,-3.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Telecomms Entrance + - uid: 26849 + components: + - type: Transform + pos: 37.5,-60.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars SE + - uid: 26850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-62.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solars SW - proto: SurveillanceCameraGeneral entities: - uid: 23189 @@ -138599,6 +139143,451 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Tool Room + - uid: 26419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-3.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall HoP + - uid: 26420 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cargo Lobby + - uid: 26459 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Library + - uid: 26460 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: GameRoom + - uid: 26461 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Librarian Room + - uid: 26462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,-18.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Chem + - uid: 26645 + components: + - type: Transform + pos: -6.5,-63.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Evac 1 + - uid: 26646 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-69.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Evac 2 + - uid: 26648 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-67.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chapel + - uid: 26649 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-55.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Evac + - uid: 26650 + components: + - type: Transform + pos: -25.5,-67.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chaplain Office + - uid: 26651 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-70.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Chaplain Funerary + - uid: 26652 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-48.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Genetics + - uid: 26653 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Robotics + - uid: 26656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-18.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Showroom + - uid: 26696 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-18.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Vault + - uid: 26742 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Botany + - uid: 26747 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-7.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Captain + - uid: 26748 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,4.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Bar + - uid: 26749 + components: + - type: Transform + pos: 6.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Courtroom + - uid: 26750 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,0.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Cargo + - uid: 26751 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,1.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Arrivals + - uid: 26752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,-2.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Club + - uid: 26753 + components: + - type: Transform + pos: -59.5,-9.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26754 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -54.5,6.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26755 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -64.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -71.5,8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26757 + components: + - type: Transform + pos: -72.5,-9.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals + - uid: 26758 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -69.5,-17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Docks + - uid: 26762 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,23.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Jani + - uid: 26779 + components: + - type: Transform + pos: 33.5,37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Boxing Ring + - uid: 26780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,37.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Holodeck + - uid: 26781 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,29.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorms Hall + - uid: 26790 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-9.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Theater Room + - uid: 26791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,4.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Engi + - uid: 26796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,47.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Boxing Ring Escape Pod + - uid: 26797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,20.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cryosleep + - uid: 26799 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Sec + - uid: 26800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,6.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bridge Shop + - uid: 26847 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,7.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Tool Room + - uid: 26848 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,11.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Main Hall Bridge - proto: SurveillanceCameraMedical entities: - uid: 14402 @@ -138720,6 +139709,113 @@ entities: - SurveillanceCameraMedical nameSet: True id: Cryonics + - uid: 26501 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-33.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Storage + - uid: 26502 + components: + - type: Transform + pos: -30.5,-47.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Surgery Hallway + - uid: 26503 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-49.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: 'Medical Hall ' + - uid: 26526 + components: + - type: Transform + pos: -18.5,-55.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical South + - uid: 26636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,-57.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Storage 2 + - uid: 26637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-54.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Breakroom + - uid: 26640 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -49.5,-56.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology + - uid: 26643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Viro Chamber + - uid: 26644 + components: + - type: Transform + pos: -53.5,-52.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Viro Room 1 + - uid: 26655 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,-31.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Paramedic Garage - proto: SurveillanceCameraRouterCommand entities: - uid: 24071 @@ -138897,6 +139993,80 @@ entities: - SurveillanceCameraScience nameSet: True id: Sci Lobby + - uid: 26654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-29.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Robotics Bay + - uid: 26704 + components: + - type: Transform + pos: 8.5,-32.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Entrance + - uid: 26705 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-43.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Center + - uid: 26738 + components: + - type: Transform + pos: 10.5,-55.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Toxins + - uid: 26739 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 22.5,-54.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Lockerroom + - uid: 26740 + components: + - type: Transform + pos: 26.5,-43.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Science Hall + - uid: 26741 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,-28.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Artifact Lab - proto: SurveillanceCameraSecurity entities: - uid: 10469 @@ -139048,6 +140218,113 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Gun Range + - uid: 26647 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-70.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Evac Security post + - uid: 26765 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,38.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Security Hall + - uid: 26766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,48.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Hall + - uid: 26770 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,57.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Exterior + - uid: 26771 + components: + - type: Transform + pos: -3.5,63.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Exterior + - uid: 26772 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Brig 3 + - uid: 26773 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Brig 2 + - uid: 26774 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,51.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Brig 1 + - uid: 26778 + components: + - type: Transform + pos: 1.5,50.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Med + - uid: 26798 + components: + - type: Transform + pos: 13.5,17.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Law Office - proto: SurveillanceCameraService entities: - uid: 23214 @@ -139071,6 +140348,39 @@ entities: - SurveillanceCameraService nameSet: True id: Freezer + - uid: 26743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,-15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Hydroponics + - uid: 26744 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.5,-22.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Backroom + - uid: 26746 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-8.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Bar - proto: SurveillanceCameraSupply entities: - uid: 23184 @@ -139128,6 +140438,60 @@ entities: - SurveillanceCameraSupply nameSet: True id: Salvage Bay + - uid: 26423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,10.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Breakroom + - uid: 26759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -43.5,31.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Salvage Dock + - uid: 26760 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,19.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 1 + - uid: 26761 + components: + - type: Transform + pos: -44.5,15.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock 2 + - uid: 26763 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,22.5 + parent: 5350 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Bay North - proto: SurveillanceCameraWirelessRouterConstructed entities: - uid: 26558 @@ -142831,6 +144195,16 @@ entities: showEnts: False occludes: True ents: [] + - uid: 26840 + components: + - type: Transform + pos: 108.5,9.5 + parent: 5350 + - uid: 26841 + components: + - type: Transform + pos: 100.5,9.5 + parent: 5350 - proto: TeslaCoil entities: - uid: 23612 @@ -143135,11 +144509,6 @@ entities: parent: 5350 - proto: ToiletEmpty entities: - - uid: 1032 - components: - - type: Transform - pos: 8.5,2.5 - parent: 5350 - uid: 7817 components: - type: Transform @@ -143178,6 +144547,13 @@ entities: - type: Transform pos: -39.5,-10.5 parent: 5350 +- proto: ToiletGoldenDirtyWater + entities: + - uid: 25811 + components: + - type: Transform + pos: 8.5,2.5 + parent: 5350 - proto: TomatoSeeds entities: - uid: 3141 @@ -143322,11 +144698,6 @@ entities: - type: Transform pos: 1.5618443,-16.342892 parent: 5350 - - uid: 26423 - components: - - type: Transform - pos: 104.485725,8.611769 - parent: 5350 - proto: ToyAmongPequeno entities: - uid: 14514 @@ -153357,11 +154728,6 @@ entities: - type: Transform pos: 103.5,14.5 parent: 5350 - - uid: 25808 - components: - - type: Transform - pos: 103.5,13.5 - parent: 5350 - uid: 25809 components: - type: Transform @@ -153372,11 +154738,6 @@ entities: - type: Transform pos: 105.5,14.5 parent: 5350 - - uid: 25811 - components: - - type: Transform - pos: 105.5,13.5 - parent: 5350 - uid: 25812 components: - type: Transform @@ -153387,11 +154748,6 @@ entities: - type: Transform pos: 101.5,13.5 parent: 5350 - - uid: 25814 - components: - - type: Transform - pos: 106.5,13.5 - parent: 5350 - uid: 25815 components: - type: Transform @@ -153622,6 +154978,11 @@ entities: - type: Transform pos: 108.5,-11.5 parent: 5350 + - uid: 25976 + components: + - type: Transform + pos: 105.5,13.5 + parent: 5350 - uid: 26215 components: - type: Transform @@ -153642,6 +155003,11 @@ entities: - type: Transform pos: 108.5,-2.5 parent: 5350 + - uid: 26231 + components: + - type: Transform + pos: 106.5,13.5 + parent: 5350 - uid: 26335 components: - type: Transform @@ -161898,31 +163264,6 @@ entities: parent: 5350 - proto: WeaponTurretSyndicateBroken entities: - - uid: 26416 - components: - - type: Transform - pos: 106.5,2.5 - parent: 5350 - - uid: 26417 - components: - - type: Transform - pos: 102.5,2.5 - parent: 5350 - - uid: 26418 - components: - - type: Transform - pos: 104.5,6.5 - parent: 5350 - - uid: 26419 - components: - - type: Transform - pos: 107.5,6.5 - parent: 5350 - - uid: 26420 - components: - - type: Transform - pos: 101.5,6.5 - parent: 5350 - uid: 26421 components: - type: Transform @@ -167197,4 +168538,9 @@ entities: - type: Transform pos: 45.520813,-8.421944 parent: 5350 + - uid: 26803 + components: + - type: Transform + pos: 59.615005,1.5566483 + parent: 5350 ... diff --git a/Resources/Maps/oasis.yml b/Resources/Maps/oasis.yml index 7ad734af15..3263b62a34 100755 --- a/Resources/Maps/oasis.yml +++ b/Resources/Maps/oasis.yml @@ -174,7 +174,7 @@ entities: version: 6 2,-3: ind: 2,-3 - tiles: gQAAAAAAbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAKQAAAAACbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAKQAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAAAAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAABgQAAAAAAKQAAAAABKQAAAAADgQAAAAAAKQAAAAADKQAAAAACKQAAAAADKQAAAAACKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAACgQAAAAAAKQAAAAACKQAAAAABIQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAADKQAAAAACgQAAAAAAgQAAAAAAJAAAAAAAgQAAAAAAdwAAAAAAYAAAAAADYAAAAAADgQAAAAAAKQAAAAAAKQAAAAAAgQAAAAAAKQAAAAABJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAADgQAAAAAAKQAAAAADKQAAAAABKQAAAAADdwAAAAADYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAACKQAAAAACdwAAAAABYAAAAAABYAAAAAAAYAAAAAABYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAIQAAAAACgQAAAAAAgQAAAAAAKQAAAAACKQAAAAABKQAAAAACKQAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAADIQAAAAABKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAABKQAAAAADKQAAAAACgQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABKQAAAAADgQAAAAAAgQAAAAAAJAAAAAADgQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAACKQAAAAAAKQAAAAACKQAAAAACIQAAAAAAKQAAAAABKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABgQAAAAAAbwAAAAAAbwAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAACKQAAAAACKQAAAAADKQAAAAABKQAAAAACKQAAAAABKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: gQAAAAAAbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAKQAAAAACbwAAAAAAKQAAAAADKQAAAAADbwAAAAAAKQAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAAAAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAbwAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAbwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAABgQAAAAAAKQAAAAABKQAAAAADgQAAAAAAKQAAAAADKQAAAAACKQAAAAADKQAAAAACKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAACgQAAAAAAKQAAAAACKQAAAAABIQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAADKQAAAAACgQAAAAAAgQAAAAAAJAAAAAAAgQAAAAAAdwAAAAAAYAAAAAADYAAAAAADgQAAAAAAKQAAAAAAKQAAAAAAgQAAAAAAKQAAAAABJgAAAAAAJgAAAAAAJgAAAAAAKQAAAAADgQAAAAAAKQAAAAADKQAAAAABKQAAAAADdwAAAAADYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAACKQAAAAACdwAAAAABYAAAAAABYAAAAAAAYAAAAAABYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAIQAAAAACgQAAAAAAgQAAAAAAKQAAAAACKQAAAAABKQAAAAACKQAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAADIQAAAAABKQAAAAACKQAAAAADKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAKQAAAAAAKQAAAAABKQAAAAADKQAAAAACgQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAABKQAAAAADKQAAAAADKQAAAAAAgQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABKQAAAAADgQAAAAAAgQAAAAAAJAAAAAADgQAAAAAAKQAAAAADKQAAAAAAKQAAAAAAKQAAAAACKQAAAAAAKQAAAAACKQAAAAACIQAAAAAAKQAAAAABKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAABgQAAAAAAbwAAAAAAbwAAAAAAKQAAAAADKQAAAAACKQAAAAAAKQAAAAACKQAAAAAAKQAAAAADKQAAAAACKQAAAAACKQAAAAADKQAAAAABKQAAAAACKQAAAAABKQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 2,-1: ind: 2,-1 @@ -202,11 +202,11 @@ entities: version: 6 -3,0: ind: -3,0 - tiles: YAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAKQAAAAABKQAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAACYAAAAAABYAAAAAACYAAAAAAAgQAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAABYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: YAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAABYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAKQAAAAABKQAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAACYAAAAAABYAAAAAACYAAAAAAAgQAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAABYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAgQAAAAAAYAAAAAADYAAAAAACgQAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAbwAAAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 -3,1: ind: -3,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 0,-4: ind: 0,-4 @@ -6668,7 +6668,7 @@ entities: -8,-8: 0: 65327 -8,-9: - 0: 62207 + 0: 62079 -9,-8: 0: 43071 -8,-7: @@ -6688,7 +6688,7 @@ entities: -7,-6: 0: 57583 -7,-9: - 0: 61679 + 0: 61695 -6,-8: 0: 65039 -6,-7: @@ -6781,13 +6781,13 @@ entities: 4,-10: 0: 16383 -8,-12: - 0: 30591 + 0: 30583 -9,-12: 0: 2039 -8,-11: 0: 28791 -8,-10: - 0: 61559 + 0: 28791 -9,-11: 0: 61559 -9,-10: @@ -6799,7 +6799,7 @@ entities: -7,-11: 0: 65295 -7,-10: - 0: 57599 + 0: 61695 -7,-13: 0: 65287 -6,-12: @@ -6893,7 +6893,7 @@ entities: 9,-13: 0: 4369 10,-12: - 0: 14560 + 0: 7904 10,-11: 0: 65295 10,-10: @@ -7021,7 +7021,7 @@ entities: 0: 65427 -13,-12: 0: 56524 - 6: 17 + 7: 17 -12,-11: 0: 60931 -13,-11: @@ -7034,20 +7034,22 @@ entities: 0: 30583 -12,-8: 0: 4087 + -11,-10: + 0: 61167 + -11,-9: + 0: 65534 -11,-12: 0: 61166 -11,-11: 0: 61166 - -11,-10: - 0: 3808 - -11,-9: - 0: 1636 + -11,-8: + 0: 61438 -10,-12: 0: 32767 -10,-11: 0: 30583 -10,-10: - 0: 26222 + 0: 30590 -10,-9: 0: 61158 -10,-8: @@ -7064,8 +7066,6 @@ entities: 0: 119 -13,-5: 0: 58982 - -11,-8: - 0: 61424 -11,-7: 0: 61422 -11,-5: @@ -7129,23 +7129,22 @@ entities: 3: 34952 -11,2: 3: 255 - 1: 57344 + 4: 57344 -12,4: 3: 53192 -11,3: 3: 61440 - 4: 224 + 5: 224 -10,1: 0: 40847 -10,2: - 3: 8755 - 0: 34952 + 3: 51 + 0: 43656 -10,3: - 3: 12834 - 0: 34952 + 3: 12288 + 0: 35498 -10,4: - 3: 8738 - 0: 34952 + 0: 43690 -13,4: 3: 32630 -12,7: @@ -7158,27 +7157,26 @@ entities: 3: 34952 -11,6: 3: 61440 - 6: 224 + 7: 224 -11,7: 3: 65535 -12,8: 3: 34952 -11,4: - 5: 224 - 6: 57344 + 6: 224 + 7: 57344 -11,5: - 6: 57568 + 7: 57568 -11,8: 3: 65535 -10,6: - 3: 12834 - 0: 34952 + 3: 12288 + 0: 35498 -10,7: 3: 13107 0: 34952 -10,5: - 3: 8738 - 0: 34952 + 0: 43690 -10,8: 3: 62259 0: 136 @@ -7245,7 +7243,7 @@ entities: -2,-14: 0: 65520 -9,-15: - 6: 2048 + 7: 2048 -8,-14: 0: 4080 -9,-14: @@ -7255,11 +7253,11 @@ entities: -9,-13: 0: 4095 -7,-15: - 6: 61184 + 7: 61184 -7,-14: 0: 32752 -6,-15: - 6: 256 + 7: 256 0: 32768 -6,-14: 0: 65528 @@ -7268,31 +7266,31 @@ entities: -13,-16: 3: 65520 -12,-15: - 6: 53128 + 7: 53128 -12,-14: 0: 30483 - 6: 4 + 7: 4 -13,-14: 0: 52232 3: 23 -11,-16: - 6: 4352 + 7: 4352 -11,-15: - 6: 65425 + 7: 65425 -11,-14: 0: 65520 -11,-13: 0: 831 -10,-15: - 6: 14327 + 7: 14327 -10,-14: 0: 16304 -10,-13: 0: 2187 -10,-16: - 6: 8704 + 7: 8704 -10,-17: - 6: 49152 + 7: 49152 -16,-7: 3: 52416 -16,-6: @@ -7317,7 +7315,7 @@ entities: 0: 52416 -15,-9: 0: 34952 - 6: 256 + 7: 256 -14,-8: 0: 49080 -14,-7: @@ -7337,31 +7335,31 @@ entities: -13,-7: 0: 26214 -16,-12: - 6: 32 + 7: 32 -16,-11: - 6: 32768 + 7: 32768 -16,-10: - 6: 8 + 7: 8 -15,-11: - 6: 13036 + 7: 13036 0: 32768 -15,-10: - 6: 307 + 7: 307 0: 34952 -15,-12: - 6: 51336 + 7: 51336 -14,-12: - 6: 4607 + 7: 4607 0: 49152 -14,-11: - 6: 17 + 7: 17 0: 61644 -14,-10: 0: 65535 -14,-13: - 6: 59392 + 7: 59392 -13,-13: - 6: 4352 + 7: 4352 0: 1604 8,9: 0: 65535 @@ -7390,7 +7388,7 @@ entities: 10,10: 0: 3549 10,11: - 6: 275 + 7: 275 10,12: 0: 305 3: 3276 @@ -7570,9 +7568,9 @@ entities: 14,-9: 0: 36623 15,-8: - 6: 16 + 7: 16 15,-6: - 6: 16 + 7: 16 0: 4096 3: 32768 15,-9: @@ -7580,16 +7578,16 @@ entities: 16,-5: 3: 304 12,-11: - 6: 49156 + 7: 49156 12,-12: 3: 12 12,-13: 3: 52303 13,-12: 3: 15 - 6: 16384 + 7: 16384 13,-11: - 6: 65228 + 7: 65228 13,-10: 0: 65520 13,-13: @@ -7597,7 +7595,7 @@ entities: 14,-12: 3: 15 14,-11: - 6: 65521 + 7: 65521 14,-10: 0: 65392 14,-13: @@ -7605,14 +7603,14 @@ entities: 15,-12: 3: 1 15,-11: - 6: 4112 + 7: 4112 15,-10: - 6: 52451 + 7: 52451 0: 4096 15,-13: 3: 4511 16,-10: - 6: 19 + 7: 19 -4,9: 0: 7421 -5,9: @@ -7627,13 +7625,13 @@ entities: 0: 32767 -4,12: 0: 34945 - 6: 13072 + 7: 13072 -3,9: 0: 4095 -3,10: 0: 65535 -3,11: - 6: 61408 + 7: 61408 -2,9: 0: 4095 -2,10: @@ -7677,7 +7675,7 @@ entities: 0: 65535 -5,12: 0: 13111 - 6: 34816 + 7: 34816 -12,9: 3: 65497 -13,9: @@ -7686,19 +7684,19 @@ entities: 3: 52428 -11,9: 3: 4607 - 6: 49152 + 7: 49152 -11,10: 3: 33041 - 6: 204 + 7: 204 -12,11: 3: 136 -11,11: 3: 248 -10,9: 3: 52479 - 6: 4096 + 7: 4096 -10,10: - 6: 17 + 7: 17 3: 34952 -10,11: 3: 2296 @@ -7753,14 +7751,14 @@ entities: 3: 49 -5,13: 0: 51 - 6: 51208 + 7: 51208 -5,14: - 6: 264 + 7: 264 -4,13: - 6: 29443 + 7: 29443 0: 136 -4,14: - 6: 3 + 7: 3 -3,12: 0: 65520 -3,13: @@ -7776,7 +7774,7 @@ entities: 0,13: 0: 35003 1,13: - 0: 8866 + 0: 41634 1,14: 0: 8710 3: 34952 @@ -7787,7 +7785,7 @@ entities: 0: 8738 3: 34952 2,13: - 0: 184 + 0: 4280 2,14: 3: 49023 2,15: @@ -7799,7 +7797,8 @@ entities: 3,14: 3: 44847 3,15: - 3: 44975 + 3: 44463 + 0: 512 3,16: 3: 12207 4,14: @@ -7807,15 +7806,15 @@ entities: 4,15: 3: 44971 4,13: - 0: 224 + 0: 49376 4,16: 3: 65515 5,15: - 3: 1279 - 0: 8192 + 0: 8243 + 3: 1228 5,13: 0: 8738 - 6: 136 + 7: 136 5,14: 0: 546 3: 16384 @@ -7990,7 +7989,7 @@ entities: -15,-16: 3: 65520 -15,-13: - 6: 64 + 7: 64 -14,-16: 3: 24404 -14,-15: @@ -8095,7 +8094,7 @@ entities: -10,-19: 3: 4096 -10,-18: - 0: 4 + 7: 4 -18,-12: 3: 68 -18,-13: @@ -8188,7 +8187,7 @@ entities: temperature: 293.15 moles: - 0 - - 6666.982 + - 103.92799 - 0 - 0 - 0 @@ -8229,6 +8228,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 6666.982 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -9549,18 +9563,6 @@ entities: - 15445 - 1922 - 412 - - uid: 7089 - components: - - type: Transform - pos: -10.5,18.5 - parent: 2 - - type: DeviceList - devices: - - 9276 - - 29004 - - 29003 - - 29050 - - 28969 - uid: 8130 components: - type: Transform @@ -11149,13 +11151,20 @@ entities: - 2175 - 28966 - 29041 -- proto: AirAlarmAssembly +- proto: AirAlarmVox entities: - - uid: 2171 + - uid: 231 components: - type: Transform - pos: -16.5,18.5 + pos: -10.5,18.5 parent: 2 + - type: DeviceList + devices: + - 29003 + - 29004 + - 29050 + - 9276 + - 28969 - proto: AirCanister entities: - uid: 4223 @@ -12083,12 +12092,6 @@ entities: rot: 1.5707963267948966 rad pos: 45.5,26.5 parent: 2 - - uid: 21027 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-46.5 - parent: 2 - uid: 23669 components: - type: Transform @@ -14311,7 +14314,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28169.445 + secondsUntilStateChange: -34766 state: Opening - uid: 6934 components: @@ -14323,7 +14326,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28172.08 + secondsUntilStateChange: -34768.633 state: Opening - uid: 6935 components: @@ -14335,7 +14338,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28170.93 + secondsUntilStateChange: -34767.484 state: Opening - uid: 6936 components: @@ -14346,7 +14349,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -28170.146 + secondsUntilStateChange: -34766.7 state: Opening - proto: AirlockTheatreLocked entities: @@ -14438,7 +14441,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - uid: 18245 components: - type: Transform @@ -34825,6 +34828,11 @@ entities: parent: 21002 - proto: AtmosDeviceFanDirectional entities: + - uid: 5191 + components: + - type: Transform + pos: -13.5,-58.5 + parent: 2 - uid: 10677 components: - type: Transform @@ -34867,59 +34875,6 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-68.5 parent: 2 - - uid: 13210 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-80.5 - parent: 2 - - uid: 13747 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-82.5 - parent: 2 - - uid: 13773 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -61.5,-17.5 - parent: 2 - - uid: 16803 - components: - - type: Transform - pos: -13.5,-58.5 - parent: 2 - - uid: 18705 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-80.5 - parent: 2 - - uid: 19542 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-82.5 - parent: 2 - - uid: 25960 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -61.5,-1.5 - parent: 2 - - uid: 26097 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -61.5,-5.5 - parent: 2 - - uid: 26114 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-80.5 - parent: 2 - proto: AtmosDeviceFanTiny entities: - uid: 45 @@ -36121,144 +36076,146 @@ entities: - type: Transform pos: -42.5,11.5 parent: 2 - - uid: 29002 +- proto: AtmosFixOxygenMarker + entities: + - uid: 5580 components: - type: Transform - pos: -11.5,16.5 + pos: -42.5,13.5 parent: 2 - - uid: 29018 + - uid: 9284 components: - type: Transform - pos: -11.5,17.5 + pos: -41.5,13.5 parent: 2 - - uid: 29019 + - uid: 9285 components: - type: Transform - pos: -10.5,17.5 + pos: -40.5,13.5 parent: 2 - - uid: 29020 +- proto: AtmosFixPlasmaMarker + entities: + - uid: 9287 components: - type: Transform - pos: -11.5,18.5 + pos: -40.5,17.5 parent: 2 - - uid: 29021 + - uid: 9288 components: - type: Transform - pos: -11.5,19.5 + pos: -41.5,17.5 parent: 2 - - uid: 29022 + - uid: 9289 components: - type: Transform - pos: -12.5,19.5 + pos: -42.5,17.5 parent: 2 - - uid: 29023 +- proto: AtmosFixVoxMarker + entities: + - uid: 10285 components: - type: Transform - pos: -13.5,19.5 + pos: -15.5,17.5 parent: 2 - - uid: 29024 + - uid: 10466 components: - type: Transform - pos: -14.5,19.5 + pos: -14.5,16.5 parent: 2 - - uid: 29025 + - uid: 10655 components: - type: Transform - pos: -14.5,18.5 + pos: -15.5,16.5 parent: 2 - - uid: 29026 + - uid: 10656 components: - type: Transform - pos: -13.5,18.5 + pos: -14.5,18.5 parent: 2 - - uid: 29027 + - uid: 10691 components: - type: Transform - pos: -12.5,18.5 + pos: -13.5,19.5 parent: 2 - - uid: 29028 + - uid: 11130 components: - type: Transform - pos: -12.5,17.5 + pos: -13.5,18.5 parent: 2 - - uid: 29029 + - uid: 12566 components: - type: Transform pos: -13.5,17.5 parent: 2 - - uid: 29030 + - uid: 12567 components: - type: Transform - pos: -14.5,17.5 + pos: -13.5,16.5 parent: 2 - - uid: 29031 + - uid: 12882 components: - type: Transform - pos: -15.5,17.5 + pos: -12.5,16.5 parent: 2 - - uid: 29032 + - uid: 12883 components: - type: Transform - pos: -16.5,17.5 + pos: -11.5,16.5 parent: 2 - - uid: 29033 + - uid: 12884 components: - type: Transform - pos: -16.5,16.5 + pos: -14.5,19.5 parent: 2 - - uid: 29034 + - uid: 12885 components: - type: Transform - pos: -15.5,16.5 + pos: -14.5,17.5 parent: 2 - - uid: 29035 + - uid: 12886 components: - type: Transform - pos: -14.5,16.5 + pos: -11.5,17.5 parent: 2 - - uid: 29036 + - uid: 12888 components: - type: Transform - pos: -13.5,16.5 + pos: -12.5,17.5 parent: 2 - - uid: 29037 + - uid: 12889 components: - type: Transform - pos: -12.5,16.5 + pos: -12.5,19.5 parent: 2 -- proto: AtmosFixOxygenMarker - entities: - - uid: 5580 + - uid: 12934 components: - type: Transform - pos: -42.5,13.5 + pos: -10.5,17.5 parent: 2 - - uid: 9284 + - uid: 12935 components: - type: Transform - pos: -41.5,13.5 + pos: -11.5,19.5 parent: 2 - - uid: 9285 + - uid: 12937 components: - type: Transform - pos: -40.5,13.5 + pos: -11.5,18.5 parent: 2 -- proto: AtmosFixPlasmaMarker - entities: - - uid: 9287 + - uid: 12938 components: - type: Transform - pos: -40.5,17.5 + pos: -12.5,18.5 parent: 2 - - uid: 9288 + - uid: 13010 components: - type: Transform - pos: -41.5,17.5 + pos: -16.5,16.5 parent: 2 - - uid: 9289 + - uid: 13030 components: - type: Transform - pos: -42.5,17.5 + pos: -16.5,17.5 parent: 2 - proto: Autolathe entities: @@ -37290,35 +37247,6 @@ entities: rot: 1.5707963267948966 rad pos: -34.5,-6.5 parent: 2 - - uid: 7941 - components: - - type: Transform - pos: 51.5,16.5 - parent: 2 - - type: EntityStorage - open: True - removedMasks: 20 - - type: Fixtures - fixtures: - fix1: - shape: !type:PolygonShape - radius: 0.01 - vertices: - - -0.45,-0.45 - - 0.45,-0.45 - - 0.45,0.45 - - -0.45,0.45 - mask: - - Impassable - - TableLayer - - LowImpassable - layer: - - BulletImpassable - - Opaque - density: 190 - hard: True - restitution: 0 - friction: 0.4 - uid: 10179 components: - type: Transform @@ -37330,6 +37258,11 @@ entities: - type: Transform pos: -7.5,-54.5 parent: 2 + - uid: 29023 + components: + - type: Transform + pos: 61.5,17.5 + parent: 2 - proto: BoxBeaker entities: - uid: 10428 @@ -39440,11 +39373,6 @@ entities: - type: Transform pos: 31.5,6.5 parent: 2 - - uid: 2494 - components: - - type: Transform - pos: 31.5,6.5 - parent: 2 - uid: 2495 components: - type: Transform @@ -47475,11 +47403,6 @@ entities: - type: Transform pos: 40.5,-44.5 parent: 2 - - uid: 11130 - components: - - type: Transform - pos: 41.5,-44.5 - parent: 2 - uid: 11131 components: - type: Transform @@ -54850,6 +54773,11 @@ entities: - type: Transform pos: 43.5,61.5 parent: 21002 + - uid: 25960 + components: + - type: Transform + pos: 40.5,-43.5 + parent: 2 - uid: 26463 components: - type: Transform @@ -55335,6 +55263,16 @@ entities: - type: Transform pos: -44.5,37.5 parent: 2 + - uid: 29036 + components: + - type: Transform + pos: -14.5,19.5 + parent: 2 + - uid: 29077 + components: + - type: Transform + pos: -14.5,20.5 + parent: 2 - proto: CableApcStack1 entities: - uid: 23589 @@ -55356,11 +55294,6 @@ entities: parent: 2 - proto: CableHV entities: - - uid: 231 - components: - - type: Transform - pos: 44.5,-46.5 - parent: 2 - uid: 1409 components: - type: Transform @@ -58606,16 +58539,6 @@ entities: - type: Transform pos: 4.5,-57.5 parent: 2 - - uid: 10656 - components: - - type: Transform - pos: 41.5,-46.5 - parent: 2 - - uid: 10691 - components: - - type: Transform - pos: 42.5,-46.5 - parent: 2 - uid: 10716 components: - type: Transform @@ -59096,16 +59019,6 @@ entities: - type: Transform pos: 52.5,19.5 parent: 2 - - uid: 12888 - components: - - type: Transform - pos: 44.5,24.5 - parent: 2 - - uid: 12889 - components: - - type: Transform - pos: 45.5,24.5 - parent: 2 - uid: 12890 components: - type: Transform @@ -59311,16 +59224,6 @@ entities: - type: Transform pos: 56.5,13.5 parent: 2 - - uid: 12937 - components: - - type: Transform - pos: 44.5,11.5 - parent: 2 - - uid: 12938 - components: - - type: Transform - pos: 45.5,11.5 - parent: 2 - uid: 12959 components: - type: Transform @@ -59466,6 +59369,31 @@ entities: - type: Transform pos: 56.5,9.5 parent: 2 + - uid: 13034 + components: + - type: Transform + pos: 43.5,-45.5 + parent: 2 + - uid: 13037 + components: + - type: Transform + pos: 51.5,23.5 + parent: 2 + - uid: 13210 + components: + - type: Transform + pos: 51.5,22.5 + parent: 2 + - uid: 13747 + components: + - type: Transform + pos: 51.5,20.5 + parent: 2 + - uid: 13773 + components: + - type: Transform + pos: 51.5,21.5 + parent: 2 - uid: 15404 components: - type: Transform @@ -59511,6 +59439,11 @@ entities: - type: Transform pos: 31.5,39.5 parent: 2 + - uid: 18705 + components: + - type: Transform + pos: 42.5,-45.5 + parent: 2 - uid: 18738 components: - type: Transform @@ -60781,16 +60714,6 @@ entities: - type: Transform pos: 40.5,-44.5 parent: 2 - - uid: 19956 - components: - - type: Transform - pos: 41.5,-44.5 - parent: 2 - - uid: 19959 - components: - - type: Transform - pos: 43.5,-46.5 - parent: 2 - uid: 19983 components: - type: Transform @@ -62716,6 +62639,106 @@ entities: - type: Transform pos: 22.5,-24.5 parent: 21002 + - uid: 29022 + components: + - type: Transform + pos: 40.5,-43.5 + parent: 2 + - uid: 29025 + components: + - type: Transform + pos: 41.5,-46.5 + parent: 2 + - uid: 29033 + components: + - type: Transform + pos: 41.5,-45.5 + parent: 2 + - uid: 29151 + components: + - type: Transform + pos: 60.5,10.5 + parent: 2 + - uid: 29152 + components: + - type: Transform + pos: 60.5,11.5 + parent: 2 + - uid: 29153 + components: + - type: Transform + pos: 60.5,12.5 + parent: 2 + - uid: 29154 + components: + - type: Transform + pos: 60.5,13.5 + parent: 2 + - uid: 29155 + components: + - type: Transform + pos: 60.5,14.5 + parent: 2 + - uid: 29156 + components: + - type: Transform + pos: 60.5,15.5 + parent: 2 + - uid: 29157 + components: + - type: Transform + pos: 60.5,16.5 + parent: 2 + - uid: 29158 + components: + - type: Transform + pos: 59.5,16.5 + parent: 2 + - uid: 29159 + components: + - type: Transform + pos: 58.5,16.5 + parent: 2 + - uid: 29160 + components: + - type: Transform + pos: 57.5,16.5 + parent: 2 + - uid: 29161 + components: + - type: Transform + pos: 56.5,16.5 + parent: 2 + - uid: 29162 + components: + - type: Transform + pos: 55.5,16.5 + parent: 2 + - uid: 29163 + components: + - type: Transform + pos: 54.5,16.5 + parent: 2 + - uid: 29164 + components: + - type: Transform + pos: 53.5,16.5 + parent: 2 + - uid: 29165 + components: + - type: Transform + pos: 53.5,17.5 + parent: 2 + - uid: 29166 + components: + - type: Transform + pos: 53.5,19.5 + parent: 2 + - uid: 29167 + components: + - type: Transform + pos: 53.5,18.5 + parent: 2 - proto: CableMV entities: - uid: 418 @@ -66713,41 +66736,6 @@ entities: - type: Transform pos: 52.5,17.5 parent: 2 - - uid: 12882 - components: - - type: Transform - pos: 53.5,18.5 - parent: 2 - - uid: 12883 - components: - - type: Transform - pos: 54.5,18.5 - parent: 2 - - uid: 12884 - components: - - type: Transform - pos: 54.5,17.5 - parent: 2 - - uid: 12885 - components: - - type: Transform - pos: 54.5,16.5 - parent: 2 - - uid: 12886 - components: - - type: Transform - pos: 55.5,16.5 - parent: 2 - - uid: 12934 - components: - - type: Transform - pos: 56.5,16.5 - parent: 2 - - uid: 12935 - components: - - type: Transform - pos: 57.5,16.5 - parent: 2 - uid: 12992 components: - type: Transform @@ -66803,46 +66791,6 @@ entities: - type: Transform pos: 57.5,11.5 parent: 2 - - uid: 13030 - components: - - type: Transform - pos: 60.5,12.5 - parent: 2 - - uid: 13031 - components: - - type: Transform - pos: 60.5,12.5 - parent: 2 - - uid: 13032 - components: - - type: Transform - pos: 60.5,13.5 - parent: 2 - - uid: 13033 - components: - - type: Transform - pos: 60.5,14.5 - parent: 2 - - uid: 13034 - components: - - type: Transform - pos: 60.5,15.5 - parent: 2 - - uid: 13035 - components: - - type: Transform - pos: 60.5,16.5 - parent: 2 - - uid: 13036 - components: - - type: Transform - pos: 59.5,16.5 - parent: 2 - - uid: 13037 - components: - - type: Transform - pos: 58.5,16.5 - parent: 2 - uid: 13072 components: - type: Transform @@ -68399,12 +68347,6 @@ entities: - type: Transform pos: 52.5,20.5 parent: 2 - - uid: 10285 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 41.5,-47.5 - parent: 2 - uid: 16678 components: - type: Transform @@ -68451,6 +68393,18 @@ entities: - type: Transform pos: 22.5,-23.5 parent: 21002 + - uid: 29019 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-45.5 + parent: 2 + - uid: 29149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,19.5 + parent: 2 - proto: Candle entities: - uid: 23174 @@ -71638,18 +71592,6 @@ entities: rot: -1.5707963267948966 rad pos: 38.5,-44.5 parent: 2 - - uid: 12566 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,-44.5 - parent: 2 - - uid: 12567 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,-44.5 - parent: 2 - uid: 12568 components: - type: Transform @@ -72334,6 +72276,12 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,29.5 parent: 2 + - uid: 13035 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-46.5 + parent: 2 - uid: 13135 components: - type: Transform @@ -74027,6 +73975,18 @@ entities: rot: 3.141592653589793 rad pos: 57.5,-31.5 parent: 2 + - uid: 29021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-44.5 + parent: 2 + - uid: 29024 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-45.5 + parent: 2 - proto: Chair entities: - uid: 495 @@ -76907,6 +76867,12 @@ entities: rot: -1.5707963267948966 rad pos: -48.5,-37.5 parent: 2 + - uid: 29138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,9.5 + parent: 2 - proto: Cobweb2 entities: - uid: 2182 @@ -76919,6 +76885,11 @@ entities: - type: Transform pos: 41.5,23.5 parent: 2 + - uid: 29136 + components: + - type: Transform + pos: 44.5,23.5 + parent: 2 - proto: ComfyChair entities: - uid: 1044 @@ -92359,7 +92330,7 @@ entities: pos: -13.5,-1.5 parent: 2 - type: Door - secondsUntilStateChange: -19493.426 + secondsUntilStateChange: -26089.98 - type: DeviceNetwork deviceLists: - 18275 @@ -92367,7 +92338,7 @@ entities: - 18282 - 18271 - type: Firelock - emergencyCloseCooldown: 16782.4165529 + emergencyCloseCooldown: 16782.4165528 - uid: 167 components: - type: Transform @@ -126246,7 +126217,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - proto: GasVentScrubber entities: - uid: 53 @@ -128166,7 +128137,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - type: AtmosPipeColor color: '#FF1212FF' - uid: 29003 @@ -128177,7 +128148,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - type: AtmosPipeColor color: '#FF1212FF' - uid: 29004 @@ -128188,7 +128159,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 7089 + - 231 - type: AtmosPipeColor color: '#FF1212FF' - proto: GasVolumePump @@ -136687,7 +136658,7 @@ entities: pos: 36.5,-35.5 parent: 2 - type: Door - secondsUntilStateChange: -56325.273 + secondsUntilStateChange: -62921.83 state: Opening - uid: 5211 components: @@ -137858,6 +137829,11 @@ entities: - type: Transform pos: 12.5,43.5 parent: 2 + - uid: 26114 + components: + - type: Transform + pos: 41.5,-46.5 + parent: 2 - proto: LockerEngineerFilled entities: - uid: 6703 @@ -138917,6 +138893,11 @@ entities: - type: Transform pos: -18.5,18.5 parent: 2 + - uid: 21027 + components: + - type: Transform + pos: 40.5,-44.5 + parent: 2 - uid: 23232 components: - type: Transform @@ -138952,11 +138933,6 @@ entities: - type: Transform pos: -22.5,20.5 parent: 2 - - uid: 28882 - components: - - type: Transform - pos: 41.5,-44.5 - parent: 2 - proto: MaintenanceToolSpawner entities: - uid: 10274 @@ -141561,11 +141537,6 @@ entities: - type: Transform pos: 42.5,5.5 parent: 2 - - uid: 13010 - components: - - type: Transform - pos: 61.5,17.5 - parent: 2 - uid: 13013 components: - type: Transform @@ -141676,6 +141647,11 @@ entities: - type: Transform pos: 3.5,-41.5 parent: 2 + - uid: 29026 + components: + - type: Transform + pos: 61.5,16.5 + parent: 2 - proto: PottedPlantRD entities: - uid: 9902 @@ -144418,6 +144394,12 @@ entities: rot: -1.5707963267948966 rad pos: -11.5,-56.5 parent: 2 + - uid: 13036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-46.5 + parent: 2 - uid: 13533 components: - type: Transform @@ -144686,12 +144668,6 @@ entities: rot: 3.141592653589793 rad pos: 64.5,-3.5 parent: 2 - - uid: 20194 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,-45.5 - parent: 2 - uid: 20197 components: - type: Transform @@ -155322,6 +155298,13 @@ entities: parent: 2 - proto: SMESBasic entities: + - uid: 2494 + components: + - type: MetaData + name: SE Solars + - type: Transform + pos: 42.5,-45.5 + parent: 2 - uid: 6414 components: - type: MetaData @@ -155379,11 +155362,6 @@ entities: - type: Transform pos: 14.5,42.5 parent: 2 - - uid: 10260 - components: - - type: Transform - pos: 41.5,-46.5 - parent: 2 - uid: 10731 components: - type: Transform @@ -155396,6 +155374,8 @@ entities: parent: 2 - uid: 19639 components: + - type: MetaData + name: SW Solars - type: Transform pos: -46.5,-53.5 parent: 2 @@ -157882,10 +157862,11 @@ entities: - type: Transform pos: 13.5,61.5 parent: 2 - - uid: 28414 + - uid: 29074 components: - type: Transform - pos: 51.5,16.5 + rot: 3.141592653589793 rad + pos: 59.5,18.5 parent: 2 - proto: SpawnPointBotanist entities: @@ -159401,6 +159382,58 @@ entities: parent: 2 - proto: SurveillanceCameraCommand entities: + - uid: 13031 + components: + - type: Transform + pos: 35.5,20.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's lavatory + - uid: 19542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge 2 + - uid: 19956 + components: + - type: Transform + pos: 36.5,12.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Bedroom 2 + - uid: 19959 + components: + - type: Transform + pos: 35.5,17.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Captain's Closet + - uid: 20194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP bedroom - uid: 20877 components: - type: Transform @@ -159408,6 +159441,8 @@ entities: pos: 22.5,9.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand id: Bridge - uid: 20878 components: @@ -159430,6 +159465,8 @@ entities: pos: 40.5,12.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand id: Captain's Bedroom - uid: 20881 components: @@ -159438,7 +159475,10 @@ entities: pos: 39.5,-4.5 parent: 2 - type: SurveillanceCamera - id: HoP's + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HoP office - uid: 20882 components: - type: Transform @@ -159463,6 +159503,17 @@ entities: parent: 2 - type: SurveillanceCamera id: Board Storage + - uid: 20902 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Briefing - uid: 20911 components: - type: Transform @@ -159502,6 +159553,49 @@ entities: parent: 2 - type: SurveillanceCamera id: Telecoms + - uid: 29135 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Compliance N + - uid: 29137 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Compliance S + - uid: 29141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-39.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: HOS' Office + - uid: 29178 + components: + - type: Transform + pos: -49.5,5.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: QM's Bedroom - proto: SurveillanceCameraEngineering entities: - uid: 20897 @@ -159518,7 +159612,10 @@ entities: pos: -32.5,12.5 parent: 2 - type: SurveillanceCamera - id: Atmos 1 + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Distro - uid: 20899 components: - type: Transform @@ -159526,7 +159623,10 @@ entities: pos: -30.5,24.5 parent: 2 - type: SurveillanceCamera - id: Atmos 2 + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos W - uid: 20901 components: - type: Transform @@ -159535,14 +159635,6 @@ entities: parent: 2 - type: SurveillanceCamera id: Atmos Lockeroom - - uid: 20902 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,47.5 - parent: 2 - - type: SurveillanceCamera - id: TEG - uid: 20903 components: - type: Transform @@ -159567,8 +159659,8 @@ entities: - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering - id: Main Engine - - type: ActiveUserInterface + nameSet: True + id: Main Engine E - uid: 20906 components: - type: Transform @@ -159607,7 +159699,7 @@ entities: pos: 47.5,27.5 parent: 2 - type: SurveillanceCamera - id: East Solars + id: E Solars - uid: 23805 components: - type: Transform @@ -159641,7 +159733,28 @@ entities: - SurveillanceCameraEngineering nameSet: True id: SMES C - - uid: 28860 + - uid: 28861 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Pressure Bank + - uid: 29027 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG S + - uid: 29028 components: - type: Transform rot: 3.141592653589793 rad @@ -159651,20 +159764,284 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Atmos 3 - - uid: 28861 + id: Atmos N + - uid: 29107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-6.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Courtyard Power + - uid: 29113 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos S + - uid: 29114 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos E + - uid: 29115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Primary Airlock + - uid: 29116 + components: + - type: Transform + pos: -30.5,8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Gas Tanks + - uid: 29117 components: - type: Transform rot: 3.141592653589793 rad - pos: -27.5,37.5 + pos: -20.5,53.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Pressure Bank + id: TEG N + - uid: 29118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Center + - uid: 29119 + components: + - type: Transform + pos: -2.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Misc Storage + - uid: 29123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: CE's Bedroom + - uid: 29124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Desk + - uid: 29125 + components: + - type: Transform + pos: 4.5,49.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Airlock + - uid: 29126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,62.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Main Engine W + - uid: 29127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering W + - uid: 29128 + components: + - type: Transform + pos: 25.5,42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Hall A + - uid: 29129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering E + - uid: 29130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 21.5,28.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Backrooms + - uid: 29131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,43.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Hall B + - uid: 29133 + components: + - type: Transform + pos: 36.5,48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engineering Dock + - uid: 29150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Engine Storage + - uid: 29169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -48.5,-52.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SW Solars + - uid: 29170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: SE Solars - proto: SurveillanceCameraGeneral entities: + - uid: 7089 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,-10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Atrium B + - uid: 10260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Bridge Redress + - uid: 10262 + components: + - type: Transform + pos: -8.5,3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Food Court C + - uid: 13032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 17.5,11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Parkway E + - uid: 20943 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,3.5 + parent: 2 - uid: 20951 components: - type: Transform @@ -159672,7 +160049,10 @@ entities: pos: -3.5,2.5 parent: 2 - type: SurveillanceCamera - id: Rotunda + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Rotunda West - uid: 20952 components: - type: Transform @@ -159680,7 +160060,10 @@ entities: pos: -16.5,11.5 parent: 2 - type: SurveillanceCamera - id: Parkway NW + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Food Court A - uid: 20953 components: - type: Transform @@ -159688,14 +160071,20 @@ entities: pos: 11.5,17.5 parent: 2 - type: SurveillanceCamera - id: Parkway NE + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Parkway N - uid: 20954 components: - type: Transform pos: -10.5,-16.5 parent: 2 - type: SurveillanceCamera - id: Zoo 1 + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo S - uid: 20955 components: - type: Transform @@ -159703,7 +160092,10 @@ entities: pos: -16.5,-10.5 parent: 2 - type: SurveillanceCamera - id: Zoo 2 + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo W - uid: 20956 components: - type: Transform @@ -159711,7 +160103,10 @@ entities: pos: -9.5,-8.5 parent: 2 - type: SurveillanceCamera - id: Zoo 3 + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo Center - uid: 20957 components: - type: Transform @@ -159719,7 +160114,10 @@ entities: pos: 8.5,-6.5 parent: 2 - type: SurveillanceCamera - id: Parkway SE + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Atrium A - uid: 20958 components: - type: Transform @@ -159757,7 +160155,10 @@ entities: pos: -3.5,-56.5 parent: 2 - type: SurveillanceCamera - id: Arrivals + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals N - uid: 23677 components: - type: Transform @@ -159768,6 +160169,415 @@ entities: - SurveillanceCameraGeneral nameSet: True id: North Dock + - uid: 29018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,-4.5 + parent: 2 + - uid: 29035 + components: + - type: Transform + pos: 11.5,-16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Atrium C + - uid: 29037 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Rotunda East + - uid: 29075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Parkway W + - uid: 29076 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Food Court B + - uid: 29079 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo N + - uid: 29081 + components: + - type: Transform + pos: -1.5,-13.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo E + - uid: 29082 + components: + - type: Transform + pos: -18.5,-19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Zoo Serpents + - uid: 29088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -44.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Games + - uid: 29092 + components: + - type: Transform + pos: 2.5,-62.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals S + - uid: 29093 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-70.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway W-1 + - uid: 29094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-77.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway W-2 + - uid: 29095 + components: + - type: Transform + pos: -11.5,-80.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock A-1 + - uid: 29096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-82.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock A-2 + - uid: 29097 + components: + - type: Transform + pos: 2.5,-50.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Hall C + - uid: 29098 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-70.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway E-1 + - uid: 29099 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-77.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Hallway E-2 + - uid: 29100 + components: + - type: Transform + pos: 7.5,-80.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock B-1 + - uid: 29101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-82.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals Dock B-2 + - uid: 29102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Hall B + - uid: 29103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: South Hall A + - uid: 29105 + components: + - type: Transform + pos: -24.5,-1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Hall A + - uid: 29108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Hall B + - uid: 29109 + components: + - type: Transform + pos: -46.5,-4.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: West Hall C + - uid: 29110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-19.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Aux Hall B + - uid: 29111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-9.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Aux Hall A + - uid: 29112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -40.5,-31.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Aux Hall C + - uid: 29120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,45.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Hall C + - uid: 29121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Hall B + - uid: 29122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: North Hall A + - uid: 29132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 28.5,53.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Pods + - uid: 29142 + components: + - type: Transform + pos: 22.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Hall A + - uid: 29143 + components: + - type: Transform + pos: 34.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Hall B + - uid: 29144 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,1.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: East Hall C + - uid: 29171 + components: + - type: Transform + pos: -38.5,-8.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Washroom + - uid: 29172 + components: + - type: Transform + pos: -38.5,-16.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorm A + - uid: 29173 + components: + - type: Transform + pos: -38.5,-21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorm B + - uid: 29174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -37.5,-24.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Dorm C + - uid: 29181 + components: + - type: Transform + pos: -18.5,27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Gambling Den - proto: SurveillanceCameraMedical entities: - uid: 20915 @@ -159822,7 +160632,10 @@ entities: pos: -32.5,-16.5 parent: 2 - type: SurveillanceCamera - id: Virology + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology W - uid: 20925 components: - type: Transform @@ -159858,7 +160671,10 @@ entities: pos: -37.5,-44.5 parent: 2 - type: SurveillanceCamera - id: Psych + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych S - uid: 20929 components: - type: Transform @@ -159873,7 +160689,95 @@ entities: pos: -25.5,-38.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical id: OR I + - uid: 29083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,-15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Virology E + - uid: 29084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Backrooms + - uid: 29085 + components: + - type: Transform + pos: -12.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: EMS + - uid: 29086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-42.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Inpatient Ward + - uid: 29087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-47.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Cloning + - uid: 29089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych Lobby + - uid: 29090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -39.5,-36.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych N + - uid: 29091 + components: + - type: Transform + pos: -28.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical Admin Hall - proto: SurveillanceCameraMonitorCircuitboard entities: - uid: 5815 @@ -159978,7 +160882,10 @@ entities: pos: 7.5,-35.5 parent: 2 - type: SurveillanceCamera - id: Xeno Lab + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Xeno Lab N - uid: 20936 components: - type: Transform @@ -160002,6 +160909,39 @@ entities: parent: 2 - type: SurveillanceCamera id: Server Room + - uid: 29104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-37.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Xeno Lab S + - uid: 29106 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: RD's Bedroom + - uid: 29168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,-48.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Test Chamber - proto: SurveillanceCameraSecurity entities: - uid: 13070 @@ -160075,8 +161015,8 @@ entities: - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraSecurity - id: Armory - - type: ActiveUserInterface + nameSet: True + id: Armory A - uid: 20886 components: - type: Transform @@ -160092,7 +161032,10 @@ entities: pos: 30.5,-33.5 parent: 2 - type: SurveillanceCamera - id: Lockeroom + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Lockerroom W - uid: 20888 components: - type: Transform @@ -160137,8 +161080,104 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Security Desk + - uid: 29134 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Detective's Office + - uid: 29139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Range + - uid: 29140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,-25.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + - uid: 29145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,-3.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Main Entrance + - uid: 29146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,-34.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Evidence + - uid: 29147 + components: + - type: Transform + pos: 27.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Back Entrance + - uid: 29148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 38.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Lockerroom E - proto: SurveillanceCameraService entities: + - uid: 3264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 24.5,-11.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Apse + - uid: 7941 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chaplain's Office - uid: 9387 components: - type: Transform @@ -160147,6 +161186,27 @@ entities: parent: 2 - type: SurveillanceCamera id: Engi Bar + - uid: 10210 + components: + - type: Transform + pos: 4.5,-23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Crematorium + - uid: 10263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-22.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Priory - uid: 20939 components: - type: Transform @@ -160154,6 +161214,8 @@ entities: pos: -5.5,22.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService id: Kitchen - uid: 20940 components: @@ -160178,14 +161240,6 @@ entities: parent: 2 - type: SurveillanceCamera id: Law Office - - uid: 20943 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,38.5 - parent: 2 - - type: SurveillanceCamera - id: Library - uid: 20944 components: - type: Transform @@ -160193,7 +161247,10 @@ entities: pos: 23.5,-22.5 parent: 2 - type: SurveillanceCamera - id: Chapel + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Chapel Sanctuary - uid: 20945 components: - type: Transform @@ -160209,6 +161266,8 @@ entities: pos: 6.5,24.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService id: Botany - uid: 20948 components: @@ -160225,7 +161284,94 @@ entities: pos: 4.5,-53.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService id: Arrival Stand + - uid: 29078 + components: + - type: Transform + pos: -15.5,21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Freezer + - uid: 29080 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 14.5,23.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Botany Lockers + - uid: 29175 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Reporter + - uid: 29176 + components: + - type: Transform + pos: -55.5,-30.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Disposals + - uid: 29180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Pun Pun's Office + - uid: 29182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,33.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Librarian's Office + - uid: 29183 + components: + - type: Transform + pos: -10.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Library W + - uid: 29184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,38.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Library E - proto: SurveillanceCameraSupply entities: - uid: 20893 @@ -160235,6 +161381,8 @@ entities: pos: -50.5,-1.5 parent: 2 - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply id: Cargo Desk - uid: 20894 components: @@ -160260,6 +161408,27 @@ entities: parent: 2 - type: SurveillanceCamera id: Salvage + - uid: 29177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -60.5,-4.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock S + - uid: 29179 + components: + - type: Transform + pos: -60.5,-2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Dock N - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 23224 @@ -168850,11 +170019,6 @@ entities: - type: Transform pos: 35.5,9.5 parent: 2 - - uid: 5191 - components: - - type: Transform - pos: -39.5,-31.5 - parent: 2 - uid: 5197 components: - type: Transform @@ -172210,12 +173374,6 @@ entities: rot: 1.5707963267948966 rad pos: -38.5,-11.5 parent: 2 - - uid: 10210 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,-45.5 - parent: 2 - uid: 10224 components: - type: Transform @@ -172264,18 +173422,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-36.5 parent: 2 - - uid: 10262 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,-47.5 - parent: 2 - - uid: 10263 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,-47.5 - parent: 2 - uid: 10287 components: - type: Transform @@ -172319,12 +173465,6 @@ entities: - type: Transform pos: -38.5,-9.5 parent: 2 - - uid: 10466 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,-45.5 - parent: 2 - uid: 10482 components: - type: Transform @@ -172411,12 +173551,6 @@ entities: - type: Transform pos: 5.5,-63.5 parent: 2 - - uid: 10655 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,-44.5 - parent: 2 - uid: 10657 components: - type: Transform @@ -181212,6 +182346,12 @@ entities: rot: 1.5707963267948966 rad pos: -34.5,-52.5 parent: 2 + - uid: 13033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-44.5 + parent: 2 - uid: 13615 components: - type: Transform @@ -181714,6 +182854,38 @@ entities: rot: 3.141592653589793 rad pos: 18.5,-7.5 parent: 2 + - uid: 29029 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,-31.5 + parent: 2 + - uid: 29031 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,-47.5 + parent: 2 + - uid: 29032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-47.5 + parent: 2 + - uid: 29034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,-44.5 + parent: 2 +- proto: WallSolidDiagonal + entities: + - uid: 29030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,-45.5 + parent: 2 - proto: WallSolidRust entities: - uid: 24642 @@ -183076,6 +184248,12 @@ entities: rot: 3.141592653589793 rad pos: 33.5,49.5 parent: 2 + - uid: 26097 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-46.5 + parent: 2 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 3412 @@ -184203,6 +185381,11 @@ entities: rot: -1.5707963267948966 rad pos: -14.5,-12.5 parent: 2 + - uid: 2171 + components: + - type: Transform + pos: -11.5,16.5 + parent: 2 - uid: 2329 components: - type: Transform @@ -184426,6 +185609,12 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-41.5 parent: 2 + - uid: 16803 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-45.5 + parent: 2 - uid: 20823 components: - type: Transform @@ -184510,6 +185699,21 @@ entities: rot: 3.141592653589793 rad pos: -15.5,15.5 parent: 2 + - uid: 28414 + components: + - type: Transform + pos: -13.5,16.5 + parent: 2 + - uid: 28860 + components: + - type: Transform + pos: -14.5,16.5 + parent: 2 + - uid: 28882 + components: + - type: Transform + pos: -15.5,16.5 + parent: 2 - uid: 28976 components: - type: Transform @@ -184546,6 +185750,16 @@ entities: rot: 3.141592653589793 rad pos: -10.5,15.5 parent: 2 + - uid: 29002 + components: + - type: Transform + pos: -16.5,16.5 + parent: 2 + - uid: 29020 + components: + - type: Transform + pos: -12.5,16.5 + parent: 2 - uid: 29042 components: - type: Transform @@ -184627,7 +185841,7 @@ entities: pos: 24.5,2.5 parent: 21002 - type: Door - secondsUntilStateChange: -401529.88 + secondsUntilStateChange: -408126.44 state: Opening - uid: 28863 components: diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 47fb4ad451..a6663b31ec 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -358,7 +358,7 @@ sprite: Clothing/Head/Helmets/ert_janitor.rsi - type: entity - parent: [ ClothingHeadHelmetBasic, BaseSyndicateContraband ] + parent: [ BaseSyndicateContraband, ClothingHeadHelmetBasic ] id: ClothingHeadHelmetRaid name: syndicate raid helmet description: An armored helmet for use with the syndicate raid suit. Very stylish. diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 6fda8e495d..50a175ee7f 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -112,7 +112,7 @@ - type: IngestionBlocker - type: entity - parent: ClothingMaskGas + parent: [ClothingMaskGas, BaseCargoContraband] id: ClothingMaskGasExplorer name: explorer gas mask description: A military-grade gas mask that can be connected to an air supply. diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index a04bdde31f..0f1b9536da 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -160,6 +160,7 @@ lastVisibility: 0.1 - type: PowerCellDraw drawRate: 1.8 # 200 seconds on the default cell + - type: ToggleCellDraw # throwing star ability - type: ItemCreator action: ActionCreateThrowingStar diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml index fae8717223..ea4c9d9c7c 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml @@ -116,6 +116,7 @@ price: 500 - type: PowerCellDraw drawRate: 4 + - type: ToggleCellDraw - type: ItemSlots slots: cell_slot: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml index 5e128e8f96..61b3d10817 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml @@ -207,6 +207,7 @@ id: SalvageEquipmentRare table: !type:GroupSelector children: + - id: BlueprintFlare - id: FultonBeacon - id: Fulton amount: !type:RangeNumberSelector @@ -228,6 +229,8 @@ id: SalvageEquipmentLegendary table: !type:GroupSelector children: + - id: BlueprintFulton + - id: BlueprintSeismicCharge - id: WeaponCrusherGlaive - id: ClothingOuterHardsuitSalvage - id: OmnizineChemistryBottle diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index e41321d14b..a0dca90661 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -160,6 +160,7 @@ - id: CigarGold - id: ClothingUniformJumpsuitFamilyGuy - id: WristwatchGold + - id: RubberStampGreytide - type: entity name: Maint Loot Spawner diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index b701bbd8f4..d56b7fb7e7 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -120,12 +120,13 @@ - type: ItemToggle activated: false # gets activated when a mind is added onUse: false # no item-borg toggling sorry - toggleLight: false + - type: ItemTogglePointLight - type: AccessToggle # TODO: refactor movement to just be based on toggle like speedboots but for the boots themselves # TODO: or just have sentient speedboots be fast idk - type: PowerCellDraw drawRate: 0.6 + # no ToggleCellDraw since dont want to lose access when power is gone - type: ItemSlots slots: cell_slot: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 8f3d9c6537..520c2750d5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -103,6 +103,7 @@ - Robotics - type: Speech speechVerb: Robotic + speechSounds: Pai #couldn't decide if this should be borg or pai sounds so I flipped a coin. - type: TypingIndicator proto: robot - type: ZombieImmune diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 31e92931db..0fb3df4d27 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -121,6 +121,67 @@ - Bread - Slice +- type: entity + name: cotton bread + parent: FoodBreadBase + id: FoodBreadCotton + description: Bread, but for moff. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Food + requiresSpecialDigestion: true + - type: Sprite + layers: + - state: cotton + - type: SliceableFood + slice: FoodBreadCottonSlice + - type: Tag + tags: + - ClothMade + - Bread + - type: SolutionContainerManager + solutions: + food: + maxVol: 26 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Fiber + Quantity: 10 + +- type: entity + name: cotton bread slice + parent: FoodBreadSliceBase + id: FoodBreadCottonSlice + description: A slice of (maybe) delicious cotton bread. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Food + requiresSpecialDigestion: true + - type: Sprite + layers: + - state: cotton-slice + - type: Tag + tags: + - ClothMade + - Bread + - Slice + - type: SolutionContainerManager + solutions: + food: + maxVol: 8 + reagents: + - ReagentId: Nutriment + Quantity: 2 + - ReagentId: Fiber + Quantity: 2 + - type: entity name: cornbread parent: FoodBreadBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index 652c60722d..ff38363c9e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -618,3 +618,66 @@ Quantity: 2 # Tastes like crust, tomato, cheese, radiation. + +- type: entity + name: cotton pizza + parent: FoodPizzaBase + id: FoodPizzaCotton + description: Flat fabric cotton dough with cotton topping. Incredible. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Sprite + layers: + - state: cotton-pizza + - type: Food + requiresSpecialDigestion: true + - type: SliceableFood + slice: FoodPizzaCottonSlice + - type: Tag + tags: + - ClothMade + - Pizza + - type: SolutionContainerManager + solutions: + food: + maxVol: 40 + reagents: + - ReagentId: Nutriment + Quantity: 20 + - ReagentId: Vitamin + Quantity: 5 + - ReagentId: Fiber + Quantity: 10 + +- type: entity + name: slice of cotton pizza + parent: FoodPizzaSliceBase + id: FoodPizzaCottonSlice + description: A slice of cotton pizza. Cotton included. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Sprite + layers: + - state: cotton-slice + - type: Tag + tags: + - ClothMade + - Pizza + - Slice + - type: SolutionContainerManager + solutions: + food: + maxVol: 6 + reagents: + - ReagentId: Nutriment + Quantity: 3.5 + - ReagentId: Vitamin + Quantity: 0.8 + - ReagentId: Fiber + Quantity: 1.5 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml index 4d352be287..8a8dea75b1 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml @@ -414,6 +414,38 @@ graph: Tortilla node: flat +- type: entity + name: cotton dough + parent: FoodBakingBase + id: FoodDoughCotton + description: A piece of fabric dough. + components: + - type: FlavorProfile + flavors: + - dough + - cotton + - type: Sprite + state: cotton-dough + # - type: SliceableFood # TODO add it + # count: 3 + # slice: FoodDoughCottonSlice + - type: Construction + graph: CottonPizza + node: start + - type: Tag + tags: + - Ingredient + - ClothMade + - type: SolutionContainerManager + solutions: + food: + maxVol: 18 + reagents: + - ReagentId: Nutriment + Quantity: 5 + - ReagentId: Fiber + Quantity: 10 + - type: entity name: raw pastry base parent: FoodBakingBase @@ -456,6 +488,18 @@ count: 3 slice: FoodCroissantRaw +- type: entity + name: flat cotton dough + parent: FoodBakingBase + id: FoodDoughCottonFlat + description: A flattened cotton dough. + components: + - type: Sprite + state: cotton-dough-flat + - type: Construction + graph: CottonPizza + node: flat + - type: entity name: pizza bread parent: FoodBakingBase diff --git a/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml b/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml index 259323fede..c377519ddb 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/base_handheld.yml @@ -9,3 +9,4 @@ - type: PowerCellDraw drawRate: 0 useRate: 20 + - type: ToggleCellDraw diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index ac564eac66..4ae62527e1 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -120,8 +120,8 @@ abstract: true components: - type: ItemToggle - toggleLight: false onUse: false + - type: ItemTogglePointLight - type: HealthAnalyzer scanDelay: 1 scanningEndSound: diff --git a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml index fc362bb9c7..66ff215f30 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml @@ -271,3 +271,16 @@ stampState: "paper_stamp-detective" - type: Sprite state: stamp-detective + +- type: entity + name: greytide's rubber stamp + parent: RubberStampBase + id: RubberStampGreytide + description: A rubber stamp for stamping important documents. The tide washes over you, just looking at it... + components: + - type: Stamp + stampedName: stamp-component-stamped-name-greytide + stampedColor: "#323232" + stampState: "paper_stamp-greytide" + - type: Sprite + state: stamp-greytide diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml index 97a41a50df..e3f2e1cd1e 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml @@ -47,6 +47,7 @@ components: - type: PowerCellDraw drawRate: 1.2 #Calculated for 5 minutes on a small cell + - type: ToggleCellDraw - type: ActivatableUIRequiresPowerCell - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 929f509710..ff53218e22 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -68,6 +68,7 @@ - type: PowerCellDraw drawRate: 1 useRate: 0 + - type: ToggleCellDraw - type: entity id: AnomalyLocatorEmpty @@ -101,6 +102,7 @@ - type: PowerCellDraw drawRate: 1 useRate: 0 + - type: ToggleCellDraw - type: entity id: AnomalyLocatorWideEmpty diff --git a/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml b/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml new file mode 100644 index 0000000000..ba26baf362 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Tools/blueprint.yml @@ -0,0 +1,49 @@ +- type: entity + parent: BaseItem + id: BaseBlueprint + name: blueprint + description: A blueprint for some machine. It can be inserted into an autolathe. + abstract: true + components: + - type: Sprite + sprite: Objects/Tools/blueprint.rsi + state: icon + - type: Item + sprite: Objects/Tools/blueprint.rsi + size: Normal + - type: Blueprint + - type: StaticPrice + price: 1000 + - type: Tag + tags: + - BlueprintAutolathe + +- type: entity + parent: BaseBlueprint + id: BlueprintFulton + name: fulton blueprint + description: A blueprint with a schematic of a fulton. It can be inserted into an autolathe. + components: + - type: Blueprint + providedRecipes: + - Fulton + +- type: entity + parent: BaseBlueprint + id: BlueprintSeismicCharge + name: seismic charge blueprint + description: A blueprint with a schematic of a seismic charge. It can be inserted into an autolathe. + components: + - type: Blueprint + providedRecipes: + - SeismicCharge + +- type: entity + parent: BaseBlueprint + id: BlueprintFlare + name: flare blueprint + description: A blueprint with a schematic of a flare. It can be inserted into an autolathe. + components: + - type: Blueprint + providedRecipes: + - Flare diff --git a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml index de45119cdd..e10c5b84af 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml @@ -26,6 +26,7 @@ False: { visible: false } - type: PowerCellDraw drawRate: 1.5 + - type: ToggleCellDraw - type: ActivatableUI key: enum.RadarConsoleUiKey.Key inHandsOnly: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml index 04d405e881..42bd054ac7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml @@ -3,7 +3,7 @@ - type: entity id: CartridgeRocket name: PG-7VL grenade - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] description: A 1.5 warhead designed for the RPG-7 launcher. Has tubular shape. components: - type: Tag @@ -23,7 +23,7 @@ - type: entity id: CartridgeRocketSlow name: PG-7VL grenade "Snail-Rocket" - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] description: A 1.5 warhead designed for the RPG-7 launcher. It's unusually slow. components: - type: Tag @@ -45,7 +45,7 @@ - type: entity id: BaseGrenade name: base grenade - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] abstract: true components: - type: Tag @@ -122,7 +122,7 @@ - type: SpentAmmoVisuals state: frag suffix: false - + - type: entity id: GrenadeEMP name: EMP grenade @@ -145,7 +145,7 @@ - type: entity id: BaseCannonBall name: base cannon ball - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] abstract: true components: - type: Tag @@ -154,7 +154,7 @@ - type: Item size: Small - type: Sprite - + - type: entity id: CannonBall name: cannonball diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index aeab9003e9..524fc27501 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -169,6 +169,7 @@ - type: ItemToggle onUse: false - type: PowerCellDraw + - type: ToggleCellDraw - type: Sprite sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi layers: @@ -216,6 +217,7 @@ - type: ItemToggle onUse: false - type: PowerCellDraw + - type: ToggleCellDraw - type: Sprite sprite: Objects/Weapons/Guns/Launchers/force_gun.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index e364809b50..0b0719e77f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -22,6 +22,7 @@ - type: ItemToggleHot - type: ItemToggleSize activatedSize: Huge + - type: ItemTogglePointLight - type: ItemToggleMeleeWeapon activatedSoundOnHit: path: /Audio/Weapons/eblade1.ogg diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml index 3f4306e4aa..c728d27933 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml @@ -52,5 +52,3 @@ layer: - HighImpassable - MidImpassable - - type: Transform - noRot: true diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index f7b1be8ecd..965c8261cc 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -55,6 +55,7 @@ rotation: -90 buckleOffset: "0,0.15" unbuckleOffset: "0,0.15" + buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index f66a8e8de2..9bfd3ea0eb 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -89,7 +89,7 @@ id: Autolathe parent: BaseLatheLube name: autolathe - description: It produces basic items using metal and glass. + description: It produces basic items using metal and glass. Has the ability to process blueprints to print new recipes. components: - type: Sprite sprite: Structures/Machines/autolathe.rsi @@ -226,6 +226,18 @@ - RiotShield - SpeedLoaderMagnum - SpeedLoaderMagnumEmpty + - type: BlueprintReceiver + whitelist: + tags: + - BlueprintAutolathe + - type: ContainerContainer + containers: + machine_board: !type:Container + machine_parts: !type:Container + blueprint: !type:Container + - type: EmptyOnMachineDeconstruct + containers: + - blueprint - type: entity id: AutolatheHyperConvection diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml index 64dd38accb..71e171fc50 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml @@ -11,19 +11,20 @@ - type: Physics canCollide: false - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: .4 + density: 190 + mask: + - MachineMask - type: Transform anchored: true - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Metallic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 100 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] + - type: Anchorable + flags: + - Anchorable + - type: Pullable - type: Sprite sprite: Structures/Piping/Atmospherics/miners.rsi state: miner diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml index 86cfb0f799..c822e0c0b3 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml @@ -182,6 +182,9 @@ - output_mv sprite: Structures/Power/Generation/portable_generator.rsi state: portgen0 + - type: PowerSupplier + supplyRampRate: 5000 + supplyRampTolerance: 1500 - type: entity name: S.U.P.E.R.P.A.C.M.A.N.-type portable generator @@ -235,6 +238,9 @@ - output_mv sprite: Structures/Power/Generation/portable_generator.rsi state: portgen1 + - type: PowerSupplier + supplyRampRate: 7500 + supplyRampTolerance: 2500 - type: entity name: J.R.P.A.C.M.A.N.-type portable generator diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index f1db2b71f1..93124b377d 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -999,9 +999,9 @@ - type: entity parent: PosterBase - id: PosterLegitSafetyMothHardhat - name: "Safety Moth - Hardhats" - description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" + id: PosterLegitSafetyMothPiping + name: "Safety Moth - Piping" + description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" components: - type: Sprite state: poster45_legit @@ -1017,9 +1017,9 @@ - type: entity parent: PosterBase - id: PosterLegitSafetyMothPiping - name: "Safety Moth - Piping" - description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" + id: PosterLegitSafetyMothHardhat + name: "Safety Moth - Hardhats" + description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" components: - type: Sprite state: poster47_legit diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml b/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml new file mode 100644 index 0000000000..2292d4d299 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml @@ -0,0 +1,13 @@ +- type: constructionGraph + id: CottonPizza + start: start + graph: + - node: start + entity: FoodDoughCotton + edges: + - to: flat + steps: + - tool: Rolling + doAfter: 1 + - node: flat + entity: FoodDoughCottonFlat diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml index 74ac16eabd..6b6d5c4895 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml @@ -138,6 +138,9 @@ steps: - tool: Anchoring doAfter: 0.25 + completed: + - !type:SnapToGrid + southRotation: true - node: FirelockGlassFrame edges: @@ -168,6 +171,9 @@ steps: - tool: Anchoring doAfter: 1 + completed: + - !type:SnapToGrid + southRotation: true - node: FirelockEdge entity: FirelockEdge diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index 2adf8c8502..a273f66740 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -774,6 +774,7 @@ state: closed objectType: Structure placementMode: SnapgridCenter + canRotate: false canBuildInImpassable: false conditions: - !type:TileNotBlocked @@ -791,6 +792,7 @@ state: closed objectType: Structure placementMode: SnapgridCenter + canRotate: false canBuildInImpassable: false conditions: - !type:TileNotBlocked diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 9a59ab5023..ce38125627 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -399,6 +399,14 @@ solids: FoodDough: 1 +- type: microwaveMealRecipe + id: RecipeBreadCotton + name: cotton bread recipe + result: FoodBreadCotton + time: 10 + solids: + FoodDoughCotton: 1 + - type: microwaveMealRecipe id: RecipeSausageBread name: sausage bread recipe @@ -602,6 +610,15 @@ FoodTomato: 2 SheetUranium1: 2 +- type: microwaveMealRecipe + id: RecipeCottonPizza + name: cotton pizza recipe + result: FoodPizzaCotton + time: 30 + solids: + FoodDoughCottonFlat: 1 + CottonBol: 4 + #Italian - type: microwaveMealRecipe id: RecipeBoiledSpaghetti diff --git a/Resources/Prototypes/Recipes/Lathes/salvage.yml b/Resources/Prototypes/Recipes/Lathes/salvage.yml index 84047ae75d..2def767e91 100644 --- a/Resources/Prototypes/Recipes/Lathes/salvage.yml +++ b/Resources/Prototypes/Recipes/Lathes/salvage.yml @@ -1,20 +1,32 @@ - type: latheRecipe id: Fulton result: Fulton1 + category: Tools completetime: 1 materials: Steel: 200 - Cloth: 100 + Cloth: 500 - type: latheRecipe id: FultonBeacon result: FultonBeacon + category: Tools completetime: 5 materials: Steel: 1000 Glass: 500 # If they get spammed make it cost silver. +- type: latheRecipe + id: SeismicCharge + result: SeismicCharge + category: Tools + completetime: 1 + materials: + Plastic: 1500 + Steel: 100 + Silver: 100 + - type: latheRecipe id: MiningDrill result: MiningDrill diff --git a/Resources/Prototypes/Recipes/Reactions/food.yml b/Resources/Prototypes/Recipes/Reactions/food.yml index 24dca890ed..7d524a9c7a 100644 --- a/Resources/Prototypes/Recipes/Reactions/food.yml +++ b/Resources/Prototypes/Recipes/Reactions/food.yml @@ -72,6 +72,22 @@ - !type:CreateEntityReactionEffect entity: FoodDoughTortilla +- type: reaction + id: CreateDoughCotton + impact: Low + quantized: true + conserveEnergy: false + reactants: + Fiber: + amount: 10 + Flour: + amount: 5 + Water: + amount: 10 + effects: + - !type:CreateEntityReactionEffect + entity: FoodDoughCotton + - type: reaction id: CreateCakeBatter impact: Low diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index a3a02e4e28..ff8caee6fe 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -18,6 +18,20 @@ - OreProcessorIndustrialMachineCircuitboard - ClothingMaskWeldingGas +- type: technology + id: SpaceScanning + name: research-technology-space-scanning + icon: + sprite: Objects/Tools/handheld_mass_scanner.rsi + state: icon + discipline: Industrial + tier: 1 + cost: 5000 + recipeUnlocks: + - RadarConsoleCircuitboard + - HandHeldMassScanner + - BorgModuleGPS + - type: technology id: AdvancedPowercells name: research-technology-advanced-powercells @@ -110,20 +124,6 @@ # Tier 2 -- type: technology - id: SpaceScanning - name: research-technology-space-scanning - icon: - sprite: Objects/Tools/handheld_mass_scanner.rsi - state: icon - discipline: Industrial - tier: 2 - cost: 7500 - recipeUnlocks: - - RadarConsoleCircuitboard - - HandHeldMassScanner - - BorgModuleGPS - - type: technology id: Shuttlecraft name: research-technology-shuttlecraft diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml index f688371449..6cf5fa4a53 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml @@ -28,7 +28,7 @@ - type: startingGear id: SecurityCadetGear equipment: - shoes: ClothingShoesBootsCombatFilled + shoes: ClothingShoesBootsJackFilled outerClothing: ClothingOuterArmorBasic id: SecurityCadetPDA ears: ClothingHeadsetSecurity diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index a249218d71..c39bf1f379 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -3,7 +3,7 @@ id: Scream name: chat-emote-name-scream category: Vocal - icon: Interface/Actions/scream.png + icon: Interface/Emotes/scream.png whitelist: components: - Vocal diff --git a/Resources/Prototypes/radio_channels.yml b/Resources/Prototypes/radio_channels.yml index 1c69bbe7e6..9cb8bf4daa 100644 --- a/Resources/Prototypes/radio_channels.yml +++ b/Resources/Prototypes/radio_channels.yml @@ -39,7 +39,7 @@ name: chat-radio-science keycode: 'n' frequency: 1351 - color: "#b05efa" + color: "#cd7ccd" - type: radioChannel id: Security diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 131ee59bb9..531a57c6cf 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -60,6 +60,9 @@ - type: Tag id: Bloodpack +- type: Tag + id: BlueprintAutolathe + - type: Tag id: BodyBag diff --git a/Resources/Prototypes/whitelists.yml b/Resources/Prototypes/whitelists.yml new file mode 100644 index 0000000000..8a99aa30ea --- /dev/null +++ b/Resources/Prototypes/whitelists.yml @@ -0,0 +1,7 @@ +- type: playerConnectionWhitelist + id: basicWhitelist # Basic whitelist using only the ManualWhitelist condition + conditions: + - !type:ConditionManualWhitelistMembership + action: Allow # Allow connection if matched + - !type:ConditionAlwaysMatch # Condition that always matches + action: Deny # Deny connection if matched diff --git a/Resources/Prototypes/wizardsDenWhitelists.yml b/Resources/Prototypes/wizardsDenWhitelists.yml new file mode 100644 index 0000000000..c21d01e5a8 --- /dev/null +++ b/Resources/Prototypes/wizardsDenWhitelists.yml @@ -0,0 +1,39 @@ +# This is the whitelist used for Wizard's Den Salamander + +- type: playerConnectionWhitelist + id: salamanderMrpWhitelist + conditions: + - !type:ConditionManualBlacklistMembership # Deny blacklisted (MRP ban) + action: Deny + - !type:ConditionNotesPlaytimeRange # Deny for high severity notes in the last 30 days + includeExpired: false + minimumSeverity: 3 # High + minimumNotes: 1 + range: 30 # 30 days + action: Deny + includeSecret: false + - !type:ConditionNotesPlaytimeRange # Deny for >=2 medium severity notes in the last 14 days + includeExpired: false + minimumSeverity: 2 # Medium + minimumNotes: 1 + range: 14 # 14 Days + action: Deny + includeSecret: false + - !type:ConditionNotesPlaytimeRange # Deny for >=3 low severity notes in the last 14 days + includeExpired: false + minimumSeverity: 1 # Low + minimumNotes: 3 + range: 14 # 14 Days + action: Deny + includeSecret: false + - !type:ConditionManualWhitelistMembership # Allow whitelisted players + action: Allow + - !type:ConditionPlayerCount # Allow when <= 15 players are online + minimumPlayers: 0 + maximumPlayers: 15 + action: Allow + #- !type:ConditionPlaytime + # minimumPlaytime: 1200 # 20 hours to be whitelisted + # action: Deny + - !type:ConditionAlwaysMatch + action: Deny diff --git a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml index 450f5f088b..3eb9c2ca2f 100644 --- a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml +++ b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml @@ -22,9 +22,15 @@ WARNING: This is not an automatically generated list, things here may become out - Chocolate = 6 Cocoa Powder, 2 Milk, 2 Sugar - Uncooked Animal Protein: Grind Raw Meat +Buzz! Don't forget about Moth diet! +- Cotton Dough = 5 Flour, 10 Fabric, 10 Water +- Cotton bread baked the same as default but with cotton dough instead +- Cotton Pizza: Microwave 1 Flat Cotton Dough and 4 Cotton Bolls for 30 Seconds + + diff --git a/Resources/Textures/Interface/Emotes/attributions.yml b/Resources/Textures/Interface/Emotes/attributions.yml index c65eeb25da..4cb2faa076 100644 --- a/Resources/Textures/Interface/Emotes/attributions.yml +++ b/Resources/Textures/Interface/Emotes/attributions.yml @@ -76,6 +76,11 @@ copyright: "Created by Sarahon" source: "https://github.com/Sarahon" +- files: ["scream.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by lzk228(discord 455630609641897984), based on sprite by Sarahon" + source: "https://github.com/lzk228" + - files: ["sigh.png"] license: "CC-BY-SA-3.0" copyright: "Created by Sarahon" @@ -98,7 +103,7 @@ - files: ["vocal.png"] license: "CC-BY-SA-3.0" - copyright: "Created by Sarahon" + copyright: "Created by Sarahon, modified by lzk228(discord 455630609641897984)" source: "https://github.com/Sarahon" - files: ["weh.png"] diff --git a/Resources/Textures/Interface/Emotes/scream.png b/Resources/Textures/Interface/Emotes/scream.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e36ed3a4adb1d7d6d54b440dac30511b7e4ffd GIT binary patch literal 506 zcmVUw)A?QiJzBM0WXyD6~) zh%x)bhUFx{>NyCB0f5n2Un=F|Ih6!9p?t1WgLSV1s(Q&O+j@u#RsyDa7x>A~IpL9p z&jqIgruv0eLN6bG1s2{aFn$k}HIEbS6yL9GS?pDven;v4-DVtfz)Gtxtt}a z%LSi$@g@ZGc}js;$w~3=7QUCw| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Emotes/vocal.png b/Resources/Textures/Interface/Emotes/vocal.png index 55cddaa02e4b66c0b95507fc17460d6a1e4d9e90..73c5042b22ea853e9ca71523cc20943d46e3a002 100644 GIT binary patch delta 309 zcmV-50m}a70?-1GB!3BTNLh0L01FZT01FZU(%pXi00033NklonJ%o)UhfPE@SbLnnZ-v|Szs6;2uMCqpaJ2mFNOlBqlh>H4m3F^SA>CD>u*W*T> zBM876i{kT~WH|r;Xe9vvzzq99ygyY4h(fL33+osb%Zsh8{nX;B4h zZCES0S(fg1Uqt55h0wrlE)0Tu_WLSga}pOK^x}buG?9fk+MK13 d%SKcbMQ^Upe@MH+uZ#cy002ovPDHLkV1n|Om^}ah diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png new file mode 100644 index 0000000000000000000000000000000000000000..0b92e30ae1403dd0b4f78c7e24245cc849ee34ed GIT binary patch literal 721 zcmV;?0xtcDP)7h3fO2K+*#e<;5 zQwv4V90WxVT0x6o@lri%6||sukRo^x^&k;N!BE5&D@CZ6h&C}+JKTC1Mqo2Sp%4^B!A#*W&yU@H+mMik1-v>vz=a7yFoJs}AM`*gk114D zMc>Iu=w%mXFy4@mx+-r*2aTO_0pXFeaJ$M_HM$rUiA0b}ETSXQgG3_1IX`mz)X>WF z6dx`fMBkNIO-{`T0#kwh=qUzE!EVcD%DYQBXqs99`(?CuY-K?d9=Rg2q^#w&22U@i_=WE>y$C8rn-y)^d3N<~fF=m;d6~_Q1lD zf}Vx@P`me|#a)JujA?V_v=sEMWm#rXDN_LTg*drrMq1-XksVMz%^}?8xAs@RxNNg# zvQQ`@zx)WrQl1?MN-L%q71Gad*x*}Z5d@~wv(>*XCntnJ0jFA-ADS(yW)Hl6Fll^E z=aHR%#~Y~^JT2S!)Zf1>ajvNAf1I4ICPi#&0_5VBZ~(hU4>8=%ep*}i7F^udYjlSF zW)oI^HhXro0Rv56pn&{)l4`_K@2 z2Txd6Fn;}vHJ8k2n0P#2_i#-Ks20*casWP`ms8Jf&BAMx5ZWX|Nvk;bWU(QzsMpkD zv5B6u)8htp_RG5u+3ss|%j>RHUDtVc9B>@?{~Y)Q3Yrfabj#tx00000NkvXXu0mjf D_B}(r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png new file mode 100644 index 0000000000000000000000000000000000000000..baa9dc777f23cac67e1f24c7d2b324248459ea55 GIT binary patch literal 1187 zcmV;U1YG-xP)a$T@PBu}bd&+t#$&r255&e%sZ`*8a05P<6I<;b zq%#`2gI;;Iug=39jLH~sKT|jaB2*@W-F>~ zeQ;I(#@tE`;c!@lB<}uzmFwTa**8)*FXA*IU(!*uI7CRm>&CH%Gj&(8f6mF=S3dr} ziLar92`eBwHxS z?u#>bLPSp>>5HBbV%pC4U2Ptnj)F{m`s7P!bGp%c>0P9gX>|0D zHjq;UL2`qb&JbJSA$;@c2a;C?tVUxkwSdtJQA|%y3z^GqSG#s#c6Js~zlybbCpkr} zZ3Pf&&jL!s^3^X8c;ihJN@Xms>h*)?(_NNdwoR-*aMSLU%Cg|zLhho9aPmpV&+7DvC*ieQ>Y{{L#?AQXr^$xIZxCR)H-RK#^5L$QMaU2Qq1=c@AB*Dd{eIP{ zO4GoF%Wq-n?kxmW$If~lH?H3nqI7Y8u9?y8t~Kqx$pLmS=EY(WZtn@K<>uvSkaPDD z&j$3(CyC@+jRViWi1KP0wYH=x%_q@d2#CzX41!@LQ9Tc$F(7KxRNKLE&!*VSTp)~7 zkmLroYBnjsI~%=Ha;$Ts=2>oR2ixrO^Nfx)5gQ#10$7T~t(kSH0-l0&gJMW-Qf^Qb z%aPz=!wh#1ossu2Qc~;e=TS^>jC1;wOT90gJK6!pP%Cd>U|>Kdl8hn@P>gXeu#cHd zGM;<}wzqer$tPVfPR0Fm_N!^y1=da<%)eg4bnaETexLE`kf`fZu=)qMKqjzO`e*j!4khJ?fZMR&k|#z z@jn2;ofed^gLv<|+yDCipy{JlN6Ueh1OK%H{{Whh5shRn#{2*P002ovPDHLkV1l$A BHDmw) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json index 2761d79f98..f35aa5f4ce 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955", + "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380)", "size": { "x": 32, "y": 32 @@ -70,6 +70,12 @@ { "name": "crostini" }, + { + "name": "cotton" + }, + { + "name": "cotton-slice" + }, { "name": "french-toast" }, diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png new file mode 100644 index 0000000000000000000000000000000000000000..e047c757fcd952d27343daa0072ae2e1179cf47a GIT binary patch literal 672 zcmV;R0$=@!P)+f4kN(l%?IIO;)c6@4hs(g(ob1*e);jt{8Ixy zy;@_?;z@(Xo=?)5)tEyN1XQcl$n!jEwOaAHZQH!Zx38NINintf+cYvqvMK{Os*o3N zlY8tc?b|CHRxX#>VE{KxlXP9@J;1RS-xii1QBb3R)Dx=Ye^K?2Lj+LF)6KzQm5a5Pka6$kInMI|RWpP5ZAz697UXKaM zvYbgei^S1n3ot~w@`lJ*CD(P?VW>pdU@(ZP`3)jSioIwPR#7zyXf~UKqJr(`6w&@; zsTug`?DF7*-(L`by4^0js;b;$c#;qZ0st<+p_*tFNWjqsfMc$Jk+g{!`1W)u94=hp z!I{5wpJS0ESuJKj3?uq2B*$E!MIe@(3lRG9_8vKIkFMQ)nZnGxh9F@qE>XufNmA1n z<;1x)CRD9fnH;LezTc1D0Bi3(uY(aKVn;aV8jcSduy6pgnN0*H7m><$;1er_*KA#VvPzbUtL(?=i zf&}TE>WZSUS~8hr#uEF>m|r_~G}3Ze8Mr-(82*7Eg8g$S7K;dn!^q`ws8*{?jA~A& z6WMH*)#xsl%WUlX-8K^OgQnut&wBtSy-q@pN7*L9Q3$KwtPR~tyD zu3L)RGN5V|$jLJFLJawvEmMR9^Z7g^Nn)nxNd})!SD5hmix}_m_1Ob7G8Ms_7M#k~A z6O_2wqP67|g&Rc+T(gD48bM%LKxbhFW|wi!9UmEBW_GD8oSVG7 zdEayHx%a*y^2}4fQ@~T;A1kmhFMg?1(w)wHFTbNpR|<38d7#Z!&{!-+!{Lyk(dYz^ zU-fT1?li01*Ecul@{K$D-tW5M#pC;WcI5(PG8w*9Q4|V=LXO{J9etzGASkleYr7J0 zBwz(^Hk%CE@AoMj4s#Du0D|orAlp0Im?-8dl?ny*9xLLehAja|4xmwQiva?Gpdq_T zk!Xy^+CZh>+94*BOeRTgnX-dKDwP_mWF@iw=>uKA{a^;~uw6poV#K&%czVpgM~h3R z83e%oBSAibdD3L+b^|mr=FK@%jdok*GgdP3lPxAOcSzbu_-j-ymVN zQEz)lEgS-c|UB6isAg{D*++aanHAtJP+1ZQ&A74MC z^4sSG5@2ujYPG1-F&(qo3;`qxHX;Ez&W4F9 z=*e9Im;gYJ22dE15DohPE>y&Ml%rh|&Je(%YV{|rudVVWcwqWXVz>dHioMmw|2$RByj(BhkT-?8KTL=09V%v80%tV3i3umB@thlW#{xv#~ZO245Gr> zfTInqu7A?sRJ%oSsK8w8Z}DZal?CQ)y2#l@veZVggMC z63K*Wte7+j1DDElPrw~jO_22#_Iv*4SLO@q2^z|RvRE?jwL(*YmFYf!IJ);^FKS&D zB$;Pr)}^?^`3wF*$OSxfkvZZInJp-~2WZ%AHcbMW3iyKw41IZxG7AAD-KA4WR*d?9 zu3n{6v$d3b4Q4ifnT#hK7-b7;WnmHnpWp6X0fFanz|{o%_PPb?5co9$yH!L~A7`D? zu)B_6-1iP3Dufn8%zV@bbWJ;}otj^orUI9*UFYbgqd>G<-@pfWnoff=SA)}K>MEDf zVec72q!F<#QT2f`1}zEn*-X;?th>`&@4S&raUgpJ(f9`ZGkzGw5>S&yA`v(%ofsV( zWlw6n_ivtq=I3%3WZi^22|l>fDOc4uBep!xj*G07Y}S+ry_jgsP7Hx6m#wk<`@8~q e1@a0g3j785Fk8L?fLE*l0000znTPbd0U|`P642dX-@b$4u&d=3LOvz75)vL%Y z0PC`;umUo3Q%e#RDspr3imfVamB1>jfNYSkzLEl1NlCV?QiN}Sf^&XRs)CuGfu4bq z9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qXu2*iXmtT~wZ)j<0sc&GUZ)BtkRH0j3 znOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FNr2NtnTO}osMQ{LdXG${Mo`TY%9I!1Z z$@-}|sky0nCB^!NdWQPg^p#|$AzYYO3=Ixo!03ZyfZ7bOYV#~8Nj3q7lxqdhJy8Dv z9hwZbx40xlA4!3}k%57Qu7Q!Rk)=M|e?aHkq$FFFWR~Qlf&&ijA8-gd=9Hj{g4Bb8 zASV+PvQ{~XdFi%F6}l;@X^EvdB}#UlzV7jc#>OT#`Vdv9x*?*dhT7<3vEK&dYpckh z)Z+Y{Qc$?t8JPji#1KWq07ORwRvpNq=sE&2@=Nl8DXJ(l*)y*swWy#7n7SY~LhZw? z0^KZx<)L|*C3Z$o1JHz#bRor#m19v!d45rL2skDX!H81{)EG#RBBfAB@&^Y$F#X$c z+33Ubk{wstCygb*40grS#W5s;^KGyp*I@&m5bx;@)A%@5f;+bVIUN7u{^!=T43A|# z>y})LjN-C-aY3oEcAD^;*GunSfAOfrWL|fZUhV%3UGJmPMS|aFu=YImD2?5JA-3}W>x1`o_kWJA znK!#c#^-9xpU#&3i+|c_@4vpA`CWtchkCv{j8oDa3M#uVh=2+ZPgg&ebxsLQ08}E3 AbN~PV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/icon.png b/Resources/Textures/Objects/Tools/blueprint.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fe8b37fa2534c7753ee8f254ce486466886bacee GIT binary patch literal 449 zcmV;y0Y3hTP)Px$dr3q=R9J=WRxMA&KoET;{D+E$P+3!3#EA+*0=A+8g(B$QFX#`TnxIf8NLUL= zgQy@W`pn6aWks<#Oi{bp>j#-F*C6Oin(j{9d2e=Rb_>jyG2@S6nSKzYc{B8^7NTQ& zyS*^x7(~o?6Eohte}1VeNb}A(X1w`Hs1CBanDM4sZ#s6CgaCjjE0oRkJ={kJB;Wf~ z0ez%8F-t;3Spk-WNb;KOYi|s3loeYM_X(RsfFAA8^FCoafh;V&0Q-tDNb@FUoK%3o zh!n^OWwgJI*hoNIOkXNY>%gcDvlCm*7t0l1uFnCWvkH^7p-yBwj%qs{leVEGXpd_l zPzwQ;gjg(BM*fTi=ut;mp$O%Q$h1&llmfjA+FP(bcYTlSb94&ydT85TpPtG7NR=uN zB6-}}j)PhVb(fHHlOve40@Zp0*Y|LAdJKz~YWz_?z~beW-Qp#c8vtPi4lnP>+bUrG r12Xusdv;|+Ts_|G?$2k&jDLl14J=gpqz$|D^@QWdRP{hmYuV%YrD%(Iltw|?|0L! z)BALofu=DqWIs){eUfUMqxwBVRzpYn^~J(OD~3xKu0Kwboc+@0^+AJp#$BJqdap{# zF;{Qm(^+-Q>XPa8RQ?Y&tZR1eVRF4X!|aCgfchzZz7pvbaz0bX5AG^k? zXR}v-UO&CKB<-nF>8WSyjxSG(U!tb?WE<0xpt}<+s~i6HPT@^2UgMm5{r{Rx8>fB< jpZy?W=gv}~XA<=7Omvp4aq--j2eRJN)z4*}Q$iB}L4J)+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-right.png b/Resources/Textures/Objects/Tools/blueprint.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..37dd59e5c3a6ade73d6c428765d5c01995bda25f GIT binary patch literal 358 zcmV-s0h#`ZP)Px$AW1|)RCt{2+OZLWKoEuD!*R^)z&c2cY`{`%z@Y(4u>m4d>#zed6O49dhv8(G z;W*L%OC0rXc^n)DYX|@U0000WrmX6&tm-azjxpYx8*9<&k@B!+HZ4F1A>1!VSK%Ba zn`E^ZT>yQ;p2E54jFyYFwH7|#nu(E?<<05d0&6hq7LbDHTeFHqNRqXz>h9UTx^Mp} zlzfskN%2{WCa{*A0000000000V0lICi=pPi<9aH_#(dJB?>V+-zQa{W(+mbaT|O7;TPzYBV19yF!nXSKXra_UmK+M@ZG4k1l}q;IX@4Zj0XmLnr-g zU(qYrUod&E>sa=%9wT$5<(-1-At)r|FFXVR008i>-o@yotipFaz5oCK07*qoM6N<$ Ef>{QlGXMYp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tools/blueprint.rsi/meta.json b/Resources/Textures/Objects/Tools/blueprint.rsi/meta.json new file mode 100644 index 0000000000..ab9e7fb2a9 --- /dev/null +++ b/Resources/Textures/Objects/Tools/blueprint.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/dd749c36c416a6960782732cecf25e5ebac326e8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png b/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png index ede821777a00d129b30d11661de241017ddffaa1..823bf998c980dd19211ba2d040a8b7f06f1f3220 100644 GIT binary patch literal 3160 zcmZXXXIN9o8po3e1Q86V7;=ys><7lO2$Ahz(yjy@-D5wNNTU>o$-oz#PSP16#kG2L^0!Z zR|vI%;Q1qJvg%6tPP-5hMDn@tBCgRdF7aLg(bFyOvV+A>yT(D``bW;Q$Y#0J{L+v- zzy96sZsTb`z*zgVAT{ik6?CWn(@Fx-c9y$lk40#kd*>hI(o zD`Z-2Kh$1>O@O!fSzZEGaO(vXw>op%mnHU0>6Wm#>vd9~BsfrRcymeB)aRBh&_m^T z(caRK9T7tSosMgET2BubMDSWNSZ93qbGgK`rlI!6*Ii7UW}jNWr>yl@gyNj5*cp-c zB7yO9o=xZ*R?5k*u7RFSqkxDdl{beM!kwjb<22fF;OY%T5!l=rWs@#@`6R*#M3SGI zW;TKzK)^}|qAcal&RjO=ry?Xg8wk4OMRz;F;^RX;b19W)^P>9h*467cSMvE+D)KOh z?9tsq&pu0`6-w?L3DAnrbejs??4AICV6RV&CTz!X)7@L?t&IyWuLiFN9Qw=*l{(U= zpmNF0ou#|mFkbipn&4pgTA0mn0Xlwix~oRw=~wrJ#E8jC+Hx0>{1{tPf?sYM@J)hS zTOno!g?DM|b@}Kwc1=qPSZ`P4TX9od8}O-kpT;gb*}AX1eJr560VKRdGb(XC1~_Mskefgt zWPeZ*lo=kYUGCN6KQa88vE!H+h#nfrHhvMF=X>O5AD+txV)6UdM|GI(^PQb&p zm~`{*>6%8BVnpK?TA6%k7^7*l8Gebl7G6rtrSp>|YrN7)?pVgZXc26wA{2>jDS`D6fVVJBH z#;|CY^GKV5PPTejj`v&$FVT7n@|VdnZ5D<1b5HWiN~E{&(w@st9z8%Ve7!bnu?Abm&Awi~g2PujBz{3eu{6=9cr#SDNgH5qye z6(f05I3aj-+j22w@`cUvYJS7w(v82o#e+l43D?Tr?~951=^mU`QYx>VzdX~)>;?Cs z#L0DlCY-2`fyE$(GU57+9=@%u?IEk#u`$rvo!TNtBtD?#hv#Nt4bdD_9FP zVQxw|mrx#VC9A$ipqYP|& z<)IICv%4-{;va6BwHZdTSOe_{dwb7$gO*Ic*`iV(sui2ld1&Z}J!nk5X3$0lH(b`F zZGzHgZ$3L}-+Q3vE7L*@IR#wS9kuhBdbPwUytcJ$QdioxK3~bMMA2J9aBBfGOOqXH z#xY-t9Qhv}N2l)NxNuJZ-@iUzD0ox&LENq9rHUJpv>qek*@X9a;!lqj{4^0Dz6YzC z6--CpBqQSi>N3&bDN~VP~!UfHcO$*_7W$FC@9kL}&UbPaC&hu&+j^3#()Gn3|CHHwMOQ7ZQ z;{5>3?p~XQ$uhq7IzV0|yX(}F`0k0iv2>?K?u;jw0lI;5^xMEW*_}S#XRL-a_}81? zpH=)&EBc`xcS7^y$L2eGRBDVwdwcVO!q0l`NDN;HM@ymECzq8sBS92^8Q_1CyE%{t z?hCpk0dzx%ia=A zwwG!3CO4h%>n^ia;}?9sVKO15aIg%HxdN~5NW-73(=CO@(QInHJ(_>B9{xTqTO4c z&XASc0XkkjCTrF-j{=cmS+H6H3%V@?dM${R*?HDL%G42i$8zw*MdVx>EQ^d-{+ z!HNk9=HS5>jLdI5V}xr=+nKTHM@Ay8XT=dzH}{b05ZW7?=cZ_rCMduZtQn$?^ zBieuBnvhcJI6Jr6ogneEUVLLEiwhPG56YrI~b0&rQQ* zVHFo2rym@Sntl?Q_wN+rTJTH+>ofD2L{$W%qyvA{F*VcNLz>bk{U%%>ElxWe6k6FM zE-kGA4Eo))oqw&q0dT%X@+;&F#78>@;~p=<4mS6Z4j~R1|EpfZ8NKD)GTu#e0t)!a6sRk zur8W#n(p>xZ;*-{z@!>^R}C2o1Y9yXfgPi;+{DoDHwnN4AJ=RA*};d7riS}DI3Q3~ zZBCxm`q`&aBtLq$&Md%FKVj=!dJ##Kyri_Wg3+`jyI#;v4PX0luIG!IGsYvI5kkY# zLePu{R(O7Kdz#fkI3BOGVJCO~YbOe*-wK6x<;xwJHFE)>~KsIi5PPcH&9YoSf0Ff#I17GukU^jl|MaxFTQJkSpyRk ztv$|d-A#Nrg-B8E+xtnO>Yx=);d4ltl_P=}r+l<4vQXfQcU?5(@lo^4cv+YwlF3J$ zLm&ri()|TrIL;IpQ7^r#h(^%n8ra6sUB~U7?%v^&=3JJmr zkGst2Lxonm5w0jbWUk-~4w>`VXyXl_2w0%%sUTG$hO1qUkpqds1x{bo(09`tG1 z5L!LdsC89ake52<)Aw6;tM8pGdzzyC8B|NsBL zu=DC&pkM15OM?7@862M7NMm4NHt=+D45_&FHkvp5mVwCHrOFb#&1-k9EuO!LKZR*i z*BYZarNvGE{@>sHWU23I#w>3?|AKwdvxBR4ykDw+QhQ%@QY1%Jqx{aV;QYVG-W>xTThdEbx7|NCLNb4Jg(ntBV7=bp>I*Wdkqc!BsgtG#goEs4#! zO!sen?C-aFTlRa!-Iw#`&Fgi0ez4MDrcYgKy+vKSpkDKXPp`V-SrP>}cD-sy+!wk( zPP*6kL3D5SH1^xKxwkK2y!>Ym+potj9$l@H)#&{nA-BMOuAA7Z?9v4`b`k|L>{9Ng zkCcP2ud$zfR*CzxRl@ChGm~vuN8FdKd;j?L4{^35;W8Pi%2DkrC;$JNpKolXuq(q^ zTl(THpSj;^Yjpo>G6zZov0dSnYux>E$F#o;7Y&xkIov(*Ec@qqS;o8uPVP{LkAf#2 zWdHO(>zJC5$LGboIVxqrFY$obO>9?~&#Yzq$#Anq_J8H31G2BLD=@8bk+T! zG*_=D&y52nJA0fsyW6})My5vLN$EtsDJRZLGR`}?EZHmX+qe1lk1Kvoyx=6L)6d_n z5%qvuXB+ z7l$~O2;1|pddIQP1p556@_{QKR8P*77Wkv?$EtH-jbK97FBSdvt3bK#;(&dkGmRE7 z9ng?1V4muA`7_&;by3Wp)}Fb-yn->}SUzdz3rVM=UdPdLCF@aB0z<{u@t7r|cq z>@xN3Q{u(mJ81rKVoQ)*{?{ybUWlmgeQM z$u~MIuxt3m@QQf_KZtRF`8vDLweO{WrPsfI{mVS={`Ift95myhAO+SH>&s0rCzC0uV!CrvGLy_|Nc8{=i>| iWoTT8BW%?EFemTQ$cs53@(q}u7(8A5T-G@yGywov`~j{2 diff --git a/RobustToolbox b/RobustToolbox index 36a5b672e5..f2ee9a43f9 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 36a5b672e5f4d0c569a4a17f7f833d72dad2d16d +Subproject commit f2ee9a43f94288be4662861e6e591da10234c0c7 diff --git a/shell.nix b/shell.nix index da363feda9..9a1b0ca429 100644 --- a/shell.nix +++ b/shell.nix @@ -12,7 +12,6 @@ let SDL2 libGL openal - glibc freetype fluidsynth soundfont-fluid