diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f8e60a92b5a7..0b8e8a11ad58 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -90,7 +90,7 @@ Things you **CAN'T** do: - [Close PRs](https://imgur.com/w2RqpX8.png): Only maintainers are allowed to close PRs. Do not hit that button. - Close issues purely for breaking a template if the same information is contained without it. -For more information reference the [Issue Manager Guide](/guides/ISSUE_MANAGER.md) +For more information reference the [Issue Manager Guide](/.github/guides/ISSUE_MANAGER.md) diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index eae668d4a4ed..fd4214890f9e 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -23,7 +23,7 @@ jobs: - name: "Setup python" if: steps.value_holder.outputs.ACTIONS_ENABLED - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.x" diff --git a/.github/workflows/discord_discussions.yml b/.github/workflows/discord_discussions.yml index 7f894fa18ca2..68876aed1853 100644 --- a/.github/workflows/discord_discussions.yml +++ b/.github/workflows/discord_discussions.yml @@ -28,7 +28,7 @@ jobs: exit 1 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x dotnet-quality: ga diff --git a/.github/workflows/run_linters.yml b/.github/workflows/run_linters.yml index b97c16d451e5..46f51870fd1c 100644 --- a/.github/workflows/run_linters.yml +++ b/.github/workflows/run_linters.yml @@ -39,7 +39,7 @@ jobs: path: tools/icon_cutter/cache key: ${{ runner.os }}-cutter-${{ hashFiles('dependencies.sh') }} - name: Setup .NET SDK - uses: actions/setup-dotnet@v4.2.0 + uses: actions/setup-dotnet@v5 with: dotnet-version: 9.x - name: Install OpenDream diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 6c728a352c01..797c1a3b176e 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/stale@v9 + - uses: actions/stale@v10 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-pr-message: "Этот PR был неактивен достаточно долго, чтобы быть автоматически помеченным как устаревший. Это означает, что он рискует быть автоматически закрытым через ~7 дней, пожалуйста, рассмотрите все нерешенные вопросы по проверке и убедитесь, что ваш PR завершен, если все это верно и вы все равно автоматически заблокированы, вам нужно активно спрашивать Мейнтейнеров, будет ли ваш PR вмержен. Как только вы выполните любое из предыдущих действий, вам следует попросить сопровождающего удалить устаревшую метку с вашего PR, чтобы сбросить устаревший таймер. Если вы чувствуете, что ни один из сопровождающих не ответит в течение этого времени, вы можете закрыть этот PR самостоятельно, пока будете запрашивать комментарий у мейнтейнера, так как тогда вы сможете снова открыть PR самостоятельно" diff --git a/.github/workflows/tgs_test.yml b/.github/workflows/tgs_test.yml index 6c689ae7d1a0..feb89bac9c05 100644 --- a/.github/workflows/tgs_test.yml +++ b/.github/workflows/tgs_test.yml @@ -59,7 +59,7 @@ jobs: - 5000:5000 #Can't use env here for some reason steps: - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x diff --git a/.gitignore b/.gitignore index 640ac9e61d86..70a2d357955e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # Local overrides--you can use this to change the config for your dev environment (like setting up SQL) without worrying about committing it /config/dev_overrides.txt /config/dev_preferences.json +/config/dev_preferences.json.updatebac #Ignore everything in datafolder and subdirectories /data/**/* diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm index 831f52b70daf..0ce6fd744810 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm @@ -672,8 +672,7 @@ }, /obj/structure/flora/bush, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ - dir = 1; - chamber_id = "syndielab_biodome" + dir = 1 }, /turf/open/floor/grass{ initial_gas_mix = "o2=1000;n2=1100;TEMP=280" diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm index ae743175f174..d03c2800eea7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm @@ -70,8 +70,7 @@ "dC" = ( /obj/structure/sign/warning/fire/directional/north, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ - dir = 4; - chamber_id = "lizardgaslava" + dir = 4 }, /turf/open/floor/engine/plasma{ initial_gas_mix = "plasma=30000;TEMP=293.15" @@ -134,8 +133,7 @@ /area/ruin/thelizardsgas_lavaland) "fO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ - dir = 8; - chamber_id = "lizardgaslava" + dir = 8 }, /turf/open/floor/engine/plasma{ initial_gas_mix = "plasma=30000;TEMP=293.15" @@ -401,8 +399,7 @@ "rv" = ( /obj/structure/sign/warning/fire/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ - dir = 8; - chamber_id = "lizardgaslava" + dir = 8 }, /turf/open/floor/engine/plasma{ initial_gas_mix = "plasma=30000;TEMP=293.15" @@ -649,8 +646,7 @@ /area/ruin/thelizardsgas_lavaland) "BU" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ - dir = 4; - chamber_id = "lizardgaslava" + dir = 4 }, /turf/open/floor/engine/plasma{ initial_gas_mix = "plasma=30000;TEMP=293.15" @@ -882,8 +878,7 @@ /area/ruin/thelizardsgas_lavaland) "JK" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ - dir = 8; - chamber_id = "lizardgaslava" + dir = 8 }, /obj/item/toy/plush/lizard_plushie/space/green{ desc = "A famous lizard, in plushy form."; diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index e37250251484..2a7c824f74d8 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -1537,8 +1537,7 @@ /area/ruin/syndicate_lava_base/medbay) "lP" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - dir = 8; - chamber_id = "lavalandsyndieo2" + dir = 8 }, /turf/open/floor/engine/o2, /area/ruin/syndicate_lava_base/engineering) @@ -1806,8 +1805,7 @@ /area/ruin/syndicate_lava_base/engineering) "nR" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - dir = 8; - chamber_id = "lavalandsyndieplasma" + dir = 8 }, /turf/open/floor/engine/plasma, /area/ruin/syndicate_lava_base/engineering) @@ -1913,7 +1911,6 @@ /area/ruin/syndicate_lava_base/engineering) "oM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "lavalandsyndien2"; dir = 8 }, /turf/open/floor/engine/n2, @@ -2716,8 +2713,7 @@ /area/ruin/syndicate_lava_base/engineering) "zU" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - dir = 8; - chamber_id = "lavalandsyndien2" + dir = 8 }, /turf/open/floor/engine/n2, /area/ruin/syndicate_lava_base/engineering) @@ -2730,7 +2726,6 @@ /area/ruin/syndicate_lava_base/bar) "Ab" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "lavalandsyndieo2"; dir = 8 }, /turf/open/floor/engine/o2, @@ -3460,9 +3455,7 @@ /turf/open/floor/iron/kitchen_coldroom/dark, /area/ruin/syndicate_lava_base/bar) "JV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "lavalandsyndieco2" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored, /turf/open/floor/engine/co2, /area/ruin/syndicate_lava_base/engineering) "Ks" = ( @@ -3940,7 +3933,6 @@ /area/ruin/syndicate_lava_base/main) "Ry" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "lavalandsyndieplasma"; dir = 8 }, /turf/open/floor/engine/plasma, @@ -4179,9 +4171,7 @@ /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/main) "Uw" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "lavalandsyndieco2" - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored, /turf/open/floor/engine/co2, /area/ruin/syndicate_lava_base/engineering) "Uz" = ( diff --git a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm index dc6cea464f7e..efdb18e781a6 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm @@ -31,9 +31,8 @@ /area/ruin/space/djstation) "v" = ( /obj/structure/toilet{ - pixel_y = 8 + dir = 1 }, -/obj/machinery/duct, /obj/machinery/light/small/directional/south, /turf/open/floor/iron/freezer, /area/ruin/space/djstation) diff --git a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_2.dmm b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_2.dmm index 4a1dac457b1f..ef304f1d9303 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_2.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_2.dmm @@ -4,9 +4,6 @@ /area/template_noop) "d" = ( /obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark/textured, -/area/ruin/space/djstation) -"f" = ( /obj/structure/sink/directional/west, /turf/open/floor/iron/dark/textured, /area/ruin/space/djstation) @@ -95,7 +92,7 @@ Y a i M -f +Z d V i diff --git a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_3.dmm b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_3.dmm index 956b5efe7874..9102b5e7acc6 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_3.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_3.dmm @@ -15,7 +15,6 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/duct, /turf/open/floor/iron/freezer, /area/ruin/space/djstation) "d" = ( diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 9f702e2fc05c..10fde28bef98 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1375,7 +1375,6 @@ /area/ruin/space/has_grav/dangerous_research/lab) "rA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "asrc_b"; dir = 8 }, /turf/open/floor/engine/air, @@ -3719,7 +3718,6 @@ /area/ruin/space/has_grav/dangerous_research) "Xb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "asrc_a"; dir = 8 }, /turf/open/floor/engine/airless, diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index f9235a874b05..9f560335da06 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -1048,7 +1048,6 @@ /area/ruin/space/has_grav/deepstorage/power) "fC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "deepo2"; dir = 8 }, /turf/open/floor/plating/airless, @@ -1196,13 +1195,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/deepstorage/power) -"gv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "deepn2"; - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/deepstorage/power) "gw" = ( /obj/machinery/sleeper{ dir = 4 @@ -1286,7 +1278,6 @@ /area/ruin/space/has_grav/deepstorage/power) "gP" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "deepn2"; dir = 8 }, /turf/open/floor/plating/airless, @@ -1581,13 +1572,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) -"qm" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "deepo2"; - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/deepstorage/power) "qq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 1 @@ -4507,9 +4491,9 @@ fb fp fC fL -qm +gP fp -gv +fC gD gP fp diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index 5e8373d91c30..6378d6f983e3 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -483,7 +483,7 @@ name = "landing marker" }, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "ml" = ( /obj/effect/turf_decal/stripes/red/corner{ dir = 8 diff --git a/_maps/RandomRuins/SpaceRuins/interdyne.dmm b/_maps/RandomRuins/SpaceRuins/interdyne.dmm index 6df9519ce8fd..ae2a3578e2fc 100644 --- a/_maps/RandomRuins/SpaceRuins/interdyne.dmm +++ b/_maps/RandomRuins/SpaceRuins/interdyne.dmm @@ -464,7 +464,6 @@ /area/ruin/space/has_grav/interdyne) "tm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "interdyne_atmos"; dir = 1; pipe_color = "#0000FF" }, diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm index 729e9ddf044c..0d2dc3226603 100644 --- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm +++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm @@ -135,7 +135,6 @@ /obj/effect/decal/cleanable/blood/old, /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "catstation1"; dir = 1 }, /turf/open/floor/plating, @@ -151,7 +150,6 @@ "aB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "catstation2"; dir = 1 }, /turf/open/floor/plating, @@ -351,7 +349,6 @@ "bk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "catstation3"; dir = 4 }, /turf/open/floor/plating, @@ -477,7 +474,6 @@ /obj/effect/decal/cleanable/blood/old, /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "catstation4"; dir = 4 }, /turf/open/floor/plating, @@ -538,9 +534,7 @@ "bP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "catstation6" - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored, /turf/open/floor/plating, /area/ruin/space/has_grav/powered/cat_man) "bQ" = ( @@ -678,7 +672,6 @@ /area/ruin/space/has_grav/powered/cat_man) "cl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "catstationsupply"; dir = 8 }, /turf/open/floor/plating/airless, @@ -801,9 +794,7 @@ /area/ruin/space/has_grav/powered/cat_man) "jc" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "catstation5" - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored, /turf/open/floor/plating, /area/ruin/space/has_grav/powered/cat_man) "lQ" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 6dfeb3dd0ef4..acfff23fc4da 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -6411,8 +6411,7 @@ /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - dir = 8; - chamber_id = "beta-o2" + dir = 8 }, /turf/open/floor/engine/o2, /area/ruin/space/ancientstation/beta/atmos) @@ -7845,8 +7844,7 @@ "TB" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - dir = 8; - chamber_id = "beta-o2" + dir = 8 }, /obj/machinery/light/small/directional/north, /turf/open/floor/engine/o2, @@ -8233,8 +8231,7 @@ /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - dir = 8; - chamber_id = "beta-n2" + dir = 8 }, /turf/open/floor/engine/n2, /area/ruin/space/ancientstation/beta/atmos) @@ -8326,8 +8323,7 @@ "XA" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - dir = 8; - chamber_id = "beta-n2" + dir = 8 }, /obj/machinery/light/small/directional/south, /turf/open/floor/engine/n2, diff --git a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm index 82da41ac2061..98831dd9d2be 100644 --- a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm @@ -1806,9 +1806,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/ks13/science/ordnance_hall) "rN" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "ks13" - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored, /turf/open/floor/engine/air{ initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15" }, @@ -4914,9 +4912,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/ks13/science/genetics) "HU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "ks13-2" - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored, /turf/open/floor/engine/airless, /area/ruin/space/ks13/engineering/atmos) "HV" = ( @@ -5860,9 +5856,7 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "Nf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "ks13" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored, /turf/open/floor/engine/air{ initial_gas_mix = "o2=20000;n2=80000;TEMP=293.15" }, @@ -6505,9 +6499,7 @@ /turf/open/floor/iron/airless, /area/ruin/space/ks13/service/cafe) "Qq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "ks13-2" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored, /turf/open/floor/engine/airless, /area/ruin/space/ks13/engineering/atmos) "Qr" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 1e2ad893c920..e18683a83340 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -3107,7 +3107,7 @@ /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy, /turf/template_noop, -/area/template_noop) +/area/space/nearstation) "Ig" = ( /obj/structure/sign/warning/no_smoking/circle/directional/north, /turf/open/floor/iron/grimy, diff --git a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm index b07e336ac449..05d7ab995c54 100644 --- a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm +++ b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm @@ -126,9 +126,7 @@ /turf/open/floor/iron/white/side, /area/ruin/space/has_grav/thelizardsgas) "kS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "lizardgas" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored, /turf/open/floor/engine/plasma{ initial_gas_mix = "plasma=35000;TEMP=293.15" }, @@ -478,7 +476,6 @@ /area/ruin/space/has_grav/thelizardsgas) "Uh" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "lizardgas"; dir = 4 }, /turf/open/floor/engine/plasma{ diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index fb7d88dc7bf4..4921760709f1 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -4905,42 +4905,36 @@ /area/awaymission/snowdin/cave/cavern) "rM" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "snowdinmix"; dir = 1 }, /turf/open/floor/engine/plasma, /area/awaymission/snowdin/post/engineering) "rN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "snowdinmix"; dir = 1 }, /turf/open/floor/engine/plasma, /area/awaymission/snowdin/post/engineering) "rO" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "snowdino2"; dir = 1 }, /turf/open/floor/engine/o2, /area/awaymission/snowdin/post/engineering) "rP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "snowdino2"; dir = 1 }, /turf/open/floor/engine/o2, /area/awaymission/snowdin/post/engineering) "rQ" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "snowdinn2"; dir = 1 }, /turf/open/floor/engine/n2, /area/awaymission/snowdin/post/engineering) "rR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "snowdinn2"; dir = 1 }, /turf/open/floor/engine/n2, @@ -5124,7 +5118,6 @@ /area/awaymission/snowdin/post/engineering) "sC" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "snowdinincin"; dir = 1 }, /turf/open/floor/engine/vacuum, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index c2c05023693e..82c099d2ea8f 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -4057,15 +4057,11 @@ /turf/open/floor/iron/dark, /area/awaymission/undergroundoutpost45/engineering) "pE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "uo45air" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored, /turf/open/floor/engine/air, /area/awaymission/undergroundoutpost45/engineering) "pF" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "uo45air" - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored, /turf/open/floor/engine/air, /area/awaymission/undergroundoutpost45/engineering) "pG" = ( @@ -4904,7 +4900,6 @@ /area/awaymission/undergroundoutpost45/engineering) "sr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "uo45mix"; dir = 8 }, /turf/open/floor/engine/vacuum, @@ -5075,7 +5070,6 @@ /area/awaymission/undergroundoutpost45/engineering) "te" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "uo45mix"; dir = 8 }, /turf/open/floor/engine/vacuum, @@ -5613,28 +5607,24 @@ /area/awaymission/undergroundoutpost45/engineering) "vd" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "uo45n2"; dir = 1 }, /turf/open/floor/engine/n2, /area/awaymission/undergroundoutpost45/engineering) "ve" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "uo45n2"; dir = 1 }, /turf/open/floor/engine/n2, /area/awaymission/undergroundoutpost45/engineering) "vf" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "uo45o2"; dir = 1 }, /turf/open/floor/engine/o2, /area/awaymission/undergroundoutpost45/engineering) "vg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ - chamber_id = "uo45o2"; dir = 1 }, /turf/open/floor/engine/o2, diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index d846f8b92a21..6e6507bdc531 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -7,7 +7,7 @@ /obj/effect/turf_decal/siding/blue{ dir = 4 }, -/turf/open/floor/iron/dark/telecomms, +/turf/open/floor/catwalk_floor, /area/station/science/server) "aat" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -192,6 +192,12 @@ }, /turf/open/misc/asteroid, /area/station/science/robotics) +"acU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ + dir = 5 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "acV" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/table, @@ -209,6 +215,14 @@ /obj/item/trash/tray, /turf/open/water, /area/station/maintenance/starboard/fore) +"ado" = ( +/obj/machinery/light/directional/west, +/turf/open/openspace, +/area/station/engineering/break_room) +"adv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "adC" = ( /turf/open/openspace, /area/station/maintenance/hallway/abandoned_recreation) @@ -235,6 +249,11 @@ }, /turf/open/openspace, /area/station/science/xenobiology) +"aej" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "aep" = ( /obj/structure/disposalpipe/sorting/mail{ dir = 8 @@ -290,15 +309,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) -"afo" = ( -/obj/structure/table, -/obj/machinery/light/warm/directional/north, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/microwave/engineering/cell_included, -/turf/open/floor/eighties, -/area/station/engineering/break_room) "afr" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/cafeteria, @@ -359,17 +369,39 @@ "afR" = ( /turf/open/openspace, /area/station/hallway/primary/aft) +"afS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "afV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/mess) +"agh" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/break_room) "agy" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/science/server) +"agz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) "agF" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -410,6 +442,12 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/openspace, /area/station/hallway/primary/aft) +"ahT" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "ahU" = ( /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/vending/snackvend, @@ -588,6 +626,7 @@ dir = 9 }, /obj/machinery/light_switch/directional/east, +/obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/science/server) "akt" = ( @@ -615,6 +654,13 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"akK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "akL" = ( /obj/machinery/telecomms/server/presets/engineering, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -642,12 +688,6 @@ }, /turf/open/floor/wood, /area/station/hallway/primary/central) -"akV" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input{ - dir = 8 - }, -/turf/open/floor/engine/n2, -/area/station/engineering/main) "akW" = ( /obj/effect/turf_decal/trimline/dark_blue/line{ dir = 4 @@ -664,10 +704,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"akY" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/engine, -/area/station/engineering/main) "alh" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -703,6 +739,13 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"alk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "als" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -761,13 +804,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/warden) -"amk" = ( -/obj/item/radio/intercom/directional/south, -/obj/structure/closet/crate/trashcart/laundry, -/obj/effect/spawner/random/clothing/costume, -/obj/effect/spawner/random/clothing/backpack, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "ams" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/siding/blue/corner{ @@ -842,25 +878,41 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"anB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/vending/engivend, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "anG" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/openspace, /area/station/security/detectives_office) +"anJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "anY" = ( /turf/open/floor/engine/hull/air, /area/station/maintenance/port/fore) -"aof" = ( -/obj/machinery/space_heater, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "aoh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"aor" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmos/project) "aoz" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -897,13 +949,6 @@ }, /turf/open/floor/wood, /area/station/ai_monitored/command/storage/eva) -"apc" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/table, -/obj/structure/cable, -/obj/item/storage/medkit/toxin, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "apf" = ( /obj/machinery/light/warm/dim/directional/north, /obj/structure/table/reinforced, @@ -914,43 +959,44 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/wood, /area/station/service/bar) -"aph" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "api" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/weather/snow, /turf/open/floor/plating, /area/station/construction/storage_wing) -"apl" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "apo" = ( /turf/open/openspace, /area/station/command/corporate_showroom) +"apA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "CO2 Multideck Adapter"; + dir = 4 + }, +/obj/machinery/meter{ + name = "C02 meter" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "apE" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"apF" = ( +"apI" = ( /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/modular_computer/preset/engineering{ - dir = 8 +/obj/machinery/door/poddoor/preopen{ + id = "ceprivacy"; + name = "Chief Engineers Privacy Shutters" }, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) "apK" = ( /turf/closed/wall/r_wall, /area/station/security/range) @@ -968,6 +1014,13 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"apX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "aqa" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -1008,6 +1061,15 @@ /obj/machinery/holopad, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"aqy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/station/engineering/main) "aqD" = ( /turf/open/floor/iron/white/smooth_large, /area/station/security/prison) @@ -1055,11 +1117,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"aru" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/space/openspace, -/area/space/nearstation) "arv" = ( /obj/structure/table, /obj/item/healthanalyzer{ @@ -1076,6 +1133,7 @@ /obj/item/storage/belt/utility/full{ pixel_y = 1 }, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white/textured_corner{ dir = 8 }, @@ -1099,6 +1157,12 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/wood, /area/station/service/chapel) +"arL" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "arN" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law{ @@ -1190,11 +1254,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"ate" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "ati" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "outerbrig"; @@ -1281,10 +1340,6 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) -"aup" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "auq" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/tile/purple/full, @@ -1314,6 +1369,32 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) +"auP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"auS" = ( +/obj/item/toy/plush/moth{ + name = "Goofy Greg"; + pixel_x = 3; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/plush/moth{ + name = "Crimes Reynald"; + pixel_x = -2; + pixel_y = 14 + }, +/obj/structure/sign/poster/contraband/mothic_rations/directional/west, +/obj/structure/sign/poster/official/moth_piping/directional/north, +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "auX" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -1326,23 +1407,6 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/cargo/storage) -"avg" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) -"avG" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "avY" = ( /obj/item/storage/medkit/regular{ pixel_x = 3; @@ -1417,10 +1481,6 @@ /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"awL" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "awP" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, @@ -1510,22 +1570,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"ayL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) -"ayN" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ - dir = 8 - }, -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/station/engineering/atmos/upper) "ayR" = ( /obj/structure/table, /obj/item/storage/crayons{ @@ -1635,12 +1679,6 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter) -"aAz" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "aAI" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ @@ -1669,6 +1707,10 @@ /obj/structure/cable, /turf/open/openspace, /area/station/hallway/primary/port) +"aBv" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/break_room) "aBy" = ( /obj/structure/table/wood, /obj/machinery/fax{ @@ -1812,6 +1854,13 @@ dir = 1 }, /area/station/medical/morgue) +"aDp" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "aDF" = ( /obj/structure/reagent_dispensers/watertank, /obj/structure/railing{ @@ -1834,6 +1883,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"aDN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "aDO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, @@ -1873,6 +1927,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/explab) +"aEr" = ( +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 8; + name = "O2 To Port" + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "aEO" = ( /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, @@ -1899,6 +1961,10 @@ /obj/structure/ladder, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"aFk" = ( +/obj/structure/sign/clock/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "aFm" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -1950,6 +2016,13 @@ dir = 4 }, /area/station/hallway/primary/fore) +"aFQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/computer/atmos_control/nitrous_tank{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "aFV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, @@ -1976,26 +2049,40 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/hallway/secondary/entry) -"aGD" = ( -/obj/machinery/vending/tool, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 +"aGp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"aGG" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/engineering/lobby) "aGR" = ( /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) -"aGT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer2{ +"aGX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 10 +/obj/item/radio/intercom/directional/north, +/obj/machinery/rnd/production/protolathe/department/engineering, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) +"aHc" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "SM_Outside_shutters"; + name = 4 }, +/obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/supermatter/room) "aHe" = ( /obj/machinery/button/door/directional/west{ id = "Cabin5"; @@ -2010,18 +2097,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) -"aHg" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) -"aHl" = ( -/obj/structure/lattice/catwalk, -/obj/item/flashlight/flashdark{ - name = "Envy Flashlight" - }, -/turf/open/openspace, -/area/station/maintenance/starboard/fore) "aHo" = ( /obj/structure/safe, /obj/item/storage/fancy/pickles_jar, @@ -2082,6 +2157,17 @@ }, /turf/open/floor/carpet, /area/station/security/courtroom) +"aIt" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "aIA" = ( /obj/structure/railing{ dir = 8 @@ -2141,12 +2227,6 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload) -"aJg" = ( -/obj/machinery/electrolyzer, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "aJh" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -2219,9 +2299,11 @@ }, /turf/open/floor/iron/airless, /area/station/maintenance/starboard/aft) -"aKl" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/glass/reinforced/plasma, +"aKq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, /area/station/engineering/atmos/upper) "aKz" = ( /obj/structure/railing{ @@ -2258,6 +2340,13 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/dark, /area/station/science/cytology) +"aKR" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/engineering/lobby) "aKV" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/turf_decal/siding/wood{ @@ -2278,13 +2367,6 @@ "aLd" = ( /turf/open/floor/glass/airless, /area/station/maintenance/starboard/lesser) -"aLg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/sign/warning/electric_shock/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "aLl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -2329,6 +2411,13 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) +"aLX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) "aLY" = ( /obj/item/stack/cable_coil{ pixel_y = -12 @@ -2370,15 +2459,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"aMs" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"aMw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "aMz" = ( /obj/item/restraints/legcuffs/beartrap/prearmed, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"aMC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "aMD" = ( /obj/item/flashlight/lantern{ pixel_x = 6; @@ -2418,6 +2510,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/zoo) +"aNf" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) "aNg" = ( /obj/structure/chair/sofa/corner/brown, /obj/item/instrument/eguitar, @@ -2425,11 +2524,6 @@ /obj/machinery/light/small/broken/directional/east, /turf/open/floor/eighties, /area/station/maintenance/starboard/fore) -"aNj" = ( -/obj/machinery/computer/atmos_control/air_tank, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "aNB" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -2481,18 +2575,17 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) +"aOn" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "aOs" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy, /turf/open/space/openspace, /area/space/nearstation) -"aOw" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "aOK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -2524,6 +2617,15 @@ /obj/item/gavelhammer, /turf/open/floor/wood, /area/station/security/courtroom) +"aPr" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "aPv" = ( /obj/structure/railing/corner{ dir = 8 @@ -2576,10 +2678,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library/printer) -"aQe" = ( -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "aQj" = ( /obj/effect/turf_decal/siding/brown{ dir = 1 @@ -2605,10 +2703,24 @@ }, /turf/open/floor/glass, /area/station/service/kitchen) +"aQx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "aQz" = ( /obj/structure/table, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) +"aQL" = ( +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/disposalpipe/segment, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "aQM" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/effect/turf_decal/siding/brown{ @@ -2635,7 +2747,7 @@ dir = 8 }, /obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/telecomms, +/turf/open/floor/catwalk_floor, /area/station/science/server) "aRg" = ( /obj/machinery/door/airlock/maintenance, @@ -2652,6 +2764,12 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"aRW" = ( +/obj/machinery/requests_console/directional/west, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "aSd" = ( /obj/structure/window/reinforced/tinted/spawner/directional/east, /obj/machinery/shower/directional/east, @@ -2663,6 +2781,9 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) +"aSB" = ( +/turf/open/floor/engine/hull/air, +/area/station/engineering/break_room) "aSD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2686,6 +2807,9 @@ }, /turf/open/openspace, /area/station/command/gateway) +"aSW" = ( +/turf/closed/wall, +/area/station/service/hydroponics/garden/abandoned) "aSX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -2749,6 +2873,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"aTV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "aTW" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/effect/turf_decal/trimline/red/filled/warning{ @@ -2756,6 +2887,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"aUe" = ( +/obj/item/tank/internals/plasma/empty, +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "aUl" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -2766,15 +2908,6 @@ }, /turf/closed/wall, /area/station/service/lawoffice) -"aUo" = ( -/obj/machinery/field/generator, -/turf/open/floor/engine, -/area/station/engineering/main) -"aUr" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/structure/sign/warning/vacuum/external/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "aUu" = ( /obj/structure/table/reinforced/rglass, /obj/item/storage/box/deputy{ @@ -2791,6 +2924,13 @@ }, /turf/open/floor/glass, /area/station/security/brig) +"aUD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/lobby) "aUF" = ( /obj/effect/spawner/random/maintenance, /obj/structure/rack, @@ -2830,6 +2970,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) +"aUW" = ( +/obj/machinery/air_sensor/air_tank, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/turf/open/floor/engine/air, +/area/station/engineering/atmos/upper) "aUY" = ( /obj/structure/rack, /obj/item/storage/box/firingpins{ @@ -2873,17 +3018,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/central) -"aVv" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "aVy" = ( /obj/structure/sign/directions/security/directional/north{ dir = 2; @@ -2895,6 +3029,15 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/engineering/lobby) +"aVG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/siding/red/corner{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "aVI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2902,6 +3045,21 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"aVL" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/north, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay"); + c_tag = "Medbay - Lobby" + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "aVN" = ( /turf/closed/wall, /area/station/command/teleporter) @@ -3200,6 +3358,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, /area/station/security/courtroom) +"aZY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/siding/red/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "bam" = ( /obj/machinery/duct, /obj/structure/cable, @@ -3259,26 +3424,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/openspace, /area/station/hallway/primary/central) -"bbn" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/item/pen, -/obj/item/folder/yellow{ - pixel_x = 2; - pixel_y = -12 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "bbx" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, @@ -3292,6 +3437,15 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark/smooth_large, /area/station/security/eva) +"bbO" = ( +/obj/item/flashlight/flashdark{ + name = "Envy Flashlight" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "bbV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/auto_name/directional/west, @@ -3324,13 +3478,6 @@ /obj/machinery/light/warm/dim/directional/east, /turf/open/floor/wood, /area/station/commons/lounge) -"bck" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics - Nitrogen Cell"; - name = "atmospherics camera" - }, -/turf/open/floor/engine/n2, -/area/station/engineering/main) "bcl" = ( /obj/effect/turf_decal/siding/dark{ dir = 4 @@ -3340,10 +3487,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"bct" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output, -/turf/open/floor/engine/n2, -/area/station/engineering/main) "bcH" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table/reinforced, @@ -3387,6 +3530,11 @@ dir = 1 }, /area/station/science/ordnance/storage) +"bdh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "bdi" = ( /obj/machinery/light/directional/south, /obj/structure/rack, @@ -3420,11 +3568,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) -"bdE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "bdL" = ( /obj/structure/chair/sofa/corp/right{ dir = 4 @@ -3470,14 +3613,6 @@ "beg" = ( /turf/closed/wall/r_wall, /area/station/security/prison/safe) -"beD" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/structure/sign/warning/no_smoking/circle/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "beF" = ( /obj/structure/table/wood/fancy, /obj/item/lead_pipe{ @@ -3493,12 +3628,6 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"beI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "bfc" = ( /obj/structure/railing{ dir = 8 @@ -3546,19 +3675,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) -"bfM" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/ladder, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "bfN" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -3587,13 +3703,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) -"bgi" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "bgm" = ( /obj/structure/stairs/south, /turf/open/floor/plating, @@ -3647,10 +3756,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"bhF" = ( -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "bhJ" = ( /obj/structure/easel, /turf/open/floor/plating, @@ -3714,17 +3819,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"biM" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "biP" = ( /obj/structure/railing{ dir = 8 @@ -4020,6 +4114,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/courtroom) +"bmO" = ( +/obj/structure/closet/radiation, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "bmP" = ( /obj/structure/railing{ dir = 8 @@ -4091,6 +4189,11 @@ /obj/structure/cable, /turf/closed/wall, /area/station/service/kitchen) +"boh" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/lattice/catwalk, +/turf/open/floor/engine/hull/air, +/area/station/engineering/break_room) "boj" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/light_switch/directional/east, @@ -4187,13 +4290,6 @@ "bpK" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hos) -"bpO" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "bpU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/showcase/machinery/cloning_pod{ @@ -4203,6 +4299,13 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"bpZ" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/light_switch/directional/east, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "bqk" = ( /obj/effect/turf_decal/siding/dark/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4241,26 +4344,12 @@ }, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) -"bqz" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "bqA" = ( /obj/effect/turf_decal/siding/brown, /obj/structure/table/reinforced, /obj/item/storage/toolbox/artistic, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"bqQ" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "bqR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4288,10 +4377,18 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/plating, /area/station/maintenance/department/science/central) -"bre" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 8 +"bra" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Testing Room" + }, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"brm" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) @@ -4312,6 +4409,11 @@ /obj/machinery/vending/cigarette, /turf/open/openspace, /area/station/construction/storage_wing) +"bsa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "bsc" = ( /obj/effect/spawner/random/trash/graffiti, /obj/effect/spawner/random/trash/box, @@ -4384,21 +4486,10 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"bsW" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/storage/box{ - pixel_x = 2; - pixel_y = 4 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"btb" = ( +/obj/machinery/roulette, +/turf/open/floor/engine, +/area/station/engineering/break_room) "btc" = ( /obj/item/paper_bin/carbon, /obj/structure/closet, @@ -4420,6 +4511,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"btj" = ( +/obj/machinery/vending/donksnack, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "btv" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -4473,33 +4568,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull/air, /area/station/medical/chemistry) -"bui" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/table, -/obj/item/clothing/head/cone{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/folder/yellow{ - pixel_x = 4 - }, -/obj/item/clothing/head/cone{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/clothing/head/cone{ - pixel_x = -4; - pixel_y = 4 - }, -/turf/open/floor/wood, -/area/station/engineering/lobby) "buk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/white/textured, /area/station/medical/surgery) +"buu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "buA" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -4508,6 +4590,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"buP" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/light_switch/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "buV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4534,18 +4622,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"bvf" = ( -/obj/item/toy/plush/moth{ - name = "Moff #1"; - pixel_x = -15; - pixel_y = -7 - }, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "bvq" = ( /obj/structure/closet/crate/medical, /obj/item/scalpel{ @@ -4566,12 +4642,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/command/gateway) -"bvy" = ( -/obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "bvz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -4595,6 +4665,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) +"bvI" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "bvN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4621,6 +4696,10 @@ }, /turf/open/floor/iron, /area/station/science/research) +"bvY" = ( +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/wood, +/area/station/ai_monitored/command/storage/eva) "bvZ" = ( /obj/structure/railing{ dir = 8 @@ -4647,9 +4726,6 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/hallway/primary/port) -"bww" = ( -/turf/open/floor/engine/o2, -/area/station/engineering/main) "bwx" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -4684,6 +4760,9 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, /area/station/commons/storage/primary) +"bxx" = ( +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos/upper) "bxH" = ( /obj/machinery/photocopier/prebuilt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4691,19 +4770,6 @@ /obj/item/clothing/gloves/boxing, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"bxI" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "bxK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4780,6 +4846,14 @@ }, /turf/closed/wall, /area/station/service/library) +"byA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "byC" = ( /obj/machinery/button/door/directional/east{ id = "Prison Gate"; @@ -4850,6 +4924,10 @@ "bzB" = ( /turf/closed/wall/r_wall, /area/station/science/robotics) +"bzL" = ( +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "bzN" = ( /obj/machinery/computer/quantum_console{ dir = 1 @@ -4963,6 +5041,12 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) +"bBu" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) "bBv" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -5014,6 +5098,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"bCb" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Air to Distro" + }, +/obj/effect/turf_decal/trimline/blue, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "bCe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5052,6 +5144,14 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"bCx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/construction) "bCC" = ( /obj/machinery/suit_storage_unit/captain, /obj/machinery/status_display/evac/directional/north, @@ -5074,6 +5174,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"bCP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "bDf" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/wood{ @@ -5087,12 +5196,6 @@ }, /turf/open/floor/wood/large, /area/station/service/kitchen) -"bDj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/catwalk_floor, -/area/station/engineering/engine_smes) "bDm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/maintenance, @@ -5100,6 +5203,14 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, /area/station/maintenance/port) +"bDn" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "N2 to Port" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "bDq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -5140,6 +5251,10 @@ "bDZ" = ( /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"bEp" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "bEr" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck{ @@ -5151,29 +5266,6 @@ }, /turf/open/floor/iron/textured, /area/station/cargo/storage) -"bEt" = ( -/obj/structure/table, -/obj/item/hfr_box/corner{ - pixel_x = 3; - pixel_y = 10 - }, -/obj/item/hfr_box/corner{ - pixel_y = 6 - }, -/obj/item/hfr_box/corner{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/hfr_box/corner{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/item/hfr_box/core{ - pixel_x = 3; - pixel_y = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "bEw" = ( /obj/effect/turf_decal/siding/purple, /obj/effect/turf_decal/siding/purple{ @@ -5197,6 +5289,25 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"bEJ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"bEK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "bES" = ( /obj/effect/turf_decal/siding/blue{ dir = 1 @@ -5244,13 +5355,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"bFj" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Cooling Loop Bypass" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"bFn" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input, +/turf/open/floor/engine/air, +/area/station/engineering/atmos/upper) "bFv" = ( /obj/structure/table/optable, /obj/effect/decal/cleanable/dirt, @@ -5312,16 +5420,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, /area/station/maintenance/starboard/lesser) -"bGv" = ( -/turf/open/floor/engine/air, -/area/station/engineering/main) -"bGE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "bGF" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, @@ -5342,6 +5440,25 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/art) +"bGR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 6 + }, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) +"bGX" = ( +/obj/effect/turf_decal/arrows/white{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "bGY" = ( /obj/structure/table/wood, /obj/item/food/grown/harebell{ @@ -5417,6 +5534,19 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) +"bHC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/computer/atmos_control/oxygen_tank, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) +"bHG" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "bHM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, @@ -5479,13 +5609,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"bIt" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/south, -/obj/machinery/power/energy_accumulator/grounding_rod/anchored, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "bIF" = ( /obj/machinery/atmospherics/components/binary/pump/layer4, /obj/item/storage/box/matches{ @@ -5536,6 +5659,24 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/warden) +"bIP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/rack, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_x = -2 + }, +/obj/item/book/manual/wiki/engineering_construction{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "bIS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ @@ -5585,12 +5726,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"bJI" = ( -/obj/structure/ladder, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "bJJ" = ( /obj/machinery/vending/cigarette, /obj/structure/disposalpipe/segment{ @@ -5605,6 +5740,19 @@ /obj/structure/stairs/north, /turf/open/floor/wood, /area/station/security/courtroom) +"bKb" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "bKd" = ( /obj/effect/turf_decal/siding/dark{ dir = 5 @@ -5660,6 +5808,12 @@ /obj/structure/plasticflaps/kitchen, /turf/open/floor/plating, /area/station/ai_monitored/command/storage/satellite) +"bKC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) "bKK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5731,21 +5885,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"bLO" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/button/elevator{ - id = "catwalk_engi"; - pixel_y = -24 - }, -/obj/machinery/light/directional/south, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "bMa" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/decal/cleanable/dirt, @@ -5818,12 +5957,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"bMT" = ( -/obj/machinery/meter{ - name = "Mixed Air Tank In" +"bMD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 }, -/turf/closed/wall/r_wall, -/area/station/engineering/main) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) "bNk" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 8 @@ -5997,6 +6137,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"bQt" = ( +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "bQz" = ( /obj/structure/reagent_dispensers/fueltank, /obj/structure/railing, @@ -6048,19 +6192,6 @@ }, /turf/open/openspace, /area/station/science/xenobiology) -"bRe" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/light/directional/west, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"bRf" = ( -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "bRl" = ( /obj/structure/table, /obj/item/clothing/suit/utility/fire/firefighter, @@ -6089,6 +6220,16 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) +"bRC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) "bRD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -6152,13 +6293,6 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) -"bSq" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable, -/obj/machinery/light/directional/west, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "bSs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -6201,20 +6335,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"bSF" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) -"bSO" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "bSQ" = ( /obj/structure/stairs/east, /obj/structure/railing, @@ -6223,6 +6343,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"bTa" = ( +/obj/item/toy/plush/moth{ + name = "Smorg Asbord"; + pixel_y = 6 + }, +/obj/item/toy/plush/moth{ + name = "Moff #2"; + pixel_x = 5; + pixel_y = -10 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "bTd" = ( /obj/structure/railing, /obj/effect/turf_decal/siding/brown, @@ -6285,12 +6421,6 @@ /obj/effect/landmark/navigate_destination/engineering, /turf/open/floor/iron, /area/station/engineering/lobby) -"bTN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "bTU" = ( /obj/effect/turf_decal/siding/green/corner, /obj/machinery/disposal/bin/tagger, @@ -6299,6 +6429,9 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"bTW" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) "bTX" = ( /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/plating, @@ -6346,15 +6479,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"bUD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible{ - dir = 6 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "bUO" = ( /obj/machinery/computer/records/security, /obj/structure/cable, @@ -6376,14 +6500,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"bVd" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "bVs" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -6400,19 +6516,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/plating, /area/station/medical/coldroom) -"bVD" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) -"bVG" = ( -/obj/effect/spawner/random/entertainment/arcade{ - dir = 8 - }, -/turf/open/floor/eighties, -/area/station/engineering/break_room) "bVI" = ( /obj/machinery/requests_console/directional/north{ department = "Head of Security's Desk"; @@ -6483,6 +6586,12 @@ /obj/effect/turf_decal/trimline/dark_blue/mid_joiner, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"bWC" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "bWE" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 @@ -6493,6 +6602,11 @@ /obj/structure/reagent_dispensers/plumbed/storage, /turf/open/floor/wood, /area/station/medical/medbay/central) +"bWQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "bWY" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, @@ -6582,14 +6696,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/port/aft) -"bYx" = ( -/obj/machinery/meter, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "bYz" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/south, @@ -6729,6 +6835,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"bZR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/obj/machinery/space_heater, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "bZW" = ( /obj/structure/table, /obj/item/multitool/circuit{ @@ -6787,6 +6900,11 @@ dir = 8 }, /area/station/service/chapel) +"cay" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "caE" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -6799,18 +6917,19 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"caM" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "caO" = ( /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/disposal) +"caQ" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/machinery/autolathe, +/obj/structure/sign/poster/official/do_not_question/directional/north, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) "caS" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6857,6 +6976,24 @@ /obj/machinery/vending/cigarette, /turf/open/floor/plating, /area/station/maintenance/port) +"cbB" = ( +/obj/machinery/requests_console/directional/west{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/structure/table, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/machinery/recharger{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "cbC" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/status_display/evac/directional/south, @@ -6920,6 +7057,11 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"cck" = ( +/obj/structure/broken_flooring/singular/directional/east, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "ccm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6955,6 +7097,11 @@ "ccN" = ( /turf/closed/wall, /area/station/medical/surgery) +"ccV" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "ccY" = ( /obj/machinery/door/airlock/medical{ name = "Coroner's Office" @@ -7174,6 +7321,20 @@ /obj/machinery/light/dim/directional/south, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"cfs" = ( +/obj/machinery/button/elevator{ + id = "catwalk_engi"; + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8; + pixel_x = -2 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cfx" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -7191,6 +7352,24 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) +"cfI" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"cfP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cfQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7198,11 +7377,13 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"cgc" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +"cfT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light/warm/directional/east, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/lobby) "cgg" = ( /obj/effect/decal/remains/human, /obj/item/clothing/head/utility/hardhat/welding/atmos{ @@ -7218,6 +7399,16 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/small, /area/station/security/mechbay) +"cgE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics - Plasma Cell"; + name = "atmospherics camera" + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos/upper) "cgK" = ( /obj/structure/cable, /turf/closed/wall, @@ -7232,6 +7423,16 @@ /obj/item/vending_refill/coffee, /turf/open/floor/plating, /area/station/maintenance/disposal) +"chc" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/upper) "chd" = ( /obj/structure/ladder, /obj/effect/turf_decal/bot, @@ -7257,13 +7458,11 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"chD" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"chG" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "chI" = ( /obj/effect/landmark/start/hangover, /obj/machinery/light_switch/directional/north, @@ -7292,6 +7491,14 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/command/gateway) +"chR" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix Bypass" + }, +/obj/effect/turf_decal/trimline/blue, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "chU" = ( /obj/machinery/door/airlock/public/glass{ name = "Crew Quarters Access" @@ -7313,6 +7520,11 @@ }, /turf/open/openspace, /area/station/science/xenobiology) +"chZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "cib" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7327,18 +7539,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"cig" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/door/airlock/security/glass{ - name = "Security Post - Engineering" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "cik" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop, @@ -7348,13 +7548,6 @@ /obj/item/radio/intercom/directional/south, /turf/closed/wall/r_wall, /area/station/engineering/main) -"cio" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "ciS" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -7412,6 +7605,10 @@ }, /turf/open/floor/wood/large, /area/station/service/kitchen) +"ckE" = ( +/obj/machinery/hydroponics/soil, +/turf/open/misc/sandy_dirt, +/area/station/service/hydroponics/garden/abandoned) "ckG" = ( /obj/structure/table, /obj/item/clothing/glasses/sunglasses/big{ @@ -7479,15 +7676,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"clk" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) -"clr" = ( -/turf/open/floor/engine/n2, -/area/station/engineering/main) "cly" = ( /obj/machinery/light/directional/south, /turf/open/floor/plating, @@ -7599,11 +7787,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/courtroom) -"cmW" = ( -/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/engineering/break_room) "cmY" = ( /obj/effect/turf_decal/siding/blue{ dir = 8 @@ -7659,6 +7842,13 @@ /obj/machinery/restaurant_portal/restaurant, /turf/open/floor/wood/large, /area/station/service/kitchen) +"cot" = ( +/obj/machinery/atmospherics/components/trinary/filter/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "coI" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/decal/cleanable/dirt, @@ -7712,13 +7902,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/lesser) -"cpF" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/lobby) "cpG" = ( /obj/machinery/computer/records/medical, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -7733,6 +7916,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/cytology) +"cpN" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "cpQ" = ( /obj/structure/chair{ dir = 1 @@ -7745,12 +7932,12 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/dark/textured_large, /area/station/medical/surgery) -"cqg" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input{ - dir = 4 - }, -/turf/open/floor/engine/n2o, -/area/station/engineering/main) +"cqh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "cqj" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/smooth_large, @@ -7769,35 +7956,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) -"cql" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Engineering Storage" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) -"cqm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/table, -/obj/item/clothing/suit/hazardvest{ - pixel_y = 4 - }, -/obj/item/clothing/suit/hazardvest{ - pixel_x = 10; - pixel_y = 3 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/item/clothing/suit/hazardvest{ - pixel_x = -13; - pixel_y = 3 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "cqp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, @@ -7891,6 +8049,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"crn" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "crs" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced/spawner/directional/south, @@ -7951,6 +8117,14 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"csf" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "N2O to Port" + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "csh" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -8094,16 +8268,6 @@ /obj/item/book/codex_gigas, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"ctC" = ( -/obj/structure/lattice/catwalk, -/turf/open/openspace, -/area/station/engineering/atmos/project) -"ctD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output{ - dir = 4 - }, -/turf/open/floor/engine/co2, -/area/station/engineering/main) "ctE" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -8143,16 +8307,20 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, /area/station/cargo/storage) -"cuz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "cuQ" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron/dark, /area/station/science/lobby) +"cuT" = ( +/obj/machinery/light/directional/east, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "cuY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8166,10 +8334,6 @@ /obj/effect/landmark/navigate_destination/dockescpod, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"cvv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "cvH" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8207,6 +8371,17 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) +"cwo" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "CO2 Multideck Adapter"; + dir = 8 + }, +/obj/machinery/meter{ + name = "C02 meter" + }, +/obj/effect/turf_decal/tile/dark/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "cwq" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/large, @@ -8232,11 +8407,6 @@ "cwP" = ( /turf/open/openspace, /area/station/science/research) -"cwT" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/air_sensor/nitrogen_tank, -/turf/open/floor/engine/n2, -/area/station/engineering/main) "cwX" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8249,6 +8419,13 @@ /obj/effect/landmark/carpspawn, /turf/open/floor/plating/airless, /area/station/maintenance/space_hut) +"cxh" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "cxj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8385,6 +8562,18 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/virology, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"cyN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 8; + pixel_x = -2 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cyT" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, @@ -8393,10 +8582,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) -"cyY" = ( -/obj/machinery/hydroponics/soil, -/turf/open/misc/sandy_dirt, -/area/station/service/hydroponics/garden/abandoned) "czk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8508,11 +8693,6 @@ /obj/machinery/light/directional, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) -"cAs" = ( -/obj/structure/disposalpipe/segment, -/obj/item/banner/command/mundane, -/turf/open/floor/plating, -/area/station/maintenance/port) "cAv" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -8542,6 +8722,10 @@ /obj/machinery/microwave/engineering, /turf/open/floor/iron/textured, /area/station/cargo/storage) +"cAI" = ( +/obj/structure/fireaxecabinet/directional/east, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "cAM" = ( /obj/structure/railing{ dir = 8 @@ -8601,18 +8785,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/wood, /area/station/service/library/printer) -"cBn" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump/on/yellow/visible{ - name = "N2 to Airmix" - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "cBu" = ( /obj/structure/sign/warning/vacuum/directional/north, /turf/open/floor/plating/airless, @@ -8660,6 +8832,14 @@ }, /turf/open/openspace, /area/station/medical/cryo) +"cBY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "cCq" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -8716,11 +8896,6 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"cCK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "cCM" = ( /turf/open/openspace, /area/station/engineering/lobby) @@ -8749,29 +8924,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/science/robotics/lab) -"cCZ" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) -"cDf" = ( -/obj/structure/sign/warning/radiation/rad_area, -/turf/closed/wall/r_wall, -/area/station/engineering/engine_smes) -"cDg" = ( -/obj/structure/filingcabinet/chestdrawer, -/mob/living/basic/parrot/poly, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "Engineering"; - name = "Engineering Lockdown"; - pixel_x = 23; - pixel_y = 11 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "cDq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8802,6 +8954,10 @@ dir = 4 }, /area/station/medical/surgery) +"cDI" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos/upper) "cDY" = ( /obj/machinery/light/small/directional/west, /obj/structure/rack, @@ -8826,6 +8982,13 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, /area/station/security/brig) +"cEd" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "cEf" = ( /obj/structure/chair/pew/right{ dir = 4 @@ -8841,6 +9004,11 @@ /obj/item/storage/box/disks, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) +"cEn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/holopad, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "cEH" = ( /obj/structure/table, /obj/item/stock_parts/power_store/cell/high{ @@ -8869,12 +9037,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"cEX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/engineering/atmos/upper) "cFa" = ( /turf/open/openspace, /area/station/service/kitchen) @@ -8899,14 +9061,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port) -"cFw" = ( -/obj/structure/transport/linear, -/obj/machinery/elevator_control_panel/directional/south{ - linked_elevator_id = "catwalk_engi"; - preset_destination_names = list("2"="Lower Engine","3"="Upper Atmos.") - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "cFz" = ( /obj/structure/sign/directions/security{ dir = 8; @@ -8982,19 +9136,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/station/cargo/storage) -"cGu" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"cGx" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ - dir = 4 - }, -/turf/open/floor/engine/plasma, -/area/station/engineering/main) "cGB" = ( /obj/machinery/light/directional/east, /obj/machinery/camera/autoname/directional/east, @@ -9006,12 +9147,6 @@ }, /turf/open/floor/carpet, /area/station/service/lawoffice) -"cGH" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "cGK" = ( /obj/structure/closet/lasertag/blue, /obj/effect/decal/cleanable/dirt, @@ -9032,6 +9167,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cGS" = ( +/obj/structure/sign/warning/radiation/rad_area, +/turf/closed/wall/r_wall, +/area/station/engineering/hallway) "cHp" = ( /obj/structure/lattice/catwalk, /obj/structure/table, @@ -9060,6 +9199,14 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/science/breakroom) +"cHC" = ( +/obj/structure/railing, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/grass, +/area/station/hallway/primary/starboard) "cHD" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9120,10 +9267,6 @@ dir = 1 }, /area/station/medical/morgue) -"cIf" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "cIl" = ( /obj/machinery/disposal/bin, /obj/machinery/camera/autoname/directional/south, @@ -9189,6 +9332,21 @@ }, /turf/open/openspace, /area/station/ai_monitored/turret_protected/ai) +"cIH" = ( +/obj/machinery/light/directional/east, +/obj/structure/railing, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/engineering/storage) +"cIM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "cIN" = ( /obj/structure/table/reinforced, /obj/item/stamp/denied{ @@ -9224,30 +9382,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) -"cJi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/cultivator, -/obj/item/reagent_containers/cup/bottle/nutrient/rh{ - pixel_x = 10; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/ez{ - pixel_x = 10; - pixel_y = -4 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/item/reagent_containers/spray/pestspray{ - pixel_x = 10; - pixel_y = -14 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "cJk" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/shrink_cw, /obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner, @@ -9327,15 +9461,12 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) -"cJZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 +"cKc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/cable, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/engineering/main) +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cKe" = ( /obj/docking_port/stationary{ dwidth = 9; @@ -9479,6 +9610,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) +"cMW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 8; + name = "Waste Release" + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) +"cMY" = ( +/obj/effect/turf_decal/box/white{ + color = "#9FED58" + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "cNl" = ( /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, @@ -9491,6 +9636,11 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel) +"cNt" = ( +/obj/structure/sign/warning/radiation/rad_area, +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/engineering/main) "cNu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -9551,13 +9701,6 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/fore) -"cOQ" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 4; - initialize_directions = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "cOS" = ( /obj/item/radio/intercom/directional/north, /obj/machinery/camera/directional/north{ @@ -9567,15 +9710,6 @@ /obj/effect/spawner/random/contraband/narcotics, /turf/open/floor/iron/dark, /area/station/security/evidence) -"cOU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input, -/turf/open/floor/engine/o2, -/area/station/engineering/main) -"cPa" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/air_sensor/oxygen_tank, -/turf/open/floor/engine/o2, -/area/station/engineering/main) "cPf" = ( /obj/structure/toilet{ dir = 4 @@ -9614,14 +9748,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"cPH" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/item/wrench{ - pixel_x = -7; - pixel_y = -3 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "cPW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9791,13 +9917,6 @@ /obj/structure/ladder, /turf/open/floor/plating, /area/station/maintenance/port) -"cSz" = ( -/obj/machinery/vending/engivend, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "cSA" = ( /obj/effect/turf_decal/tile/green/opposingcorners{ dir = 1 @@ -9870,14 +9989,6 @@ }, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) -"cTC" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "cTJ" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/maintenance/two, @@ -9890,10 +10001,15 @@ }, /turf/open/floor/plating, /area/station/construction/storage_wing) -"cTQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output, -/turf/open/floor/engine/o2, -/area/station/engineering/main) +"cTL" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "N20 Multideck Adapter" + }, +/obj/machinery/meter{ + name = "N20 meter" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "cTR" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 @@ -10064,14 +10180,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"cVW" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/openspace, -/area/station/engineering/atmos/project) "cWd" = ( /obj/structure/chair/comfy/brown{ dir = 1 @@ -10120,10 +10228,6 @@ /obj/machinery/vending/cola/pwr_game, /turf/open/floor/wood, /area/station/commons/dorms) -"cWI" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input, -/turf/open/floor/engine/air, -/area/station/engineering/main) "cWN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10171,13 +10275,6 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/central) -"cXJ" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "cXM" = ( /obj/effect/mapping_helpers/airlock/access/all/service/general, /obj/machinery/door/airlock/maintenance{ @@ -10199,12 +10296,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/plating, /area/station/cargo/storage) -"cYg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/supply/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "cYq" = ( /obj/structure/table/reinforced, /obj/item/flashlight{ @@ -10240,14 +10331,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/science/lobby) -"cYY" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/engineering/lobby) "cZa" = ( /obj/structure/stairs/south, /turf/open/floor/iron/stairs/medium{ @@ -10296,15 +10379,23 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"cZN" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/right, +/area/station/engineering/lobby) +"cZP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "cZT" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/security/interrogation) -"dab" = ( -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "dag" = ( /turf/open/floor/iron/dark/textured_corner{ dir = 8 @@ -10344,12 +10435,17 @@ "daC" = ( /turf/open/openspace, /area/station/ai_monitored/turret_protected/aisat_interior) -"daH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"daE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "daW" = ( /obj/structure/ladder, /obj/structure/sign/poster/contraband/space_cola/directional/north, @@ -10410,6 +10506,13 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"dbT" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "dcv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10425,6 +10528,12 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/maintenance/port) +"ddh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmos/project) "ddr" = ( /obj/machinery/airalarm/directional/west, /obj/structure/cable, @@ -10449,6 +10558,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"ddx" = ( +/obj/structure/disposalpipe/segment, +/obj/item/banner/command/mundane, +/turf/open/floor/plating, +/area/station/maintenance/port) "ddz" = ( /obj/effect/turf_decal/siding/white, /obj/item/kirbyplants/organic/plant21{ @@ -10457,9 +10571,15 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"ddN" = ( -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +"ddM" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/bin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "ddW" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, @@ -10574,6 +10694,15 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, /area/station/hallway/secondary/entry) +"dfG" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "dfI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -10615,12 +10744,12 @@ /obj/effect/turf_decal/box/white, /turf/open/floor/iron/dark/textured_corner, /area/station/science/ordnance/storage) -"dgu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 6 +"dgm" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/closed/wall/r_wall, -/area/station/engineering/main) +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "dgy" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/trimline/purple/filled/line, @@ -10640,17 +10769,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/medical/psychology) -"dgI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"dgJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "dgR" = ( /obj/structure/table/reinforced, /obj/structure/railing/corner{ @@ -10687,12 +10805,6 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"dhE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "dhL" = ( /obj/effect/turf_decal/siding/brown, /obj/structure/railing, @@ -10836,6 +10948,10 @@ }, /turf/open/floor/iron/dark/textured, /area/station/cargo/warehouse) +"dje" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "djf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -10970,11 +11086,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) -"dls" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "dlt" = ( /turf/open/floor/plating/airless, /area/station/maintenance/starboard/aft) @@ -11024,6 +11135,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"dnb" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Showers" + }, +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 8 + }, +/area/station/engineering/main) "dnj" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/cable, @@ -11069,16 +11190,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"doo" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "dos" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -11121,15 +11232,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/openspace, /area/station/medical/storage) -"dox" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/obj/machinery/space_heater, -/obj/effect/turf_decal/bot, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "doy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -11149,6 +11251,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"doK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "doL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11174,19 +11285,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/ai_monitored/command/storage/eva) -"doR" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Port to Engine" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"doS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "dpo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -11222,12 +11320,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"dqd" = ( -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "dqj" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -11250,6 +11342,16 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark, /area/station/science/lobby) +"dqo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "dqB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -11346,11 +11448,6 @@ dir = 8 }, /area/station/hallway/secondary/service) -"drF" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/directional/east, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "drI" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres{ @@ -11366,13 +11463,12 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) -"drL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"drW" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ + dir = 9 }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter) +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "drX" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) @@ -11437,6 +11533,14 @@ }, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"dtj" = ( +/obj/machinery/light/directional/south, +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/engineering/main) "dtn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11480,6 +11584,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) +"dtC" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/openspace, +/area/station/engineering/lobby) "dtO" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 4 @@ -11520,15 +11630,6 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/break_room) -"duw" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/multiz/cyan/visible{ - dir = 1; - initialize_directions = 5; - name = "Air Mix Multideck Adapter" - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "dux" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11567,12 +11668,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) -"duC" = ( -/obj/effect/turf_decal/loading_area, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured, -/area/station/maintenance/disposal/incinerator) "duE" = ( /obj/machinery/light_switch/directional/west{ pixel_x = -24; @@ -11581,6 +11676,12 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"duQ" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/machinery/light/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "dvn" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron, @@ -11645,13 +11746,14 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"dwv" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ - dir = 4 +"dwq" = ( +/obj/structure/ladder, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "dwB" = ( /obj/structure/cable, /obj/structure/closet/syndicate{ @@ -11676,11 +11778,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) -"dwF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "dwP" = ( /obj/effect/turf_decal/siding/blue/corner{ dir = 1 @@ -11707,12 +11804,14 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/maintenance/starboard/aft) -"dxu" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 10 +"dxv" = ( +/obj/machinery/atmospherics/pipe/multiz/orange/visible{ + dir = 8 }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) +/obj/machinery/meter, +/obj/structure/railing/corner, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "dxx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11767,6 +11866,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"dyt" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "dyx" = ( /obj/machinery/door/airlock/public/glass{ name = "Farewell Room" @@ -11790,6 +11896,14 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) +"dyG" = ( +/obj/item/pickaxe{ + pixel_x = -5; + pixel_y = -7 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "dyN" = ( /turf/open/openspace, /area/station/command/heads_quarters/rd) @@ -11810,6 +11924,16 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"dzg" = ( +/obj/structure/rack, +/obj/item/clothing/head/utility/welding, +/obj/item/wrench, +/obj/item/weldingtool, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "dzj" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ id = "Cell 1"; @@ -11839,6 +11963,12 @@ "dzx" = ( /turf/open/floor/iron/dark, /area/station/command/gateway) +"dzH" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/closet/radiation, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "dzI" = ( /turf/open/openspace, /area/station/maintenance/starboard/fore) @@ -11847,10 +11977,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/textured_large, /area/station/ai_monitored/turret_protected/aisat/foyer) -"dzN" = ( -/obj/structure/broken_flooring/corner/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "dzP" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11917,10 +12043,6 @@ /obj/structure/sink/kitchen/directional/east, /turf/open/floor/glass, /area/station/service/kitchen) -"dBi" = ( -/obj/effect/decal/cleanable/plasma, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "dBk" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -11941,15 +12063,6 @@ }, /turf/open/floor/iron/textured_large, /area/station/medical/abandoned) -"dBs" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "dBy" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/phosphorus{ @@ -11977,6 +12090,10 @@ /obj/effect/spawner/random/structure/barricade, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"dBG" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "dBM" = ( /obj/effect/turf_decal/siding/dark{ dir = 8 @@ -11989,12 +12106,16 @@ dir = 1 }, /area/station/ai_monitored/turret_protected/aisat_interior) -"dBP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ +"dCg" = ( +/obj/effect/turf_decal/arrows/red{ + dir = 4; + pixel_x = -15 + }, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/closed/wall, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "dCj" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/green/filled/mid_joiner, @@ -12014,11 +12135,6 @@ }, /turf/open/floor/glass, /area/station/maintenance/starboard/fore) -"dCI" = ( -/obj/structure/ladder, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "dCY" = ( /obj/machinery/door/firedoor, /turf/open/floor/engine/hull/air, @@ -12035,28 +12151,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"dDs" = ( -/obj/structure/sign/poster/official/moth_delam/directional/east, -/obj/item/toy/plush/moth{ - name = "Morffeus"; - pixel_x = 2; - pixel_y = 10 - }, -/obj/item/toy/plush/moth{ - name = "Sporg Asbord"; - pixel_x = 2 - }, -/obj/item/toy/plush/moth{ - name = "Moff #4"; - pixel_x = -13; - pixel_y = 7 - }, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "dDL" = ( /obj/structure/lattice, /turf/open/space/openspace, @@ -12071,6 +12165,10 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/brig) +"dDV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "dDX" = ( /obj/machinery/camera/autoname/directional/south, /turf/open/floor/wood, @@ -12088,16 +12186,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/commons/toilet/auxiliary) -"dEr" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "dEs" = ( /obj/structure/railing{ dir = 8 @@ -12143,6 +12231,12 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/wood/large, /area/station/service/kitchen) +"dEW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "dEX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, @@ -12206,6 +12300,14 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"dFY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/cigbutt, +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "dFZ" = ( /obj/effect/turf_decal/siding/red, /turf/open/floor/wood, @@ -12277,19 +12379,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/eighties, /area/station/maintenance/starboard/fore) -"dGT" = ( +"dGS" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/effect/landmark/start/assistant, -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/machinery/camera/directional/north{ + c_tag = "Engineering - Shared Storage" }, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/area/station/engineering/lobby) "dHb" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, @@ -12298,13 +12399,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"dHc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "dHh" = ( /obj/machinery/door/airlock{ name = "Emergency Storage" @@ -12343,6 +12437,21 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"dHC" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight, +/obj/item/pipe_dispenser, +/obj/item/analyzer, +/obj/item/storage/toolbox/mechanical, +/obj/item/pipe_dispenser, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/item/pipe_dispenser{ + pixel_y = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "dHK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12386,16 +12495,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"dID" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Testing Room" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "dIM" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor/auto{ @@ -12425,13 +12524,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/cafeteria) -"dJx" = ( -/obj/machinery/power/apc/auto_name/directional/north, +"dJn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"dJt" = ( /obj/structure/cable, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/washing_machine, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "dJB" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /obj/machinery/door/poddoor/shutters/preopen{ @@ -12440,6 +12549,19 @@ }, /turf/open/floor/plating, /area/station/medical/psychology) +"dJC" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Bay Shutters"; + id = "qm_cargobay"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "dJE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -12477,12 +12599,6 @@ /obj/item/cigbutt, /turf/open/floor/wood, /area/station/commons/dorms) -"dKo" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "dKq" = ( /obj/structure/mirror/directional/north, /obj/structure/sink/directional/south, @@ -12567,13 +12683,6 @@ "dKN" = ( /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"dKQ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "To Space Cooler" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "dKT" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -12583,11 +12692,14 @@ }, /turf/open/floor/iron/textured, /area/station/cargo/storage) -"dLl" = ( -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) +"dLb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "dLo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12653,14 +12765,15 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating/airless, /area/station/maintenance/starboard/lesser) -"dMK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 +"dMJ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 10 }, -/obj/structure/frame/machine/secured, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "dMM" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -12683,25 +12796,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"dNb" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_x = 26 - }, -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_x = 23; - pixel_y = 11 - }, -/obj/machinery/button/door/directional/west{ - id = "transitlockdown"; - name = "Transit Tube Lockdown"; - pixel_x = 23; - pixel_y = -10 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "dNc" = ( /obj/item/kirbyplants/random, /obj/machinery/power/apc/auto_name/directional/north, @@ -12790,6 +12884,11 @@ /obj/machinery/modular_computer/preset/civilian, /turf/open/floor/iron/dark/smooth_large, /area/station/science/explab) +"dNX" = ( +/obj/machinery/power/supermatter_crystal/engine, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "dNZ" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -12817,6 +12916,11 @@ /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"dOl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing, +/turf/open/openspace, +/area/station/engineering/break_room) "dOm" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -12827,13 +12931,6 @@ }, /turf/open/openspace, /area/station/commons/fitness/recreation) -"dOn" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "dOq" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor, @@ -12846,13 +12943,6 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) -"dOC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "dOG" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -12890,12 +12980,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"dPD" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "dPP" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/disposalpipe/trunk{ @@ -12906,6 +12990,10 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"dPQ" = ( +/obj/structure/railing, +/turf/open/openspace, +/area/station/engineering/storage_shared) "dPR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -12975,13 +13063,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/science/robotics) -"dRo" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "dRU" = ( /obj/structure/table/wood, /obj/effect/spawner/random/maintenance, @@ -13033,21 +13114,6 @@ /obj/structure/ladder, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"dSD" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/engineering{ - name = "Engine Room" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/iron/freezer, -/area/station/engineering/lobby) "dSG" = ( /obj/structure/cable, /obj/effect/decal/cleanable/blood/oil/slippery, @@ -13082,14 +13148,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/lesser) -"dTn" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/camera/autoname/directional/west, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "dTo" = ( /obj/structure/chair/pew{ dir = 8 @@ -13153,10 +13211,6 @@ /obj/structure/railing, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) -"dUE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "dUG" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -13176,6 +13230,10 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) +"dUH" = ( +/obj/machinery/vending/cola/pwr_game, +/turf/open/floor/eighties, +/area/station/engineering/lobby) "dUN" = ( /obj/machinery/door/poddoor/shutters/window{ dir = 4; @@ -13220,6 +13278,14 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) +"dVe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dVm" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13283,6 +13349,12 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"dWg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "dWi" = ( /obj/machinery/door/airlock/maintenance{ name = "Medbay Maintenance" @@ -13366,14 +13438,6 @@ /obj/machinery/vending/cigarette, /turf/open/floor/engine/hull, /area/space/nearstation) -"dXl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 5 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "dXm" = ( /obj/structure/table, /obj/item/clothing/mask/gas{ @@ -13474,6 +13538,12 @@ }, /turf/open/floor/iron, /area/station/science/research) +"dXY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "dYa" = ( /obj/machinery/requests_console/directional/north{ department = "Chapel"; @@ -13506,18 +13576,16 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/openspace, /area/station/hallway/primary/central) +"dYy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "dYB" = ( /obj/machinery/computer/mechpad, /turf/open/floor/iron/smooth, /area/station/science/robotics) -"dYN" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/purple, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/science/lab) "dYY" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -13548,10 +13616,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) -"dZq" = ( -/obj/structure/broken_flooring/side/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "dZs" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/fluff/paper/stack{ @@ -13675,6 +13739,14 @@ "eap" = ( /turf/closed/wall, /area/station/hallway/secondary/entry) +"eas" = ( +/obj/machinery/wall_healer/directional/east, +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/medical) "eaw" = ( /obj/effect/turf_decal/siding/brown, /obj/effect/turf_decal/siding/brown/corner{ @@ -13729,6 +13801,15 @@ "eaV" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) +"eaX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "ebf" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -13759,6 +13840,13 @@ /obj/item/canvas/twentythree_twentythree, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"ebD" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "ebL" = ( /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark/textured_corner, @@ -13840,6 +13928,7 @@ }, /obj/effect/landmark/start/hangover, /obj/effect/spawner/random/trash/graffiti, +/obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "ecC" = ( @@ -13926,6 +14015,14 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"edu" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "edz" = ( /obj/effect/turf_decal/plaque{ icon_state = "L11" @@ -13947,11 +14044,37 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) +"edY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson{ + pixel_y = 8 + }, +/obj/item/clothing/glasses/meson{ + pixel_y = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "eeb" = ( /obj/structure/chair/greyscale, /obj/effect/landmark/start/hangover, /turf/open/floor/glass/reinforced, /area/station/hallway/secondary/construction) +"eed" = ( +/obj/machinery/computer/atmos_control/carbon_tank, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "een" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -13973,6 +14096,13 @@ /obj/effect/landmark/start/depsec/science, /turf/open/openspace, /area/station/security/checkpoint/science) +"eet" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "eeA" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -13997,12 +14127,6 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"eeP" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "efh" = ( /obj/item/cigbutt{ pixel_x = -9; @@ -14071,11 +14195,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) -"efP" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/directional/north, -/obj/machinery/airalarm/directional/north, -/turf/open/openspace, +"efZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/station/engineering/atmos/project) "ega" = ( /obj/effect/spawner/random/maintenance, @@ -14126,6 +14248,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/hallway/primary/central) +"egC" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "egD" = ( /obj/structure/table/reinforced, /turf/open/floor/engine/vacuum, @@ -14190,10 +14318,6 @@ }, /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/lesser) -"ehR" = ( -/obj/effect/spawner/structure/electrified_grille, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "ehX" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -14237,13 +14361,6 @@ }, /turf/open/floor/wood/large, /area/station/service/library) -"eig" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/turf/open/openspace, -/area/station/engineering/atmos/project) "eij" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -14279,6 +14396,13 @@ "ejo" = ( /turf/closed/wall, /area/station/science/xenobiology/hallway) +"ejA" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "ejP" = ( /obj/effect/turf_decal/siding/dark{ dir = 6 @@ -14306,15 +14430,6 @@ /obj/effect/turf_decal/tile/dark/full, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) -"ejW" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) "ejY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14384,6 +14499,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"ekY" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "eld" = ( /obj/machinery/vending/coffee, /obj/structure/disposalpipe/segment{ @@ -14604,6 +14728,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"enK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "enN" = ( /obj/structure/urinal/directional/east, /obj/effect/decal/cleanable/dirt/dust, @@ -14712,14 +14841,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"epX" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/table/glass, -/obj/item/storage/medkit/regular, -/obj/structure/cable, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/medical) "epY" = ( /obj/structure/plaque/static_plaque/golden/commission/efficiency{ pixel_y = 32 @@ -14758,6 +14879,10 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/transfer) +"eqm" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "eqp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/power/apc/auto_name/directional/west, @@ -14782,21 +14907,19 @@ }, /turf/open/floor/engine/hull/air, /area/station/maintenance/port/aft) +"eqU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "eqV" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"erh" = ( -/obj/structure/lattice/catwalk, -/obj/structure/table/glass, -/obj/item/phone{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/machinery/light/directional/south, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "erj" = ( /obj/structure/stairs/south, /turf/open/floor/iron/stairs{ @@ -14874,20 +14997,25 @@ }, /turf/open/openspace, /area/station/service/library) -"erQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "esb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/security/medical) +"esk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "esu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/burnt_floor, @@ -14982,19 +15110,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) -"euA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/closet/crate/hydroponics, -/obj/effect/spawner/random/food_or_drink/plant_produce, -/obj/effect/spawner/random/food_or_drink/seed_flowers, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "euD" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -15015,11 +15130,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/tile, /area/station/security/detectives_office/private_investigators_office) -"euS" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/directional/north, -/turf/open/openspace, -/area/station/engineering/atmos/project) "eva" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/west, @@ -15052,6 +15162,13 @@ /obj/structure/hedge, /turf/open/floor/wood/large, /area/station/service/library) +"evv" = ( +/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped/layer5{ + dir = 8; + name = "air mixer" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "evC" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 8 @@ -15063,6 +15180,14 @@ dir = 8 }, /area/station/hallway/secondary/exit/departure_lounge) +"evH" = ( +/obj/structure/broken_flooring/singular/directional/east, +/obj/machinery/space_heater, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "evO" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -15103,6 +15228,26 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) +"ewm" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored{ + cable_layer = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 6 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"ewx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/item/weldingtool/empty{ + pixel_x = -5; + pixel_y = -6 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "ewA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15126,11 +15271,6 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"ewW" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "ewY" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -15162,6 +15302,9 @@ dir = 1 }, /obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/science/lab) "exM" = ( @@ -15221,12 +15364,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/security/prison) -"eyJ" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/engineering/atmos/upper) "eza" = ( /obj/structure/lattice/catwalk, /obj/structure/ladder, @@ -15246,6 +15383,16 @@ }, /turf/open/floor/iron/dark/textured, /area/station/engineering/supermatter/room) +"ezE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) "ezL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -15291,17 +15438,6 @@ }, /turf/open/openspace, /area/station/engineering/lobby) -"eAe" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty{ - pixel_x = -9; - pixel_y = 9 - }, -/obj/item/stack/sheet/glass/fifty{ - pixel_y = 13 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "eAg" = ( /obj/structure/table/wood, /obj/item/clipboard{ @@ -15375,6 +15511,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"eBf" = ( +/obj/machinery/meter, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "eBt" = ( /obj/structure/tank_dispenser/oxygen{ pixel_x = -1; @@ -15423,25 +15567,6 @@ /obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/iron/checker, /area/station/maintenance/hallway/abandoned_recreation) -"eCn" = ( -/obj/structure/cable, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/engineering/main) -"eCp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "eCu" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -15473,11 +15598,6 @@ /obj/effect/spawner/random/exotic/technology, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"eCN" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/air_sensor/air_tank, -/turf/open/floor/engine/air, -/area/station/engineering/main) "eCO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/fluff/paper/stack{ @@ -15493,13 +15613,6 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/construction/storage_wing) -"eCW" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics - Air Supply"; - name = "atmospherics camera" - }, -/turf/open/floor/engine/air, -/area/station/engineering/main) "eDj" = ( /obj/machinery/camera/directional/north{ c_tag = "AI Upload Chamber - Upper"; @@ -15522,19 +15635,6 @@ /obj/effect/landmark/start/detective, /turf/open/floor/carpet, /area/station/security/detectives_office) -"eDt" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) -"eDv" = ( -/obj/machinery/meter, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "eDO" = ( /obj/machinery/telecomms/bus/preset_four, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -15579,6 +15679,17 @@ /obj/structure/closet/crate/coffin, /turf/open/floor/plating, /area/station/maintenance/port) +"eEW" = ( +/obj/machinery/light/directional/north, +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/openspace, +/area/station/engineering/atmos/project) +"eFm" = ( +/obj/structure/closet/radiation, +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "eFq" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters" @@ -15631,6 +15742,17 @@ }, /turf/open/openspace, /area/station/command/corporate_showroom) +"eGp" = ( +/obj/machinery/computer/station_alert{ + dir = 1 + }, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) +"eGq" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/camera/autoname/directional/east, +/turf/open/openspace, +/area/station/engineering/break_room) "eGs" = ( /obj/structure/closet/crate/wooden/toy, /obj/machinery/light/directional/south, @@ -15651,6 +15773,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"eGE" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "eGM" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -15676,14 +15805,6 @@ /obj/item/reagent_containers/cup/bottle/morphine, /turf/open/floor/iron/dark/smooth_large, /area/station/security/office) -"eHe" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/suit_storage_unit/ce, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "eHg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15695,13 +15816,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"eHh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "eHu" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -15816,6 +15930,12 @@ /obj/effect/landmark/carpspawn, /turf/open/misc/asteroid/airless, /area/space/nearstation) +"eIz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "eIJ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, @@ -15843,6 +15963,19 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) +"eJw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "N2 Multideck Adapter"; + dir = 8 + }, +/obj/machinery/meter{ + name = "N2 meter" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "eJX" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -15861,26 +15994,12 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) -"eKa" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "eKc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"eKe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "eKh" = ( /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 4 @@ -15890,10 +16009,43 @@ }, /turf/open/floor/iron/dark, /area/station/medical/cryo) -"eKk" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter) +"eKF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/clothing/shoes/magboots{ + desc = "Magnetic boots, for the solar enthusiasts. Idential to a regular magboot in everything but soul."; + name = "Solars' Magboots"; + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 4; + pixel_y = 0 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/item/crowbar, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/gloves/color/yellow{ + pixel_x = 0; + pixel_y = 3 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "eKH" = ( /obj/structure/lattice/catwalk, /obj/structure/table/reinforced, @@ -15909,6 +16061,11 @@ }, /turf/open/openspace, /area/station/medical/storage) +"eKL" = ( +/obj/machinery/suit_storage_unit/ce, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "eKW" = ( /obj/structure/railing, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -15916,16 +16073,6 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) -"eLa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "eLc" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -15940,12 +16087,17 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron/dark/smooth_large, /area/station/security/lockers) -"eLk" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/west, -/obj/effect/spawner/random/clothing/gloves, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) +"eLh" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmos/project) "eLl" = ( /obj/machinery/door/airlock/command{ name = "Captain's Office" @@ -15957,6 +16109,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"eLp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) +"eLK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/siding/red, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "eLU" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -15995,16 +16158,6 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white/side, /area/station/hallway/primary/aft) -"eMj" = ( -/obj/machinery/computer/atmos_control/oxygen_tank{ - dir = 8 - }, -/obj/structure/railing{ - dir = 5 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "eMk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16017,6 +16170,12 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) +"eMo" = ( +/obj/structure/table, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/sign/departments/aisat/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "eME" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -16038,28 +16197,6 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/port) -"eNk" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/table, -/obj/item/folder/yellow{ - pixel_x = 4 - }, -/obj/item/pen, -/obj/structure/cable, -/obj/item/airlock_painter, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) -"eNm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) -"eNx" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "eNz" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -16228,12 +16365,24 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) +"eOM" = ( +/obj/structure/broken_flooring/corner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "eOS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/south, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"eOY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "ePm" = ( /obj/structure/rack, /obj/item/radio{ @@ -16268,6 +16417,13 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"ePX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "eQg" = ( /obj/effect/spawner/random/vending/snackvend, /obj/machinery/firealarm/directional/east, @@ -16311,6 +16467,21 @@ "eQF" = ( /turf/open/floor/iron, /area/station/commons/storage/primary) +"eQO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/machinery/light/directional/west, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "eRb" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -16394,15 +16565,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) -"eRF" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/radio/intercom/directional/north, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/turf/open/floor/iron, -/area/station/engineering/lobby) "eRG" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine/hull, @@ -16456,16 +16618,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/construction/storage_wing) +"eSh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/closet/radiation, +/turf/open/floor/iron, +/area/station/engineering/lobby) "eSm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/cytology) -"eSu" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "eSw" = ( /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/trimline/red/filled/line, @@ -16492,6 +16655,13 @@ /obj/effect/mapping_helpers/mail_sorting/supply/disposals, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"eSO" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "eSV" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/siding/brown/corner, @@ -16509,13 +16679,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/lobby) -"eTb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "eTe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16533,6 +16696,16 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/medical) +"eTt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/openspace, +/area/station/engineering/atmos/project) "eTD" = ( /obj/structure/closet/secure_closet/chief_medical, /turf/open/floor/wood, @@ -16561,13 +16734,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/cafeteria) -"eTS" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 - }, -/turf/open/space/openspace, -/area/space/nearstation) "eTY" = ( /turf/open/floor/iron/freezer, /area/station/maintenance/port) @@ -16594,6 +16760,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"eUl" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "eUr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16681,6 +16855,12 @@ }, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"eVu" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "eVx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood/corner{ @@ -16689,13 +16869,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"eVD" = ( -/obj/structure/closet/emcloset/anchored, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 4 +"eVy" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "eVF" = ( /obj/machinery/door/airlock/wood{ name = "Psychology Office" @@ -16720,14 +16899,10 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/lawoffice) -"eWp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/closet/secure_closet/atmospherics, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"eWq" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/project) "eWt" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/portable_atmospherics/canister/oxygen, @@ -16765,6 +16940,16 @@ }, /turf/open/floor/iron/dark, /area/station/science/lobby) +"eXf" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable/layer1, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "eXp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -16849,6 +17034,12 @@ /obj/structure/showcase/machinery/tv/broken, /turf/open/floor/plating, /area/station/maintenance/port) +"eYS" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "eZd" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/vending/coffee{ @@ -16898,13 +17089,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron, /area/station/maintenance/starboard/central) -"eZI" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/turf/open/openspace, -/area/station/engineering/atmos/project) "eZL" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ @@ -16940,15 +17124,22 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) -"faR" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/engine_access, -/obj/effect/mapping_helpers/airalarm/link{ - chamber_id = "engine" +"fav" = ( +/obj/machinery/button/door/directional/north{ + id = "SM_Outside_shutters"; + name = "Emitter Room Shutters" }, -/obj/effect/mapping_helpers/airalarm/tlv_no_checks, -/turf/open/floor/engine, -/area/station/engineering/supermatter) +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"faw" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Air to Distro" + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "fbk" = ( /turf/open/floor/plating, /area/station/engineering/transit_tube) @@ -16970,6 +17161,10 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) +"fbu" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos/upper) "fbv" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -17048,6 +17243,15 @@ "fcK" = ( /turf/closed/wall/r_wall, /area/station/security/detectives_office/private_investigators_office) +"fcT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "fdb" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, @@ -17070,14 +17274,6 @@ /obj/structure/window/reinforced/plasma/spawner/directional/north, /turf/open/space/basic, /area/space/nearstation) -"fdi" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/structure/sign/directions/science/directional/south, -/turf/open/floor/iron, -/area/station/science/lab) "fdl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17156,33 +17352,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/ai) -"feO" = ( -/obj/item/pickaxe{ - pixel_x = -5; - pixel_y = -7 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "feR" = ( /obj/effect/spawner/random/trash/grime, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"ffg" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, +"ffj" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) -"ffm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ffp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -17193,12 +17378,6 @@ "ffr" = ( /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/fore) -"ffs" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "ffC" = ( /obj/machinery/atmospherics/components/trinary/mixer/flipped{ dir = 8 @@ -17272,6 +17451,10 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/transfer) +"fgx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "fgz" = ( /obj/machinery/door/airlock{ name = "Law Office" @@ -17281,6 +17464,13 @@ /obj/effect/landmark/navigate_destination/lawyer, /turf/open/floor/wood, /area/station/service/lawoffice) +"fgG" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "fgH" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, @@ -17306,6 +17496,11 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) +"fhd" = ( +/obj/machinery/shieldgen, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/engine, +/area/station/engineering/break_room) "fhf" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -17314,6 +17509,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/range) +"fhg" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + filter_type = list(/datum/gas/nitrogen) + }, +/obj/effect/turf_decal/stripes/red/box, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "fhj" = ( /obj/machinery/camera/autoname/directional/west, /turf/open/openspace, @@ -17344,10 +17546,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"fhD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "fhF" = ( /obj/effect/turf_decal/siding/dark/corner{ dir = 8 @@ -17384,6 +17582,14 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/dark, /area/station/science/cytology) +"fii" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "fik" = ( /obj/structure/rack, /obj/item/cardboard_cutout{ @@ -17472,16 +17678,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"fjC" = ( -/obj/structure/closet/crate/secure/engineering{ - name = "Advanced Materials" - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/stack/sheet/plasteel, -/turf/open/floor/engine, -/area/station/engineering/main) "fjP" = ( /obj/structure/lattice/catwalk, /obj/item/clothing/accessory/clown_enjoyer_pin{ @@ -17597,6 +17793,12 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"fkR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) "fkX" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -17615,6 +17817,10 @@ /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"flo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "flD" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, @@ -17698,20 +17904,17 @@ /obj/structure/railing, /turf/open/openspace, /area/station/commons/dorms) -"fmR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/engineering{ - name = "Engine Room" - }, -/obj/structure/disposalpipe/segment{ - dir = 2 +"fmO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) +"fmV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "fnm" = ( /obj/structure/cable, /turf/closed/wall, @@ -17770,6 +17973,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"fnY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "foj" = ( /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, @@ -17799,24 +18008,36 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/research) +"foH" = ( +/obj/effect/turf_decal/loading_area, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/disposal/incinerator) +"foJ" = ( +/obj/machinery/meter/monitored/distro_loop, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible/layer2{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) "foN" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/science/central) -"foP" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "foR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"foZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "fpe" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -17903,6 +18124,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/space_hut) +"fpM" = ( +/obj/structure/table, +/obj/machinery/firealarm/directional/west, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "fpN" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 @@ -17910,10 +18137,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull, /area/space/nearstation) -"fpZ" = ( -/obj/structure/closet/crate/trashcart/filled, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "fqc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18007,21 +18230,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) -"frd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/landmark/start/depsec/engineering, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) -"frg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "fro" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -18061,6 +18269,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"frJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "frK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18098,11 +18312,23 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"fsj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/directional/south, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "fso" = ( /obj/machinery/duct, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"fsw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "fsx" = ( /obj/machinery/door/airlock/public/glass{ name = "Science Store" @@ -18184,6 +18410,10 @@ }, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) +"ftG" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos/upper) "ftK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/fluff/paper/corner{ @@ -18252,6 +18482,12 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/glass, /area/station/hallway/secondary/entry) +"fuU" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/reagent_dispensers/foamtank, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "fuW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -18300,6 +18536,17 @@ }, /turf/open/floor/wood, /area/station/service/library) +"fvu" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "fvG" = ( /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/door/airlock/maintenance_hatch, @@ -18376,10 +18623,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/checker, /area/station/maintenance/port/aft) -"fwH" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "fwK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -18433,9 +18676,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) -"fxX" = ( -/turf/closed/wall, -/area/station/service/hydroponics/garden/abandoned) "fxY" = ( /obj/machinery/vending/cigarette, /obj/structure/disposalpipe/segment{ @@ -18570,6 +18810,41 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"fzl" = ( +/obj/structure/table, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -13; + pixel_y = 3 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_y = 4 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = 10; + pixel_y = 3 + }, +/obj/item/clothing/head/cone{ + pixel_x = -10; + pixel_y = -11 + }, +/obj/item/clothing/head/cone{ + pixel_x = -10; + pixel_y = -11 + }, +/obj/item/clothing/head/cone{ + pixel_x = -10; + pixel_y = -11 + }, +/obj/item/clothing/head/cone{ + pixel_x = -10; + pixel_y = -11 + }, +/obj/item/clothing/head/cone{ + pixel_x = -10; + pixel_y = -11 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "fzv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -18612,6 +18887,26 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"fzP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) +"fzS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/lobby) "fzT" = ( /obj/effect/turf_decal/siding/purple{ dir = 4 @@ -18652,16 +18947,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/corner{ +/obj/effect/turf_decal/trimline/purple/arrow_ccw{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"fAL" = ( -/obj/structure/cable/multilayer/multiz, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "fAV" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -18682,6 +18972,12 @@ }, /turf/open/floor/wood, /area/station/commons/lounge) +"fBh" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "fBm" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/dirt, @@ -18735,6 +19031,11 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"fBZ" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "fCe" = ( /obj/structure/ladder, /obj/structure/lattice/catwalk, @@ -18847,12 +19148,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/ordnance/storage) -"fEt" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "fEA" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/east, /obj/machinery/airalarm/directional/north, @@ -18862,21 +19157,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"fEH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) -"fEM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "fEO" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/decal/cleanable/dirt, @@ -18926,12 +19206,6 @@ /obj/item/surgical_drapes, /turf/open/floor/iron/white/textured_large, /area/station/medical/surgery) -"fFp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/obj/effect/landmark/start/atmospheric_technician, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "fFA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, @@ -19007,13 +19281,11 @@ /obj/structure/closet/secure_closet/chemical, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"fGA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"fGD" = ( +/obj/machinery/firealarm/directional/east, /obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/upper) "fGL" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -19075,6 +19347,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) +"fHk" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/turf/open/floor/eighties, +/area/station/engineering/lobby) "fHp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/showcase/machinery/oldpod{ @@ -19085,11 +19363,6 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/iron/white, /area/station/medical/abandoned) -"fHs" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) "fHv" = ( /obj/item/paint/white{ pixel_x = 11; @@ -19149,16 +19422,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) -"fIL" = ( -/obj/structure/closet/secure_closet/atmospherics, -/obj/item/book/manual/wiki/atmospherics, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "fIN" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -19185,11 +19448,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"fIP" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "fJc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ dir = 8 @@ -19235,6 +19493,12 @@ "fJL" = ( /turf/closed/wall/r_wall, /area/station/security/checkpoint/engineering) +"fJN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "fKi" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19248,6 +19512,14 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/hallway/secondary/construction) +"fKD" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "fKJ" = ( /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ dir = 4 @@ -19271,12 +19543,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"fLj" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "fLq" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/openspace, @@ -19366,22 +19632,19 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/wood, /area/station/maintenance/hallway/abandoned_recreation) -"fMm" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "fMu" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 }, /turf/open/floor/iron, /area/station/engineering/lobby) +"fMC" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "fMS" = ( /obj/effect/turf_decal/siding/dark/inner_corner{ dir = 8 @@ -19511,20 +19774,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"fOx" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"fOX" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"fOM" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine, +/area/station/engineering/main) "fPf" = ( /obj/effect/landmark/event_spawn, /turf/open/openspace, @@ -19542,6 +19795,17 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/carpet, /area/station/service/bar) +"fPi" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) +"fPl" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "fPy" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -19552,6 +19816,10 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"fPA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos/upper) "fPD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -19610,13 +19878,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/office) -"fQc" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/multiz/orange/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "fQp" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload) @@ -19640,6 +19901,14 @@ /obj/machinery/vending/games, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"fQR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "fRd" = ( /obj/machinery/disposal/bin/tagger, /obj/machinery/button/door/directional/north{ @@ -19682,13 +19951,6 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"fRh" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "fRE" = ( /obj/machinery/computer/security/qm{ dir = 4 @@ -19777,14 +20039,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"fSw" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "fSF" = ( /obj/structure/sign/poster/official/random/directional/north, /obj/effect/turf_decal/siding/dark, @@ -19792,12 +20046,6 @@ dir = 4 }, /area/station/ai_monitored/turret_protected/aisat_interior) -"fSI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "fSO" = ( /obj/structure/lattice/catwalk, /obj/structure/light_construct/directional/east{ @@ -19805,28 +20053,12 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) -"fSP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "fSW" = ( /obj/machinery/netpod, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/poster/contraband/shamblers_juice/directional/north, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/bitrunning/den) -"fTc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "fTf" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, @@ -19872,6 +20104,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/service/cafeteria) +"fTF" = ( +/obj/structure/sign/warning/radiation, +/turf/closed/wall/r_wall, +/area/station/engineering/main) "fTM" = ( /obj/structure/chair, /obj/effect/turf_decal/tile/dark_blue{ @@ -19889,10 +20125,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat/foyer) -"fTX" = ( -/obj/effect/turf_decal/stripes/full, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter) "fTZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19906,11 +20138,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/large, /area/station/hallway/primary/central) -"fUc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "fUd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -19954,21 +20181,6 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fUF" = ( -/obj/structure/table, -/obj/item/food/cheese/firm_cheese_slice{ - pixel_x = 10; - pixel_y = 7 - }, -/obj/item/flashlight/lantern{ - pixel_y = 7 - }, -/obj/item/food/moth_cheese_cakes{ - pixel_x = -6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "fUJ" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/wood, @@ -20003,6 +20215,12 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"fVd" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) "fVh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20031,6 +20249,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"fVn" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "fVq" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/warning{ dir = 1 @@ -20094,6 +20316,14 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) +"fVU" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = 5; + pixel_y = 9 + }, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "fVX" = ( /obj/structure/table, /obj/machinery/door/poddoor/shutters/preopen{ @@ -20103,6 +20333,14 @@ }, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) +"fWc" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots, +/obj/machinery/status_display/ai/directional/south, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/iron, +/area/station/commons/dorms) "fWt" = ( /obj/effect/turf_decal/trimline/yellow/arrow_ccw{ dir = 4 @@ -20115,6 +20353,11 @@ dir = 4 }, /area/station/hallway/primary/fore) +"fWz" = ( +/obj/machinery/holopad, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "fWG" = ( /obj/structure/cable/layer3, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20124,15 +20367,6 @@ }, /turf/open/floor/iron/checker, /area/station/ai_monitored/command/storage/satellite) -"fWH" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/disposal/bin, -/obj/structure/cable, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "fWI" = ( /obj/structure/girder, /obj/effect/spawner/random/structure/grille, @@ -20189,6 +20423,10 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) +"fXp" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "fXB" = ( /obj/machinery/status_display/evac/directional/north, /turf/open/openspace, @@ -20249,6 +20487,18 @@ /obj/effect/turf_decal/tile/brown/full, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) +"fYq" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Cooling Loop Bypass" + }, +/obj/effect/turf_decal/trimline/neutral, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"fYt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "fYu" = ( /obj/structure/bodycontainer/morgue/beeper_off, /obj/machinery/camera/autoname/directional/west{ @@ -20325,13 +20575,13 @@ }, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"fZz" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix Bypass" +"fZB" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/machinery/modular_computer/preset/engineering{ + dir = 8 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "fZD" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 5 @@ -20379,6 +20629,12 @@ }, /turf/open/water/jungle, /area/station/science/genetics) +"gaf" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 1 + }, +/turf/open/floor/engine/hull/reinforced, +/area/space/nearstation) "gaj" = ( /obj/effect/turf_decal/trimline/red, /obj/effect/turf_decal/trimline/red/mid_joiner{ @@ -20418,6 +20674,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) +"gav" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "gaE" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/smooth_large, @@ -20482,12 +20743,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/commons/storage/primary) -"gbv" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/structure/sign/poster/official/work_for_a_future/directional/south, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/science/research) "gby" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20527,19 +20782,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/prison/mess) -"gbS" = ( -/obj/structure/sign/clock/directional/north, -/turf/open/floor/eighties, -/area/station/engineering/break_room) -"gbT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "gcc" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -20641,14 +20883,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) -"gdb" = ( -/obj/structure/lattice/catwalk, -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/landmark/start/atmospheric_technician, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "gde" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/cable, @@ -20663,6 +20897,22 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"gdu" = ( +/obj/item/toy/plush/moth{ + name = "Stockpile Sammy"; + pixel_x = -7; + pixel_y = 11 + }, +/obj/item/toy/plush/moth{ + name = "General Kill Light"; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "gdG" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/dark, @@ -20674,6 +20924,10 @@ }, /turf/open/openspace, /area/station/maintenance/starboard/aft) +"gef" = ( +/obj/structure/chair/office, +/turf/open/floor/iron, +/area/station/engineering/lobby) "gei" = ( /obj/structure/railing{ dir = 4 @@ -20685,6 +20939,15 @@ /obj/structure/railing/corner, /turf/open/floor/engine/hull, /area/space/nearstation) +"gex" = ( +/obj/structure/railing, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/grass, +/area/station/hallway/primary/starboard) "geA" = ( /obj/effect/turf_decal/siding/red/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20699,6 +20962,19 @@ /obj/machinery/door/poddoor/incinerator_ordmix, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"geE" = ( +/obj/structure/closet/crate/secure/engineering{ + name = "Advanced Materials" + }, +/obj/item/stack/sheet/plasteel, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "geK" = ( /turf/open/floor/iron, /area/station/cargo/storage) @@ -20739,6 +21015,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"gfs" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/cable, +/obj/machinery/computer/turbine_computer, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "gft" = ( /obj/item/paint/yellow{ pixel_x = 8; @@ -20850,6 +21137,19 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"ggU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"ggW" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) +"ggX" = ( +/obj/structure/cable/multilayer/multiz, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "ghb" = ( /obj/machinery/light/directional/east, /turf/open/floor/glass/reinforced, @@ -20886,13 +21186,6 @@ }, /turf/open/openspace, /area/station/hallway/primary/central) -"ghB" = ( -/obj/item/wrench, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ghO" = ( /obj/item/coin/antagtoken, /obj/item/coin/antagtoken{ @@ -21001,14 +21294,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"giv" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/construction, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering, -/turf/open/floor/iron, -/area/station/engineering/break_room) +"gix" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "giB" = ( /obj/machinery/camera/directional/east{ c_tag = "Secure Tech Storage" @@ -21033,6 +21322,9 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/glass, /area/station/maintenance/starboard/fore) +"gjb" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/hallway) "gjn" = ( /obj/item/kirbyplants/random, /obj/machinery/airalarm/directional/south, @@ -21130,6 +21422,21 @@ /obj/effect/landmark/start/botanist, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"gkP" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "CO2 to Port" + }, +/obj/effect/turf_decal/tile/dark/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) +"gkW" = ( +/obj/machinery/shower/directional/west, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/station/engineering/main) "gla" = ( /obj/structure/railing/corner{ dir = 4 @@ -21169,14 +21476,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/aisat/exterior) -"glw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "glz" = ( /turf/open/floor/iron/chapel{ dir = 1 @@ -21190,6 +21489,13 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/wood, /area/station/medical/medbay/central) +"glJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "glL" = ( /turf/closed/wall/mineral/plastitanium, /area/space/nearstation) @@ -21220,6 +21526,53 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"gmd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/stack/sheet/plasteel{ + amount = 10; + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/stack/rods/fifty{ + pixel_x = 12; + pixel_y = 2 + }, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/stack/sheet/rglass{ + amount = 30; + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "gme" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -21246,6 +21599,11 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/commons/dorms) +"gmm" = ( +/obj/machinery/air_sensor/plasma_tank, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos/upper) "gmt" = ( /obj/item/clothing/head/wig/random, /obj/effect/mapping_helpers/broken_floor, @@ -21262,9 +21620,6 @@ }, /turf/open/openspace, /area/station/construction/storage_wing) -"gmz" = ( -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "gmA" = ( /obj/structure/mirror/directional/north, /obj/structure/sink/directional/south, @@ -21309,16 +21664,6 @@ /obj/structure/window/reinforced/plasma/spawner/directional/west, /turf/open/space/openspace, /area/space/nearstation) -"gni" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "gnk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_large, @@ -21486,6 +21831,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) +"goM" = ( +/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "goN" = ( /obj/machinery/light/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -21503,6 +21855,10 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"goU" = ( +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "goW" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, @@ -21514,6 +21870,24 @@ /obj/machinery/smoke_machine, /turf/open/floor/wood, /area/station/service/theater) +"gph" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/mail_sorting/engineering/ce_office, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) +"gpk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "gps" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21545,6 +21919,15 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"gpO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Bay Shutters"; + id = "qm_cargobay"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "gpU" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -21558,6 +21941,13 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/janitor) +"gqb" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "gqh" = ( /obj/item/cigbutt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -21614,13 +22004,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"gqU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 6 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "grb" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/plating, @@ -21635,6 +22018,13 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) +"gro" = ( +/obj/structure/cable/layer1, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "grr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -21647,12 +22037,6 @@ /obj/item/clothing/mask/joy, /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/aft) -"grE" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "grJ" = ( /obj/item/kirbyplants/random, /obj/machinery/airalarm/directional/west, @@ -21679,6 +22063,14 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/openspace, /area/station/medical/chemistry) +"gsL" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "gtd" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) @@ -21714,6 +22106,9 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) +"gtw" = ( +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "gty" = ( /obj/structure/railing, /obj/effect/turf_decal/trimline/purple/filled/line, @@ -21809,15 +22204,12 @@ }, /turf/open/floor/iron, /area/station/science/research) -"gux" = ( -/obj/machinery/power/terminal{ - dir = 8 +"guy" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) +/area/station/engineering/break_room) "guD" = ( /obj/effect/turf_decal/siding/dark{ dir = 1 @@ -21861,12 +22253,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) -"gvc" = ( -/obj/machinery/atmospherics/components/binary/pump/off/orange/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "gvd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -21902,6 +22288,12 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/iron/dark/smooth_large, /area/station/science/ordnance/storage) +"gvK" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/obj/structure/holosign/barrier/engineering, +/turf/open/openspace, +/area/station/engineering/atmos/project) "gvU" = ( /obj/machinery/plate_press, /obj/effect/turf_decal/stripes/line, @@ -21916,15 +22308,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"gwh" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/south, -/obj/machinery/power/energy_accumulator/tesla_coil/anchored, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 10 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "gwx" = ( /obj/machinery/door/airlock/external{ name = "MiniSat Space Access Airlock" @@ -22004,6 +22387,15 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"gym" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/station/engineering/main) "gyp" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/effect/turf_decal/stripes/corner, @@ -22063,10 +22455,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"gyV" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/fake_stairs/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) "gzh" = ( /obj/structure/closet/firecloset, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"gzm" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "gzr" = ( /obj/structure/railing{ dir = 4 @@ -22118,6 +22521,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) +"gAb" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron, +/area/station/engineering/lobby) "gAd" = ( /obj/structure/table, /obj/item/folder/white, @@ -22140,10 +22548,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) -"gAH" = ( -/obj/effect/turf_decal/caution, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"gAC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "gAI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22178,16 +22591,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/command/heads_quarters/cmo) -"gBc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "gBf" = ( /obj/structure/lattice/catwalk, /obj/item/stack/rods, @@ -22255,6 +22658,25 @@ }, /turf/open/openspace, /area/station/command/gateway) +"gBV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8; + pixel_x = -2 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/engineering/break_room) +"gBY" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) +"gCa" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 10 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "gCn" = ( /obj/structure/lattice, /obj/item/toy/figure/ninja{ @@ -22376,23 +22798,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"gEn" = ( -/obj/machinery/meter{ - name = "Plasma meter" - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "Plasma" - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "gEp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22414,14 +22819,6 @@ }, /turf/open/floor/carpet, /area/station/maintenance/starboard/lesser) -"gEJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "gEN" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -22431,6 +22828,28 @@ }, /turf/open/floor/engine/hull/reinforced/air, /area/station/ai_monitored/turret_protected/ai) +"gEZ" = ( +/obj/item/toy/cards/deck{ + pixel_y = 4 + }, +/obj/structure/table, +/obj/item/food/hotcrossbun{ + pixel_x = 10; + pixel_y = 12 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"gFa" = ( +/obj/structure/table/reinforced, +/obj/item/plant_analyzer, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "gFi" = ( /obj/structure/closet/secure_closet/research_director, /obj/item/clothing/head/soft/purple, @@ -22441,24 +22860,31 @@ /obj/structure/closet/emcloset, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"gFo" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/item/book/manual/wiki/engineering_construction{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_guide{ - pixel_x = -2 +"gFk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 }, -/obj/structure/rack, /turf/open/floor/iron, /area/station/engineering/lobby) +"gFm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/closed/wall, +/area/station/service/hydroponics/garden/abandoned) +"gFp" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "gFt" = ( /obj/machinery/smartfridge/organ, /obj/item/radio/intercom/directional/south, @@ -22488,11 +22914,6 @@ }, /turf/open/floor/iron/white/textured_large, /area/station/ai_monitored/turret_protected/aisat/foyer) -"gFR" = ( -/obj/structure/sign/clock/directional/east, -/obj/structure/ladder, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gFU" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -22662,6 +23083,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/glass/reinforced, /area/station/construction/storage_wing) +"gIn" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air, +/area/station/engineering/atmos/upper) "gIo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22701,12 +23126,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/openspace, /area/station/maintenance/starboard/fore) -"gJn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "gJp" = ( /obj/structure/lattice/catwalk, /obj/structure/ladder, @@ -22723,10 +23142,18 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"gJL" = ( -/obj/effect/decal/cleanable/plasma, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) +"gJT" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/meson, +/obj/item/geiger_counter, +/obj/item/clothing/head/utility/radiation, +/obj/item/clothing/suit/utility/radiation, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "gKa" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/dark_blue{ @@ -22753,12 +23180,17 @@ /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, /area/station/hallway/secondary/entry) -"gKq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 8 +"gKs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/machinery/camera/autoname/directional/north, +/obj/structure/table/reinforced, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "gKL" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, @@ -22826,13 +23258,6 @@ /obj/effect/mapping_helpers/requests_console/information, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"gLM" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "gLN" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/textured_large, @@ -22905,19 +23330,16 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/space/openspace, /area/space/nearstation) -"gMZ" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/stamp/head/hop{ - pixel_x = 8; - pixel_y = 4 +"gMP" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Testing Room" }, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hop) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/atmos/project) "gNf" = ( /obj/structure/light_construct/directional/east, /obj/effect/mapping_helpers/broken_floor, @@ -23027,6 +23449,11 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"gOE" = ( +/obj/machinery/atmospherics/components/unary/passive_vent, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "gOH" = ( /obj/structure/sink/kitchen/directional/west, /obj/machinery/light_switch/directional/east, @@ -23038,6 +23465,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/carpet, /area/station/ai_monitored/command/storage/eva) +"gOL" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "gOR" = ( /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, @@ -23061,19 +23494,13 @@ /obj/machinery/drone_dispenser, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) -"gPh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/disposalpipe/segment{ - dir = 4 +"gPj" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics - Nitrogen Cell"; + name = "atmospherics camera" }, -/obj/item/storage/bag/plants, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) +/turf/open/floor/engine/n2, +/area/station/engineering/atmos/upper) "gPu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23082,6 +23509,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"gPv" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "gPy" = ( /obj/machinery/computer/station_alert{ dir = 1 @@ -23095,16 +23528,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) -"gPD" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "gPE" = ( /obj/machinery/light/directional/west, /turf/open/openspace, @@ -23228,6 +23651,10 @@ }, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"gQW" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/engine, +/area/station/engineering/break_room) "gRn" = ( /obj/effect/turf_decal/siding/yellow{ dir = 8 @@ -23257,6 +23684,13 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"gRx" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/effect/turf_decal/delivery/white{ + color = "#ff6600" + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "gRB" = ( /obj/machinery/door/airlock/research{ name = "Research and Development Lab" @@ -23356,11 +23790,29 @@ /obj/effect/spawner/random/maintenance/no_decals, /turf/open/floor/engine/hull, /area/space/nearstation) +"gSS" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/directions/engineering/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "gSX" = ( /obj/machinery/plumbing/sender, /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull/air, /area/station/medical/chemistry) +"gSY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) "gTe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23370,6 +23822,18 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"gTm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/light/directional/north, +/obj/structure/rack, +/obj/item/lightreplacer{ + pixel_y = 7 + }, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "gTn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, @@ -23387,6 +23851,14 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/medbay/central) +"gTH" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = -3; + pixel_y = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "gTL" = ( /obj/machinery/door/airlock/public/glass{ name = "Circle Center" @@ -23421,15 +23893,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"gUg" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "gUh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23449,13 +23912,6 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/corporate_showroom) -"gUR" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "gVi" = ( /obj/structure/window/spawner/directional/west, /turf/open/floor/plating, @@ -23552,10 +24008,6 @@ }, /turf/open/openspace, /area/station/commons/fitness/recreation) -"gWx" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "gWA" = ( /obj/item/storage/box/shipping{ pixel_x = -11; @@ -23628,24 +24080,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/openspace, /area/station/maintenance/port) -"gXl" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/closet/firecloset, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/engineering/lobby) "gXG" = ( /turf/closed/wall, /area/station/science/robotics) -"gXJ" = ( -/obj/machinery/button/door/directional/north{ - dir = 4; - id = "SM_shutters"; - name = "Radiation Shutters"; - req_access = list("engineering") - }, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter) +"gXQ" = ( +/obj/structure/cable/multilayer/multiz, +/obj/structure/lattice/catwalk, +/turf/open/floor/plating, +/area/station/engineering/atmos/upper) "gXR" = ( /obj/machinery/atmospherics/components/binary/tank_compressor{ dir = 8 @@ -23682,12 +24124,6 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/ai) -"gYF" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "gYG" = ( /obj/machinery/atmospherics/pipe/multiz/dark/visible{ dir = 8 @@ -23819,6 +24255,10 @@ /obj/structure/bookcase/random, /turf/open/floor/wood, /area/station/maintenance/starboard/lesser) +"gZO" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos/upper) "gZT" = ( /obj/structure/table, /obj/item/book/manual/wiki/medicine{ @@ -23924,15 +24364,6 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"hbw" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "hbx" = ( /obj/structure/grille/broken, /obj/structure/lattice, @@ -23942,6 +24373,32 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"hbO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/tank/jetpack/oxygen{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"hbS" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"hcf" = ( +/obj/machinery/atmospherics/components/binary/crystallizer{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "hci" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23998,10 +24455,6 @@ }, /turf/open/floor/eighties, /area/station/maintenance/starboard/fore) -"hcT" = ( -/obj/effect/turf_decal/trimline/yellow/filled, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "hcZ" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -24065,6 +24518,15 @@ /obj/effect/turf_decal/trimline/yellow/warning, /turf/open/floor/engine/hull, /area/space/nearstation) +"heb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/banner/blue{ + inspiration_available = 0 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/eighties, +/area/station/maintenance/hallway/abandoned_recreation) "hei" = ( /obj/structure/chair{ dir = 8 @@ -24120,10 +24582,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/cargo/warehouse) -"hfN" = ( -/obj/machinery/light/directional/east, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "hfX" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/mapping_helpers/broken_floor, @@ -24137,10 +24595,6 @@ /obj/structure/light_construct/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"hgd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "hgm" = ( /obj/effect/turf_decal/siding/dark{ dir = 4 @@ -24222,11 +24676,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"hgJ" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "hgL" = ( /obj/machinery/vending/snack/orange, /turf/open/floor/wood, @@ -24332,6 +24781,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) +"hig" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "hik" = ( /obj/machinery/door/airlock{ id_tag = "Cabin3"; @@ -24339,6 +24795,16 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) +"hip" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "hiu" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/engine/hull/air, @@ -24380,13 +24846,12 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"hiW" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"hja" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "hjG" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -24593,11 +25058,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"hmR" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "hmT" = ( /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/structure/toilet{ @@ -24607,6 +25067,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/station/commons/dorms) +"hmX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "hmY" = ( /obj/effect/turf_decal/siding/brown{ dir = 6 @@ -24632,6 +25102,17 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"hng" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics - Air Supply"; + name = "atmospherics camera" + }, +/turf/open/floor/engine/air, +/area/station/engineering/atmos/upper) +"hnh" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "hni" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24648,6 +25129,12 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/security/prison) +"hns" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "hnt" = ( /obj/structure/table/wood, /obj/item/food/pie/cream{ @@ -24718,6 +25205,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/lesser) +"hnV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "hnZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -24741,20 +25234,6 @@ }, /turf/open/floor/wood/large, /area/station/service/library) -"hok" = ( -/obj/structure/table/glass, -/obj/item/radio/off{ - pixel_x = 6 - }, -/obj/item/phone{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "hoq" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -24776,6 +25255,13 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"hpe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) "hpk" = ( /obj/structure/lattice, /obj/machinery/camera/autoname/directional/south, @@ -24851,6 +25337,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"hql" = ( +/obj/effect/turf_decal/stripes/line, +/turf/closed/wall/r_wall, +/area/station/engineering/break_room) "hqr" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -24907,10 +25397,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) -"hra" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "hrh" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, @@ -24941,6 +25427,14 @@ "hrD" = ( /turf/open/openspace, /area/station/command/heads_quarters/hop) +"hsd" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "hsh" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance Access" @@ -24960,6 +25454,14 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/iron/white/textured_large, /area/station/science/robotics) +"hsz" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "hsB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/punching_bag, @@ -24967,6 +25469,14 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"hsI" = ( +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/engineering/main) "hsL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -24999,15 +25509,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) -"hti" = ( -/obj/structure/table/glass, -/obj/item/modular_computer/laptop/preset/civilian{ - pixel_y = 3 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"htc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "htm" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -25049,13 +25555,6 @@ /obj/structure/cable, /turf/open/openspace, /area/station/hallway/primary/central) -"htS" = ( -/obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "htV" = ( /obj/structure/transit_tube, /obj/structure/window/reinforced/spawner/directional/south, @@ -25096,6 +25595,13 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) +"hun" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/right, +/area/station/engineering/lobby) "huo" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -25152,6 +25658,12 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"hvS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "hwn" = ( /obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/plating, @@ -25208,19 +25720,6 @@ }, /turf/open/floor/wood, /area/station/service/theater) -"hwX" = ( -/obj/machinery/camera/autoname/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "hxa" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -25297,15 +25796,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, /area/station/cargo/storage) -"hxX" = ( -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "hyc" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron/chapel, @@ -25341,6 +25831,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_large, /area/station/medical/virology) +"hyo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "hyx" = ( /obj/effect/decal/cleanable/dirt, /obj/item/restraints/legcuffs/beartrap/prearmed, @@ -25510,41 +26009,12 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/dark, /area/station/science/lobby) -"hAJ" = ( -/obj/machinery/atmospherics/components/binary/pump/off{ - dir = 8; - name = "O2 To Port" - }, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "hAM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/medbay/central) -"hAQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"hBf" = ( -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "CO2" - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/meter{ - name = "C02 meter" - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "hBh" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -25558,27 +26028,14 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/central) -"hBj" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/obj/machinery/autolathe, -/obj/structure/sign/poster/official/do_not_question/directional/north, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) -"hBu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{ +"hBw" = ( +/obj/structure/railing{ dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"hBv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/catwalk_floor, -/area/station/engineering/main) +/area/station/engineering/atmos/upper) "hBy" = ( /obj/structure/flora/bush/pale/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -25630,6 +26087,9 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) +"hCg" = ( +/turf/open/floor/engine, +/area/station/engineering/break_room) "hCj" = ( /obj/effect/spawner/random/entertainment/arcade, /obj/structure/sign/poster/party_game/directional/north, @@ -25651,15 +26111,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"hCv" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "hCy" = ( /obj/effect/turf_decal/siding/red{ dir = 4 @@ -25748,6 +26199,12 @@ }, /turf/open/floor/catwalk_floor/iron_white, /area/station/ai_monitored/turret_protected/aisat_interior) +"hDS" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 5 + }, +/turf/open/floor/engine/hull/reinforced, +/area/space/nearstation) "hDT" = ( /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, @@ -25802,13 +26259,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"hEJ" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "hEN" = ( /obj/structure/chair/sofa/right/brown, /obj/effect/spawner/random/maintenance, @@ -25874,6 +26324,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"hFq" = ( +/obj/structure/rack, +/obj/item/clothing/suit/utility/radiation, +/obj/item/clothing/head/utility/radiation, +/obj/item/geiger_counter, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "hFy" = ( /obj/structure/ladder, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25881,10 +26342,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/science/central) -"hFD" = ( -/obj/machinery/roulette, -/turf/open/floor/engine, -/area/station/engineering/main) +"hFA" = ( +/obj/structure/lattice/catwalk, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "hFG" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -26033,15 +26494,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) -"hHC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "hHE" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 9 @@ -26197,14 +26649,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/station/commons/dorms) -"hJM" = ( -/obj/machinery/door/airlock/engineering/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"hJS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "hJX" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26233,11 +26684,12 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) -"hKr" = ( -/obj/structure/lattice/catwalk, -/obj/structure/sign/poster/random/directional/east, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"hKn" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "hKw" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -26252,14 +26704,17 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/central) -"hKI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"hKE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/requests_console/directional/west{ + name = "Engineering Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "hKJ" = ( /obj/item/radio/intercom/directional/west, /obj/machinery/suit_storage_unit/security, @@ -26275,6 +26730,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"hKS" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/pipe_dispenser{ + pixel_y = 8 + }, +/obj/item/clothing/glasses/meson/engine{ + pixel_y = 4 + }, +/obj/machinery/cell_charger, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "hLd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26287,11 +26758,6 @@ }, /turf/open/openspace, /area/station/maintenance/starboard/aft) -"hLr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "hLu" = ( /obj/effect/turf_decal/siding{ dir = 8 @@ -26350,12 +26816,31 @@ dir = 4 }, /area/station/tcommsat/server) +"hLN" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden/abandoned) +"hLS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/pdapainter/engineering, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "hLT" = ( /obj/docking_port/stationary/escape_pod{ dir = 8 }, /turf/open/floor/engine/hull, /area/space/nearstation) +"hMc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/clock/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hMd" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -26377,6 +26862,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/science/explab) +"hMt" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos/upper) "hMw" = ( /obj/effect/turf_decal/trimline/dark/arrow_cw, /obj/effect/turf_decal/trimline/dark/arrow_cw, @@ -26510,6 +26999,14 @@ /obj/structure/stairs/west, /turf/open/floor/plating, /area/station/security/courtroom) +"hNJ" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4; + initialize_directions = 8 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "hNW" = ( /obj/effect/spawner/structure/window, /obj/effect/turf_decal/stripes/line{ @@ -26568,6 +27065,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"hOZ" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "hPa" = ( /obj/structure/railing{ dir = 1 @@ -26582,30 +27085,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) -"hPb" = ( -/obj/machinery/pipedispenser/disposal, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"hPh" = ( -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "N2 Multideck Adapter" - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/meter{ - name = "N2 meter" - }, -/obj/structure/railing, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"hPA" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/station/engineering/atmos/upper) "hPH" = ( /obj/machinery/door/airlock/external{ name = "Welcome." @@ -26627,6 +27106,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/commons/dorms) +"hPP" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left, +/area/station/engineering/lobby) "hPQ" = ( /obj/structure/table/wood, /obj/effect/landmark/event_spawn, @@ -26687,15 +27173,6 @@ }, /turf/open/floor/wood/large, /area/station/service/kitchen) -"hQn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "hQE" = ( /obj/structure/railing{ dir = 8 @@ -26707,15 +27184,11 @@ }, /turf/open/floor/wood, /area/station/service/chapel) -"hQP" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/railing/corner, -/obj/structure/flora/tree/jungle, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/grass, -/area/station/hallway/primary/starboard) +"hQQ" = ( +/obj/structure/broken_flooring/singular/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "hQU" = ( /obj/effect/turf_decal/tile/red/opposingcorners{ dir = 1 @@ -26729,6 +27202,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) +"hQZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "hRa" = ( /obj/structure/table, /obj/item/storage/belt/medical{ @@ -26821,14 +27299,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"hRQ" = ( -/obj/machinery/power/emitter/prototype{ - desc = "Hell yeah."; - dir = 4; - name = "Betsy" - }, -/turf/open/floor/engine, -/area/station/engineering/main) "hRT" = ( /obj/structure/chair, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26885,12 +27355,6 @@ "hSk" = ( /turf/closed/wall, /area/station/security/checkpoint/medical) -"hSt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "hSu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -26934,15 +27398,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/wood, /area/station/commons/storage/tools) -"hSK" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"hSM" = ( -/obj/machinery/holopad, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "hSW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -26952,6 +27407,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"hTs" = ( +/obj/machinery/light/directional/south, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "hTt" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -26964,15 +27424,6 @@ }, /turf/open/floor/plating, /area/station/construction/storage_wing) -"hTF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/item/vending_refill/hydroseeds, -/obj/structure/frame/machine/secured, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "hTI" = ( /obj/machinery/light/directional/south, /obj/effect/landmark/firealarm_sanity, @@ -26998,40 +27449,17 @@ /obj/structure/cable/layer3, /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/satellite) -"hTT" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/toy/plush/moth{ - name = "Headslicer Mofiny"; - pixel_x = 2; - pixel_y = 11 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/toy/plush/moth{ - name = "Flutty The Ravager Moffy"; - pixel_x = 5 - }, -/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/north, -/obj/item/toy/plush/moth{ - name = "Sporg Asbord"; - pixel_x = -8; - pixel_y = -3 - }, -/obj/structure/sign/poster/ripped/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"hUl" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "hUs" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/tcommsat/server) +"hUw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) "hUA" = ( /obj/effect/turf_decal/arrows{ dir = 8 @@ -27039,15 +27467,38 @@ /obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"hUM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "hUU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) +"hVc" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/item/radio/intercom/directional/north, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "hVi" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/glass, /area/station/maintenance/starboard/fore) +"hVk" = ( +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "hVr" = ( /obj/structure/sign/warning/cold_temp/directional/west{ desc = "A sign that notes the room within is the Cold Room. Not that it's actually cold."; @@ -27074,6 +27525,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) +"hVH" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "hWb" = ( /obj/effect/turf_decal/siding/dark{ dir = 1 @@ -27136,6 +27594,17 @@ dir = 1 }, /area/station/ai_monitored/turret_protected/aisat/foyer) +"hWU" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "hXc" = ( /obj/effect/turf_decal/plaque{ icon_state = "L3" @@ -27191,6 +27660,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/ai) +"hXA" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -1; + pixel_y = 5 + }, +/obj/item/pen{ + pixel_y = 5 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "hXD" = ( /obj/effect/turf_decal/siding/blue{ dir = 1 @@ -27208,6 +27692,13 @@ "hXT" = ( /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) +"hYa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) "hYc" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, @@ -27219,12 +27710,20 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) -"hYm" = ( +"hYg" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) +"hYj" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "hYo" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -27234,6 +27733,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"hYu" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "hYx" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -27272,6 +27779,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) +"hYV" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine/hull/air, +/area/station/engineering/break_room) "hZa" = ( /obj/effect/landmark/carpspawn, /turf/open/floor/engine/hull, @@ -27356,6 +27867,15 @@ /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating, /area/station/maintenance/port) +"iak" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/openspace, +/area/station/engineering/lobby) "iar" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, @@ -27423,6 +27943,15 @@ /obj/effect/turf_decal/siding/white/corner, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"ibq" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4; + initialize_directions = 4 + }, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "ibr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -27503,6 +28032,19 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"ich" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/engine_access, +/obj/effect/mapping_helpers/airalarm/link{ + chamber_id = "engine" + }, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "icj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27571,8 +28113,20 @@ /obj/effect/turf_decal/siding/purple{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/science/lab) +"idm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "idq" = ( /turf/open/floor/iron/stairs/medium{ dir = 8 @@ -27627,6 +28181,27 @@ /obj/structure/mecha_wreckage/ripley, /turf/open/floor/iron/dark, /area/station/commons/dorms) +"ien" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) +"iep" = ( +/obj/structure/table, +/obj/item/geiger_counter{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "iev" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27666,8 +28241,16 @@ }, /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/light/directional/south, +/obj/structure/sign/directions/science/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/science/lab) +"igb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "igc" = ( /obj/machinery/computer/records/security, /obj/structure/lattice/catwalk, @@ -27704,12 +28287,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"ign" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "igo" = ( /obj/effect/turf_decal/siding/wideplating_new{ dir = 9 @@ -27735,6 +28312,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) +"igK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "ihd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sink/directional/east, @@ -27751,14 +28335,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) -"ihn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "ihv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood{ @@ -27836,16 +28412,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"iiT" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/machinery/space_heater, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "iiV" = ( /obj/structure/table/wood/poker, /obj/effect/spawner/random/entertainment/cigarette_pack, @@ -27861,14 +28427,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) -"iji" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/mug{ - pixel_x = -3; - pixel_y = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "ijl" = ( /obj/structure/cable, /obj/item/restraints/legcuffs/beartrap/prearmed{ @@ -27986,13 +28544,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"ilR" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 8 - }, -/turf/open/space/basic, -/area/space/nearstation) "ilV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -28094,6 +28645,13 @@ "inh" = ( /turf/open/openspace, /area/station/command/bridge) +"inp" = ( +/obj/effect/turf_decal/tile/dark_green{ + dir = 1 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "int" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -28119,6 +28677,16 @@ /obj/machinery/light/directional/west, /turf/open/floor/wood/large, /area/station/service/library/private) +"inI" = ( +/obj/machinery/shower/directional/west, +/obj/structure/fluff/shower_drain, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 8 + }, +/area/station/engineering/main) "inK" = ( /obj/machinery/conveyor{ dir = 8; @@ -28180,6 +28748,10 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) +"iov" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) "iox" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/structure/cable, @@ -28216,12 +28788,6 @@ dir = 4 }, /area/station/hallway/secondary/exit/departure_lounge) -"ioR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos/upper) "ioU" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating, @@ -28269,14 +28835,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"ips" = ( -/obj/machinery/meter, -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 8 - }, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/upper) "ipt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/airlock/public/glass{ @@ -28335,6 +28893,20 @@ dir = 8 }, /area/station/tcommsat/server) +"iqf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"iqj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos/upper) "iqo" = ( /obj/structure/table/reinforced, /obj/item/toy/redbutton{ @@ -28342,6 +28914,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"iqs" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Waste to Filter"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/red, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "iqv" = ( /obj/structure/railing{ dir = 8 @@ -28362,6 +28943,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"iqy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "iqC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -28371,9 +28957,6 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/plating, /area/station/maintenance/central) -"ire" = ( -/turf/open/floor/engine, -/area/station/engineering/main) "irh" = ( /turf/closed/wall, /area/station/medical/cryo) @@ -28397,13 +28980,12 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"irJ" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) +"iry" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "irL" = ( /obj/item/kirbyplants/organic/plant21{ pixel_x = -11; @@ -28435,6 +29017,17 @@ /obj/effect/decal/cleanable/fuel_pool, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"isn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/engine/hull, +/area/station/maintenance/disposal/incinerator) +"isp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "isv" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/fluff/paper/stack{ @@ -28447,10 +29040,6 @@ /obj/structure/sign/flag/nanotrasen/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"isw" = ( -/obj/item/stack/sheet/plasteel/fifty, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "isy" = ( /obj/machinery/newscaster/directional/west, /obj/effect/turf_decal/tile/dark_blue{ @@ -28487,11 +29076,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"ita" = ( -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/components/binary/pump/off/orange/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"isX" = ( +/obj/machinery/air_sensor/nitrous_tank, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos/upper) "ite" = ( /obj/effect/turf_decal/siding/red{ dir = 4 @@ -28502,17 +29091,6 @@ /obj/item/cigbutt, /turf/open/floor/plating/airless, /area/station/maintenance/port/aft) -"iti" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/storage/briefcase/secure{ - pixel_x = -1; - pixel_y = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "itl" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 @@ -28522,15 +29100,17 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) -"ito" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +"itm" = ( +/obj/structure/transport/linear, +/turf/open/openspace, +/area/station/engineering/break_room) "itq" = ( /turf/open/floor/engine/hull/air, /area/station/engineering/lobby) +"itt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "itw" = ( /obj/effect/turf_decal/siding/blue/corner{ dir = 1 @@ -28573,12 +29153,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"itU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/closed/wall, -/area/station/service/hydroponics/garden/abandoned) "itV" = ( /obj/item/stack/sheet/mineral/wood{ pixel_x = -5; @@ -28588,6 +29162,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/detectives_office/private_investigators_office) +"itX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) "ius" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -28596,6 +29177,19 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/dark, /area/station/security/medical) +"iuu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) +"iux" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "iuR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -28665,20 +29259,6 @@ }, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) -"ivQ" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ - dir = 4 - }, -/turf/open/openspace, -/area/station/engineering/atmos/project) -"ivS" = ( -/obj/structure/table/reinforced, -/obj/item/weldingtool, -/obj/item/wrench, -/obj/item/clothing/head/utility/welding, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) "iwa" = ( /obj/effect/turf_decal/trimline/red/line, /obj/effect/turf_decal/trimline/red/line{ @@ -28705,6 +29285,10 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"iwq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "iwu" = ( /obj/machinery/camera/autoname/directional/east, /obj/machinery/firealarm/directional/east, @@ -28764,6 +29348,17 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine/hull/air, /area/station/command/meeting_room/council) +"iyb" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/heavy, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/main) "iyk" = ( /obj/machinery/door/airlock/maintenance{ name = "Auxiliary Tech Storage" @@ -28814,15 +29409,6 @@ /obj/structure/sign/poster/official/pda_ad/directional/north, /turf/open/floor/eighties, /area/station/maintenance/starboard/fore) -"iyz" = ( -/obj/structure/railing, -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/grass, -/area/station/hallway/primary/starboard) "iyA" = ( /obj/machinery/vending/games, /obj/structure/sign/painting/library_secure{ @@ -28836,12 +29422,6 @@ }, /turf/open/water/jungle, /area/station/science/genetics) -"iyG" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "iyI" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/engineering_hacking{ @@ -28900,12 +29480,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"izi" = ( -/obj/structure/broken_flooring/pile/directional/north, -/obj/machinery/light/directional/west, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "izl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28944,18 +29518,9 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"izQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "izU" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/arrow_ccw, /turf/open/floor/iron/sepia, /area/station/hallway/secondary/construction) "izW" = ( @@ -28985,15 +29550,6 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/iron, /area/station/science/robotics) -"iAp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "iAr" = ( /obj/structure/table/wood, /obj/item/phone{ @@ -29015,6 +29571,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/commons/storage/art) +"iAH" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "iBj" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/remains/human, @@ -29108,6 +29671,10 @@ /obj/effect/turf_decal/siding/dark, /turf/open/floor/iron/white/textured_half, /area/station/ai_monitored/turret_protected/aisat_interior) +"iCq" = ( +/obj/machinery/holopad, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "iCx" = ( /obj/effect/spawner/random/trash/botanical_waste, /turf/open/floor/engine/hull/air, @@ -29166,11 +29733,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"iDD" = ( -/obj/structure/closet/radiation, -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "iDF" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 4 @@ -29209,6 +29771,15 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/auxlab/firing_range) +"iDS" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "iEf" = ( /obj/machinery/air_sensor/ordnance_burn_chamber, /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ @@ -29338,6 +29909,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/ordnance/storage) +"iFf" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "iFn" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -29578,22 +30154,23 @@ dir = 4 }, /area/station/hallway/primary/fore) +"iIs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/biogenerator, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "iIu" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating/airless, /area/station/maintenance/port/aft) -"iIC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/door/airlock/engineering, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "iIJ" = ( /obj/machinery/door/airlock/maintenance{ name = "Service Hall Maintenance" @@ -29602,6 +30179,11 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/maintenance/hallway/abandoned_recreation) +"iIL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/closet/firecloset, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "iIP" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -29609,25 +30191,6 @@ /obj/machinery/flasher/portable, /turf/open/floor/iron/dark/smooth_large, /area/station/security/office) -"iIQ" = ( -/obj/item/hfr_box/body/waste_output{ - pixel_x = -15; - pixel_y = 13 - }, -/obj/item/hfr_box/body/interface{ - pixel_y = 17 - }, -/obj/item/hfr_box/body/moderator_input{ - pixel_x = -8; - pixel_y = 8 - }, -/obj/item/hfr_box/body/waste_output{ - pixel_x = 10; - pixel_y = 9 - }, -/obj/structure/table, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "iIS" = ( /obj/structure/table/wood/poker, /obj/effect/spawner/random/entertainment/deck, @@ -29664,6 +30227,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) +"iJs" = ( +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage{ + pixel_x = 5; + pixel_y = 9 + }, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "iJu" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -29732,18 +30304,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/textured_corner, /area/station/science/ordnance/storage) -"iKr" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 10 - }, -/obj/structure/table, -/obj/item/phone{ - pixel_x = -3; - pixel_y = 1 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "iKx" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -29752,17 +30312,15 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/textured_large, /area/station/medical/virology) -"iKB" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"iKA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/obj/machinery/firealarm/directional/west, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/lobby) "iKC" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/smooth_large, @@ -29776,14 +30334,6 @@ /obj/machinery/iv_drip, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) -"iKM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "iKT" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -29836,6 +30386,13 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) +"iLC" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "iLD" = ( /obj/machinery/requests_console/directional/north{ department = "Security"; @@ -29885,6 +30442,13 @@ }, /turf/open/misc/asteroid, /area/station/science/robotics) +"iLH" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "iLL" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/transit_tube/horizontal, @@ -29922,6 +30486,11 @@ }, /turf/closed/wall, /area/station/maintenance/starboard/aft) +"iMq" = ( +/obj/item/clothing/head/soft/orange, +/obj/structure/closet/secure_closet/engineering_chief, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "iMr" = ( /obj/structure/railing/corner{ dir = 8 @@ -29963,6 +30532,10 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"iMP" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "iMQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29978,12 +30551,6 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron/textured, /area/station/cargo/storage) -"iMU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "iMV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -30020,6 +30587,19 @@ /obj/machinery/light/directional/west, /turf/open/openspace, /area/station/service/chapel) +"iNX" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"iOc" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "iOk" = ( /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) @@ -30058,18 +30638,10 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) -"iOI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "iOK" = ( /obj/machinery/shower/directional/west, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"iOO" = ( -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "iPa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -30116,11 +30688,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"iPC" = ( -/obj/effect/decal/cleanable/blood/old, +"iPL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/area/station/maintenance/disposal/incinerator) "iPQ" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -30147,6 +30722,11 @@ }, /turf/open/openspace, /area/station/hallway/secondary/construction) +"iQe" = ( +/obj/machinery/field/generator, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/engine, +/area/station/engineering/break_room) "iQi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -30201,14 +30781,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/genetics) -"iQY" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "iRa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30240,14 +30812,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/general, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"iRQ" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/computer/atmos_alert{ - dir = 1 - }, -/obj/structure/railing, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "iRV" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner, @@ -30260,6 +30824,13 @@ }, /turf/open/openspace, /area/station/medical/storage) +"iRX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) "iSh" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Engineering Maintenance" @@ -30350,6 +30921,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"iTx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) +"iTB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) "iTE" = ( /obj/effect/spawner/random/food_or_drink/snack, /turf/open/floor/plating, @@ -30387,6 +30974,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"iUj" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "iUl" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/all/science/genetics, @@ -30400,6 +30995,15 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/security/interrogation) +"iUo" = ( +/obj/machinery/atmospherics/components/tank/air{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "iUs" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -30444,6 +31048,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) +"iVc" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/structure/sign/warning/vacuum/external/directional/east, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "iVi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -30467,12 +31076,12 @@ /obj/effect/decal/cleanable/vomit/old, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"iVs" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/project) +"iVT" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "iVW" = ( /turf/open/floor/plating/elevatorshaft, /area/station/security/prison/rec) @@ -30496,6 +31105,12 @@ /obj/structure/urinal/directional/west, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"iWh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "iWk" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -30533,6 +31148,12 @@ "iWu" = ( /turf/closed/wall, /area/space/nearstation) +"iWA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/smes/engineering, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "iWD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30543,6 +31164,10 @@ }, /turf/open/floor/wood, /area/station/service/library) +"iWM" = ( +/obj/structure/broken_flooring/side/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "iXd" = ( /obj/structure/lattice/catwalk, /obj/effect/decal/remains/human, @@ -30590,6 +31215,12 @@ /obj/structure/chair, /turf/open/floor/iron/airless, /area/station/maintenance/starboard/aft) +"iXH" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "iXJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall, @@ -30621,10 +31252,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"iYr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "iYJ" = ( /obj/structure/sink/kitchen/directional/west, /turf/open/floor/wood/large, @@ -30651,10 +31278,12 @@ /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/aft) -"iZa" = ( -/obj/machinery/light/directional/south, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"iZe" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/railing/corner/end, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "iZr" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -30674,13 +31303,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"iZD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +"iZx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "iZI" = ( /obj/machinery/computer/bank_machine, /obj/machinery/light_switch/directional/west{ @@ -30715,10 +31343,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"jai" = ( -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "jak" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30800,17 +31424,19 @@ /obj/machinery/light/floor/broken, /turf/open/openspace, /area/station/maintenance/hallway/abandoned_recreation) -"jbi" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/textured_large, -/area/station/engineering/atmos/upper) "jbn" = ( /obj/structure/stairs/west, /obj/structure/railing, /obj/structure/sign/poster/official/help_others/directional/north, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"jbD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmos/project) "jbO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -30874,11 +31500,27 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/bomb) +"jcP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "jcQ" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) +"jda" = ( +/obj/item/spear, +/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/gloves/color/rainbow, +/obj/item/clothing/shoes/sneakers/rainbow, +/obj/item/clothing/under/color/rainbow, +/obj/item/clothing/head/soft/rainbow, +/obj/effect/decal/remains/human, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jdf" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random/structure/grille, @@ -30906,21 +31548,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) -"jdz" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/structure/railing, -/obj/structure/railing{ - dir = 5 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +"jdr" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/openspace, +/area/station/engineering/atmos/project) "jdB" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{ dir = 1 @@ -31073,6 +31706,11 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"jfp" = ( +/obj/structure/lattice/catwalk, +/obj/item/kirbyplants/random, +/turf/open/openspace, +/area/station/engineering/break_room) "jfA" = ( /turf/open/openspace, /area/station/security/brig) @@ -31188,6 +31826,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/textured_large, /area/station/medical/virology) +"jhg" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/camera/autoname/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "jhj" = ( /obj/structure/cable/layer3, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31232,10 +31877,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/medical) -"jhP" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "jhU" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/spawner/random/engineering/tank, @@ -31322,12 +31963,40 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"jjd" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/pumproom) +"jjh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) +"jjj" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos/upper) "jjn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"jjo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jjr" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kirbyplants/random, @@ -31388,18 +32057,6 @@ /obj/structure/table/wood/poker, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"jko" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "jkq" = ( /turf/open/floor/iron/stairs/right{ dir = 1 @@ -31429,6 +32086,11 @@ /obj/item/clothing/head/collectable/police, /turf/open/floor/wood/large, /area/station/service/theater) +"jkz" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "jkG" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Post - Cargo" @@ -31443,15 +32105,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"jkK" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"jkI" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "jkL" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -31556,13 +32213,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/detectives_office) -"jma" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "jmh" = ( /turf/open/floor/plating/airless, /area/station/maintenance/starboard/lesser) @@ -31571,24 +32221,21 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"jmG" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/button/door/directional/north{ - id = "hydropony_shutters"; - name = "hydroponics shutters control"; - pixel_x = 10; - pixel_y = 30; - req_access = list("hydroponics") +"jmv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ - dir = 1 +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"jmD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/camera/autoname/directional/north, -/obj/structure/sink/directional/south, -/turf/open/floor/iron/dark/smooth_large, -/area/station/service/hydroponics) +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "jmQ" = ( /obj/effect/spawner/random/trash/grime, /turf/open/floor/plating, @@ -31650,6 +32297,14 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) +"jnq" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/openspace, +/area/station/engineering/break_room) "jnC" = ( /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) @@ -31664,6 +32319,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"jnQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "jof" = ( /obj/structure/closet/crate/coffin, /obj/effect/decal/cleanable/dirt, @@ -31678,6 +32339,15 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/iron/dark/textured_large, /area/station/medical/medbay/central) +"joI" = ( +/obj/machinery/power/emitter{ + dir = 4 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "jpa" = ( /obj/machinery/vatgrower{ dir = 4 @@ -31714,6 +32384,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/command/corporate_showroom) +"jpw" = ( +/obj/machinery/door/poddoor{ + id = "securestoragecw"; + name = "Secure Storage" + }, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/break_room) "jpx" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -31844,9 +32521,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) -"jrh" = ( -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "jrp" = ( /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/structure/table, @@ -31943,29 +32617,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/warden) -"jsT" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/requests_console/directional/south{ - department = "Engineering"; - name = "Engineering Requests Console" - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/item/stamp/granted{ - pixel_x = 9; - pixel_y = 8 - }, -/obj/item/stamp/denied{ - pixel_x = 8; - pixel_y = 1 - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron, -/area/station/engineering/lobby) "jtc" = ( /obj/effect/decal/cleanable/ash, /obj/machinery/light/small/dim/directional/east, @@ -32045,6 +32696,11 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/wood/large, /area/station/service/theater) +"juh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "jui" = ( /obj/structure/table, /obj/item/kitchen/rollingpin{ @@ -32211,6 +32867,11 @@ /obj/effect/turf_decal/tile/brown/full, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) +"jvZ" = ( +/obj/structure/ladder, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "jwa" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/central) @@ -32403,10 +33064,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"jyf" = ( -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "jyl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing, @@ -32505,17 +33162,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) -"jyZ" = ( -/obj/item/tank/internals/plasma/empty, -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "jzi" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/wood, @@ -32551,15 +33197,6 @@ /obj/effect/turf_decal/tile/dark/half/contrasted, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"jzS" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "jzW" = ( /obj/structure/table/wood, /obj/item/camera{ @@ -32599,6 +33236,13 @@ /obj/structure/lattice/catwalk, /turf/open/floor/engine/hull/air, /area/station/construction/storage_wing) +"jAd" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "jAo" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 4 @@ -32628,23 +33272,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/textured_half, /area/station/science/ordnance) -"jAH" = ( -/obj/structure/table, -/obj/item/screwdriver{ - pixel_y = 10 - }, -/obj/item/geiger_counter{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/minisat/directional/north{ - name = "AI Ministat Camera Monitor" - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "jAO" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -32669,10 +33296,23 @@ }, /turf/open/floor/iron/edge, /area/station/hallway/primary/fore) +"jBb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "jBd" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"jBh" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "jBk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32692,7 +33332,7 @@ }, /obj/machinery/light/small/directional/north, /obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark/telecomms, +/turf/open/floor/catwalk_floor, /area/station/science/server) "jBt" = ( /obj/effect/landmark/event_spawn, @@ -32705,12 +33345,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"jBB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "jBI" = ( /obj/structure/cable, /obj/structure/table, /obj/item/clothing/mask/gas, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"jBK" = ( +/obj/structure/flora/grass/jungle, +/obj/structure/railing/corner, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/flora/tree/jungle, +/turf/open/floor/grass, +/area/station/hallway/primary/starboard) "jBU" = ( /obj/structure/transport/linear/public, /obj/structure/table, @@ -32756,6 +33410,21 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) +"jCv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "jCz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32783,6 +33452,14 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/maintenance/port) +"jCJ" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "jCK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -32865,6 +33542,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/science/robotics/lab) +"jDl" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/closet/radiation, +/obj/item/clothing/glasses/meson, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/engineering/main) "jDq" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/trunk/multiz/down{ @@ -32872,6 +33556,11 @@ }, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"jDr" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/spawner/random/clothing/wardrobe_closet_colored, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "jDx" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -32910,6 +33599,19 @@ /obj/structure/sign/poster/contraband/tools/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"jDY" = ( +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/item/stack/sheet/cotton{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/effect/decal/cleanable/generic, +/obj/structure/closet/firecloset, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "jEc" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/east, @@ -32933,6 +33635,12 @@ /obj/effect/turf_decal/tile/dark/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"jEx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jEz" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4; @@ -32953,6 +33661,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"jEV" = ( +/obj/structure/table, +/obj/item/folder/yellow{ + pixel_x = 4 + }, +/obj/item/pen, +/obj/item/airlock_painter, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "jFj" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 4 @@ -33042,6 +33759,12 @@ /obj/effect/spawner/random/structure/table_or_rack, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) +"jGm" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos/upper) "jGq" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -33077,14 +33800,6 @@ }, /turf/open/floor/carpet, /area/station/security/courtroom) -"jGF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "jGK" = ( /obj/effect/decal/cleanable/blood/tracks{ dir = 4 @@ -33138,6 +33853,10 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/medical/virology) +"jHt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "jHD" = ( /obj/structure/table/wood, /obj/effect/spawner/random/bureaucracy/paper, @@ -33162,6 +33881,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/cryo) +"jIj" = ( +/obj/machinery/requests_console/directional/south{ + department = "Engineering"; + name = "Engineering Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "jIs" = ( /obj/structure/table/glass, /turf/open/floor/wood, @@ -33185,19 +33913,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jIG" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/item/stack/sheet/cotton{ - pixel_x = -3; - pixel_y = -5 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "jII" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -33232,10 +33947,6 @@ /obj/effect/spawner/random/structure/chair_maintenance, /turf/open/floor/plating, /area/station/maintenance/port) -"jJj" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/plating/elevatorshaft, -/area/station/engineering/supermatter/room) "jJl" = ( /obj/machinery/light/directional/west, /obj/structure/railing/corner/end{ @@ -33297,11 +34008,12 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"jKe" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"jJZ" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "jKl" = ( /obj/structure/railing, /obj/item/restraints/legcuffs/beartrap/prearmed, @@ -33412,6 +34124,17 @@ /obj/item/radio/intercom/directional/south, /turf/open/openspace, /area/station/security/checkpoint/science) +"jLt" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/engine/directional/south{ + name = "Engine Camera Monitor" + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "jLu" = ( /obj/machinery/telecomms/processor/preset_three, /obj/effect/turf_decal/tile/red/fourcorners, @@ -33430,6 +34153,25 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"jLH" = ( +/obj/machinery/button/door/directional/south{ + id = "ceprivacy"; + name = "Privacy Shutters Control"; + pixel_y = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "transitlockdown"; + name = "Transit Tube Lockdown"; + pixel_x = 0; + pixel_y = -8 + }, +/obj/machinery/button/door{ + id = "securestoragecw"; + name = "Secure Storage" + }, +/obj/structure/table/reinforced, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "jLY" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -33482,14 +34224,6 @@ /obj/structure/cable, /turf/open/space/openspace, /area/space/nearstation) -"jNd" = ( -/obj/effect/turf_decal/trimline/red/filled/corner, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/depsec/engineering, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "jNk" = ( /obj/structure/rack, /obj/item/storage/box/flashes{ @@ -33596,13 +34330,6 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/hallway/primary/starboard) -"jPb" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "jPh" = ( /obj/structure/broken_flooring/pile/directional/south, /turf/open/floor/plating, @@ -33631,11 +34358,6 @@ /obj/structure/window/reinforced/tinted/frosted/spawner/directional/west, /turf/open/floor/wood/large, /area/station/service/library) -"jPB" = ( -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "jPC" = ( /obj/effect/turf_decal/siding/dark{ dir = 5 @@ -33649,16 +34371,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/tcommsat/server) -"jPK" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "jPR" = ( /obj/structure/chair/office, /turf/open/floor/iron/dark/textured_large, @@ -33730,6 +34442,10 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"jRb" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos/upper) "jRg" = ( /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 10 @@ -33778,12 +34494,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal) -"jSt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "jSz" = ( /obj/machinery/mass_driver/trash{ dir = 4 @@ -33806,6 +34516,14 @@ /obj/structure/window/reinforced/plasma/spawner/directional/north, /turf/open/space/basic, /area/space/nearstation) +"jSO" = ( +/obj/effect/turf_decal/arrows/white{ + color = "#00AAFF"; + pixel_y = 15 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "jSV" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -33879,6 +34597,10 @@ /obj/structure/table/wood/fancy, /turf/open/floor/wood/large, /area/station/service/library/private) +"jTQ" = ( +/obj/machinery/airalarm/directional/west, +/turf/closed/wall/r_wall, +/area/station/maintenance/starboard/central) "jTZ" = ( /obj/effect/turf_decal/tile/dark_blue/half{ dir = 4 @@ -34134,12 +34856,6 @@ }, /turf/open/floor/wood/large, /area/station/service/library) -"jXy" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "jXC" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -34199,11 +34915,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"jYr" = ( -/obj/structure/ladder, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "jYs" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/machinery/photocopier/prebuilt, @@ -34216,6 +34927,21 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/water, /area/station/maintenance/port/fore) +"jYG" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/landmark/navigate_destination/minisat_access_ai, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "jYI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34242,14 +34968,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) -"jYS" = ( -/obj/machinery/atmospherics/components/binary/pump/off/cyan/visible, -/obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "SM_shutters"; - name = "Supermatter Radiation Shutters" - }, -/turf/open/floor/plating, -/area/station/engineering/supermatter) "jZc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -34314,13 +35032,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"kaY" = ( -/obj/structure/cable, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/directional/north, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "kbe" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner, @@ -34333,14 +35044,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) -"kbi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "kbj" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -34381,27 +35084,25 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) -"kbM" = ( -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = 10; - pixel_y = 8 - }, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 +"kbQ" = ( +/obj/machinery/light/directional/east, +/obj/item/kirbyplants/random/fullysynthetic, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kbR" = ( /obj/machinery/newscaster/directional/south, /turf/open/openspace, /area/station/maintenance/starboard/aft) +"kbS" = ( +/obj/structure/cable, +/obj/structure/closet/secure_closet/engineering_personal{ + anchored = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "kci" = ( /obj/effect/turf_decal/siding/purple, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -34544,15 +35245,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/hallway/primary/starboard) -"kdV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/arrow_ccw{ - dir = 10 +"kdZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) +/obj/structure/closet/firecloset, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "keh" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/textured_large, @@ -34580,6 +35283,13 @@ /obj/effect/turf_decal/siding/white/corner, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"kew" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "key" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -34590,29 +35300,6 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) -"keB" = ( -/obj/item/clothing/head/cone{ - pixel_x = -10; - pixel_y = -11 - }, -/obj/item/clothing/head/cone{ - pixel_x = -10; - pixel_y = -11 - }, -/obj/item/clothing/head/cone{ - pixel_x = -10; - pixel_y = -11 - }, -/obj/item/clothing/head/cone{ - pixel_x = -10; - pixel_y = -11 - }, -/obj/item/clothing/head/cone{ - pixel_x = -10; - pixel_y = -11 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "keE" = ( /obj/effect/spawner/random/maintenance, /obj/structure/table, @@ -34684,10 +35371,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"kfG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "kfO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/box/corners{ @@ -34695,24 +35378,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"kfQ" = ( -/obj/machinery/door/airlock/command{ - name = "Chief Engineer's Quarters" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "kfT" = ( /obj/structure/ladder, /obj/item/radio/intercom/directional/north, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"kgf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kgg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -34726,25 +35405,16 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) -"kgz" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/thermomachine/heater/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +"kgo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "kgE" = ( /obj/structure/ladder, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"kgO" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/east, -/obj/machinery/button/door{ - id = "securestoragecw"; - name = "Secure Storage" - }, -/obj/machinery/computer/security/telescreen/ce/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "khi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34826,15 +35496,10 @@ }, /turf/open/floor/iron/dark, /area/station/science/research) -"kie" = ( -/obj/machinery/computer/atmos_control/plasma_tank{ - dir = 8 - }, -/obj/structure/railing{ - dir = 6 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/dark, +"kil" = ( +/obj/machinery/air_sensor/oxygen_tank, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/turf/open/floor/engine/o2, /area/station/engineering/atmos/upper) "kip" = ( /obj/structure/closet/secure_closet/detective, @@ -34861,17 +35526,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"kiJ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "kiS" = ( /obj/structure/lattice, /turf/open/openspace, @@ -34897,11 +35551,6 @@ /obj/structure/sign/poster/ripped/directional/north, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"kjl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "kjF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/junction/yjunction{ @@ -34936,11 +35585,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"kke" = ( -/obj/structure/ladder, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "kki" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -35078,6 +35722,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine/hull/air, /area/station/hallway/secondary/exit/departure_lounge) +"klH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) "klI" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -35106,13 +35755,6 @@ /obj/machinery/digital_clock/directional/west, /turf/open/floor/wood/large, /area/station/medical/psychology) -"klR" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Air to Port" - }, -/turf/open/floor/iron/white, -/area/station/engineering/atmos/upper) "kmh" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner/end/flip{ @@ -35120,6 +35762,11 @@ }, /turf/open/space/openspace, /area/space/nearstation) +"kmm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/vending/coffee, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kmx" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -35281,6 +35928,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"knN" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "knY" = ( /obj/structure/flora/tree/jungle/small, /obj/structure/flora/bush/sparsegrass/style_random, @@ -35306,16 +35956,6 @@ /obj/effect/spawner/random/trash/graffiti, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"kos" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "kou" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -35332,6 +35972,16 @@ }, /turf/open/openspace, /area/station/commons/fitness/recreation) +"koC" = ( +/obj/structure/table, +/obj/item/flashlight/lamp{ + pixel_y = 10 + }, +/obj/item/folder/yellow{ + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "koE" = ( /obj/structure/railing/corner{ dir = 1 @@ -35345,17 +35995,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/wood/large, /area/station/service/library) -"koR" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "koU" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 1 @@ -35387,13 +36026,6 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/atmos/project) -"kpe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "kpz" = ( /obj/structure/rack, /obj/item/aicard, @@ -35409,6 +36041,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/security/courtroom) +"kpE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "kpJ" = ( /obj/structure/lattice/catwalk, /obj/machinery/power/tracker, @@ -35485,6 +36125,21 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark, /area/station/commons/dorms) +"kqH" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/structure/railing, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "kqI" = ( /obj/machinery/photocopier, /turf/open/floor/glass, @@ -35498,11 +36153,25 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/openspace, /area/station/medical/storage) -"krl" = ( -/obj/structure/closet/firecloset, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"krk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8; + pixel_x = -2 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) +"krK" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "krL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35535,6 +36204,14 @@ /obj/structure/cable/multilayer/connected, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/ai) +"ksa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "ksj" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/trimline/dark/arrow_ccw{ @@ -35547,6 +36224,18 @@ dir = 4 }, /area/station/hallway/primary/fore) +"ksm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kso" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -35622,6 +36311,15 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron, /area/station/science/breakroom) +"kth" = ( +/obj/structure/sign/warning/hot_temp/directional/east, +/obj/machinery/camera/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kto" = ( /obj/machinery/door/airlock/security{ name = "Armory" @@ -35749,15 +36447,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"kuq" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "kur" = ( /obj/structure/lattice/catwalk, /obj/effect/spawner/random/maintenance, @@ -35772,10 +36461,6 @@ }, /turf/open/floor/grass, /area/station/science/genetics) -"kux" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) "kuS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -35802,6 +36487,19 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) +"kvb" = ( +/obj/structure/railing/corner, +/obj/structure/railing, +/obj/structure/lattice/catwalk, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"kvl" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/engineering/main) "kvm" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -35920,6 +36618,13 @@ /obj/machinery/igniter/incinerator_atmos, /turf/open/floor/engine/airless, /area/station/maintenance/disposal/incinerator) +"kwO" = ( +/obj/structure/sign/departments/aisat/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kwQ" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -35996,6 +36701,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/lab) +"kxA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "kxE" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, @@ -36185,6 +36896,16 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"kAr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kAu" = ( /obj/structure/lattice/catwalk, /obj/structure/chair/comfy, @@ -36217,6 +36938,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/maintenance/starboard/lesser) +"kAX" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "kAZ" = ( /obj/machinery/newscaster/directional/north, /obj/machinery/light/directional/north, @@ -36228,6 +36958,13 @@ dir = 8 }, /area/station/service/chapel) +"kBe" = ( +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "kBi" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -36282,11 +37019,13 @@ "kBF" = ( /turf/open/floor/engine/hull/air, /area/station/hallway/primary/aft) -"kBY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/machinery/meter, +"kBG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +/area/station/engineering/hallway) "kCp" = ( /obj/structure/lattice, /turf/open/openspace, @@ -36301,11 +37040,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"kCL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, +"kCF" = ( /obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "kCN" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -36377,6 +37119,13 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"kDN" = ( +/obj/machinery/air_sensor/engine_chamber, +/obj/effect/turf_decal/siding/red{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "kDO" = ( /turf/closed/wall/r_wall, /area/station/medical/morgue) @@ -36427,10 +37176,14 @@ dir = 8 }, /area/station/tcommsat/server) -"kEn" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) +"kEq" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "kEw" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -36451,14 +37204,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"kEG" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/power/port_gen/pacman, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "kES" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair{ @@ -36518,14 +37263,20 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"kFT" = ( +"kFS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "SM_shutters"; - name = "Supermatter Radiation Shutters" - }, -/turf/open/floor/plating, -/area/station/engineering/supermatter) +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) +"kGD" = ( +/obj/machinery/air_sensor/nitrogen_tank, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos/upper) "kGG" = ( /obj/item/coin/antagtoken{ pixel_x = -3; @@ -36588,16 +37339,6 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) -"kHO" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, -/obj/item/kirbyplants/random/fullysynthetic, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "kHU" = ( /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, @@ -36641,15 +37382,6 @@ }, /turf/open/floor/carpet, /area/station/security/detectives_office) -"kIJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "kIW" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -36661,13 +37393,6 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"kJm" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "kJw" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -36800,10 +37525,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured, /area/station/maintenance/starboard/lesser) -"kMh" = ( -/obj/effect/turf_decal/stripes/line, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/upper) "kMj" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) @@ -36946,14 +37667,6 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/station/science/ordnance) -"kOU" = ( -/obj/machinery/vending/wardrobe/atmos_wardrobe, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "kOV" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -37030,6 +37743,15 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/cmo) +"kPL" = ( +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "catwalk_engi" + }, +/obj/structure/transport/linear{ + radial_travel = 0 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "kPN" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -37125,6 +37847,17 @@ }, /turf/open/floor/wood/large, /area/station/service/library) +"kQy" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "kQC" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line, /obj/effect/turf_decal/tile/dark_blue{ @@ -37153,10 +37886,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"kRe" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "kRf" = ( /obj/structure/cable/layer3, /obj/structure/cable, @@ -37200,13 +37929,6 @@ }, /turf/open/floor/iron/stairs/left, /area/station/hallway/secondary/construction) -"kRK" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/structure/tank_dispenser, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "kRR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37273,6 +37995,13 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/starboard) +"kSS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "kSY" = ( /obj/structure/table, /obj/item/blood_filter{ @@ -37331,11 +38060,26 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"kTN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/storage/medkit/toxin, +/obj/structure/table, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "kTW" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/north, /turf/open/floor/wood, /area/station/hallway/primary/central) +"kUf" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "kUq" = ( /turf/closed/wall/r_wall, /area/station/maintenance/port) @@ -37349,10 +38093,22 @@ "kUO" = ( /turf/open/openspace, /area/station/security/courtroom) +"kUW" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ + dir = 1; + initialize_directions = 1 + }, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "kVj" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/gravity_generator) +"kVm" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "kVu" = ( /obj/structure/table, /obj/item/stack/medical/mesh{ @@ -37424,6 +38180,24 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"kWe" = ( +/obj/structure/table, +/obj/item/hfr_box/corner{ + pixel_y = 8; + pixel_x = 8 + }, +/obj/item/hfr_box/corner{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/hfr_box/corner{ + pixel_x = -10 + }, +/obj/item/hfr_box/corner{ + pixel_x = 3 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "kWj" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -37451,12 +38225,6 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"kWt" = ( -/obj/structure/ladder, -/obj/machinery/camera/autoname/directional/north, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "kWv" = ( /obj/effect/turf_decal/siding/blue{ dir = 6 @@ -37466,21 +38234,22 @@ /obj/structure/cable, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) +"kWx" = ( +/obj/structure/table/reinforced, +/obj/item/wirecutters, +/obj/item/screwdriver, +/obj/item/stack/cable_coil, +/obj/item/crowbar, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kWF" = ( /obj/structure/lattice/catwalk, /obj/machinery/firealarm/directional/east, /turf/open/openspace, /area/station/medical/storage) -"kWG" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "kWO" = ( /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/plating, @@ -37495,6 +38264,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/checker, /area/station/ai_monitored/turret_protected/aisat_interior) +"kXa" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Testing Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor/heavy, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"kXt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "kXy" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/medical_all, @@ -37528,6 +38312,14 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron, /area/station/science/lab) +"kXT" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/engine, +/area/station/engineering/storage_shared) "kYd" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 1 @@ -37545,6 +38337,9 @@ }, /turf/open/floor/wood, /area/station/commons/toilet/restrooms) +"kYf" = ( +/turf/open/floor/engine/o2, +/area/station/engineering/atmos/upper) "kYi" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, @@ -37582,17 +38377,14 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/wood, /area/station/service/library) -"kYS" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 +"kYT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 }, -/obj/machinery/suit_storage_unit/engine, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, -/area/station/engineering/storage) -"kYU" = ( -/obj/machinery/air_sensor/engine_chamber, -/turf/open/floor/engine, -/area/station/engineering/supermatter) +/area/station/service/hydroponics/garden/abandoned) "kYV" = ( /obj/structure/railing/corner{ dir = 1 @@ -37621,18 +38413,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"kZw" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) -"kZJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ - dir = 4 - }, -/turf/open/floor/engine/plasma, -/area/station/engineering/main) "kZV" = ( /obj/machinery/door/airlock/security/glass{ name = "Courtroom Access" @@ -37690,6 +38470,14 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/lesser) +"lan" = ( +/obj/machinery/door/airlock/engineering/glass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "lav" = ( /obj/machinery/power/shieldwallgen/xenobiologyaccess, /obj/structure/window/reinforced/spawner/directional/south, @@ -37716,19 +38504,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"laE" = ( -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"laG" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Testing Room" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "laK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37780,13 +38555,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/carpet/stellar, /area/station/maintenance/hallway/abandoned_recreation) -"lby" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/south, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "lbD" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 4 @@ -37866,11 +38634,24 @@ /obj/effect/spawner/random/maintenance, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"lcN" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "lcO" = ( /obj/structure/table, /obj/item/clothing/suit/hazardvest, /turf/open/floor/wood, /area/station/commons/storage/tools) +"lcU" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "ldj" = ( /obj/structure/railing{ dir = 1 @@ -37896,6 +38677,16 @@ /obj/structure/closet/emcloset, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"ldL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics - n2o Cell"; + name = "atmospherics camera" + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos/upper) "ldX" = ( /obj/machinery/door/airlock{ id_tag = "commissarydoor"; @@ -37982,6 +38773,17 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"lff" = ( +/obj/machinery/power/terminal{ + dir = 1; + cable_layer = 1 + }, +/obj/structure/cable/multilayer/layer1, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) "lfi" = ( /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, @@ -38018,6 +38820,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/storage/primary) +"lge" = ( +/turf/open/floor/wood, +/area/station/engineering/lobby) "lgi" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -38117,6 +38922,13 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/cargo/storage) +"lhX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "lhY" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/machinery/conveyor{ @@ -38128,6 +38940,14 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"lia" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "lig" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/plasma, @@ -38166,6 +38986,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"liY" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Testing Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/station/engineering/atmos/project) "ljc" = ( /turf/open/openspace, /area/station/hallway/secondary/exit/departure_lounge) @@ -38257,6 +39085,23 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"llg" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmos/project) +"llh" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "lll" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -38285,6 +39130,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"llK" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "llP" = ( /obj/effect/turf_decal/caution/stand_clear{ dir = 4 @@ -38357,6 +39208,10 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/port) +"lmH" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "lmL" = ( /obj/structure/chair/sofa/left/brown, /obj/item/instrument/guitar{ @@ -38389,6 +39244,10 @@ /obj/effect/spawner/random/trash/grime, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"lnf" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "lng" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -38511,10 +39370,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/grass, /area/station/hallway/secondary/entry) +"lpj" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "lpq" = ( /obj/structure/fake_stairs/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"lpw" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Plasma to Port" + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "lpG" = ( /obj/machinery/door/poddoor/massdriver_chapel, /obj/machinery/atmos_shield_gen/active{ @@ -38567,6 +39438,20 @@ /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"lqv" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/pipedispenser/disposal, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"lqA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "lqB" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -38653,6 +39538,17 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"lrl" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "O2 Multideck Adapter"; + dir = 8 + }, +/obj/machinery/meter{ + name = "O2 meter" + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "lrp" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -38695,15 +39591,11 @@ /obj/structure/closet/crate/engineering/electrical, /turf/open/floor/glass/reinforced, /area/station/solars/starboard/fore) -"lsc" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, +"lse" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "lsg" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ id = "Cell 2"; @@ -38758,6 +39650,13 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"ltG" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/openspace, +/area/station/engineering/atmos/project) "ltQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38792,14 +39691,6 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/floor/wood/large, /area/station/service/library) -"luA" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "luB" = ( /obj/machinery/door/airlock/external{ name = "Departure Lounge Airlock" @@ -38808,16 +39699,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) -"luD" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "luI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -38825,12 +39706,6 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"luN" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/obj/structure/cable, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "luW" = ( /obj/structure/cable, /obj/machinery/shower/directional/south, @@ -38846,15 +39721,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/engine/hull/air, /area/station/command/meeting_room/council) -"lvk" = ( -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "lvv" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/east, /obj/structure/disposalpipe/segment{ @@ -38910,6 +39776,12 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"lwT" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input{ + dir = 1 + }, +/turf/open/floor/engine/n2o, +/area/station/engineering/atmos/upper) "lxh" = ( /obj/machinery/griddle, /obj/machinery/newscaster/directional/north, @@ -38996,11 +39868,38 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) +"lyd" = ( +/obj/structure/broken_flooring/corner/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "lys" = ( /obj/machinery/vatgrower, /obj/machinery/camera/autoname/directional/west, /turf/open/floor/engine, /area/station/service/hydroponics) +"lyw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/folder/yellow{ + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "lyx" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ id = "Cell 3"; @@ -39177,12 +40076,6 @@ "lAN" = ( /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) -"lAO" = ( -/obj/structure/broken_flooring/singular/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "lAP" = ( /obj/machinery/power/solar_control{ dir = 1; @@ -39300,6 +40193,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"lBQ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Engineering Lobby"; + name = "Engineering Lobby Fax Machine" + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "lBS" = ( /obj/effect/decal/cleanable/dirt, /obj/item/cigbutt{ @@ -39338,6 +40244,16 @@ /obj/structure/closet/crate/trashcart/filled, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"lCw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lCO" = ( /obj/machinery/door/airlock/maintenance{ name = "Medbay Maintenance" @@ -39383,6 +40299,15 @@ dir = 8 }, /area/station/ai_monitored/turret_protected/ai) +"lDh" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "Plasma Multideck Adapter" + }, +/obj/machinery/meter{ + name = "Plasma meter" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "lDj" = ( /obj/structure/chair/office{ dir = 1 @@ -39418,12 +40343,27 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/medical/medbay/central) +"lEf" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "lEi" = ( /obj/structure/disposalpipe/trunk/multiz/down{ dir = 1 }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"lEj" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/light/directional/south, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "lEo" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/trimline/yellow/arrow_ccw{ @@ -39478,6 +40418,14 @@ }, /turf/open/floor/wood/large, /area/station/service/library) +"lEJ" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "SM_shutters"; + name = "Supermatter Radiation Shutters" + }, +/obj/structure/cable/layer1, +/turf/open/floor/plating, +/area/station/engineering/supermatter) "lEO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -39560,6 +40508,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library/printer) +"lFW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lFZ" = ( /obj/machinery/power/terminal{ dir = 1 @@ -39679,6 +40634,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"lIm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/computer/atmos_control/air_tank, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "lIp" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -39693,14 +40655,21 @@ "lIr" = ( /turf/closed/wall, /area/station/maintenance/port/aft) -"lIB" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 9 +"lIw" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "Plasma Multideck Adapter"; + dir = 8 }, -/obj/structure/closet/secure_closet/atmospherics, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +/obj/machinery/meter{ + name = "Plasma meter" + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) +"lIA" = ( +/obj/effect/decal/cleanable/blood/oil/slippery, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "lIC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39732,13 +40701,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) -"lJd" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/machinery/vending/donksnack, -/turf/open/floor/eighties, -/area/station/engineering/break_room) "lJe" = ( /obj/effect/turf_decal/siding/thinplating_new/light/corner, /obj/effect/turf_decal/trimline/purple/corner, @@ -39806,19 +40768,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"lKj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Machines Storage" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "lKk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -39843,12 +40792,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lKW" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "lKZ" = ( /obj/structure/rack, /obj/item/circuitboard/machine/oven{ @@ -40010,6 +40953,28 @@ "lMU" = ( /turf/open/floor/iron/vaporwave, /area/station/maintenance/starboard/lesser) +"lNc" = ( +/obj/item/toy/plush/moth{ + name = "Spanner 2, her sibling"; + pixel_y = 10 + }, +/obj/item/toy/plush/moth{ + name = "Moff #5"; + pixel_x = -6; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/toy/plush/moth{ + name = "Lizzy Hates-The-Lizards"; + pixel_x = 5; + pixel_y = 1 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "lNj" = ( /obj/machinery/computer/records/security{ dir = 1 @@ -40120,53 +41085,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"lOm" = ( -/obj/item/stack/sheet/rglass{ - amount = 30; - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/sheet/plasteel{ - amount = 10; - pixel_x = -6; - pixel_y = 7 - }, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/stack/sheet/iron/fifty{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stack/rods/fifty{ - pixel_x = 12; - pixel_y = 2 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/machinery/light/directional/west, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "lOy" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -40180,25 +41098,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/port) -"lOZ" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice{ - pixel_x = -5; - pixel_y = 15 - }, -/obj/item/reagent_containers/cup/glass/bottle/vodka{ - pixel_y = 15; - pixel_x = 6 - }, -/obj/structure/railing, -/obj/item/reagent_containers/cup/glass/flask{ - pixel_x = -6 - }, -/obj/item/reagent_containers/cup/glass/flask{ - pixel_x = 11 - }, -/turf/open/floor/eighties, -/area/station/engineering/break_room) "lPc" = ( /obj/structure/chair/office/light{ dir = 1 @@ -40281,6 +41180,10 @@ /obj/effect/turf_decal/tile/dark_green/fourcorners, /turf/open/floor/iron/dark, /area/station/science/cytology) +"lQA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lQE" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, @@ -40351,6 +41254,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"lRr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/machinery/suit_storage_unit/engine, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "lRz" = ( /obj/structure/safe/floor, /obj/item/stack/spacecash/c1000, @@ -40375,14 +41286,6 @@ /obj/machinery/deepfryer, /turf/open/floor/wood/large, /area/station/service/kitchen) -"lRG" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/space_heater, -/obj/effect/turf_decal/bot, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "lRP" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 8 @@ -40453,17 +41356,6 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/central) -"lTe" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - pixel_y = 6 - }, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/engineering/lobby) "lTw" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/tile/dark_blue{ @@ -40493,6 +41385,13 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/security/courtroom) +"lTX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "lUk" = ( /obj/structure/railing, /obj/structure/cable, @@ -40544,12 +41443,18 @@ /obj/item/clothing/gloves/latex, /turf/open/floor/iron/white/textured_large, /area/station/medical/surgery) -"lUK" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 9 +"lUM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) +/turf/closed/wall/r_wall, +/area/station/engineering/lobby) +"lUO" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/meter/monitored/distro_loop, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "lUV" = ( /obj/machinery/camera/directional/east{ c_tag = "Prison Isolation Cell"; @@ -40581,11 +41486,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) -"lVq" = ( -/obj/machinery/light/directional/west, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "lVs" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 8 @@ -40619,13 +41519,16 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/medical/psychology) -"lVz" = ( +"lVA" = ( +/obj/machinery/meter, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Air Pump Room"; + req_access = list("atmospherics") + }, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "lVD" = ( /obj/machinery/door/airlock/engineering/glass, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40634,6 +41537,16 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) +"lVH" = ( +/obj/machinery/computer/records/security{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/south{ + name = "AI Ministat Camera Monitor" + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "lVK" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, @@ -40688,33 +41601,6 @@ }, /turf/open/openspace, /area/station/maintenance/port/fore) -"lWy" = ( -/obj/structure/lattice/catwalk, -/obj/structure/table/glass, -/obj/item/crowbar/red, -/obj/item/wrench, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 1; - pixel_y = 2 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 1; - pixel_y = 2 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 1; - pixel_y = 2 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) -"lWI" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/junction, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "lWK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40726,11 +41612,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"lWV" = ( -/obj/effect/turf_decal/trimline/yellow, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "lWZ" = ( /obj/structure/railing{ dir = 1 @@ -40759,15 +41640,10 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"lXq" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/structure/fireaxecabinet/directional/west, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +"lXz" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "lXC" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -40792,6 +41668,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) +"lXK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "lXM" = ( /obj/effect/turf_decal/siding/blue/corner{ dir = 1 @@ -40829,9 +41712,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"lYh" = ( -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "lYj" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -40930,21 +41810,14 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"lZI" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/computer/atmos_control/nitrogen_tank{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "lZM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/stairs/south, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"lZQ" = ( +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "lZV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -40958,11 +41831,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/central) -"lZW" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/plasma_tank, -/turf/open/floor/engine/plasma, -/area/station/engineering/main) "mae" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -41010,6 +41878,14 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"maS" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "mbk" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -41098,28 +41974,6 @@ /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"mco" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Mix to Gas" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"mcs" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/directions/engineering/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "mcB" = ( /obj/structure/table/wood, /obj/item/food/grown/poppy{ @@ -41164,6 +42018,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"mcT" = ( +/obj/structure/lattice, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "mcX" = ( /obj/structure/table/reinforced, /obj/item/dice{ @@ -41187,13 +42046,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured, /area/station/cargo/warehouse) -"mdn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/banner/red{ - inspiration_available = 0 - }, -/turf/open/floor/eighties, -/area/station/maintenance/hallway/abandoned_recreation) "mdp" = ( /obj/structure/closet, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -41201,6 +42053,18 @@ /obj/item/mop, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"mdw" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/arrow_ccw{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/construction) "mdx" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, @@ -41242,11 +42106,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"meh" = ( -/obj/structure/cable, -/obj/structure/closet/secure_closet/engineering_personal, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mek" = ( /obj/effect/turf_decal/tile/green/full, /obj/machinery/biogenerator, @@ -41316,6 +42175,19 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"meE" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/layer1, +/obj/machinery/button/door/directional/east{ + id = "SM_shutters"; + name = "Radiation Shutters"; + req_access = list("engineering") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "meK" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/status_display/evac/directional/west, @@ -41360,6 +42232,18 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/ai) +"mfn" = ( +/obj/structure/table, +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_y = 13 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -9; + pixel_y = 9 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "mfs" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -41394,11 +42278,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"mfG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "mfO" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -41420,15 +42299,6 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/bitrunning/den) -"mgf" = ( -/obj/structure/railing/corner, -/obj/structure/railing, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "mgh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -41563,6 +42433,12 @@ }, /turf/open/floor/iron, /area/station/science/explab) +"mil" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "mip" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -41630,10 +42506,6 @@ "mjc" = ( /turf/open/openspace, /area/station/service/library/private) -"mje" = ( -/obj/structure/ladder, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "mjh" = ( /obj/structure/broken_flooring/corner/directional/east, /turf/open/floor/plating, @@ -41643,6 +42515,23 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"mju" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/construction) +"mjy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Gas to Mix" + }, +/obj/effect/turf_decal/trimline/yellow, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "mjB" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -41656,6 +42545,13 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating/airless, /area/station/maintenance/port/aft) +"mkd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/banner/red{ + inspiration_available = 0 + }, +/turf/open/floor/eighties, +/area/station/maintenance/hallway/abandoned_recreation) "mke" = ( /obj/structure/table, /obj/item/binoculars, @@ -41666,6 +42562,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/glass, /area/station/commons/fitness/recreation) +"mkv" = ( +/obj/structure/table, +/obj/structure/bedsheetbin/empty{ + pixel_y = 6 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "mkI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41706,18 +42609,12 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"mlx" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Port to Fuel Pipe" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"mlJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"mkV" = ( +/obj/machinery/light_switch/directional/west, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, /area/station/engineering/break_room) "mlL" = ( /obj/structure/kitchenspike, @@ -41736,18 +42633,6 @@ /obj/machinery/vending/cigarette, /turf/open/floor/wood, /area/station/commons/fitness/recreation) -"mmc" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "mmi" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck - Fore"; @@ -41767,10 +42652,19 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) -"mmN" = ( -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"mmt" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/openspace, +/area/station/engineering/atmos/project) +"mmM" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/broken_flooring/side/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "mmS" = ( /obj/machinery/light/small/broken, /turf/closed/wall/r_wall, @@ -41790,6 +42684,12 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) +"mmZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "mnn" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/effect/mapping_helpers/airlock/welded, @@ -42019,10 +42919,6 @@ /obj/item/stack/rods/two, /turf/open/space/basic, /area/space/nearstation) -"mqx" = ( -/obj/structure/railing, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "mqJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -42036,13 +42932,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/carpet, /area/station/security/courtroom) -"mqL" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics - n2o Cell"; - name = "atmospherics camera" - }, -/turf/open/floor/engine/n2o, -/area/station/engineering/main) "mqQ" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -42083,13 +42972,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"mrn" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "mrp" = ( /obj/structure/table/wood, /obj/machinery/chem_dispenser/drinks, @@ -42195,27 +43077,31 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mtd" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 3; - pixel_y = 10 - }, -/obj/item/pen{ - pixel_x = 17 - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "mtg" = ( /obj/structure/sign/poster/official/soft_cap_pop_art/directional/west, /turf/open/openspace, /area/station/maintenance/starboard/fore) +"mtl" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/toy/plush/moth{ + name = "Headslicer Mofiny"; + pixel_x = 2; + pixel_y = 11 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/toy/plush/moth{ + name = "Flutty The Ravager Moffy"; + pixel_x = 5 + }, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/north, +/obj/item/toy/plush/moth{ + name = "Sporg Asbord"; + pixel_x = -8; + pixel_y = -3 + }, +/obj/structure/sign/poster/ripped/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "mtp" = ( /obj/structure/frame/machine, /turf/open/floor/plating, @@ -42287,18 +43173,6 @@ /obj/structure/transit_tube/diagonal/topleft, /turf/open/space/openspace, /area/space/nearstation) -"mue" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mui" = ( /obj/structure/chair{ dir = 1 @@ -42319,6 +43193,18 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/kitchen, /area/station/maintenance/port/aft) +"mur" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/storage) +"mus" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Bay Shutters"; + id = "qm_cargobay"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "muu" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 4 @@ -42344,6 +43230,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"muC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock{ + name = "Garden" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) +"muE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "muF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/autoname/directional/north, @@ -42380,6 +43287,12 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, /area/station/hallway/secondary/entry) +"muW" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "mvf" = ( /obj/machinery/door/window/right/directional/north, /turf/open/floor/plating, @@ -42395,6 +43308,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload) +"mvu" = ( +/obj/effect/turf_decal/trimline/dark, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Distro to Waste" + }, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "mvy" = ( /obj/item/kirbyplants/random, /obj/structure/railing{ @@ -42431,11 +43353,6 @@ /obj/structure/chair/stool/directional/north, /turf/open/floor/wood, /area/station/maintenance/starboard/lesser) -"mwk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) "mwm" = ( /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, @@ -42455,6 +43372,10 @@ "mwr" = ( /turf/closed/wall, /area/station/security/evidence) +"mwx" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "mwy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -42462,17 +43383,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/lawoffice) -"mwz" = ( -/obj/effect/turf_decal/tile/purple, -/obj/structure/broken_flooring/singular/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) -"mwJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter/room) "mwL" = ( /obj/effect/turf_decal/bot_white/left, /turf/open/floor/iron/dark/textured_large, @@ -42504,6 +43414,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"mwY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/siding/red/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "mxF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -42583,6 +43500,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"myt" = ( +/obj/structure/lattice/catwalk, +/obj/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) "myx" = ( /turf/closed/wall, /area/station/service/library/private) @@ -42631,12 +43553,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) -"mzR" = ( -/obj/effect/turf_decal/tile/dark_green{ - dir = 1 +"mzN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "mzT" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -42705,10 +43628,6 @@ /obj/structure/railing, /turf/open/floor/glass, /area/station/science/zoo) -"mAD" = ( -/obj/machinery/meter, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "mAO" = ( /obj/item/clothing/head/costume/shrine_wig, /turf/open/floor/plating/airless, @@ -42729,6 +43648,13 @@ }, /turf/open/floor/iron, /area/station/construction/storage_wing) +"mBr" = ( +/obj/item/storage/toolbox/mechanical, +/obj/structure/table, +/obj/item/analyzer, +/obj/item/multitool, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "mBK" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -42849,6 +43775,13 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"mDD" = ( +/obj/machinery/atmospherics/pipe/multiz/orange/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "mDF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -42914,20 +43847,6 @@ /obj/effect/turf_decal/tile/brown/full, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) -"mEJ" = ( -/obj/machinery/power/supermatter_crystal/engine, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "mEO" = ( /obj/machinery/computer/monitor, /obj/effect/turf_decal/tile/dark_blue/opposingcorners{ @@ -42935,13 +43854,6 @@ }, /turf/open/floor/iron/checker, /area/station/ai_monitored/command/storage/satellite) -"mFg" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mFA" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/decal/cleanable/dirt, @@ -42989,47 +43901,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"mGw" = ( -/obj/item/storage/box/lights/mixed{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock{ - pixel_x = -6; - pixel_y = -4 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/airalarm/directional/south, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "mGx" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/engine/hull, /area/station/maintenance/starboard/lesser) -"mGB" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 1 - }, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/full, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter/room) "mGO" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -43083,6 +43960,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"mHH" = ( +/obj/item/stack/sheet/cotton{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "mHK" = ( /obj/structure/disposalpipe/trunk/multiz/down{ dir = 8 @@ -43112,10 +43997,31 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"mHZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "mIa" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mId" = ( +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) +"mIg" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "mIi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -43182,6 +44088,13 @@ /obj/structure/ladder, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/command/nuke_storage) +"mIR" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "mIX" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/frame/computer{ @@ -43268,30 +44181,10 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating/airless, /area/station/maintenance/port/aft) -"mJO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"mJW" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/structure/table, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 12 - }, -/obj/item/tank/jetpack/oxygen{ - pixel_y = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) +"mKk" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "mKo" = ( /obj/machinery/door/airlock/research{ name = "Ordnance Gas Storage" @@ -43369,6 +44262,12 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/iron/dark, /area/station/service/chapel) +"mLk" = ( +/obj/machinery/computer/atmos_alert{ + dir = 1 + }, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "mLl" = ( /obj/machinery/vending/cigarette, /turf/open/floor/carpet, @@ -43398,6 +44297,9 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"mLS" = ( +/turf/open/openspace, +/area/station/engineering/break_room) "mMb" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -43405,12 +44307,6 @@ }, /turf/open/openspace, /area/station/command/bridge) -"mMk" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 10 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mMx" = ( /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/structure/window/reinforced/tinted/spawner/directional/east, @@ -43452,13 +44348,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"mNf" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "mNj" = ( /obj/structure/sign/warning/vacuum/external/directional/south, /turf/open/floor/plating, @@ -43486,6 +44375,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"mNC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/radiation/rad_area/directional/south, +/turf/open/openspace, +/area/station/engineering/break_room) "mND" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -43525,10 +44419,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"mOn" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, +"mOo" = ( +/obj/effect/turf_decal/trimline/yellow/filled, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +/area/station/engineering/atmos/upper) "mOx" = ( /obj/structure/bed/dogbed/runtime, /obj/item/toy/figure/cmo{ @@ -43612,10 +44510,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) -"mPy" = ( -/obj/machinery/camera/autoname/directional/west, -/turf/open/space/basic, -/area/space/nearstation) "mPB" = ( /obj/machinery/camera/directional/south{ c_tag = "Holodeck - Aft"; @@ -43662,6 +44556,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mQT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) "mQX" = ( /obj/machinery/mineral/ore_redemption{ dir = 4; @@ -43752,13 +44653,6 @@ "mSd" = ( /turf/closed/wall, /area/station/commons/lounge) -"mSm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "mSq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -43789,6 +44683,15 @@ /obj/effect/landmark/start/quartermaster, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) +"mSE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/obj/machinery/meter{ + name = "Mixed Air Tank In" + }, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) "mSF" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43892,9 +44795,22 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"mUN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "mUR" = ( /turf/closed/wall, /area/station/service/bar/backroom) +"mUS" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "mUY" = ( /obj/structure/table, /obj/item/grenade/chem_grenade/teargas/moustache{ @@ -43937,12 +44853,24 @@ "mVu" = ( /turf/open/floor/wood, /area/station/command/heads_quarters/ce) +"mVw" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/modular_computer/preset/engineering{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "mVC" = ( /obj/structure/lattice, /obj/effect/spawner/random/maintenance, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/space/openspace, /area/space/nearstation) +"mVM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output, +/turf/open/floor/engine/air, +/area/station/engineering/atmos/upper) "mWu" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/glass, @@ -43980,12 +44908,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) -"mWN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ - dir = 4 - }, -/turf/open/floor/engine/n2o, -/area/station/engineering/main) "mWQ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/poster/contraband/eat/directional/north, @@ -44018,6 +44940,13 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"mXl" = ( +/obj/structure/broken_flooring/singular/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "mXs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -44027,13 +44956,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"mXC" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump/on/general/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mXL" = ( /obj/effect/turf_decal/weather/snow, /turf/open/floor/plating, @@ -44042,14 +44964,6 @@ /obj/effect/spawner/random/structure/grille, /turf/open/space/basic, /area/space/nearstation) -"mXR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 10 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "mXS" = ( /obj/effect/turf_decal/trimline/red/filled/mid_joiner{ dir = 4 @@ -44098,6 +45012,25 @@ /obj/effect/landmark/start/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"mYh" = ( +/obj/structure/lattice/catwalk, +/obj/structure/table/glass, +/obj/item/phone{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/openspace, +/area/station/engineering/break_room) +"mYm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "mYo" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -44164,6 +45097,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"mZo" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "mZq" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres, @@ -44182,13 +45123,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/science/robotics) -"mZH" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Cold Loop to Gas" - }, +"mZK" = ( +/obj/machinery/airalarm/directional/north, /turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/area/station/engineering/atmos/hfr_room) "mZV" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44197,15 +45135,13 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/openspace, /area/station/hallway/primary/central) -"mZZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/supply/visible{ - dir = 4 +"naa" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "nah" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -44222,6 +45158,17 @@ /obj/effect/landmark/navigate_destination/cargo, /turf/open/floor/iron, /area/station/cargo/storage) +"naq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nar" = ( /obj/structure/railing/corner{ dir = 8 @@ -44229,6 +45176,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) +"nav" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "naC" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -44237,22 +45190,6 @@ }, /turf/open/floor/plating, /area/station/service/kitchen) -"naO" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"naP" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "From Space Cooler" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "naR" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/glass, @@ -44301,18 +45238,19 @@ /obj/machinery/holopad, /turf/open/floor/wood/large, /area/station/service/library/private) -"nbW" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/computer/station_alert{ - dir = 1 +"nbY" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/wood{ + dir = 5 }, -/obj/structure/railing, -/turf/open/openspace, -/area/station/engineering/atmos/upper) -"nck" = ( -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/large, -/area/station/hallway/primary/central) +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/modular_computer/laptop/preset/civilian{ + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "nct" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -44341,12 +45279,23 @@ "ncO" = ( /turf/open/floor/glass/reinforced, /area/station/hallway/secondary/entry) -"ndc" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 +"ncT" = ( +/obj/machinery/electrolyzer, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"ncV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/engineering/main) "nde" = ( /turf/open/floor/wood, /area/station/command/heads_quarters/cmo) @@ -44372,16 +45321,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"ndM" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "ndQ" = ( /obj/machinery/door/airlock{ name = "Emergency Storage" @@ -44389,11 +45328,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/plating, /area/station/maintenance/central) -"ndR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "ndS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/textured_large, @@ -44404,6 +45338,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/science/lab) "nec" = ( @@ -44435,10 +45370,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/port) -"ner" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "ney" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/warning{ dir = 1 @@ -44472,13 +45403,6 @@ }, /turf/open/floor/carpet, /area/station/service/theater) -"neI" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics - Oxygen Supply"; - name = "atmospherics camera" - }, -/turf/open/floor/engine/o2, -/area/station/engineering/main) "neJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44488,12 +45412,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"neM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "nfa" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -44529,17 +45447,22 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"nfs" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "nfB" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"nfE" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing/corner/end, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/stairs/left, +/area/station/maintenance/disposal/incinerator) "nfG" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -44547,6 +45470,10 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/dark, /area/station/science/lobby) +"nfM" = ( +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "nfR" = ( /turf/closed/wall, /area/station/medical/break_room) @@ -44581,6 +45508,14 @@ dir = 8 }, /area/station/ai_monitored/turret_protected/aisat_interior) +"ngp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) "ngq" = ( /obj/machinery/door/airlock/grunge, /obj/effect/turf_decal/siding/dark{ @@ -44633,15 +45568,6 @@ /obj/effect/mapping_helpers/mail_sorting/service/law_office, /turf/open/floor/iron/large, /area/station/hallway/primary/central) -"nhD" = ( -/obj/structure/table/glass, -/obj/machinery/vending/wallmed/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "nhE" = ( /obj/structure/sign/poster/contraband/communist_state/directional/north, /obj/effect/decal/cleanable/crayon{ @@ -44763,6 +45689,9 @@ }, /turf/open/floor/iron/freezer, /area/station/ai_monitored/turret_protected/aisat/foyer) +"njk" = ( +/turf/closed/wall, +/area/station/engineering/main) "njv" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -44792,12 +45721,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"njF" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "njH" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical) @@ -44807,12 +45730,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"njW" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/trinary/mixer/flipped, -/obj/machinery/light/directional/north, -/turf/open/openspace, -/area/station/engineering/atmos/project) +"njY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "nkh" = ( /obj/machinery/holopad, /turf/open/floor/iron/dark/smooth_large, @@ -44850,10 +45772,24 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"nkE" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "nkF" = ( /obj/machinery/light/directional/east, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"nkZ" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "nld" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -44887,11 +45823,6 @@ "nlt" = ( /turf/open/floor/iron/dark/textured, /area/station/engineering/supermatter/room) -"nlv" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/lobby) "nlD" = ( /turf/closed/wall/r_wall, /area/station/medical/abandoned) @@ -44927,6 +45858,14 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"nmk" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/east, +/turf/open/openspace, +/area/station/engineering/atmos/project) "nml" = ( /obj/machinery/button/door/directional/east{ id = "qm_cargobay"; @@ -44948,6 +45887,11 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) +"nmx" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/plating, +/area/station/engineering/atmos/upper) "nmB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/confetti, @@ -44992,12 +45936,6 @@ }, /turf/open/floor/wood/large, /area/station/service/library) -"nmW" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "nng" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45092,6 +46030,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/meeting_room/council) +"nog" = ( +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/item/folder/yellow{ + pixel_x = 2; + pixel_y = -12 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "noi" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/spawner/random/structure/table_or_rack, @@ -45100,12 +46055,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) -"noj" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "nol" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/machinery/button/door/directional/north{ @@ -45122,11 +46071,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"nov" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/mix_tank, -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos/upper) "noz" = ( /obj/structure/chair/office/light{ dir = 8 @@ -45154,6 +46098,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"noI" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/vending/tool, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "noJ" = ( /obj/structure/table, /obj/item/stock_parts/servo, @@ -45184,18 +46135,13 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) -"noR" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/item/lightreplacer{ - pixel_y = 7 +"noU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/siding/red{ + dir = 1 }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) +/turf/open/floor/engine, +/area/station/engineering/supermatter) "npb" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -45212,6 +46158,14 @@ /obj/structure/sign/nanotrasen, /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) +"npj" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/light_switch/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "npx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -45294,6 +46248,12 @@ }, /turf/open/floor/iron/dark, /area/station/science/server) +"nqm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "nqt" = ( /turf/open/floor/plating/elevatorshaft, /area/station/engineering/supermatter/room) @@ -45317,12 +46277,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"nqE" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/directional/east, -/obj/machinery/firealarm/directional/east, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "nqG" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/airalarm/directional/west, @@ -45425,6 +46379,14 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"nsx" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmos/project) "nsI" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 8 @@ -45445,6 +46407,14 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) +"nsN" = ( +/obj/structure/cable, +/obj/structure/tank_dispenser{ + pixel_x = -1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "nsO" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/green/opposingcorners{ @@ -45453,13 +46423,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"nsS" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "nsW" = ( /obj/item/infuser_book{ pixel_x = -7; @@ -45512,6 +46475,17 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron, /area/station/cargo/storage) +"ntA" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"ntE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/space_heater, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "ntJ" = ( /obj/structure/railing, /obj/machinery/camera/autoname/directional/north{ @@ -45529,6 +46503,14 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/explab) +"ntW" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "nuw" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -45576,13 +46558,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/cmo) -"nuY" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "CO2 to Port" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "nuZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -45644,7 +46619,7 @@ /obj/effect/turf_decal/siding/blue{ dir = 8 }, -/turf/open/floor/iron/dark/telecomms, +/turf/open/floor/catwalk_floor, /area/station/science/server) "nvB" = ( /obj/structure/window/reinforced/spawner/directional/west, @@ -45718,6 +46693,10 @@ }, /turf/open/floor/wood, /area/station/commons/storage/tools) +"nws" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "nwC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45734,10 +46713,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"nwO" = ( -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "nwQ" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 5 @@ -45812,9 +46787,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/space/nearstation) -"nxD" = ( -/turf/open/floor/engine/co2, -/area/station/engineering/main) "nxG" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner/end{ @@ -45830,6 +46802,14 @@ /obj/effect/mapping_helpers/airlock/access/all/security/armory, /turf/open/floor/plating, /area/station/security/execution/education) +"nxN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/effect/landmark/start/depsec/engineering, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "nxR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45858,11 +46838,18 @@ /obj/effect/spawner/random/clothing/funny_hats, /turf/open/floor/plating, /area/station/maintenance/port) -"nyw" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/nitrous_tank, -/turf/open/floor/engine/n2o, -/area/station/engineering/main) +"nym" = ( +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/paper, +/obj/item/pen, +/obj/structure/sign/poster/contraband/missing_gloves/directional/west, +/turf/open/floor/wood, +/area/station/commons/dorms) +"nyz" = ( +/obj/structure/ladder, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "nyA" = ( /obj/machinery/camera/motion{ c_tag = "Vault - Lower"; @@ -45907,6 +46894,12 @@ /obj/structure/cable, /turf/open/floor/wood/large, /area/station/medical/psychology) +"nyY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "nzd" = ( /obj/structure/chair{ dir = 8 @@ -45934,17 +46927,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) -"nzk" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"nzt" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "nzy" = ( /obj/structure/closet/crate/trashcart/filled, /obj/structure/sign/poster/contraband/random/directional/west, @@ -45961,6 +46943,12 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/security/lockers) +"nzG" = ( +/obj/structure/transport/linear{ + radial_travel = 0 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "nzZ" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -46016,10 +47004,16 @@ }, /turf/open/floor/plating, /area/station/science/cytology) -"nAP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden, -/turf/open/floor/iron/stairs/left, -/area/station/maintenance/disposal/incinerator) +"nAN" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Waste Release"; + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "nAS" = ( /obj/item/cigbutt{ pixel_x = 7; @@ -46046,23 +47040,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"nBk" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) -"nBl" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/cable, -/obj/machinery/computer/turbine_computer, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "nBq" = ( /obj/structure/table/wood, /obj/item/food/grown/poppy{ @@ -46087,6 +47064,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/lesser) +"nBs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "nBu" = ( /obj/structure/closet/crate/trashcart/laundry, /turf/open/floor/plating, @@ -46118,14 +47104,6 @@ }, /turf/open/floor/iron/white/smooth_corner, /area/station/hallway/secondary/entry) -"nCb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "nCc" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plating, @@ -46141,6 +47119,7 @@ /obj/machinery/firealarm/directional/west{ pixel_y = -3 }, +/obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/science/lab) "nCg" = ( @@ -46199,6 +47178,12 @@ /obj/effect/mapping_helpers/mail_sorting/science/research, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"nCC" = ( +/obj/machinery/light/directional/north, +/obj/machinery/light_switch/directional/north, +/obj/structure/closet/wardrobe/white, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "nCI" = ( /obj/machinery/component_printer, /obj/effect/turf_decal/bot_white, @@ -46208,20 +47193,14 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port) -"nCN" = ( +"nCO" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) -"nCP" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/broken{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nDe" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46267,6 +47246,18 @@ /obj/machinery/light_switch/directional/north, /turf/open/openspace, /area/station/medical/storage) +"nDM" = ( +/obj/item/reagent_containers/cup/glass/bottle/wine_voltaic{ + pixel_y = 5; + pixel_x = 7 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_y = 6; + pixel_x = -6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "nDS" = ( /obj/effect/turf_decal/siding/blue, /obj/effect/turf_decal/siding/blue{ @@ -46277,18 +47268,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"nDT" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 4; - name = "Plasma to Multideck" - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "nDX" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46337,14 +47316,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"nEZ" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/airalarm/directional/west, -/obj/item/clothing/head/soft/orange, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) +"nFx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nFA" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46459,6 +47437,13 @@ /obj/effect/spawner/random/trash/grime, /turf/open/floor/iron/sepia, /area/station/hallway/secondary/construction) +"nGB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) "nGH" = ( /obj/effect/turf_decal/siding/red{ dir = 6 @@ -46545,19 +47530,6 @@ dir = 1 }, /area/station/service/library) -"nHY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Waste to Filter" - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plating, -/area/station/engineering/main) "nIo" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters" @@ -46586,7 +47558,6 @@ pixel_x = 8; pixel_y = 2 }, -/obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lab) "nIA" = ( @@ -46594,6 +47565,12 @@ /obj/item/folder/red, /turf/open/floor/iron/dark/smooth_large, /area/station/security/courtroom) +"nID" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "nIH" = ( /obj/structure/weightmachine, /turf/open/floor/iron, @@ -46606,16 +47583,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) -"nIQ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "nIW" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -46671,12 +47638,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"nJO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "nJS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/disposal/bin, @@ -46713,6 +47674,11 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/cargo/storage) +"nKz" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "nKB" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table/glass, @@ -46723,6 +47689,11 @@ /obj/item/pen, /turf/open/floor/wood, /area/station/medical/medbay/central) +"nKD" = ( +/obj/effect/landmark/start/station_engineer, +/obj/structure/cable/layer1, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) "nKJ" = ( /obj/effect/turf_decal/siding/dark{ dir = 8 @@ -46785,10 +47756,6 @@ dir = 4 }, /area/station/science/robotics/lab) -"nLQ" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "nLU" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -46798,14 +47765,6 @@ dir = 4 }, /area/station/medical/surgery) -"nLX" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/machinery/shower/directional/west, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "nMp" = ( /obj/effect/turf_decal/siding/brown, /obj/structure/chair/sofa/corp/left{ @@ -46831,6 +47790,13 @@ /obj/structure/closet/l3closet/scientist, /turf/open/openspace, /area/station/command/gateway) +"nMV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/atmos/project) "nNd" = ( /obj/structure/railing/corner{ dir = 8 @@ -46854,14 +47820,6 @@ /obj/structure/cable, /turf/closed/wall, /area/station/maintenance/central) -"nNr" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/line, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "nNt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mecha_wreckage/ripley{ @@ -46916,6 +47874,12 @@ dir = 4 }, /area/station/ai_monitored/turret_protected/aisat/foyer) +"nNY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "nNZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow{ @@ -47004,14 +47968,6 @@ /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/dark/smooth_large, /area/station/security/eva) -"nPy" = ( -/obj/structure/ladder, -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "nPA" = ( /obj/item/storage/medkit/regular{ pixel_x = 3; @@ -47041,6 +47997,27 @@ "nPN" = ( /turf/open/floor/wood/large, /area/station/hallway/secondary/service) +"nPP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"nPS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/components/binary/pump/on/layer5{ + name = "N2 to Airmix" + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "nPW" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -47074,14 +48051,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nQl" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ +"nQs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 4 }, -/turf/open/openspace, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth, /area/station/engineering/atmos/upper) "nQw" = ( /obj/structure/railing/corner/end{ @@ -47121,6 +48098,13 @@ }, /turf/open/floor/grass, /area/station/science/genetics) +"nRk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "nRm" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/tile, @@ -47162,13 +48146,14 @@ /obj/structure/cable, /turf/open/floor/glass/reinforced, /area/station/solars/starboard/fore) -"nSb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"nRS" = ( +/obj/structure/chair/office{ + dir = 8 }, -/obj/item/cigbutt, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) +/obj/machinery/computer/security/telescreen/minisat/directional/west, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "nSk" = ( /obj/effect/turf_decal/siding/blue{ dir = 9 @@ -47230,13 +48215,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"nSW" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 1 - }, -/turf/open/space/openspace, -/area/space/nearstation) "nSX" = ( /obj/structure/table/glass, /obj/item/stack/package_wrap{ @@ -47336,6 +48314,13 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"nUj" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "nUk" = ( /obj/structure/railing{ dir = 8 @@ -47502,27 +48487,10 @@ /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"nWL" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/engine/o2, -/area/station/engineering/main) "nWO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"nWQ" = ( -/obj/item/clothing/shoes/magboots{ - desc = "Magnetic boots, for the solar enthusiasts. Idential to a regular magboot in everything but soul."; - name = "Solars' Magboots"; - pixel_x = -1; - pixel_y = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "nWS" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -47587,19 +48555,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating/airless, /area/space/nearstation) -"nXv" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 5 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) -"nXA" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 +"nXr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "nXQ" = ( /obj/effect/turf_decal/siding/dark{ dir = 8 @@ -47636,12 +48598,6 @@ /obj/item/knife/shiv, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"nYj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "nYn" = ( /obj/structure/showcase/mecha/ripley, /turf/open/floor/iron/dark, @@ -47680,6 +48636,10 @@ "nYQ" = ( /turf/open/floor/iron/smooth_half, /area/station/ai_monitored/turret_protected/aisat/foyer) +"nYR" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "nYT" = ( /obj/structure/railing{ dir = 4 @@ -47815,13 +48775,6 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"oai" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "oaj" = ( /turf/closed/wall, /area/station/security/medical) @@ -47844,24 +48797,17 @@ }, /turf/closed/wall/r_wall, /area/station/science/xenobiology) -"obi" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/meter{ - name = "O2 meter" - }, -/obj/machinery/atmospherics/pipe/multiz/supply/visible{ - dir = 8; - name = "O2 Multideck Adapter" - }, -/obj/structure/railing, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "obn" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/central) +"obp" = ( +/obj/machinery/fax{ + fax_name = "Chief Engineer's Office"; + name = "Chief Engineer's Fax Machine" + }, +/obj/structure/table/reinforced, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "obu" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/turf_decal/trimline/yellow, @@ -47878,10 +48824,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) -"obz" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/open/floor/engine/co2, -/area/station/engineering/main) "obC" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -47949,6 +48891,14 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"ocF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "ocG" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -47989,6 +48939,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) +"ocT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/sink/kitchen/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "odd" = ( /obj/structure/railing{ dir = 1 @@ -48077,6 +49036,19 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/wood, /area/station/commons/fitness/recreation) +"oeV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "O2 Multideck Adapter"; + dir = 8 + }, +/obj/machinery/meter{ + name = "O2 meter" + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "ofc" = ( /obj/machinery/digital_clock/directional/west, /obj/structure/disposalpipe/trunk{ @@ -48170,18 +49142,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white, /area/station/maintenance/starboard/lesser) -"ogq" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/machinery/shower/directional/west, -/obj/machinery/camera/directional/north{ - c_tag = "Engineering - Showers" - }, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson/engine, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "ogB" = ( /obj/machinery/power/turbine/core_rotor{ dir = 8; @@ -48264,13 +49224,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/openspace, /area/station/hallway/primary/port) -"ohG" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/scrubber/huge/movable, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "ohJ" = ( /obj/structure/disposalpipe/trunk/multiz/down{ dir = 4 @@ -48342,6 +49295,11 @@ /obj/item/electronics/apc, /turf/open/floor/wood, /area/station/commons/storage/tools) +"oiQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "oiR" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -48425,23 +49383,28 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/port) +"okh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "okk" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/engine/hull/air, /area/station/hallway/secondary/exit/departure_lounge) -"okr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 +"okm" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored{ + cable_layer = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "oky" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -48492,6 +49455,12 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/wood, /area/station/service/library/printer) +"okO" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "okP" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/camera/autoname/directional/east, @@ -48533,6 +49502,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) +"omc" = ( +/obj/effect/turf_decal/trimline/yellow/filled, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "omu" = ( /obj/structure/chair/stool/directional/south, /obj/machinery/mineral/stacking_unit_console{ @@ -48540,13 +49514,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"omF" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) +"omx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/vending/colavend, +/obj/effect/mapping_helpers/broken_machine, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "omG" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/effect/turf_decal/siding/purple/corner{ @@ -48555,17 +49528,8 @@ /obj/effect/turf_decal/siding/purple/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, /turf/open/floor/iron, /area/station/science/lab) -"omO" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "omX" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -48574,6 +49538,13 @@ /obj/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"onh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "onj" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/turf_decal/stripes/line{ @@ -48620,13 +49591,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"onL" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix Outlet Pump" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "onV" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48634,15 +49598,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) -"onX" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/machinery/modular_computer/preset/cargochat/engineering{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"oob" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/layer1, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) "ood" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, @@ -48665,6 +49625,14 @@ /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ooF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "ooK" = ( /obj/effect/decal/cleanable/blood/old, /obj/item/multitool{ @@ -48702,25 +49670,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"ope" = ( -/obj/machinery/space_heater, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "opj" = ( /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"opq" = ( -/obj/structure/cable, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "ops" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, @@ -48845,6 +49798,13 @@ /obj/structure/fake_stairs/directional/east, /turf/open/floor/iron, /area/station/cargo/storage) +"oqW" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "ora" = ( /obj/structure/railing/corner/end, /obj/effect/turf_decal/stripes/corner{ @@ -48863,6 +49823,27 @@ /obj/item/storage/toolbox/mechanical, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"orm" = ( +/obj/structure/cable, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/firealarm_sanity, +/turf/open/floor/iron, +/area/station/engineering/main) +"orn" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/table/reinforced, +/obj/item/storage/briefcase/secure{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/paper/monitorkey, +/obj/item/clipboard, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "orr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/graffiti, @@ -49027,20 +50008,6 @@ }, /turf/open/openspace, /area/station/hallway/secondary/construction) -"ouD" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 4; - name = "NO2 to Multideck" - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "ouE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49070,10 +50037,6 @@ }, /turf/open/floor/wood/large, /area/station/hallway/secondary/service) -"ouV" = ( -/obj/machinery/newscaster/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "ouW" = ( /obj/structure/sign/plaques/kiddie/library{ pixel_x = -32 @@ -49083,12 +50046,10 @@ }, /turf/open/floor/iron/stairs/right, /area/station/service/library) -"ovn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) +"ovq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos/upper) "ovx" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, @@ -49111,6 +50072,12 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/greater) +"ovN" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/engine_smes) "ovQ" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, @@ -49246,6 +50213,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) +"oxu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "oxG" = ( /obj/effect/turf_decal/siding/dark{ dir = 8 @@ -49294,20 +50270,13 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"oyv" = ( -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "N20 Multideck Adapter" - }, -/obj/structure/railing{ +"oys" = ( +/obj/structure/chair/sofa/bench/left{ dir = 4 }, -/obj/machinery/meter{ - name = "N20 meter" - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "oyy" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/box/white, @@ -49337,14 +50306,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"oyQ" = ( -/obj/machinery/atmospherics/pipe/multiz/cyan/visible{ - dir = 1; - initialize_directions = 5; - name = "Air Mix Multideck Adapter" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ozh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -49397,6 +50358,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ozE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "ozK" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -49442,6 +50409,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload_foyer) +"oAJ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "oAL" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -49473,10 +50447,14 @@ dir = 1 }, /area/station/science/robotics/lab) -"oBh" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) +"oBa" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oBo" = ( /obj/machinery/door/airlock/grunge{ name = "Cell 1" @@ -49486,20 +50464,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison/safe) -"oBv" = ( -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Access" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/command/general, -/obj/effect/mapping_helpers/airlock/access/any/command/minisat, -/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/navigate_destination/minisat_access_ai, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) +"oBp" = ( +/obj/machinery/air_sensor/carbon_tank, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos/upper) "oBy" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -49564,6 +50533,12 @@ }, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"oCr" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "oCs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -49597,6 +50572,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"oCS" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 4; + initialize_directions = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "oCT" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 4 @@ -49604,6 +50586,17 @@ /obj/item/clothing/head/cone, /turf/open/floor/engine/hull, /area/space/nearstation) +"oCU" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "oCX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49616,6 +50609,13 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"oDg" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/coffeepot, +/obj/item/storage/box/coffeepack, +/obj/machinery/coffeemaker, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "oDj" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/structure/cable, @@ -49674,13 +50674,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron/textured, /area/station/security/brig) -"oEh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/full, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter/room) "oEi" = ( /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured_large, @@ -49690,12 +50683,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"oEA" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "oEI" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/cup/glass/mug/britcup{ @@ -49709,6 +50696,11 @@ /obj/effect/spawner/random/maintenance, /turf/open/openspace, /area/station/maintenance/port/aft) +"oEN" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/lattice/catwalk, +/turf/open/floor/engine/hull/air, +/area/station/engineering/break_room) "oET" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -49756,6 +50748,15 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/coroner, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"oFn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oFw" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -49838,22 +50839,21 @@ /obj/item/storage/photo_album/bar, /turf/open/floor/carpet, /area/station/commons/lounge) -"oHa" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 10 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"oGW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "oHf" = ( /obj/effect/turf_decal/trimline/red/warning{ dir = 10 }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/office) -"oHh" = ( -/obj/machinery/light/directional/north, -/obj/machinery/light_switch/directional/north, -/obj/structure/closet/wardrobe/white, +"oHs" = ( +/obj/structure/closet/wardrobe/grey, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) "oHu" = ( @@ -49912,15 +50912,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/wood/large, /area/station/medical/psychology) -"oID" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/south, -/obj/machinery/power/energy_accumulator/tesla_coil/anchored, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 6 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "oII" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate, @@ -49985,13 +50976,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/command/nuke_storage) -"oJp" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 8 - }, -/turf/open/space/basic, -/area/space/nearstation) "oJr" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner{ @@ -50080,6 +51064,10 @@ /obj/effect/landmark/start/hangover, /turf/open/openspace, /area/station/hallway/primary/central) +"oKx" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "oKA" = ( /obj/effect/turf_decal/siding/dark/corner{ dir = 8 @@ -50105,6 +51093,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"oKN" = ( +/obj/structure/broken_flooring/singular/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oLa" = ( /obj/structure/table/wood, /obj/item/book/bible{ @@ -50167,17 +51159,15 @@ /obj/effect/landmark/navigate_destination/dockarrival, /turf/open/floor/iron/white/side, /area/station/hallway/primary/aft) +"oLx" = ( +/obj/structure/broken_flooring/side/directional/east, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "oLA" = ( /obj/structure/closet/firecloset, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"oLD" = ( -/obj/structure/railing/corner/end/flip{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "oLE" = ( /turf/open/floor/carpet, /area/station/maintenance/starboard/lesser) @@ -50196,6 +51186,10 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron, /area/station/science/explab) +"oLL" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "oLN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/barricade/sandbags, @@ -50220,6 +51214,11 @@ }, /turf/open/floor/engine/hull/air, /area/station/maintenance/port) +"oLX" = ( +/obj/structure/cable/layer1, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oMd" = ( /obj/effect/spawner/random/maintenance/two, /obj/item/grown/bananapeel{ @@ -50227,17 +51226,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"oMp" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/structure/closet/toolcloset, -/obj/machinery/camera/directional/north{ - c_tag = "Engineering - Shared Storage" - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "oMI" = ( /obj/machinery/door/airlock/command{ name = "Teleport Access" @@ -50297,19 +51285,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/eighties/red, /area/station/maintenance/hallway/abandoned_recreation) -"oNg" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/landmark/start/station_engineer, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/engineering/lobby) "oNi" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood{ @@ -50353,6 +51328,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"oNP" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/photocopier/prebuilt, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "oOc" = ( /obj/machinery/light/floor, /turf/open/floor/iron/dark/smooth_large, @@ -50369,6 +51350,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/lesser) +"oOs" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "oOw" = ( /obj/structure/lattice/catwalk, /obj/structure/ladder, @@ -50400,25 +51387,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/wood, /area/station/command/teleporter) -"oOL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"oOM" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 +"oON" = ( +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "oOS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50436,6 +51410,13 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/security/prison/mess) +"oOZ" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "oPa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50456,6 +51437,11 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) +"oPu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/freezer, +/area/station/engineering/atmos/pumproom) "oPM" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -50515,13 +51501,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"oQW" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "oRp" = ( /turf/open/floor/iron/textured_large, /area/space/nearstation) @@ -50570,6 +51549,17 @@ /obj/machinery/airalarm/directional/east, /turf/open/openspace, /area/station/command/gateway) +"oRU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oSb" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -50589,14 +51579,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"oSr" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/space_heater, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"oSq" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "oSt" = ( /obj/structure/broken_flooring/singular/directional, /obj/effect/decal/cleanable/dirt, @@ -50629,6 +51618,13 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark, /area/station/command/gateway) +"oSU" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/machinery/computer/station_alert{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "oSX" = ( /obj/structure/urinal/directional/north, /turf/open/floor/plating, @@ -50776,6 +51772,17 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"oUo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/terminal{ + dir = 1; + cable_layer = 1 + }, +/obj/structure/cable/multilayer/layer1, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) "oUC" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -50835,28 +51842,6 @@ /obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/iron, /area/station/science/breakroom) -"oVt" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "N2 to Port" - }, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"oVu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "oVz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/auto_name/directional/east, @@ -50870,16 +51855,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"oVI" = ( -/obj/machinery/light/directional/north, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "oVK" = ( /obj/structure/chair/office{ dir = 4 }, /turf/open/floor/carpet, /area/station/security/detectives_office) +"oVY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/table, +/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ + pixel_x = 14; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_construction, +/turf/open/floor/iron, +/area/station/engineering/lobby) "oWy" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/engine/hull/reinforced/air, @@ -50930,12 +51923,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/lesser) -"oXj" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "oXn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner{ @@ -50960,6 +51947,15 @@ }, /turf/open/openspace, /area/station/ai_monitored/turret_protected/ai) +"oXO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "oXQ" = ( /obj/structure/lattice/catwalk, /obj/structure/table, @@ -50970,12 +51966,19 @@ /turf/open/openspace, /area/station/maintenance/port/aft) "oXS" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable, +/obj/machinery/light_switch/directional/east, +/obj/item/crowbar, +/obj/item/pipe_dispenser{ + pixel_y = 8 }, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) +/obj/item/wrench, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/rack, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oXT" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 @@ -50987,6 +51990,11 @@ /obj/effect/spawner/random/entertainment/money_large, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) +"oXX" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "oXZ" = ( /obj/effect/spawner/random/maintenance/two, /obj/structure/rack{ @@ -51056,14 +52064,6 @@ /obj/structure/rack, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"oZm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass/plasma, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "oZn" = ( /obj/structure/chair/sofa/corp/right{ dir = 4 @@ -51136,6 +52136,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"oZV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "oZX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood/large, @@ -51169,17 +52177,6 @@ /obj/machinery/vending/cigarette, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"par" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/firealarm/directional/south, -/obj/machinery/fax{ - fax_name = "Engineering Lobby"; - name = "Engineering Lobby Fax Machine" - }, -/obj/structure/table, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/engineering/lobby) "paI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -51191,18 +52188,6 @@ /obj/structure/curtain/bounty/start_closed, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"paN" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Gas to Cold Loop" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "paY" = ( /obj/structure/window/reinforced/tinted/spawner/directional/north, /turf/open/openspace, @@ -51241,14 +52226,18 @@ /obj/structure/table/reinforced, /turf/open/floor/engine/hull, /area/space/nearstation) -"pby" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/structure/railing/corner/end, -/obj/effect/turf_decal/siding/dark/corner{ - dir = 4 +"pbt" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"pbB" = ( +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "pbG" = ( /obj/structure/rack, /obj/item/book/manual/wiki/engineering_construction{ @@ -51320,6 +52309,13 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"pcg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 10 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "pch" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/flowers_pp/style_random, @@ -51433,10 +52429,18 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/science/cytology) -"pdD" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, +"pdB" = ( /obj/structure/cable, -/turf/open/floor/iron/smooth, +/turf/closed/wall, +/area/station/engineering/main) +"pdM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, /area/station/engineering/break_room) "pdO" = ( /turf/closed/wall, @@ -51496,6 +52500,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/gateway) +"peo" = ( +/obj/machinery/computer/atmos_control/mix_tank{ + dir = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "pev" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, @@ -51508,13 +52519,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"peE" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/two, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "peF" = ( /obj/effect/spawner/structure/window, /obj/structure/cable, @@ -51605,6 +52609,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/wood/tile, /area/station/maintenance/port/aft) +"pgh" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) "pgo" = ( /obj/structure/flora/bush/flowers_br/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -51716,6 +52727,33 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) +"phf" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest{ + pixel_x = 3 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/clothing/gloves/color/black{ + pixel_y = 3 + }, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black{ + pixel_y = -3 + }, +/obj/item/clothing/mask/gas, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "phh" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -51885,15 +52923,6 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/space/basic, /area/space/nearstation) -"plI" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/machinery/shower/directional/east, -/obj/machinery/light/directional/south, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "pma" = ( /obj/structure/chair, /obj/item/cigbutt, @@ -51940,6 +52969,13 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) +"pmx" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "pmD" = ( /obj/structure/railing{ dir = 8 @@ -52017,6 +53053,18 @@ /obj/item/sticker/heart, /turf/open/floor/plating/airless, /area/station/maintenance/port/aft) +"pnc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Engineering" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "pnd" = ( /turf/open/floor/wood, /area/station/commons/toilet/restrooms) @@ -52078,6 +53126,16 @@ /obj/machinery/gateway/centerstation, /turf/open/floor/iron/dark, /area/station/command/gateway) +"pom" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/engine, +/area/station/engineering/main) "por" = ( /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/siding/wood, @@ -52099,6 +53157,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"pov" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "poZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52129,6 +53191,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/atmos/upper) +"ppX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) "pqj" = ( /turf/closed/wall/r_wall, /area/station/security/interrogation) @@ -52139,19 +53209,6 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/office) -"pqo" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Project Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/atmos/upper) "pqQ" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -52188,16 +53245,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"prt" = ( -/obj/effect/turf_decal/trimline/red/filled/line, -/obj/structure/rack, -/obj/item/wrench, -/obj/item/radio/off{ - pixel_x = -5; - pixel_y = 2 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "prB" = ( /obj/effect/turf_decal/box/white{ color = "#CCDCFF" @@ -52281,11 +53328,6 @@ "psC" = ( /turf/open/openspace, /area/station/hallway/primary/fore) -"psH" = ( -/obj/structure/closet/firecloset, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/engine, -/area/station/engineering/main) "psI" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/west, /obj/machinery/light/directional/west, @@ -52383,6 +53425,13 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"pub" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "puf" = ( /obj/structure/cable/layer3, /obj/structure/cable, @@ -52405,6 +53454,7 @@ }, /obj/effect/turf_decal/siding/purple, /obj/machinery/camera/autoname/directional/north, +/obj/machinery/light_switch/directional/north, /turf/open/floor/iron, /area/station/science/lab) "puR" = ( @@ -52416,10 +53466,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"pvb" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "pvg" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52463,12 +53509,32 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) +"pvQ" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/engine, +/area/station/engineering/break_room) +"pvS" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/break_room) "pvT" = ( /obj/structure/railing{ dir = 8 }, /turf/open/openspace, /area/station/ai_monitored/turret_protected/ai_upload) +"pvU" = ( +/obj/structure/cable/layer1, +/obj/structure/sign/warning/radiation/rad_area/directional/east, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) +"pwb" = ( +/obj/machinery/meter{ + name = "Mixed Air Tank In" + }, +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) "pwy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -52543,6 +53609,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/command/heads_quarters/ce) +"pxN" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "N2 Multideck Adapter"; + dir = 8 + }, +/obj/machinery/meter{ + name = "N2 meter" + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "pxS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -52684,6 +53761,14 @@ /obj/item/reagent_containers/cup/glass/waterbottle/large, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) +"pzZ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/missing_gloves/directional/north, +/obj/machinery/rnd/production/circuit_imprinter, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "pAf" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/corner{ dir = 1 @@ -52791,6 +53876,9 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/commons/storage/primary) +"pBP" = ( +/turf/open/floor/engine/air, +/area/station/engineering/atmos/upper) "pBU" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -52827,6 +53915,15 @@ }, /turf/open/floor/glass, /area/station/security/brig) +"pDa" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "pDf" = ( /obj/docking_port/stationary{ dir = 8; @@ -52839,15 +53936,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"pDk" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 9 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "pDp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52861,16 +53949,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"pDG" = ( -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/obj/effect/turf_decal/arrows/white{ - color = "#0000FF"; - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "pDO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52879,6 +53957,15 @@ /obj/machinery/holopad, /turf/open/floor/wood/large, /area/station/service/theater) +"pDT" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "pEj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -52909,6 +53996,15 @@ /obj/structure/cable, /turf/closed/wall, /area/station/medical/medbay/central) +"pEG" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "pEI" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -52979,15 +54075,13 @@ }, /turf/open/openspace, /area/station/science/xenobiology) -"pFF" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/structure/cable, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, +"pFJ" = ( +/obj/machinery/atmospherics/components/trinary/mixer/flipped, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/engineering/main) +/area/station/maintenance/disposal/incinerator) "pFX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -53015,6 +54109,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"pGl" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine/hull/air, +/area/station/engineering/atmos/project) "pGr" = ( /obj/structure/table, /obj/item/clothing/gloves/color/yellow{ @@ -53056,11 +54154,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"pGx" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "pGD" = ( /obj/machinery/camera/directional/west{ c_tag = "Science - Xenobiology South"; @@ -53206,6 +54299,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) +"pID" = ( +/obj/effect/landmark/start/atmospheric_technician, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "pIP" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/dark_blue{ @@ -53219,6 +54316,13 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"pJf" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "pJi" = ( /obj/machinery/rnd/experimentor, /turf/open/floor/engine, @@ -53251,17 +54355,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/explab) -"pJs" = ( -/obj/effect/turf_decal/box/white{ - color = "#9FED58" - }, -/obj/effect/turf_decal/arrows/white{ - color = "#FF0000"; - dir = 4; - pixel_x = -15 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "pJC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mecha_wreckage/ripley/deathripley, @@ -53324,6 +54417,16 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"pJR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/bounty, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Bay Shutters"; + id = "qm_cargobay"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "pJS" = ( /turf/open/floor/iron, /area/station/hallway/primary/aft) @@ -53334,6 +54437,11 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) +"pKc" = ( +/obj/machinery/light/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "pKd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -53402,10 +54510,6 @@ /obj/structure/cable, /turf/open/floor/glass, /area/station/security/brig) -"pLa" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/turf/open/floor/engine, -/area/station/engineering/main) "pLd" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -53431,13 +54535,6 @@ }, /turf/open/openspace, /area/station/construction/storage_wing) -"pLo" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "pLv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airlock/abandoned, @@ -53480,6 +54577,18 @@ /obj/structure/noticeboard/directional/north, /turf/open/floor/wood/large, /area/station/service/library/private) +"pLP" = ( +/obj/machinery/power/terminal{ + dir = 1; + cable_layer = 1 + }, +/obj/structure/cable/multilayer/layer1, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) "pLQ" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/engine/hull, @@ -53522,12 +54631,6 @@ /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"pMg" = ( -/obj/machinery/power/emitter{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/main) "pMi" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -53554,22 +54657,6 @@ /obj/effect/mapping_helpers/broken_machine, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) -"pMt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, -/obj/structure/table/wood, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) -"pMu" = ( -/obj/effect/turf_decal/stripes/full, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter/room) "pMy" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -53662,15 +54749,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall, /area/station/service/abandoned_gambling_den) -"pNi" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/rnd/production/circuit_imprinter, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "pNk" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -53692,17 +54770,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, /area/station/security/brig) -"pNo" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/light/directional/west, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "pNA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -53719,14 +54786,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"pNK" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/autoname/directional/east, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "pNM" = ( /obj/structure/lattice/catwalk, /obj/structure/table, @@ -53737,17 +54796,6 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) -"pNQ" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/structure/railing/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"pNZ" = ( -/turf/open/floor/iron/stairs/right, -/area/station/maintenance/disposal/incinerator) "pOh" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53765,6 +54813,13 @@ }, /turf/open/floor/iron/textured_large, /area/station/medical/virology) +"pOF" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/iron, +/area/station/commons/dorms) "pOM" = ( /obj/structure/railing{ dir = 1 @@ -53854,12 +54909,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/medbay/central) -"pPr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "pPt" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -53979,14 +55028,10 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) -"pQg" = ( -/obj/structure/bed, -/obj/item/bedsheet/ce, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) +"pQh" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden/abandoned) "pQq" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -54053,6 +55098,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"pQS" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/engine, +/area/station/engineering/atmos/upper) "pQU" = ( /obj/machinery/vending/clothing, /obj/structure/disposalpipe/segment{ @@ -54068,13 +55117,6 @@ /obj/machinery/smartfridge/chemistry/preloaded, /turf/open/floor/plating, /area/station/medical/pharmacy) -"pRi" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics - co2 Cell"; - name = "atmospherics camera" - }, -/turf/open/floor/engine/co2, -/area/station/engineering/main) "pRm" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ @@ -54139,16 +55181,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/construction/storage_wing) -"pRU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) -"pSh" = ( -/obj/structure/ladder, +"pRW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/lattice/catwalk, /obj/structure/cable, -/obj/effect/turf_decal/stripes/full, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) +/turf/open/openspace, +/area/station/engineering/atmos/project) "pSj" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, @@ -54187,19 +55227,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"pSJ" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/wine_voltaic{ - pixel_y = 5; - pixel_x = 7 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_y = 6; - pixel_x = -6 - }, -/obj/structure/railing, -/turf/open/floor/eighties, -/area/station/engineering/break_room) +"pSI" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "pSK" = ( /obj/effect/decal/cleanable/food/flour, /obj/item/storage/cans/sixbeer, @@ -54217,15 +55249,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/security/brig) -"pST" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/soda_cans/cola{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/effect/spawner/random/entertainment/coin, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "pSY" = ( /obj/structure/railing/corner/end{ dir = 8 @@ -54247,13 +55270,6 @@ }, /turf/open/floor/wood/large, /area/station/medical/psychology) -"pTp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/arrow_ccw, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "pTu" = ( /obj/machinery/door/airlock/wood{ name = "Service Hall" @@ -54277,6 +55293,10 @@ }, /turf/open/floor/grass, /area/station/science/genetics) +"pTz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "pTB" = ( /obj/structure/table, /obj/item/taperecorder{ @@ -54292,6 +55312,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"pTS" = ( +/obj/machinery/power/emitter/prototype{ + desc = "Hell yeah."; + dir = 4; + name = "Betsy" + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "pTT" = ( /obj/effect/turf_decal/trimline/red/filled/warning, /obj/structure/cable, @@ -54325,20 +55353,6 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"pUs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/supply/visible, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"pUD" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/upper) "pUE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -54383,6 +55397,13 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"pVA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pWh" = ( /obj/machinery/button/door/directional/west{ id = "Cabin6"; @@ -54464,6 +55485,10 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/wood, /area/station/service/library) +"pXM" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "pYI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54475,15 +55500,6 @@ /obj/effect/landmark/navigate_destination/aiupload, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload_foyer) -"pZM" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/closet/firecloset/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "pZQ" = ( /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ dir = 8 @@ -54564,6 +55580,12 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) +"qau" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/sign/poster/official/work_for_a_future/directional/south, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/science/research) "qaI" = ( /obj/structure/table/reinforced, /obj/item/flashlight/lamp, @@ -54583,23 +55605,6 @@ dir = 1 }, /area/station/medical/virology) -"qaP" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Engineering Storage" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) -"qaU" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "qaV" = ( /obj/structure/sign/poster/contraband/random/directional/north, /obj/structure/bed/maint, @@ -54611,14 +55616,22 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"qbM" = ( -/obj/machinery/atmospherics/components/binary/pump/off/orange/visible, -/obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "SM_shutters"; - name = "Supermatter Radiation Shutters" +"qbm" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) +"qbw" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/engineering/supermatter) +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "qbT" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) @@ -54631,6 +55644,16 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) +"qbZ" = ( +/obj/structure/transport/linear{ + radial_travel = 0 + }, +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "catwalk_engi"; + preset_destination_names = list("2"="Lower Engine","3"="Upper Atmos.") + }, +/turf/open/openspace, +/area/station/engineering/break_room) "qcb" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -54661,6 +55684,17 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/central) +"qcT" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/break_room) +"qcX" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "qdd" = ( /obj/structure/table/glass, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -54701,12 +55735,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) -"qdr" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qdx" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, @@ -54738,6 +55766,16 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"qeb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "qec" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54805,6 +55843,9 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/lab) +"qeQ" = ( +/turf/open/floor/engine/vacuum, +/area/station/maintenance/disposal/incinerator) "qeX" = ( /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) @@ -54845,6 +55886,15 @@ }, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"qfT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "qgc" = ( /obj/item/radio{ pixel_x = 6; @@ -54951,19 +56001,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/main) -"qhm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/ash, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "qhq" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -55034,6 +56071,25 @@ /obj/machinery/bluespace_vendor/directional/north, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) +"qhP" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qhW" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/landmark/start/depsec/engineering, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "qid" = ( /obj/machinery/door/airlock/research{ name = "Research Division Backdoor" @@ -55054,6 +56110,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/mess) +"qij" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "qip" = ( /obj/effect/decal/cleanable/dirt, /obj/item/cigbutt{ @@ -55082,10 +56142,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/command/corporate_showroom) -"qiI" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/engine/n2, -/area/station/engineering/main) "qiU" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -55098,13 +56154,6 @@ /obj/item/circuitboard/computer/mech_bay_power_console, /turf/open/floor/iron/small, /area/station/security/mechbay) -"qiW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 6 - }, -/obj/machinery/meter, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "qiY" = ( /obj/structure/table/reinforced, /obj/item/screwdriver{ @@ -55124,10 +56173,26 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) -"qjp" = ( -/obj/structure/sign/warning/radiation/rad_area, -/turf/closed/wall/r_wall, -/area/station/engineering/main) +"qjf" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"qjn" = ( +/obj/item/toy/plush/moth{ + name = "Spanner"; + pixel_x = -3; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/spawner/random/maintenance, +/obj/structure/sign/poster/official/moth_hardhat/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "qjt" = ( /obj/structure/lattice/catwalk, /obj/effect/spawner/random/maintenance/two, @@ -55248,6 +56313,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/central) +"qlf" = ( +/obj/machinery/computer/station_alert, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "qlg" = ( /obj/machinery/mech_bay_recharge_port, /turf/open/floor/iron/smooth, @@ -55260,17 +56332,39 @@ /obj/structure/cable, /turf/open/openspace, /area/station/medical/storage) +"qlx" = ( +/obj/structure/closet/crate/engineering{ + name = "Basic Materials" + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/stack/sheet/glass{ + amount = 50 + }, +/obj/item/stack/sheet/iron{ + amount = 50 + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "qly" = ( /obj/machinery/camera/autoname/directional/north, /turf/open/floor/engine/hull/air, /area/station/security/courtroom) -"qlz" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) +"qlF" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/left, +/area/station/engineering/lobby) "qlI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured_large, @@ -55330,13 +56424,6 @@ /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, /area/station/maintenance/port) -"qmr" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "qmB" = ( /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark/textured_large, @@ -55349,13 +56436,6 @@ /obj/item/food/chocolatebar, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) -"qmE" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "N2O to Port" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "qmI" = ( /obj/structure/cable, /obj/effect/spawner/random/trash/garbage, @@ -55377,23 +56457,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"qni" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) -"qns" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/engineering/lobby) "qnt" = ( /obj/structure/table/wood, /obj/item/storage/photo_album{ @@ -55485,6 +56548,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"qoN" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/science/lab) "qoX" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 2; @@ -55494,6 +56567,14 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/station/maintenance/disposal) +"qpa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor/heavy, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "qpc" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -55519,6 +56600,13 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/wood/parquet, /area/station/medical/break_room) +"qpD" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "qpG" = ( /obj/structure/railing{ dir = 4 @@ -55537,12 +56625,21 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"qpL" = ( +/turf/open/floor/engine/co2, +/area/station/engineering/atmos/upper) "qpP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/wall, /area/station/commons/vacant_room/commissary) +"qpY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "qqd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/warning/electric_shock/directional/east, @@ -55622,11 +56719,6 @@ "qrd" = ( /turf/open/openspace, /area/station/medical/abandoned) -"qrx" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hazardvest, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "qrz" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -55654,6 +56746,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"qrN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "qrP" = ( /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron/dark/textured_large, @@ -55766,6 +56863,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/construction/storage_wing) +"qtj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"qtC" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Port to Engine" + }, +/obj/effect/turf_decal/trimline/brown, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "qtM" = ( /obj/machinery/libraryscanner, /obj/machinery/camera/autoname/directional/north, @@ -55822,23 +56937,23 @@ /obj/effect/spawner/random/structure/shipping_container, /turf/open/floor/iron, /area/station/construction/storage_wing) -"quW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/guides/jobs/hydroponics, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "qvd" = ( /obj/structure/railing{ dir = 9 }, /turf/open/floor/engine/hull/air, /area/station/maintenance/port) +"qve" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "qvg" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty{ @@ -55876,12 +56991,28 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/zoo) +"qvr" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/sign/warning/radiation/rad_area/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "qvu" = ( /obj/machinery/light/directional/south, /obj/structure/lattice/catwalk, /obj/machinery/firealarm/directional/south, /turf/open/openspace, /area/station/security/checkpoint/supply) +"qvw" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/firealarm/directional/west, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "qvL" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/light/directional/south, @@ -55896,6 +57027,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qvW" = ( +/obj/item/toy/plush/moth{ + name = "Moff #1"; + pixel_x = -15; + pixel_y = -7 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "qwa" = ( /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, @@ -56001,6 +57144,25 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) +"qyu" = ( +/obj/structure/lattice/catwalk, +/obj/structure/table/glass, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/wrench, +/obj/item/crowbar/red, +/turf/open/openspace, +/area/station/engineering/break_room) "qyy" = ( /obj/effect/turf_decal/siding/blue, /obj/effect/turf_decal/siding/blue{ @@ -56092,19 +57254,16 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/textured_large, /area/station/medical/abandoned) -"qzJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/button/elevator{ - id = "catwalk_engi"; - pixel_y = -24 +"qzQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/turf/open/floor/iron/dark/smooth_large, +/area/station/engineering/main) "qzY" = ( /obj/effect/turf_decal/tile/red/opposingcorners, /obj/machinery/firealarm/directional/south, @@ -56161,16 +57320,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"qAy" = ( -/obj/structure/table/glass, -/obj/item/storage/belt/utility, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "qAC" = ( /obj/structure/closet{ name = "Coldroom Wearcloset" @@ -56280,16 +57429,6 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) -"qBn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "CO2 Multideck Adapter" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "qBx" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -56317,16 +57456,6 @@ /obj/item/tank/internals/anesthetic, /turf/open/floor/iron/white, /area/station/maintenance/hallway/abandoned_recreation) -"qBN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "qCe" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -56487,11 +57616,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/wood, /area/station/security/courtroom) -"qEW" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "qEY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56501,6 +57625,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) +"qEZ" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "qFa" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -56530,10 +57663,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"qFt" = ( -/obj/structure/chair/office, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "qFw" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -56552,21 +57681,14 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron/dark, /area/station/security/medical) -"qFH" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) -"qFI" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "qFO" = ( /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"qGa" = ( +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/radiation/rad_area/directional/west, +/turf/open/openspace, +/area/station/hallway/primary/starboard) "qGi" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/black, @@ -56577,12 +57699,6 @@ }, /turf/open/water, /area/station/maintenance/port/fore) -"qGp" = ( -/obj/effect/turf_decal/arrows/white{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "qGv" = ( /obj/structure/chair/sofa/right/brown{ dir = 1 @@ -56726,14 +57842,6 @@ }, /turf/open/openspace, /area/station/hallway/primary/central) -"qIY" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "qJb" = ( /obj/machinery/disposal/bin, /obj/item/radio/intercom/directional/south, @@ -56760,6 +57868,11 @@ /obj/structure/cable, /turf/open/floor/wood/large, /area/station/service/kitchen) +"qJu" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "qJB" = ( /obj/effect/turf_decal/bot_white/right, /turf/open/floor/iron/dark/textured_large, @@ -56875,6 +57988,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"qLm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "qLy" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, @@ -56903,37 +58026,24 @@ }, /turf/open/openspace, /area/station/service/library) -"qMa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/item/hatchet{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/crowbar, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 8 +"qLZ" = ( +/obj/structure/grille, +/turf/open/openspace, +/area/station/maintenance/starboard/fore) +"qMe" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "qMi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"qMm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "qMr" = ( /obj/structure/closet/secure_closet/courtroom, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -57006,11 +58116,14 @@ /obj/structure/stairs/south, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"qNj" = ( -/obj/structure/cable, -/obj/machinery/power/smes/engineering, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) +"qNi" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "qm_cargobay"; + name = "Cargo Bay Shutters" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "qNn" = ( /obj/structure/table, /obj/effect/spawner/random/bureaucracy/paper, @@ -57063,6 +58176,12 @@ /obj/item/trash/ready_donk, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qNX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "qOv" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, @@ -57074,13 +58193,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) -"qOG" = ( -/obj/structure/table/glass, -/obj/item/toy/cards/deck{ - pixel_y = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "qOS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -57108,6 +58220,16 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qPy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "qPB" = ( /obj/structure/mannequin/skeleton, /turf/open/floor/iron/dark/textured_large, @@ -57176,6 +58298,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/bridge) +"qQj" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/spawner/random/clothing/costume, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"qQv" = ( +/obj/effect/decal/cleanable/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "qQx" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/north, /obj/effect/turf_decal/stripes/end, @@ -57244,23 +58380,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"qRc" = ( +"qRb" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/missing_gloves/directional/north, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson/engine, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) -"qRj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 4 }, -/obj/structure/closet/secure_closet/engineering_personal, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) +"qRp" = ( +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "qRs" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57299,10 +58428,6 @@ }, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) -"qRZ" = ( -/obj/structure/lattice, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "qSd" = ( /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, @@ -57393,6 +58518,10 @@ /obj/structure/stairs/north, /turf/open/floor/iron/stairs/medium, /area/station/medical/virology) +"qTk" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "qTl" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -57407,10 +58536,26 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating/airless, /area/station/maintenance/starboard/lesser) +"qTt" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/camera/autoname/directional/south, +/obj/structure/closet/secure_closet/security/engine, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "qTy" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port) +"qTF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/bluespace_sender, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "qTG" = ( /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/flora/bush/ferny/style_random, @@ -57469,12 +58614,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/central) -"qUJ" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "qUW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57528,6 +58667,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/construction/storage_wing) +"qVD" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "qVJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -57610,12 +58759,6 @@ /obj/effect/landmark/navigate_destination/tools, /turf/open/floor/iron, /area/station/commons/storage/primary) -"qWL" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "qWV" = ( /obj/structure/lattice/catwalk, /obj/effect/turf_decal/stripes/line{ @@ -57623,6 +58766,14 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) +"qXj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "qXl" = ( /obj/effect/turf_decal/siding/blue{ dir = 1 @@ -57636,12 +58787,6 @@ /obj/structure/chair/sofa/corp/left, /turf/open/floor/carpet/executive, /area/station/ai_monitored/turret_protected/aisat_interior) -"qXq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "qXr" = ( /obj/structure/sign/departments/telecomms/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -57651,6 +58796,30 @@ dir = 4 }, /area/station/ai_monitored/turret_protected/aisat/foyer) +"qXx" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Gas" + }, +/obj/effect/turf_decal/trimline/yellow, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"qXH" = ( +/obj/structure/cable, +/obj/effect/landmark/start/depsec/engineering, +/obj/structure/chair/office{ + dir = 3 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) +"qXI" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "qXK" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -57715,15 +58884,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/hallway/secondary/construction) -"qYI" = ( -/obj/machinery/airalarm/directional/south, -/obj/structure/cable, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "qYM" = ( /obj/item/kirbyplants/random, /obj/machinery/light/directional/east, @@ -57760,19 +58920,17 @@ /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, /area/station/science/genetics) +"qYY" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "qZv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"qZx" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qZB" = ( /obj/machinery/door/airlock{ name = "Commentator Stand Access" @@ -57828,13 +58986,18 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"raa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "rad" = ( -/obj/structure/table, -/obj/effect/spawner/random/bureaucracy/paper, -/obj/item/pen, -/obj/structure/sign/poster/contraband/missing_gloves/directional/west, -/turf/open/floor/wood, -/area/station/commons/dorms) +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/maintenance/disposal/incinerator) "rah" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/iron{ @@ -57883,10 +59046,6 @@ /obj/machinery/computer/order_console/mining, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"raM" = ( -/obj/machinery/light_switch/directional/north, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/upper) "raN" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57927,23 +59086,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/engine, /area/station/service/hydroponics) -"raZ" = ( -/obj/structure/railing/corner/end{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "rba" = ( /obj/structure/spider/stickyweb, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"rbn" = ( -/obj/machinery/door/poddoor{ - id = "securestoragecw"; - name = "Secure Storage" - }, -/turf/open/floor/engine/hull/air, -/area/station/engineering/main) "rbx" = ( /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark/textured_large, @@ -58003,6 +59149,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"rcl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "rcs" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance/two, @@ -58039,14 +59189,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/wood, /area/station/command/heads_quarters/cmo) -"rcZ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/trimline/yellow/corner, -/obj/effect/turf_decal/trimline/yellow/corner{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "rdb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58162,15 +59304,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"rfl" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "ceprivacy"; - name = "Chief Engineers Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/engineering/atmos/upper) "rfr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, @@ -58189,16 +59322,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"rfv" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "rfE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/lattice/catwalk, @@ -58264,12 +59387,38 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/construction/storage_wing) +"rhD" = ( +/obj/machinery/holopad, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "rhE" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, /obj/effect/landmark/firealarm_sanity, /turf/open/openspace, /area/station/hallway/primary/starboard) +"rhF" = ( +/obj/structure/sign/poster/official/moth_delam/directional/east, +/obj/item/toy/plush/moth{ + name = "Morffeus"; + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/toy/plush/moth{ + name = "Sporg Asbord"; + pixel_x = 2 + }, +/obj/item/toy/plush/moth{ + name = "Moff #4"; + pixel_x = -13; + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "rhM" = ( /obj/effect/turf_decal/trimline/white/corner{ dir = 8 @@ -58317,15 +59466,21 @@ }, /turf/open/floor/wood/large, /area/station/service/library) -"riP" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) +"riI" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/light/directional/north, +/turf/open/openspace, +/area/station/engineering/break_room) "riR" = ( /turf/open/openspace, /area/station/service/library) +"riV" = ( +/obj/structure/table, +/obj/item/hfr_box/core{ + pixel_y = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "riZ" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ @@ -58371,25 +59526,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) -"rjt" = ( -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/machinery/camera/autoname/directional/north, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/pen{ - pixel_y = 5 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 5 - }, -/obj/machinery/computer/security/telescreen/engine/directional/north{ - name = "Engine Camera Monitor" - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "rjy" = ( /obj/effect/mapping_helpers/airlock/unres{ dir = 4 @@ -58532,14 +59668,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/central) -"rlk" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 10 - }, -/obj/structure/closet/secure_closet/security/engine, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "rlq" = ( /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/flora/bush/pale/style_random, @@ -58658,17 +59786,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"rmE" = ( -/obj/structure/table/glass, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/machinery/light_switch/directional/east, -/obj/item/pipe_dispenser{ - pixel_y = 8 - }, -/obj/item/crowbar, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "rmM" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -58697,13 +59814,6 @@ /obj/effect/landmark/start/cyborg, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"rmP" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/openspace, -/area/station/engineering/lobby) "rmS" = ( /obj/structure/railing{ dir = 8 @@ -58717,12 +59827,6 @@ }, /turf/open/floor/iron, /area/station/science/research) -"rmT" = ( -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/full, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter/room) "rmV" = ( /obj/effect/turf_decal/tile/dark_blue/opposingcorners, /obj/structure/urinal/directional/west, @@ -58754,15 +59858,6 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rnN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "rnP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -58779,6 +59874,21 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/coldroom, /area/station/medical/coldroom) +"rnR" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) +"rnX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/storage/medkit/fire{ + pixel_y = 2 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "roj" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -58811,6 +59921,11 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"roB" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/firealarm/directional/east, +/turf/open/openspace, +/area/station/engineering/break_room) "roG" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -58837,11 +59952,6 @@ }, /turf/open/floor/iron, /area/station/science/breakroom) -"roQ" = ( -/obj/effect/turf_decal/stripes/full, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter) "roY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -58907,11 +60017,6 @@ "rpU" = ( /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"rpW" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "rqc" = ( /obj/structure/closet/secure_closet/freezer/meat, /obj/machinery/camera/autoname/directional/south, @@ -58931,6 +60036,12 @@ /obj/machinery/light/very_dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) +"rqm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "rqn" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -59042,6 +60153,13 @@ }, /turf/open/floor/glass, /area/station/service/kitchen) +"rrz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "rrF" = ( /obj/structure/table, /obj/item/stack/cable_coil, @@ -59075,18 +60193,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured, /area/station/maintenance/starboard/lesser) -"rsy" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 9 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "rsH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/disposal/bin, @@ -59294,17 +60400,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"rvD" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/computer/atmos_control/nitrous_tank{ - dir = 8 - }, -/obj/structure/railing, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "rvH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -59313,6 +60408,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"rvR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "rvY" = ( /obj/structure/table/reinforced, /obj/item/storage/box/gloves{ @@ -59334,26 +60438,9 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/sorting) -"rwe" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, -/obj/machinery/status_display/ai/directional/south, -/obj/effect/spawner/random/clothing/backpack, -/turf/open/floor/iron, -/area/station/commons/dorms) "rwh" = ( /turf/closed/wall/r_wall, /area/station/security/medical) -"rwj" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "rwG" = ( /obj/machinery/door/airlock/mining/glass{ name = "Mining Dock" @@ -59473,23 +60560,6 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"rym" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/machinery/light/directional/west, -/obj/machinery/computer/records/security, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) -"ryw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "ryJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59584,6 +60654,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, /area/station/maintenance/hallway/abandoned_recreation) +"rAs" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_large, +/area/station/science/lab) "rAD" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -59611,18 +60685,11 @@ /obj/structure/table/glass, /turf/open/floor/carpet, /area/station/command/bridge) -"rAP" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) +"rAT" = ( +/obj/structure/lattice/catwalk, +/obj/structure/grille, +/turf/open/space/openspace, +/area/space/nearstation) "rAV" = ( /obj/machinery/holopad, /obj/machinery/status_display/evac/directional/north, @@ -59673,12 +60740,19 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"rBz" = ( +"rBB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 9 + dir = 4 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/machinery/space_heater, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "rBE" = ( /obj/effect/turf_decal/siding/blue{ dir = 1 @@ -59686,12 +60760,34 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/openspace, /area/station/command/bridge) +"rBF" = ( +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/engineering/break_room) "rBI" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/decal/cleanable/confetti, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/carpet/black, /area/station/maintenance/hallway/abandoned_recreation) +"rBO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "rBP" = ( /obj/item/bikehorn/rubberducky, /obj/machinery/duct, @@ -59732,6 +60828,21 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) +"rCp" = ( +/obj/structure/table, +/obj/item/food/cheese/firm_cheese_slice{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/item/flashlight/lantern{ + pixel_y = 7 + }, +/obj/item/food/moth_cheese_cakes{ + pixel_x = -6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "rCv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -59771,11 +60882,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/turret_protected/ai_upload) -"rCZ" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/station/engineering/engine_smes) "rDc" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -59793,6 +60899,10 @@ }, /turf/open/floor/eighties, /area/station/construction/storage_wing) +"rDm" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/stairs/right, +/area/station/maintenance/disposal/incinerator) "rDr" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -59925,17 +61035,6 @@ }, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"rFp" = ( -/obj/machinery/vending/wallmed/directional/west{ - pixel_x = 27 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/station/command/gateway) "rFq" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -60023,11 +61122,6 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/prison/rec) -"rGv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "rGw" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance_hatch, @@ -60041,28 +61135,6 @@ /obj/structure/fake_stairs/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"rGL" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/openspace, -/area/station/engineering/atmos/upper) -"rHj" = ( -/obj/effect/turf_decal/trimline/yellow/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "rHk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -60119,13 +61191,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"rHM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "rHN" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plating, @@ -60137,6 +61202,21 @@ }, /turf/open/openspace, /area/station/command/gateway) +"rHU" = ( +/obj/structure/reflector/double{ + dir = 6 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) +"rHZ" = ( +/obj/structure/closet/firecloset, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "rIi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60171,6 +61251,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"rIS" = ( +/obj/machinery/wall_healer/directional/west{ + pixel_x = 27 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/station/command/gateway) "rIU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60227,6 +61318,7 @@ id_tag = "restroom_3"; name = "Toilet Unit" }, +/obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) "rJo" = ( @@ -60310,6 +61402,17 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"rKz" = ( +/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ + name = "N20 Multideck Adapter"; + dir = 8 + }, +/obj/machinery/meter{ + name = "N20 meter" + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "rKA" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) @@ -60381,6 +61484,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/breakroom) +"rLz" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/openspace, +/area/station/engineering/lobby) "rLA" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /obj/structure/railing{ @@ -60393,11 +61505,13 @@ /obj/item/clothing/glasses/science, /turf/open/floor/iron, /area/station/science/research) -"rLE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"rLK" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/station/engineering/lobby) "rMc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60406,6 +61520,11 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) +"rMe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/construction) "rMj" = ( /turf/open/floor/engine/hull/air, /area/station/maintenance/starboard/lesser) @@ -60415,12 +61534,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) -"rMz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "rMS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60455,18 +61568,40 @@ "rNe" = ( /turf/open/openspace, /area/station/commons/fitness/recreation) -"rNq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/vending/colavend, -/obj/effect/mapping_helpers/broken_machine, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"rNM" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/openspace, -/area/station/engineering/atmos/project) +"rNx" = ( +/obj/structure/table, +/obj/item/stamp/denied{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/stamp/granted{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) +"rNA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"rND" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "rNT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -60534,11 +61669,22 @@ "rOA" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/science/central) +"rOB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "rOC" = ( /obj/machinery/light/directional/north, /obj/machinery/computer/cargo/request, /turf/open/floor/iron/white/textured_half, /area/station/ai_monitored/turret_protected/aisat_interior) +"rOG" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/station/maintenance/disposal/incinerator) "rOQ" = ( /obj/machinery/skill_station, /turf/open/floor/engine/hull/air, @@ -60550,11 +61696,21 @@ /obj/effect/turf_decal/siding/purple{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, /turf/open/floor/iron, /area/station/science/lab) +"rPh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/requests_console/directional/south{ + department = "Engineering"; + name = "Engineering Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "rPn" = ( /obj/structure/table, /obj/item/assembly/flash/handheld{ @@ -60571,12 +61727,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/wood, /area/station/commons/dorms) -"rPv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "rPw" = ( /obj/item/cigbutt{ pixel_x = -12; @@ -60635,14 +61785,8 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"rPY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/orange/visible{ - dir = 4 - }, -/obj/machinery/meter, +"rQb" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "rQg" = ( @@ -60657,12 +61801,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"rQm" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "rQq" = ( /obj/structure/table/reinforced, /obj/item/taperecorder, @@ -60713,12 +61851,32 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"rRh" = ( +/obj/machinery/light/directional/east, +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rRn" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "rRy" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/smooth_edge{ dir = 1 }, /area/station/medical/pharmacy) +"rRJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) "rRM" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -60755,14 +61913,6 @@ /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"rRQ" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/siding/purple, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/science/lab) "rRW" = ( /obj/item/ammo_casing/spent{ pixel_x = 7; @@ -60785,12 +61935,32 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"rSi" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "rSj" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/smooth_edge{ dir = 4 }, /area/station/medical/pharmacy) +"rSu" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/washing_machine, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) +"rSX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "rTa" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -60856,6 +62026,10 @@ dir = 8 }, /area/station/hallway/primary/fore) +"rTQ" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) "rTR" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -60867,17 +62041,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) -"rTW" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Engineering Storage" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "rUf" = ( /obj/machinery/door/airlock/virology/glass{ name = "Malpractice Tower" @@ -60931,9 +62094,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) -"rUZ" = ( -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "rVc" = ( /obj/effect/turf_decal/siding/dark{ dir = 4 @@ -61056,6 +62216,11 @@ /obj/structure/sign/calendar/directional/north, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) +"rWs" = ( +/obj/machinery/light/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "rWx" = ( /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine/hull, @@ -61104,12 +62269,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"rXi" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "rXq" = ( /obj/effect/turf_decal/trimline/white/corner{ dir = 1 @@ -61145,13 +62304,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) -"rYa" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "rYd" = ( /obj/effect/turf_decal/tile/red/opposingcorners{ dir = 1 @@ -61168,6 +62320,12 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/wood, /area/station/ai_monitored/command/storage/eva) +"rYB" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/turf/open/floor/engine/hull/reinforced, +/area/space/nearstation) "rYF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61191,11 +62349,36 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"rYP" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/reinforced, +/obj/item/stamp/denied{ + pixel_x = 13 + }, +/obj/item/stamp/head/ce{ + pixel_y = 3 + }, +/obj/item/paper_bin{ + pixel_x = 3; + pixel_y = 10 + }, +/obj/item/pen{ + pixel_x = 17 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "rYQ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/disposal) +"rZl" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "rZs" = ( /obj/structure/chair, /obj/machinery/camera/directional/north{ @@ -61231,11 +62414,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"sax" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/green, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "saE" = ( /obj/machinery/door/airlock/public/glass{ name = "Community Center" @@ -61258,6 +62436,16 @@ }, /turf/open/floor/iron/grimy, /area/station/security/interrogation) +"saS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "sbb" = ( /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -61287,6 +62475,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"sbp" = ( +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos/upper) "sby" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 9 @@ -61333,6 +62524,19 @@ }, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"sbF" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/rack, +/obj/item/radio/off{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/wrench, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "sbI" = ( /obj/item/toy/plush/lizard_plushie/green{ name = "Swats-The-Moths"; @@ -61347,13 +62551,6 @@ /obj/structure/sign/poster/contraband/lizard/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/fore) -"sbL" = ( -/obj/structure/closet/radiation, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "sbP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -61462,22 +62659,6 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) -"sde" = ( -/obj/item/toy/plush/moth{ - name = "Goofy Greg"; - pixel_x = 3; - pixel_y = -5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/toy/plush/moth{ - name = "Crimes Reynald"; - pixel_x = -2; - pixel_y = 14 - }, -/obj/structure/sign/poster/contraband/mothic_rations/directional/west, -/obj/structure/sign/poster/official/moth_piping/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "sdf" = ( /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) @@ -61559,6 +62740,21 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) +"sey" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"seA" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/grassy/style_random, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/grass, +/area/station/engineering/lobby) "seF" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -61579,25 +62775,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/small, /area/station/security/mechbay) -"sfa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"sff" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 +"seW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 9 }, -/obj/machinery/suit_storage_unit/engine, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) +/turf/open/openspace, +/area/station/engineering/break_room) "sfh" = ( /turf/closed/wall, /area/station/maintenance/disposal) @@ -61723,12 +62907,6 @@ icon_state = "carpet-137" }, /area/station/service/abandoned_gambling_den) -"sgS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/supermatter/room) "sgU" = ( /obj/structure/table, /obj/item/flashlight{ @@ -61756,16 +62934,18 @@ /obj/effect/landmark/navigate_destination/disposals, /turf/open/floor/plating, /area/station/maintenance/disposal) -"shi" = ( -/turf/closed/wall/r_wall, -/area/station/engineering/storage_shared) -"shr" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ +"sgX" = ( +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/break_room) +"shb" = ( +/obj/effect/turf_decal/siding/red{ dir = 8 }, /turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/area/station/engineering/supermatter) +"shi" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/storage_shared) "shs" = ( /turf/closed/wall, /area/station/commons/vacant_room/office) @@ -61804,12 +62984,17 @@ /obj/machinery/light/blacklight/directional/west, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"sij" = ( -/obj/structure/reflector/double{ +"shX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/guides/jobs/hydroponics, +/obj/structure/disposalpipe/segment{ dir = 6 }, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/construction) "sik" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -61818,17 +63003,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) -"siB" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/glasses/welding{ - pixel_x = 6; - pixel_y = 7 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"siz" = ( +/obj/machinery/light/directional/south, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/break_room) "siG" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/maintenance, @@ -61851,6 +63030,11 @@ /obj/effect/spawner/random/bureaucracy/paper, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) +"siN" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "siP" = ( /turf/open/floor/wood, /area/station/commons/lounge) @@ -61926,12 +63110,26 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/security/office) +"ska" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "skm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/structure/shipping_container, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"sko" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "skq" = ( /obj/machinery/power/solar{ id = "starboardsolar"; @@ -62004,16 +63202,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) -"slh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/engineering/ce_office, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "slj" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ @@ -62072,16 +63260,14 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/security/prison) +"smD" = ( +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "smV" = ( /obj/machinery/holopad, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) -"smY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "snd" = ( /obj/machinery/mecha_part_fabricator{ drop_direction = 4 @@ -62105,6 +63291,11 @@ }, /turf/closed/wall, /area/station/medical/pharmacy) +"snF" = ( +/obj/structure/ladder, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "snQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -62150,6 +63341,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/medical/abandoned) +"sok" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "sot" = ( /obj/machinery/camera/autoname/directional/east, /turf/open/openspace, @@ -62164,28 +63359,16 @@ "soU" = ( /turf/closed/wall, /area/station/science/research) -"spi" = ( -/obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/dark/textured, -/area/station/maintenance/disposal/incinerator) +"spb" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine/hull/air, +/area/station/engineering/storage_shared) "spl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/textured_large, /area/station/medical/abandoned) -"spm" = ( -/obj/effect/decal/cleanable/glitter{ - color = "ff8080" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "spr" = ( /obj/structure/table, /obj/item/hand_labeler{ @@ -62258,12 +63441,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood/large, /area/station/service/library) -"spT" = ( -/obj/machinery/light/directional/north, -/obj/structure/sign/warning/electric_shock/directional/north, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "sql" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/dirt, @@ -62318,6 +63495,11 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) +"src" = ( +/obj/structure/table, +/obj/machinery/microwave/engineering/cell_included, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "srx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -62513,12 +63695,6 @@ }, /turf/open/openspace, /area/station/command/bridge) -"stw" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "stR" = ( /obj/effect/turf_decal/siding{ dir = 5 @@ -62542,6 +63718,9 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/lesser) +"sus" = ( +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "suy" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -62561,14 +63740,6 @@ /obj/structure/sign/poster/official/moth_meth/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"suN" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/computer/atmos_control{ - dir = 1 - }, -/obj/structure/railing, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "suP" = ( /obj/effect/turf_decal/siding/blue{ dir = 8 @@ -62595,17 +63766,16 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/station/solars/starboard/aft) -"svl" = ( -/obj/structure/chair/office, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/lobby) "svp" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"svt" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/openspace, +/area/station/engineering/atmos/project) "svw" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -62614,11 +63784,13 @@ /obj/structure/railing/corner, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"svD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/holopad, +"svB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/directional/south, +/obj/item/kirbyplants/random, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/engineering/lobby) "svL" = ( /obj/machinery/door/poddoor/massdriver_ordnance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62630,6 +63802,15 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/lesser) +"svM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/bluespace_vendor/directional/north, +/obj/machinery/light/directional/east, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) "svW" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -62731,21 +63912,29 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/glass/reinforced, /area/station/solars/starboard/fore) +"sxT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "sxY" = ( /obj/structure/reflector/double/anchored{ dir = 10 }, /turf/open/floor/iron/dark/textured, /area/station/engineering/supermatter/room) +"syi" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "syk" = ( /obj/structure/transit_tube/diagonal, /turf/open/space/openspace, /area/space/nearstation) -"sym" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "syw" = ( /obj/structure/flora/bush/pale/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -62805,6 +63994,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/lesser) +"szp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "szw" = ( /obj/structure/falsewall/reinforced, /turf/open/floor/plating, @@ -62821,24 +64019,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/gateway) -"szA" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/directional/west, -/obj/machinery/firealarm/directional/west, -/turf/open/openspace, -/area/station/engineering/atmos/project) "szK" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) -"szN" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/light/directional/east, -/obj/machinery/firealarm/directional/east, -/turf/open/openspace, -/area/station/engineering/atmos/project) "sAa" = ( /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/wood, @@ -62870,6 +64056,14 @@ /obj/effect/mapping_helpers/broken_machine, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"sAu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "sAB" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 @@ -62892,6 +64086,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) +"sAM" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/west{ + pixel_x = 26 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "sAT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62915,13 +64115,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"sBq" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "sBr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62943,6 +64136,12 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"sBP" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 1 + }, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos/upper) "sBT" = ( /obj/structure/table, /obj/machinery/computer/libraryconsole{ @@ -62989,14 +64188,6 @@ /obj/item/storage/toolbox/emergency, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"sCQ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/bin, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "sCV" = ( /obj/structure/table/wood/fancy/red, /turf/open/floor/wood/tile, @@ -63010,20 +64201,6 @@ }, /turf/closed/wall, /area/station/service/library) -"sDT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "SM_shutters"; - name = "Radiation Shutters"; - req_access = list("engineering") - }, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "sDX" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, @@ -63114,6 +64291,10 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) +"sFb" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos/upper) "sFc" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -63161,14 +64342,6 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/dark, /area/station/science/cytology) -"sFH" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) "sFI" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -63254,6 +64427,14 @@ /obj/effect/turf_decal/tile/dark/full, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"sGR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "sGS" = ( /obj/structure/table, /obj/item/instrument/eguitar{ @@ -63271,31 +64452,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"sGX" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) -"sHd" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"sHt" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "sHu" = ( /obj/structure/ladder, /turf/open/floor/glass/reinforced/airless, @@ -63388,6 +64544,14 @@ /obj/structure/closet/secure_closet/security/sec, /turf/open/floor/iron/dark/smooth_large, /area/station/security/lockers) +"sIB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/closet/toolcloset, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "sIO" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -63423,10 +64587,6 @@ }, /turf/open/openspace, /area/station/engineering/lobby) -"sJa" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "sJc" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "MiniSat Maintenance" @@ -63547,6 +64707,16 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"sKR" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "sKT" = ( /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/dark, @@ -63561,6 +64731,26 @@ }, /turf/open/floor/iron/dark, /area/station/science/cytology) +"sLx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"sLB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "sLC" = ( /obj/structure/lattice/catwalk, /turf/open/floor/engine/hull/air, @@ -63600,10 +64790,13 @@ "sLY" = ( /turf/open/floor/engine/hull/air, /area/station/command/meeting_room/council) -"sMo" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) +"sMa" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "sMt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63631,12 +64824,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/security/prison/mess) -"sMS" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input{ - dir = 4 - }, -/turf/open/floor/engine/co2, -/area/station/engineering/main) "sNa" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -63652,10 +64839,6 @@ dir = 1 }, /area/station/ai_monitored/turret_protected/aisat/teleporter) -"sNA" = ( -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/engineering/atmos/upper) "sNC" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -63675,15 +64858,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/station/maintenance/disposal) -"sNK" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/obj/structure/sign/warning/hot_temp/directional/east, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson/engine, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "sNN" = ( /obj/machinery/camera/directional/east{ c_tag = "Science - Xenobiology Cells 2 & 4"; @@ -63691,6 +64865,12 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"sNW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "sOa" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -63701,19 +64881,6 @@ }, /turf/open/floor/engine/hull/air, /area/station/medical/medbay/central) -"sOb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/arrow_ccw{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "sOl" = ( /obj/effect/spawner/random/trash/mess, /obj/item/stack/rods/two, @@ -63729,6 +64896,13 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/turret_protected/aisat_interior) +"sOw" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/spawner/random/clothing/backpack, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "sOz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63884,6 +65058,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"sQZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/openspace, +/area/station/hallway/primary/starboard) "sRd" = ( /obj/machinery/power/turbine/turbine_outlet{ dir = 8 @@ -63908,6 +65087,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) +"sRj" = ( +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "sRn" = ( /obj/structure/table/reinforced, /obj/item/multitool{ @@ -64004,18 +65190,22 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"sSG" = ( +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "sSJ" = ( /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/carpet, /area/station/maintenance/starboard/aft) -"sSK" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/sign/poster/official/random/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "sSR" = ( /obj/machinery/vending/coffee, /obj/structure/window/spawner/directional/west, @@ -64063,15 +65253,12 @@ "sTv" = ( /turf/closed/wall, /area/station/security/courtroom) -"sTK" = ( +"sTS" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/effect/decal/cleanable/dirt, -/obj/item/banner/blue{ - inspiration_available = 0 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/eighties, -/area/station/maintenance/hallway/abandoned_recreation) +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "sTT" = ( /obj/structure/railing/corner/end/flip{ dir = 4 @@ -64102,15 +65289,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"sUl" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "ceprivacy"; - name = "Chief Engineers Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/ce) "sUm" = ( /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark/textured_corner{ @@ -64154,13 +65332,11 @@ /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) -"sUC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/machinery/vending/cigarette, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"sUF" = ( +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "sUM" = ( /obj/effect/turf_decal/box/white{ color = "#EFB341" @@ -64168,19 +65344,10 @@ /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "sUR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - name = "Garden" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) +/obj/machinery/light_switch/directional/east, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "sUV" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -64207,18 +65374,12 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/central) -"sVn" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "sVq" = ( /obj/machinery/door/airlock{ id_tag = "restroom_2"; name = "Toilet Unit" }, +/obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) "sVA" = ( @@ -64286,10 +65447,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal) -"sXc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "sXd" = ( /obj/structure/railing, /obj/structure/railing/corner{ @@ -64318,12 +65475,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"sXm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "sXq" = ( /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/transfer) @@ -64367,6 +65518,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/openspace, /area/station/command/bridge) +"sYg" = ( +/obj/machinery/modular_computer/preset/civilian{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "sYo" = ( /obj/item/radio/intercom/directional/west, /obj/machinery/light/directional/west, @@ -64437,6 +65597,13 @@ /obj/effect/turf_decal/trimline/purple/filled/mid_joiner, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) +"sZu" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 1 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) "sZy" = ( /obj/structure/table, /turf/open/floor/glass, @@ -64528,19 +65695,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) -"taN" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/light_switch/directional/west, -/obj/structure/chair/office{ - dir = 3 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "taS" = ( /obj/structure/chair/office/light, /obj/effect/landmark/start/chemist, @@ -64548,6 +65702,15 @@ dir = 1 }, /area/station/medical/pharmacy) +"tbd" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "SM_shutters"; + name = "Supermatter Radiation Shutters" + }, +/obj/effect/turf_decal/trimline/brown, +/obj/machinery/atmospherics/components/binary/pump/off/orange/visible, +/turf/open/floor/plating, +/area/station/engineering/supermatter) "tbf" = ( /obj/structure/chair/stool/directional/north, /obj/effect/landmark/start/hangover, @@ -64638,25 +65801,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"tcv" = ( -/obj/structure/table/reinforced, -/obj/item/plant_analyzer, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) -"tcw" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/machinery/rnd/production/protolathe/department/engineering, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) "tcx" = ( /obj/structure/lattice/catwalk, /obj/structure/light_construct/directional/east, @@ -64671,13 +65815,6 @@ /obj/effect/spawner/random/structure/shipping_container, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"tcW" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, -/obj/effect/spawner/random/clothing/backpack, -/turf/open/floor/iron, -/area/station/commons/dorms) "tda" = ( /obj/item/pen, /obj/item/pen/blue, @@ -64700,6 +65837,15 @@ /obj/machinery/power/emitter/welded, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"tdF" = ( +/obj/structure/broken_flooring/corner/directional/west, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) +"tdN" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "tdT" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -64826,6 +65972,13 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/command/gateway) +"tfy" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "tfK" = ( /turf/open/floor/glass, /area/station/service/kitchen) @@ -64876,14 +66029,6 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/general, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"tgL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/arrow_ccw, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "tgT" = ( /obj/machinery/holopad, /turf/open/floor/iron/dark, @@ -64932,32 +66077,6 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/hallway/secondary/entry) -"tht" = ( -/obj/structure/closet/crate/engineering{ - name = "Basic Materials" - }, -/obj/item/stack/sheet/iron{ - amount = 50 - }, -/obj/item/stack/sheet/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/engine, -/area/station/engineering/main) -"thy" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "thz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65038,6 +66157,17 @@ "tjn" = ( /turf/open/openspace, /area/station/hallway/secondary/entry) +"tjt" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored{ + cable_layer = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 9 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "tjA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65064,13 +66194,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"tjU" = ( -/obj/effect/landmark/transport/transport_id{ - specific_transport_id = "catwalk_engi" - }, -/obj/structure/transport/linear, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "tkh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -65122,16 +66245,10 @@ /obj/structure/cable, /turf/open/openspace, /area/station/hallway/primary/starboard) -"tkM" = ( -/obj/structure/railing{ - dir = 5 - }, -/obj/structure/table/wood/fancy/cyan, -/obj/item/book/manual/wiki/atmospherics{ - pixel_y = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +"tkO" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/engineering/engine_smes) "tkT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/window/spawner/directional/east, @@ -65139,6 +66256,12 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/security/prison/mess) +"tkV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "tkX" = ( /obj/structure/bodycontainer/morgue{ dir = 8 @@ -65173,6 +66296,12 @@ dir = 8 }, /area/station/tcommsat/server) +"tlf" = ( +/obj/machinery/portable_atmospherics/scrubber/huge/movable, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "tlh" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage" @@ -65353,6 +66482,25 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"tnX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/holopad, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"tnY" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Project Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/storage_shared) "toh" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -65407,21 +66555,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/lockers) -"toE" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/north, -/obj/machinery/camera/autoname/directional/north{ - network = list("ss13","medbay"); - c_tag = "Medbay - Lobby" - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "toH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65502,34 +66635,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/maintenance/port/fore) -"tqc" = ( -/obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/paper/monitorkey, -/obj/item/stamp/head/ce{ - pixel_y = 3 - }, -/obj/machinery/button/door/directional/south{ - id = "ceprivacy"; - name = "Privacy Shutters Control"; - pixel_x = -14; - pixel_y = 6 - }, -/obj/item/stamp/denied{ - pixel_x = 13 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) -"tqs" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "tqQ" = ( /turf/open/floor/iron/dark, /area/station/commons/dorms) +"tqU" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/atmospherics, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "trH" = ( /obj/effect/landmark/event_spawn, /turf/open/openspace, @@ -65554,12 +66667,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"trS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"tse" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +/turf/closed/wall/r_wall, +/area/station/engineering/transit_tube) "tsl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random/directional/north, @@ -65590,21 +66703,6 @@ /obj/effect/spawner/random/maintenance/no_decals/five, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tsT" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Air to Distro"; - target_pressure = 350 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) -"tsU" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/unary/bluespace_sender, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "ttj" = ( /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -65651,15 +66749,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/medbay/central) -"ttI" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "ttK" = ( /obj/machinery/conveyor/auto{ dir = 4; @@ -65670,10 +66759,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) -"ttQ" = ( -/obj/item/weldingtool, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "tub" = ( /obj/effect/decal/cleanable/blood/old, /obj/item/ammo_casing/spent{ @@ -65701,6 +66786,16 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) +"tul" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/landmark/start/station_engineer, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "tuw" = ( /obj/structure/sign/departments/restroom/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -65720,6 +66815,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/transfer) +"tuD" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 10 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "tuF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair, @@ -65753,11 +66854,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/science/research) -"tvs" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "tvN" = ( /obj/structure/railing{ dir = 8 @@ -65775,15 +66871,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) -"tvR" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/north, -/obj/machinery/power/energy_accumulator/tesla_coil/anchored, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "tvU" = ( /obj/machinery/newscaster/directional/east, /obj/effect/turf_decal/tile/dark_blue{ @@ -65840,6 +66927,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"twY" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/engineering/transit_tube) "txe" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, @@ -65852,13 +66943,6 @@ }, /turf/open/floor/grass, /area/station/ai_monitored/turret_protected/aisat_interior) -"txh" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/turf/open/floor/engine/hull, -/area/space/nearstation) "txs" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -65939,6 +67023,12 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron/checker, /area/station/maintenance/hallway/abandoned_recreation) +"tyY" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/structure/cable, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "tza" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/dinner, @@ -66011,9 +67101,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"tAb" = ( -/turf/open/floor/engine/hull/air, -/area/station/engineering/supermatter) "tAr" = ( /obj/structure/toilet{ dir = 4 @@ -66172,6 +67259,12 @@ dir = 1 }, /area/station/cargo/bitrunning/den) +"tCd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "tCf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -66220,6 +67313,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"tCI" = ( +/obj/machinery/computer/atmos_control{ + dir = 1 + }, +/turf/open/floor/glass/reinforced/plasma, +/area/station/engineering/atmos/project) "tCO" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -66235,6 +67334,11 @@ }, /turf/open/floor/iron/textured_large, /area/station/medical/break_room) +"tCX" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/station/engineering/atmos/upper) "tCY" = ( /obj/machinery/computer/security{ dir = 4 @@ -66289,15 +67393,16 @@ "tDy" = ( /turf/open/floor/plating, /area/station/maintenance/port/greater) -"tDJ" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/north, -/obj/machinery/power/energy_accumulator/tesla_coil/anchored, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 9 +"tDB" = ( +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "tDK" = ( /obj/effect/decal/cleanable/plasma, /obj/effect/mapping_helpers/burnt_floor, @@ -66362,6 +67467,13 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"tES" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "tEU" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -66421,6 +67533,13 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/freezer, /area/station/commons/dorms) +"tFC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "tFU" = ( /obj/item/clothing/suit/costume/chickensuit{ pixel_x = 4; @@ -66571,12 +67690,25 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"tHR" = ( +/obj/structure/sign/warning/radiation/rad_area/directional/east, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "tIi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/broken_flooring/singular/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"tIl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "tIm" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/light/directional/east, @@ -66621,10 +67753,11 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/commons/storage/primary) -"tIV" = ( -/obj/machinery/shieldgen, -/turf/open/floor/engine, -/area/station/engineering/main) +"tIW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "tJk" = ( /obj/structure/chair{ dir = 1 @@ -66689,6 +67822,20 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison) +"tKa" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/railing, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "tKl" = ( /obj/structure/railing{ dir = 5 @@ -66779,6 +67926,12 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"tLs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "tLK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, @@ -66787,6 +67940,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/maintenance/hallway/abandoned_recreation) +"tLQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "tLU" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -66819,12 +67978,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) -"tMq" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "tMu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -66832,6 +67985,32 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating/airless, /area/station/maintenance/starboard/lesser) +"tMw" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) +"tMD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"tMJ" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "tMS" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -66849,28 +68028,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tNb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "tNd" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/textured_large, /area/station/medical/abandoned) -"tNe" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/table, -/obj/machinery/computer/security/telescreen/minisat, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) -"tNk" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/landmark/start/depsec/engineering, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "tNr" = ( /obj/structure/disposalpipe/segment{ dir = 2 @@ -66888,6 +68059,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/evidence) +"tNB" = ( +/obj/effect/turf_decal/arrows/white, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "tNC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -66930,6 +68108,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, /turf/open/floor/iron/dark/textured_half, /area/station/science/ordnance/storage) +"tOi" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "tOj" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, @@ -66954,6 +68141,11 @@ }, /turf/open/floor/wood/tile, /area/station/security/detectives_office/private_investigators_office) +"tOE" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/air_sensor/mix_tank, +/turf/open/floor/engine/vacuum, +/area/station/maintenance/disposal/incinerator) "tOO" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /obj/structure/disposalpipe/segment{ @@ -66971,21 +68163,6 @@ "tPe" = ( /turf/open/floor/glass/reinforced/plasma, /area/station/engineering/supermatter) -"tPq" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "tPr" = ( /obj/structure/table_frame/wood, /turf/open/floor/iron/grimy, @@ -67045,14 +68222,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"tPR" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/engineering/general, -/turf/open/floor/iron, -/area/station/engineering/lobby) "tPU" = ( /turf/closed/wall, /area/station/commons/toilet/restrooms) @@ -67062,18 +68231,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) -"tQq" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"tQs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "tQt" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/reagent_dispensers/plumbed, @@ -67101,15 +68258,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/aisat/foyer) -"tRe" = ( -/obj/effect/spawner/random/trash/graffiti{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "tRi" = ( /obj/structure/lattice, /obj/structure/grille/broken, @@ -67187,13 +68335,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/dorms) -"tSh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "tSl" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -67245,6 +68386,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tST" = ( +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = 32 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "tSW" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Mining Maintenance Access" @@ -67270,12 +68417,27 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"tTg" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "tTj" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/cytology) +"tTz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Shared Engineering Storage" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "tTD" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -67294,6 +68456,19 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"tTS" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "tUd" = ( /obj/structure/railing{ dir = 8 @@ -67342,10 +68517,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"tUL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "tUS" = ( /obj/effect/turf_decal/siding/wideplating_new{ dir = 4 @@ -67360,15 +68531,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"tVf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/south, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "tVl" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, @@ -67382,30 +68544,11 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"tVv" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/lobby) "tVI" = ( /obj/structure/cable, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tVQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "tVR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -67415,19 +68558,22 @@ }, /turf/open/floor/iron/airless, /area/station/maintenance/starboard/aft) -"tVZ" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 8 +"tVS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/turf/open/space/openspace, -/area/space/nearstation) +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "tWc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/wood, /area/station/maintenance/hallway/abandoned_recreation) +"tWd" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/engine, +/area/station/engineering/break_room) "tWl" = ( /obj/machinery/light/warm/dim/directional/north, /turf/open/openspace, @@ -67446,12 +68592,28 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/cargo/bitrunning/den) +"tWA" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/aft) "tWH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/dim/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) +"tWI" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "tWK" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -67608,10 +68770,6 @@ "tYh" = ( /turf/open/floor/plating/airless, /area/station/maintenance/space_hut) -"tYi" = ( -/obj/structure/closet/wardrobe/grey, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "tYl" = ( /obj/structure/closet/crate/silvercrate, /obj/machinery/camera/motion{ @@ -67694,6 +68852,12 @@ /obj/machinery/light/red/dim/directional/south, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"tYZ" = ( +/obj/machinery/atmospherics/components/unary/passive_vent, +/obj/structure/lattice, +/obj/machinery/camera/autoname/directional/west, +/turf/open/space/basic, +/area/space/nearstation) "tZb" = ( /obj/structure/sign/departments/restroom/directional/south, /obj/item/cigbutt{ @@ -67702,12 +68866,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"tZg" = ( -/obj/machinery/atmospherics/components/binary/crystallizer{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "tZj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -67715,12 +68873,6 @@ /obj/structure/sign/departments/restroom/directional/north, /turf/open/floor/iron/textured_large, /area/station/medical/virology) -"tZy" = ( -/obj/effect/turf_decal/arrows/white{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "tZz" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -67728,24 +68880,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"tZK" = ( -/obj/machinery/photocopier/prebuilt, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) "tZO" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/mapping_helpers/broken_machine, /obj/structure/window/spawner/directional/north, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"tZP" = ( -/obj/structure/cable/multilayer/multiz, -/turf/open/floor/plating, -/area/station/engineering/break_room) -"tZU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/lobby) "tZV" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -67774,15 +68914,13 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/iron/textured_large, /area/space/nearstation) -"uar" = ( +"uaw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/smooth, -/area/station/engineering/engine_smes) +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "uaz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -67796,10 +68934,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"uaP" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/north, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "uaR" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 5 @@ -67815,15 +68949,6 @@ /obj/structure/closet/crate/bin, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) -"ubc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) -"ubf" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/engine/air, -/area/station/engineering/main) "ubo" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -67831,6 +68956,20 @@ "ubs" = ( /turf/open/openspace, /area/station/hallway/secondary/construction) +"ubv" = ( +/obj/machinery/button/elevator{ + id = "catwalk_engi"; + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8; + pixel_x = -2 + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "ubU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67921,13 +69060,12 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/large, /area/station/hallway/primary/central) -"ucW" = ( -/obj/machinery/camera/autoname/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/east, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) +"ucQ" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) "ucX" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 6 @@ -67943,6 +69081,15 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"udb" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "udl" = ( /turf/closed/wall, /area/station/engineering/storage/tech) @@ -67971,6 +69118,20 @@ /obj/structure/chair/sofa/middle/brown, /turf/open/floor/carpet, /area/station/maintenance/starboard/aft) +"udY" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/radio/off{ + pixel_x = 6 + }, +/obj/item/phone{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/engineering/lobby) "uec" = ( /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; @@ -68001,6 +69162,14 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"uex" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Gas to Cold Loop" + }, +/obj/effect/turf_decal/trimline/brown, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "ueH" = ( /obj/structure/lattice, /obj/structure/girder, @@ -68022,21 +69191,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"ueY" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/obj/machinery/vending/coffee, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"uff" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/space_heater, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "ufi" = ( /obj/machinery/door/airlock/command{ name = "Research Director's Office" @@ -68114,6 +69268,13 @@ /obj/structure/table/wood/poker, /turf/open/floor/wood/large, /area/station/service/library) +"ugo" = ( +/obj/machinery/power/port_gen/pacman, +/obj/effect/turf_decal/delivery/white{ + color = "#52B4E9" + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "ugq" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -68186,22 +69347,31 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"uho" = ( -/obj/item/toy/plush/moth{ - name = "Stockpile Sammy"; - pixel_x = -7; - pixel_y = 11 +"uhg" = ( +/obj/structure/table, +/obj/item/hfr_box/body/moderator_input{ + pixel_x = -8; + pixel_y = 8 }, -/obj/item/toy/plush/moth{ - name = "General Kill Light"; - pixel_y = -3 +/obj/item/hfr_box/body/waste_output{ + pixel_x = 8; + pixel_y = 8 }, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ +/obj/item/hfr_box/body/interface, +/obj/item/hfr_box/body/waste_output{ + pixel_x = -15 + }, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) +"uhl" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/meter, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "uhx" = ( /obj/structure/table/reinforced, /turf/open/floor/plating, @@ -68248,6 +69418,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uip" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uir" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -68267,18 +69441,11 @@ /obj/effect/turf_decal/siding/purple/corner{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/iron, /area/station/science/lab) -"uiH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/photocopier/prebuilt, -/turf/open/floor/wood, -/area/station/engineering/lobby) "uiR" = ( /obj/machinery/door/poddoor{ id = "SecJusticeChamber" @@ -68341,6 +69508,10 @@ /obj/item/clothing/suit/hooded/ablative, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/security/armory) +"ujP" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "ujS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair{ @@ -68352,6 +69523,15 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) +"ujX" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ceprivacy"; + name = "Chief Engineers Privacy Shutters" + }, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/command/heads_quarters/ce) "uka" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68389,13 +69569,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"uks" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/railing/corner, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "ukt" = ( /obj/structure/railing{ dir = 9 @@ -68465,6 +69638,14 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) +"ulh" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/minisat_access_tcomms, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "uli" = ( /obj/effect/spawner/random/entertainment/arcade, /obj/effect/decal/cleanable/dirt, @@ -68494,6 +69675,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"ulq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "ulu" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, @@ -68642,8 +69832,13 @@ "umH" = ( /turf/closed/wall, /area/station/medical/psychology) -"umX" = ( -/turf/closed/wall, +"unc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, /area/station/engineering/atmos/upper) "ung" = ( /obj/effect/turf_decal/stripes/line{ @@ -68662,16 +69857,6 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/openspace, /area/station/medical/medbay/central) -"unz" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "unK" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, @@ -68688,13 +69873,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/security/armory) -"uoi" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "uok" = ( /obj/structure/chair/office{ dir = 1 @@ -68745,10 +69923,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/openspace, /area/station/medical/storage) -"uoD" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/turf/open/floor/engine/plasma, -/area/station/engineering/main) "uoF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/turf_decal/tile/blue{ @@ -68810,6 +69984,11 @@ dir = 1 }, /area/station/hallway/secondary/construction) +"upL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "upR" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/photocopier/prebuilt, @@ -68838,6 +70017,20 @@ /obj/item/kirbyplants/photosynthetic, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"uqc" = ( +/obj/machinery/vending/tool, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) +"uqf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/filingcabinet/chestdrawer, +/mob/living/basic/parrot/poly, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "uqi" = ( /obj/effect/turf_decal/siding/green{ dir = 4 @@ -68946,6 +70139,19 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark/smooth_large, /area/station/science/explab) +"urx" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "urG" = ( /obj/effect/turf_decal/siding/purple/corner{ dir = 1 @@ -68965,12 +70171,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/grimy, /area/station/security/interrogation) -"urY" = ( -/obj/structure/lattice/catwalk, -/obj/item/kirbyplants/random, -/obj/structure/railing, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "usf" = ( /obj/structure/cable, /obj/structure/railing/corner/end{ @@ -69003,6 +70203,13 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) +"ust" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "usD" = ( /obj/effect/turf_decal/siding/blue{ dir = 8 @@ -69049,26 +70256,10 @@ }, /turf/open/floor/plating, /area/station/security/detectives_office) -"usS" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "uta" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, /area/station/maintenance/starboard/lesser) -"utf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "uth" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -69153,6 +70344,12 @@ }, /turf/open/openspace, /area/station/construction/storage_wing) +"uua" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "uuj" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/green/filled/mid_joiner, @@ -69172,6 +70369,11 @@ }, /turf/open/floor/wood, /area/station/service/library) +"uuo" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/broken_flooring/side/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "uus" = ( /obj/structure/sign/poster/official/random/directional/west, /obj/effect/turf_decal/siding/brown{ @@ -69196,6 +70398,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) +"uuF" = ( +/obj/structure/ladder, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "uuP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/east, @@ -69254,18 +70461,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/grass, /area/station/hallway/secondary/entry) -"uvz" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "uvF" = ( /obj/structure/railing/corner{ dir = 4 @@ -69281,6 +70476,12 @@ /obj/structure/chair/office, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"uvN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "uvO" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/chair{ @@ -69488,6 +70689,15 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"uxI" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "uxK" = ( /obj/structure/flora/bush/pale/style_random, /obj/structure/flora/bush/fullgrass/style_random, @@ -69541,6 +70751,21 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/station/maintenance/central) +"uyr" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) +"uyu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/meter, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uyD" = ( /obj/effect/turf_decal/siding/brown{ dir = 10 @@ -69590,6 +70815,12 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) +"uzh" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/structure/holosign/barrier/engineering, +/turf/open/openspace, +/area/station/engineering/atmos/project) "uzj" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, @@ -69608,13 +70839,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/gravity_generator) -"uzy" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "uzI" = ( /obj/machinery/door/airlock/wood{ name = "Service Hall" @@ -69665,22 +70889,15 @@ /obj/machinery/light/dim/directional/south, /turf/open/openspace, /area/station/cargo/storage) -"uAE" = ( -/turf/open/floor/iron/dark, -/area/station/security/range) -"uAF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/biogenerator, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner{ +"uAB" = ( +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/machinery/airalarm/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"uAE" = ( /turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) +/area/station/security/range) "uAO" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -69713,14 +70930,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/station/cargo/storage) -"uAV" = ( -/obj/item/stack/sheet/cotton{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/structure/broken_flooring/singular/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "uAZ" = ( /obj/machinery/netpod, /obj/effect/decal/cleanable/dirt, @@ -69729,23 +70938,21 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/bitrunning/den) -"uBj" = ( -/obj/structure/cable, -/turf/closed/wall/r_wall, -/area/station/hallway/primary/aft) -"uBo" = ( -/obj/effect/turf_decal/tile/yellow/opposingcorners, +"uBh" = ( /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, -/obj/item/weldingtool/empty{ - pixel_x = -5; - pixel_y = -6 +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, +/obj/effect/turf_decal/trimline/yellow, +/turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"uBj" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/hallway/primary/aft) "uBp" = ( /obj/machinery/holopad, /turf/open/floor/iron/smooth, @@ -69765,6 +70972,11 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/station/science/breakroom) +"uBv" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "uBy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69875,23 +71087,6 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/openspace, /area/station/command/meeting_room/council) -"uDo" = ( -/obj/structure/table/glass, -/obj/item/storage/medkit/fire{ - pixel_y = 2 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"uDp" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/atmos, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "uDv" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -69946,13 +71141,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark/textured_large, /area/station/security/prison/safe) -"uEi" = ( -/obj/machinery/computer/station_alert{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/wood, -/area/station/engineering/lobby) "uEk" = ( /obj/structure/showcase/cyborg/old{ dir = 4; @@ -69972,16 +71160,6 @@ /obj/item/stack/rods, /turf/open/openspace, /area/station/maintenance/port/aft) -"uEq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "N2O Multideck Adapter" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "uEs" = ( /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, @@ -69992,14 +71170,6 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) -"uEE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "uEG" = ( /obj/structure/reagent_dispensers/plumbed/storage, /obj/effect/turf_decal/tile/neutral/opposingcorners{ @@ -70023,6 +71193,10 @@ /obj/item/radio/intercom, /turf/open/floor/carpet, /area/station/hallway/secondary/exit/departure_lounge) +"uEQ" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos/upper) "uEZ" = ( /obj/structure/ladder, /obj/effect/turf_decal/trimline/yellow/filled/line, @@ -70068,10 +71242,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/prison/mess) -"uFR" = ( -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "uFV" = ( /obj/structure/table/reinforced, /obj/structure/lattice/catwalk, @@ -70099,10 +71269,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"uGp" = ( -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/wood, -/area/station/ai_monitored/command/storage/eva) "uGt" = ( /obj/structure/tank_holder/extinguisher, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -70241,13 +71407,6 @@ /obj/machinery/recharge_station, /turf/open/floor/iron/dark, /area/station/commons/dorms) -"uHZ" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "uId" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -70272,6 +71431,10 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"uIx" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "uIG" = ( /obj/item/poster/random_official, /obj/effect/decal/cleanable/blood/old, @@ -70296,20 +71459,6 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) -"uJv" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"uJw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "uJy" = ( /obj/structure/table, /obj/item/rcl/pre_loaded{ @@ -70362,6 +71511,13 @@ "uKa" = ( /turf/closed/wall, /area/station/security/warden) +"uKf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "uKh" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -70369,16 +71525,6 @@ }, /turf/open/openspace, /area/station/construction/storage_wing) -"uKi" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "uKm" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -70511,15 +71657,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/ordnance/storage) -"uLC" = ( -/obj/machinery/airalarm/directional/east, -/obj/machinery/camera/autoname/directional/east{ - network = list("ss13","medbay"); - c_tag = "Medbay - Upper Morgue" - }, -/obj/structure/filingcabinet/chestdrawer, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/morgue) "uLL" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -70550,6 +71687,17 @@ /obj/machinery/shower/directional/east, /turf/open/floor/iron/white/textured_large, /area/station/medical/virology) +"uMD" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/machinery/power/energy_accumulator/tesla_coil/anchored{ + cable_layer = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 10 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "uME" = ( /obj/structure/stairs/south, /obj/structure/railing{ @@ -70568,16 +71716,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"uNc" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"uNl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "uNn" = ( /obj/structure/table, /obj/machinery/status_display/evac/directional/north, @@ -70592,12 +71730,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) -"uND" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "uNG" = ( /obj/machinery/washing_machine, /obj/machinery/airalarm/directional/north, @@ -70638,10 +71770,28 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/port) +"uOo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"uOx" = ( +/obj/structure/table/glass, +/obj/machinery/wall_healer/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "uOC" = ( /obj/machinery/vending/wardrobe/hydro_wardrobe, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"uOF" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "uOH" = ( /obj/structure/chair, /obj/effect/decal/cleanable/blood/old, @@ -70702,6 +71852,15 @@ }, /turf/open/openspace, /area/station/maintenance/starboard/lesser) +"uPB" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored{ + cable_layer = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "uPL" = ( /obj/item/controller, /obj/item/compact_remote, @@ -70744,6 +71903,19 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/construction/storage_wing) +"uRp" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/railing/corner/end, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "uRs" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, @@ -70787,6 +71959,24 @@ }, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) +"uRK" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/black, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/tank/internals/emergency_oxygen/engi{ + pixel_x = 5 + }, +/obj/item/clothing/gloves/color/black, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uRM" = ( /obj/structure/table, /obj/effect/spawner/random/trash/janitor_supplies{ @@ -70894,37 +72084,6 @@ }, /turf/open/space/basic, /area/space) -"uTj" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/clothing/glasses/meson/engine{ - pixel_y = 4 - }, -/obj/item/clothing/glasses/meson/engine{ - pixel_y = 4 - }, -/obj/item/clothing/glasses/meson/engine{ - pixel_y = 4 - }, -/obj/item/clothing/glasses/meson{ - pixel_y = 8 - }, -/obj/item/clothing/glasses/meson{ - pixel_y = 8 - }, -/obj/item/clothing/glasses/meson{ - pixel_y = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "uTy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair, @@ -70933,24 +72092,40 @@ /obj/effect/turf_decal/tile/dark/full, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"uTI" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos/upper) "uTJ" = ( /obj/machinery/light/directional/west, /turf/open/openspace, /area/station/cargo/storage) +"uTK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "uTP" = ( /obj/effect/turf_decal/siding/dark, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/ai_monitored/turret_protected/aisat_interior) +"uTU" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/engineering/atmos/project) "uTY" = ( /obj/structure/fake_stairs/directional/north, /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/science/robotics) -"uUj" = ( -/obj/structure/cable, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter) "uUC" = ( /obj/structure/bed, /obj/structure/toilet/greyscale{ @@ -70976,6 +72151,13 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) +"uUH" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "uUK" = ( /obj/machinery/light/directional/south, /obj/structure/extinguisher_cabinet/directional/south, @@ -71021,10 +72203,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/black, /area/station/maintenance/hallway/abandoned_recreation) -"uVb" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/turf/open/floor/engine, -/area/station/engineering/main) "uVf" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/west, @@ -71038,14 +72216,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"uVI" = ( -/obj/structure/lattice/catwalk, -/obj/structure/ladder, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 9 - }, -/turf/open/space/openspace, -/area/space/nearstation) "uVL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/icecream_vat, @@ -71109,16 +72279,6 @@ /obj/item/clothing/head/costume/mailman, /turf/open/floor/iron, /area/station/cargo/sorting) -"uWM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 1; - name = "N2 Multideck Adapter" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "uWO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -71181,18 +72341,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"uXR" = ( +/obj/structure/table/wood/fancy/cyan, +/obj/item/book/manual/wiki/atmospherics{ + pixel_y = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/break_room) "uXU" = ( /obj/effect/spawner/random/structure/chair_flipped, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/station/security/detectives_office/private_investigators_office) -"uXW" = ( -/obj/structure/table, -/obj/structure/bedsheetbin/empty{ - pixel_y = 6 - }, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "uXZ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/three, @@ -71244,6 +72405,19 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"uYX" = ( +/obj/structure/cable, +/turf/closed/wall/r_wall, +/area/station/engineering/lobby) +"uZg" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "uZn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/light/cold/directional/south, @@ -71312,14 +72486,6 @@ dir = 8 }, /area/station/hallway/primary/starboard) -"vas" = ( -/obj/structure/railing, -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/grass, -/area/station/hallway/primary/starboard) "vav" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/stairs/medium, @@ -71345,6 +72511,15 @@ /obj/effect/landmark/navigate_destination/dockaux, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vaF" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "vaO" = ( /obj/structure/table, /turf/open/floor/wood, @@ -71369,6 +72544,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"vbf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "vbo" = ( /obj/machinery/icecream_vat, /obj/machinery/camera/autoname/directional/north, @@ -71377,17 +72558,12 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"vbN" = ( -/obj/structure/lattice/catwalk, -/obj/effect/turf_decal/stripes/line, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/railing/corner/end/flip{ - dir = 8 +"vbB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "vbV" = ( /obj/machinery/status_display/ai/directional/north, /turf/open/openspace, @@ -71457,6 +72633,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"vdg" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/machinery/power/energy_accumulator/grounding_rod/anchored{ + cable_layer = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ + dir = 1 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "vdh" = ( /obj/structure/secure_safe/directional/north{ name = "armory safe A"; @@ -71495,6 +72682,13 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"vdm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "vdq" = ( /obj/structure/broken_flooring/side/always_floorplane/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71550,6 +72744,9 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/ai_monitored/turret_protected/aisat/foyer) +"vel" = ( +/turf/open/floor/catwalk_floor, +/area/station/engineering/lobby) "vem" = ( /obj/structure/lattice, /obj/machinery/camera/autoname/directional/south, @@ -71582,13 +72779,6 @@ name = "hyper-reinforced wall" }, /area/station/science/ordnance/bomb) -"veJ" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics - Plasma Cell"; - name = "atmospherics camera" - }, -/turf/open/floor/engine/plasma, -/area/station/engineering/main) "veQ" = ( /obj/effect/turf_decal/siding/purple/corner{ dir = 8 @@ -71634,6 +72824,12 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/medical/coldroom) +"vfb" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/mapping_helpers/broken_machine, +/obj/machinery/vending/tool, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "vfe" = ( /turf/open/floor/iron, /area/station/commons/dorms) @@ -71662,6 +72858,10 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"vfZ" = ( +/obj/structure/broken_flooring/side/directional/north, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "vgc" = ( /obj/structure/ladder, /obj/effect/decal/cleanable/cobweb, @@ -71709,11 +72909,6 @@ /obj/item/radio/off, /turf/open/floor/wood, /area/station/ai_monitored/command/storage/eva) -"vgy" = ( -/obj/structure/broken_flooring/side/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "vgB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71802,20 +72997,6 @@ /obj/structure/closet/bombcloset/security, /turf/open/floor/iron/dark, /area/station/security/office) -"vhF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "vhJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -71846,12 +73027,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"viv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "viy" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/fluff/paper/stack{ @@ -71921,22 +73096,17 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/surgery) -"vja" = ( -/obj/machinery/shower/directional/west, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "vjc" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/trimline/green/filled/line, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"vjC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/turf/open/openspace, +/area/station/engineering/atmos/project) "vjP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -71968,6 +73138,9 @@ "vkd" = ( /turf/open/openspace, /area/station/ai_monitored/turret_protected/ai_upload) +"vki" = ( +/turf/open/openspace, +/area/station/engineering/storage_shared) "vkl" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -72008,13 +73181,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/wood, /area/station/security/courtroom) -"vkL" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "vkO" = ( /obj/structure/railing, /obj/effect/turf_decal/trimline/brown/filled/line, @@ -72077,13 +73243,6 @@ }, /turf/open/floor/engine/hull/air, /area/station/hallway/primary/fore) -"vlg" = ( -/obj/structure/closet/secure_closet/atmospherics, -/obj/item/book/manual/wiki/atmospherics, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "vlm" = ( /obj/effect/turf_decal/tile/dark_green{ dir = 4 @@ -72163,11 +73322,6 @@ /obj/structure/punching_bag, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"vmD" = ( -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos/upper) "vmG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72265,6 +73419,15 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/wood, /area/station/security/detectives_office) +"voe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/item/vending_refill/hydroseeds, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "vof" = ( /obj/effect/landmark/carpspawn, /turf/open/space/openspace, @@ -72357,6 +73520,9 @@ }, /turf/open/openspace, /area/station/commons/fitness/recreation) +"vpi" = ( +/turf/open/floor/eighties, +/area/station/engineering/lobby) "vpo" = ( /obj/machinery/power/terminal{ dir = 1 @@ -72364,11 +73530,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"vpp" = ( -/obj/item/radio/intercom/directional/north, -/obj/effect/spawner/random/clothing/wardrobe_closet_colored, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "vpt" = ( /obj/structure/chair/pew/right{ dir = 4 @@ -72393,10 +73554,6 @@ /obj/item/wirecutters, /turf/open/floor/iron/dark, /area/station/security/office) -"vqa" = ( -/obj/structure/transport/linear, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "vqc" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -72406,6 +73563,14 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/virology) +"vqi" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/engineering/lobby) "vql" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/warning{ @@ -72414,6 +73579,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/port) +"vqn" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Testing Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/machinery/door/firedoor/heavy, +/obj/structure/cable, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "vqq" = ( /obj/structure/table, /obj/machinery/status_display/evac/directional/north, @@ -72479,6 +73655,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vqH" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "vqM" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -72490,10 +73672,6 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron/dark, /area/station/science/lobby) -"vqS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output, -/turf/open/floor/engine/air, -/area/station/engineering/main) "vqY" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/wall/peppertank/directional/east, @@ -72516,14 +73694,6 @@ /obj/machinery/light/directional/east, /turf/open/openspace, /area/station/science/xenobiology) -"vrL" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/sign/poster/random/directional/west, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "vrO" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ @@ -72564,6 +73734,15 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/lesser) +"vss" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "vsv" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/chapel{ @@ -72596,6 +73775,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"vsM" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vsO" = ( /obj/effect/turf_decal/trimline/dark_blue/line{ dir = 8 @@ -72634,6 +73823,12 @@ /obj/effect/mapping_helpers/airlock/access/all/science/genetics, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) +"vti" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "vtm" = ( /obj/machinery/camera/autoname/directional/north{ c_tag = "Medbay - Upper Storage North Hallway" @@ -72668,13 +73863,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured, /area/station/maintenance/starboard/lesser) -"vtK" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/components/trinary/filter/layer2{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "vtT" = ( /turf/open/floor/glass, /area/station/science/zoo) @@ -72704,6 +73892,13 @@ /obj/machinery/light/small/red/dim/directional/west, /turf/open/floor/iron/textured_large, /area/station/medical/abandoned) +"vuy" = ( +/obj/effect/landmark/start/station_engineer, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "vuN" = ( /obj/machinery/telecomms/message_server/preset, /turf/open/floor/iron/dark/telecomms, @@ -72718,6 +73913,26 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/wood, /area/station/security/detectives_office) +"vuV" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/departments/aisat/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) +"vvb" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/book/manual/wiki/atmospherics, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/disposal/incinerator) "vvc" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -72747,6 +73962,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured, /area/station/cargo/warehouse) +"vvB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) "vvD" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -72775,6 +73997,22 @@ /obj/structure/light_construct/directional/east, /turf/open/floor/iron, /area/station/maintenance/starboard/central) +"vwa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/item/hatchet{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/crowbar, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "vwb" = ( /obj/structure/disposalpipe/segment{ dir = 2 @@ -72802,6 +74040,15 @@ "vwr" = ( /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"vwx" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/no_smoking/circle/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "vwB" = ( /obj/machinery/camera/directional/east{ c_tag = "Arrivals - Aft Arm" @@ -72823,6 +74070,13 @@ /obj/machinery/air_sensor, /turf/open/floor/iron, /area/station/security/prison/mess) +"vwQ" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/delivery/white{ + color = "#ff6600" + }, +/turf/open/floor/engine, +/area/station/engineering/break_room) "vwR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -72854,6 +74108,13 @@ }, /turf/open/floor/wood/large, /area/station/service/library) +"vxk" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/computer/atmos_control/plasma_tank{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "vxJ" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ @@ -72861,22 +74122,22 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"vyp" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/modular_computer/preset/engineering{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) "vyt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"vyx" = ( -/obj/item/spear, -/obj/effect/decal/cleanable/blood/old, -/obj/item/clothing/gloves/color/rainbow, -/obj/item/clothing/shoes/sneakers/rainbow, -/obj/item/clothing/under/color/rainbow, -/obj/item/clothing/head/soft/rainbow, -/obj/effect/decal/remains/human, -/turf/open/floor/plating, -/area/station/maintenance/starboard/central) "vyA" = ( /obj/structure/table/reinforced, /obj/item/camera, @@ -72979,6 +74240,14 @@ /obj/structure/disposalpipe/junction, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vzW" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/public/glass{ + name = "Engineering Storage" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "vzY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -73047,6 +74316,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"vAx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8; + pixel_x = -2 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vAy" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -73080,6 +74362,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/cytology) +"vBg" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "vBi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73151,6 +74437,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/xenobiology/hallway) +"vBX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "vBY" = ( /obj/item/raw_anomaly_core/random{ pixel_x = -5; @@ -73210,15 +74504,6 @@ "vCE" = ( /turf/closed/wall, /area/station/ai_monitored/command/nuke_storage) -"vCG" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "vCN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass{ @@ -73281,14 +74566,16 @@ dir = 8 }, /area/station/ai_monitored/turret_protected/aisat/foyer) -"vDA" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "vDF" = ( /obj/structure/lattice, /turf/open/openspace, /area/station/maintenance/starboard/fore) +"vDL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/plasma, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) "vDT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73311,14 +74598,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"vEp" = ( -/obj/machinery/vending/wallmed/directional/east, -/obj/machinery/camera/autoname/directional/east, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/medical) "vEF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73332,21 +74611,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"vEJ" = ( -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/engineering/break_room) "vEU" = ( /obj/machinery/skill_station, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"vEW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "vEX" = ( /obj/structure/cable, /turf/open/floor/glass/reinforced, @@ -73385,6 +74654,14 @@ /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/water, /area/station/maintenance/starboard/fore) +"vFP" = ( +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/stripes/line, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "vFR" = ( /turf/closed/mineral/random/stationside/asteroid/porus, /area/station/science/ordnance/bomb) @@ -73465,6 +74742,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"vGE" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine/hull/reinforced, +/area/station/engineering/atmos/hfr_room) "vGQ" = ( /obj/structure/table, /obj/item/clothing/under/costume/seifuku/tan{ @@ -73515,26 +74796,6 @@ /obj/machinery/air_sensor, /turf/open/floor/iron/grimy, /area/station/security/interrogation) -"vHK" = ( -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/item/pipe_dispenser{ - pixel_y = 8 - }, -/obj/item/pipe_dispenser{ - pixel_y = 8 - }, -/obj/item/pipe_dispenser{ - pixel_y = 8 - }, -/obj/structure/table, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "vHO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73553,14 +74814,6 @@ /obj/effect/spawner/random/bureaucracy/pen, /turf/open/openspace, /area/station/maintenance/port/aft) -"vHY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/meter, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "vIc" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, @@ -73592,6 +74845,14 @@ /obj/structure/railing, /turf/open/openspace, /area/station/hallway/primary/central) +"vIy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "vIz" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -73599,6 +74860,13 @@ }, /turf/open/floor/iron, /area/station/science/research) +"vIX" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/hallway) "vJe" = ( /obj/structure/chair, /obj/effect/decal/cleanable/dirt/dust, @@ -73658,6 +74926,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"vKc" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "vKg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /turf/open/floor/iron/dark/textured, @@ -73675,6 +74953,24 @@ "vKt" = ( /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) +"vKw" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/bottle/vodka{ + pixel_y = 15; + pixel_x = 6 + }, +/obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice{ + pixel_x = -5; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/flask{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/glass/flask{ + pixel_x = 11 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "vKL" = ( /obj/structure/railing{ dir = 4 @@ -73713,6 +75009,24 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/locker) +"vKZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "hydropony_shutters"; + name = "hydroponics shutters control"; + pixel_x = 10; + pixel_y = 30; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/structure/sink/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/hydroponics) "vLb" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -73736,13 +75050,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/execution/education) -"vLv" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 +"vLj" = ( +/obj/structure/disposalpipe/segment{ + dir = 2 }, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "vLx" = ( /obj/machinery/conveyor{ dir = 4; @@ -73768,6 +75085,13 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/science/research) +"vLU" = ( +/obj/item/kirbyplants/random/fullysynthetic, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "vLZ" = ( /obj/structure/rack, /obj/item/circuitboard/machine/telecomms/broadcaster{ @@ -73782,22 +75106,12 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"vMe" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix Inlet Pump" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"vMf" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o, +"vMn" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron/smooth, -/area/station/engineering/main) -"vMh" = ( -/turf/open/floor/engine/hull/air, /area/station/engineering/atmos/upper) "vMs" = ( /obj/machinery/door/airlock/maintenance, @@ -73819,13 +75133,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"vMy" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "vMG" = ( /obj/item/kirbyplants/random, /obj/machinery/button/door/directional/west{ @@ -73851,13 +75158,15 @@ /obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/west, /turf/open/openspace, /area/station/maintenance/starboard/fore) -"vMJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/navigate_destination/minisat_access_tcomms, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) +"vMO" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/grassy/style_random, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/grass, +/area/station/engineering/lobby) "vMP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -73944,10 +75253,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"vNY" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "vOg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73990,6 +75295,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/sepia, /area/station/hallway/secondary/construction) +"vPa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "vPp" = ( /obj/machinery/microwave, /turf/open/floor/plating, @@ -74002,6 +75313,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vPK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Port to Engine"; + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown, +/turf/open/floor/engine/hull/reinforced/air, +/area/station/engineering/atmos/project) "vPN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74022,6 +75344,12 @@ /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"vQf" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "vQo" = ( /obj/structure/lattice/catwalk, /obj/effect/turf_decal/stripes/line, @@ -74121,6 +75449,13 @@ /obj/item/circuitboard/computer/operating, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_recreation) +"vRf" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "vRi" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74134,16 +75469,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"vRm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/multiz/yellow/visible{ - dir = 8; - name = "Plasma Multideck Adapter" - }, -/turf/open/floor/engine, -/area/station/engineering/main) "vRp" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/clothing/mask/bandana/skull/black, @@ -74165,6 +75490,12 @@ }, /turf/open/floor/iron, /area/station/science/breakroom) +"vRE" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "vRF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing{ @@ -74339,11 +75670,16 @@ /obj/effect/turf_decal/tile/brown/full, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) -"vTC" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/firecloset, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) +"vTv" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "vTE" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/plating, @@ -74371,6 +75707,13 @@ /obj/effect/turf_decal/trimline/dark/corner, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vUb" = ( +/obj/machinery/door/airlock/command{ + name = "Chief Engineer's Quarters" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/ce, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "vUi" = ( /obj/structure/chair/pew/left{ dir = 8 @@ -74378,10 +75721,11 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/chapel) -"vUO" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/station/engineering/break_room) +"vUm" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/engine_smes) "vUQ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/wood, @@ -74405,10 +75749,22 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/lobby) +"vVb" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "vVp" = ( /obj/structure/sign/poster/contraband/random/directional/west, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"vVv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "vVD" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 @@ -74422,15 +75778,10 @@ }, /turf/open/floor/iron/textured_large, /area/station/medical/virology) -"vVE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) +"vVR" = ( +/obj/structure/broken_flooring/pile/directional/north, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "vWe" = ( /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) @@ -74474,13 +75825,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/medbay/central) -"vWL" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "vXh" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/wood/large, @@ -74525,6 +75869,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"vYm" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vYs" = ( /obj/structure/table/optable, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -74615,17 +75965,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/dark, /area/station/science/cytology) -"vZe" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 4 - }, -/turf/open/space/openspace, -/area/space/nearstation) -"vZF" = ( -/obj/structure/lattice/catwalk, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "vZG" = ( /turf/open/openspace/coldroom, /area/station/medical/coldroom) @@ -74713,14 +76052,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/wood, /area/station/service/janitor) -"wbf" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/iron, -/area/station/engineering/lobby) "wbk" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 6 @@ -74786,6 +76117,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/office) +"wcJ" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general/visible{ + dir = 4; + name = "Atmos to Engine" + }, +/obj/effect/turf_decal/trimline/brown, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wcL" = ( /obj/effect/turf_decal/siding/brown, /obj/structure/closet/athletic_mixed, @@ -74843,6 +76182,11 @@ /obj/effect/spawner/random/trash/botanical_waste, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) +"wdu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "wdw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, @@ -74877,12 +76221,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"wdS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ - dir = 5 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "web" = ( /obj/effect/turf_decal/trimline/brown/filled/warning{ dir = 4 @@ -74949,17 +76287,6 @@ }, /turf/open/floor/iron/dark, /area/station/construction/mining/aux_base) -"wez" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/engine/n2o, -/area/station/engineering/main) -"weE" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/engineering/atmos/upper) "weF" = ( /obj/structure/disposalpipe/segment{ dir = 2 @@ -75025,6 +76352,16 @@ /obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/station/commons/dorms) +"wfp" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/obj/machinery/atmospherics/components/binary/pump/on/layer5{ + name = "O2 to Airmix" + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "wfq" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/bot, @@ -75034,6 +76371,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"wfz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/engineering/general, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "wfF" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 4 @@ -75056,13 +76404,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wfP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "wfY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, /obj/structure/tank_dispenser, @@ -75122,6 +76463,11 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/medbay/central) +"wgD" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/machinery/holopad, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "wgM" = ( /obj/structure/statue/sandstone/venus{ dir = 1 @@ -75242,6 +76588,10 @@ /obj/structure/sign/departments/genetics/directional/east, /turf/open/floor/iron/stairs/medium, /area/station/science/cytology) +"wid" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "wie" = ( /obj/structure/chair{ dir = 4 @@ -75342,6 +76692,11 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) +"wjz" = ( +/obj/structure/ladder, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "wjH" = ( /obj/structure/stairs/west, /obj/structure/railing{ @@ -75376,6 +76731,18 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/construction/storage_wing) +"wjX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "wko" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75410,15 +76777,6 @@ }, /turf/open/floor/plating, /area/station/service/kitchen/abandoned) -"wkK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "wkP" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -75472,11 +76830,11 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) -"wlR" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/lattice/catwalk, -/turf/open/floor/engine/hull/air, -/area/station/engineering/atmos/upper) +"wlV" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "wlY" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -75533,12 +76891,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"wmo" = ( -/obj/machinery/computer/atmos_control/mix_tank{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) +"wmr" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/chief_engineer, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "wmt" = ( /obj/structure/closet/secure_closet/quartermaster, /obj/item/clothing/head/fedora/white, @@ -75584,20 +76945,6 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/construction/storage_wing) -"wna" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/station/engineering/main) -"wnb" = ( -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering, -/turf/open/floor/plating, -/area/station/engineering/break_room) "wng" = ( /obj/docking_port/stationary{ dheight = 4; @@ -75655,13 +77002,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/construction/mining/aux_base) -"wnJ" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/construction) "wnO" = ( /turf/open/openspace, /area/station/medical/psychology) @@ -75717,11 +77057,32 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured, /area/station/science/xenobiology) -"woP" = ( -/obj/structure/reagent_dispensers/foamtank, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/engineering/main) +"woG" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/item/storage/box/lights/mixed{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "woV" = ( /obj/structure/broken_flooring/pile/directional/south, /turf/open/floor/plating, @@ -75741,6 +77102,12 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/psychology, /turf/open/floor/wood/large, /area/station/medical/psychology) +"wpd" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/closet/firecloset/full, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "wps" = ( /turf/open/floor/engine, /area/station/science/xenobiology) @@ -75770,13 +77137,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) -"wpK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/engine/hull/reinforced/air, -/area/station/engineering/atmos/upper) "wpW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/red/dim/directional/north, @@ -75836,13 +77196,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/wood, /area/station/service/library) -"wqE" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/closet/crate/trashcart/laundry, -/obj/effect/spawner/random/clothing/backpack, -/obj/effect/spawner/random/clothing/backpack, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "wqI" = ( /obj/effect/spawner/random/trash/botanical_waste, /turf/open/floor/plating, @@ -75861,6 +77214,13 @@ }, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) +"wre" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "wrf" = ( /obj/machinery/atmospherics/pipe/multiz/yellow/visible{ dir = 8 @@ -75870,10 +77230,6 @@ dir = 1 }, /area/station/science/ordnance/storage) -"wrs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "wrE" = ( /turf/open/floor/glass, /area/station/hallway/secondary/entry) @@ -75937,15 +77293,10 @@ /obj/structure/table/reinforced, /turf/open/floor/engine/hull, /area/space/nearstation) -"wtc" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/railing/corner, -/turf/open/openspace, -/area/station/engineering/atmos/upper) +"wtd" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron/stairs/medium, +/area/station/maintenance/disposal/incinerator) "wti" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/window/spawner/directional/north, @@ -76122,13 +77473,12 @@ /obj/effect/spawner/random/entertainment/dice, /turf/open/floor/wood/large, /area/station/service/library) -"wvm" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"wve" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/smooth, +/area/station/engineering/hallway) "wvw" = ( /obj/machinery/conveyor{ dir = 8; @@ -76152,15 +77502,6 @@ /obj/structure/cable, /turf/open/openspace, /area/station/hallway/primary/fore) -"wvz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/main) "wvI" = ( /obj/effect/spawner/random/vending/colavend, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -76315,12 +77656,29 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/security/brig) -"wyd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 4 +"wxU" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high{ + charge = 100; + maxcharge = 15000 }, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) +/obj/item/clothing/glasses/meson{ + pixel_y = 8 + }, +/obj/item/clothing/glasses/meson{ + pixel_y = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) +"wyc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/obj/structure/holosign/barrier/engineering, +/turf/open/openspace, +/area/station/engineering/atmos/project) "wyj" = ( /obj/item/cigbutt, /turf/open/floor/engine/hull, @@ -76350,9 +77708,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"wyz" = ( -/turf/open/floor/eighties, -/area/station/engineering/break_room) "wyF" = ( /obj/structure/flora/tree/palm/style_random, /turf/open/floor/iron/vaporwave, @@ -76372,6 +77727,12 @@ /obj/effect/landmark/start/chemist, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"wzr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "wzs" = ( /obj/structure/rack, /obj/item/storage/box/lights/mixed, @@ -76386,13 +77747,14 @@ dir = 1 }, /area/station/hallway/secondary/entry) +"wzB" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron, +/area/station/engineering/main) "wzM" = ( /obj/machinery/recharge_station, /turf/open/floor/wood, /area/station/commons/toilet/restrooms) -"wzN" = ( -/turf/open/floor/engine, -/area/station/engineering/supermatter) "wzO" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -76401,12 +77763,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) -"wzR" = ( -/obj/machinery/atmospherics/components/tank/air{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "wzS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76418,15 +77774,13 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/wood, /area/station/commons/storage/tools) -"wAf" = ( -/obj/machinery/meter{ - name = "Air meter" - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ +"wzV" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible, +/obj/effect/turf_decal/stripes/red/line{ dir = 4 }, -/turf/open/floor/iron/white, -/area/station/engineering/atmos/upper) +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wAk" = ( /turf/open/openspace, /area/station/maintenance/port/aft) @@ -76481,6 +77835,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/medical) +"wAU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/siding/red/corner, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "wAW" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/condiment, @@ -76568,6 +77929,26 @@ /obj/structure/fluff/paper/stack, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"wCm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"wCn" = ( +/obj/structure/lattice/catwalk, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/storage/box{ + pixel_x = 2; + pixel_y = 4 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "wCr" = ( /obj/machinery/door/airlock/engineering{ name = "Tech Storage" @@ -76630,12 +78011,33 @@ /obj/item/clothing/gloves/latex, /turf/open/floor/iron/dark, /area/station/science/lobby) +"wDt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ + dir = 1 + }, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "wDQ" = ( /obj/structure/chair/office{ dir = 8 }, /turf/open/floor/wood, /area/station/commons/dorms) +"wDY" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/airlock/public/glass{ + name = "Engineering Storage" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "wDZ" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -76654,39 +78056,12 @@ }, /turf/open/floor/plating, /area/station/commons/dorms) -"wEs" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "wEt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate_loot, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/construction/storage_wing) -"wEx" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/machinery/light_switch/directional/north{ - pixel_x = 6 - }, -/obj/machinery/light/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) -"wEC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "wEJ" = ( /obj/machinery/computer/security{ dir = 8 @@ -76710,13 +78085,6 @@ /obj/structure/sign/poster/contraband/hacking_guide/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"wFd" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 10 - }, -/turf/open/space/openspace, -/area/space/nearstation) "wFf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76748,6 +78116,9 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) +"wFl" = ( +/turf/open/floor/engine/n2, +/area/station/engineering/atmos/upper) "wFt" = ( /obj/structure/showcase/mecha/marauder, /turf/open/floor/iron/dark, @@ -76782,13 +78153,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/command) -"wFS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "wFX" = ( /obj/machinery/door/airlock/public/glass{ name = "Law & Order Offices" @@ -76819,9 +78183,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"wGH" = ( -/turf/open/floor/engine/n2o, -/area/station/engineering/main) "wGI" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -76873,15 +78234,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/construction/mining/aux_base) -"wHA" = ( -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/turf/open/floor/engine/hull, -/area/space/nearstation) "wHE" = ( /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -76894,17 +78246,6 @@ "wHK" = ( /turf/open/floor/engine/hull/reinforced/air, /area/station/maintenance/port) -"wHP" = ( -/obj/item/kirbyplants/random, -/obj/item/radio/intercom/directional/east, -/obj/structure/lattice/catwalk, -/turf/open/floor/engine/hull/air, -/area/station/engineering/atmos/upper) -"wHQ" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/carbon_tank, -/turf/open/floor/engine/co2, -/area/station/engineering/main) "wHW" = ( /obj/machinery/iv_drip, /obj/effect/decal/cleanable/blood/old, @@ -76920,20 +78261,6 @@ dir = 1 }, /area/station/service/library/printer) -"wIe" = ( -/obj/item/toy/plush/moth{ - name = "Spanner"; - pixel_x = -3; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "wIf" = ( /obj/machinery/button/door/directional/east{ id = "qm_cargobay"; @@ -76953,12 +78280,10 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/maintenance/starboard/lesser) -"wIm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) +"wIl" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "wIw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -76967,22 +78292,15 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"wIz" = ( -/obj/effect/turf_decal/tile/dark_green/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/item/stack/sheet/cotton{ - pixel_x = -5; - pixel_y = 15 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "wIK" = ( /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/wood, /area/station/commons/dorms) +"wIS" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "wIW" = ( /obj/structure/ladder, /turf/open/floor/plating, @@ -77010,6 +78328,12 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/station/service/chapel) +"wJF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/tank_dispenser, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "wJI" = ( /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/siding/dark{ @@ -77021,6 +78345,15 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"wJJ" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) +"wJU" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/engine, +/area/station/engineering/atmos/hfr_room) "wKb" = ( /turf/closed/wall, /area/station/maintenance/starboard/aft) @@ -77059,14 +78392,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/carpet, /area/station/service/chapel) -"wKU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "wKV" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/large, @@ -77099,6 +78424,13 @@ /obj/structure/table/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"wLg" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) "wLv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -77195,19 +78527,6 @@ /obj/machinery/vending/snack/blue, /turf/open/floor/iron, /area/station/construction/storage_wing) -"wMR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "wMS" = ( /obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/east, @@ -77224,20 +78543,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/starboard/lesser) -"wNf" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Plasma to Port" - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) -"wNg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/plasma, -/obj/structure/cable, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/engineering/main) "wNi" = ( /obj/effect/spawner/random/vending/colavend, /obj/structure/disposalpipe/segment{ @@ -77306,6 +78611,7 @@ id_tag = "restroom_1"; name = "Toilet Unit" }, +/obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) "wOr" = ( @@ -77323,21 +78629,33 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wOw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "wOx" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/station/maintenance/starboard/aft) +"wOG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "wOK" = ( /obj/machinery/light/small/directional/east, /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"wOO" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/airlock/research{ + name = "R&D's Backdoor" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/science/lab) "wOR" = ( /obj/machinery/light/small/directional/north, /obj/machinery/status_display/evac/directional/north, @@ -77356,18 +78674,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"wPb" = ( -/obj/machinery/door/airlock/research{ - name = "R&D's Backdoor" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/effect/mapping_helpers/airlock/access/all/science/general, -/turf/open/floor/iron, -/area/station/science/lab) "wPf" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/effect/landmark/event_spawn, @@ -77439,6 +78745,30 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"wQw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/item/cultivator, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = 10; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez{ + pixel_x = 10; + pixel_y = -4 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 10; + pixel_y = -14 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "wQD" = ( /obj/machinery/light/small/directional/east, /obj/item/solar_assembly, @@ -77534,13 +78864,6 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/security/interrogation) -"wRR" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "wSa" = ( /obj/effect/turf_decal/siding/dark{ dir = 1 @@ -77588,12 +78911,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/storage) -"wTd" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/engineering/atmos/upper) "wTj" = ( /obj/structure/lattice/catwalk, /obj/structure/table/reinforced, @@ -77684,17 +79001,6 @@ /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"wUW" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Gas to Mix" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "wVd" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, @@ -77747,20 +79053,13 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"wWb" = ( -/obj/item/toy/plush/moth{ - name = "Smorg Asbord"; - pixel_y = 6 - }, -/obj/item/toy/plush/moth{ - name = "Moff #2"; - pixel_x = 5; - pixel_y = -10 +"wVX" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/structure/broken_flooring/pile/directional/west, -/obj/structure/sign/poster/official/moth_hardhat/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/engineering/break_room) "wWm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, @@ -77790,6 +79089,10 @@ }, /turf/open/floor/carpet, /area/station/service/lawoffice) +"wWO" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input, +/turf/open/floor/engine/n2, +/area/station/engineering/atmos/upper) "wWS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -77854,22 +79157,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/cytology) -"wXn" = ( -/obj/structure/table/glass, -/obj/item/food/hotcrossbun{ - pixel_x = 10; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/soda_cans/thirteenloko{ - pixel_x = 14; - pixel_y = 3 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/lobby) "wXr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -77891,15 +79178,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"wXD" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson/engine, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) "wXK" = ( /obj/structure/railing{ dir = 4 @@ -77935,6 +79213,16 @@ /obj/effect/landmark/start/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"wXW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "wYk" = ( /obj/effect/turf_decal/siding/dark/end{ dir = 8 @@ -78066,6 +79354,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"wZE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/blood/oil/slippery, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "wZN" = ( /obj/machinery/door/airlock/wood{ name = "Psychology Storage" @@ -78155,16 +79450,11 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/carpet/stellar, /area/station/maintenance/hallway/abandoned_recreation) -"xaR" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/freezer, -/area/station/engineering/main) +"xaT" = ( +/obj/structure/lattice, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "xaU" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/glass/reinforced, @@ -78177,12 +79467,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/security/prison/mess) -"xba" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "xbm" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -78202,17 +79486,21 @@ }, /turf/open/space/basic, /area/space/nearstation) +"xbI" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics - Oxygen Supply"; + name = "atmospherics camera" + }, +/turf/open/floor/engine/o2, +/area/station/engineering/atmos/upper) "xbL" = ( /turf/open/floor/iron/dark, /area/station/service/chapel) -"xbQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +"xbP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/openspace, +/area/station/engineering/atmos/project) "xbR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -78238,19 +79526,26 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/openspace, /area/station/hallway/primary/port) +"xck" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay"); + c_tag = "Medbay - Upper Morgue" + }, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/morgue) "xcx" = ( /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) -"xcE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 +"xcR" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) +/obj/machinery/computer/atmos_control/nitrogen_tank, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "xcT" = ( /obj/machinery/status_display/ai/directional/east, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -78307,10 +79602,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"xdx" = ( -/obj/structure/broken_flooring/corner/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "xdG" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/green/opposingcorners{ @@ -78327,10 +79618,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron/dark/textured, /area/station/construction/mining/aux_base) -"xdR" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible, -/turf/closed/wall/r_wall, -/area/station/engineering/main) "xdT" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/vending/coffee, @@ -78357,6 +79644,11 @@ /obj/machinery/vending/coffee, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"xdZ" = ( +/obj/structure/bed, +/obj/item/bedsheet/ce, +/turf/open/floor/wood, +/area/station/command/heads_quarters/ce) "xeb" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -78438,6 +79730,23 @@ /obj/effect/turf_decal/tile/brown/full, /turf/open/floor/iron/large, /area/station/maintenance/starboard/lesser) +"xfj" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/openspace, +/area/station/engineering/lobby) +"xfn" = ( +/obj/effect/decal/cleanable/glitter{ + color = "ff8080" + }, +/obj/machinery/space_heater, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "xfq" = ( /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/tile/yellow/opposingcorners{ @@ -78462,12 +79771,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"xfE" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos/upper) "xfV" = ( /obj/structure/railing/corner{ dir = 8 @@ -78512,6 +79815,12 @@ /obj/effect/turf_decal/tile/dark/full, /turf/open/floor/iron/smooth_large, /area/station/maintenance/department/medical) +"xgZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "xhl" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -78556,13 +79865,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) -"xhT" = ( -/obj/structure/table, -/obj/structure/bedsheetbin{ - pixel_y = 6 - }, -/turf/open/floor/iron/cafeteria, -/area/station/commons/locker) "xhX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -78698,6 +80000,14 @@ /obj/structure/chair, /turf/open/floor/engine/hull, /area/space/nearstation) +"xkL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/chair/office, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/iron/smooth, +/area/station/engineering/main) "xkN" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -78758,6 +80068,15 @@ /obj/structure/broken_flooring/corner/always_floorplane/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"xmd" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "SM_shutters"; + name = "Supermatter Radiation Shutters" + }, +/obj/machinery/atmospherics/components/binary/pump/off/cyan/visible, +/obj/effect/turf_decal/trimline/blue, +/turf/open/floor/plating, +/area/station/engineering/supermatter) "xme" = ( /obj/structure/flora/bush/large/style_2, /obj/structure/flora/rock/pile/style_2, @@ -78784,6 +80103,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) +"xmq" = ( +/obj/effect/turf_decal/trimline/yellow/warning, +/turf/open/floor/engine/hull/reinforced, +/area/space/nearstation) "xms" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -78827,15 +80150,6 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"xmT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 10 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "xne" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78894,6 +80208,12 @@ dir = 4 }, /area/station/service/chapel) +"xoh" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/shieldgen, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/engine, +/area/station/engineering/break_room) "xol" = ( /obj/effect/turf_decal/delivery, /obj/machinery/airalarm/directional/north, @@ -78907,6 +80227,14 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/security/courtroom) +"xot" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular, +/obj/structure/cable, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/medical) "xoF" = ( /obj/structure/railing, /obj/effect/turf_decal/trimline/purple/filled/line, @@ -78914,6 +80242,12 @@ /obj/effect/turf_decal/trimline/purple/filled/mid_joiner, /turf/open/floor/iron/dark/smooth_large, /area/station/science/xenobiology) +"xoH" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light_switch/directional/north, +/turf/open/openspace, +/area/station/engineering/break_room) "xoT" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating, @@ -78950,6 +80284,19 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"xpr" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/project) "xpv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -78960,6 +80307,12 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/engine/hull/air, /area/station/hallway/secondary/entry) +"xpF" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "xpV" = ( /obj/effect/landmark/event_spawn, /obj/machinery/holopad, @@ -79021,6 +80374,16 @@ /obj/structure/stairs/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"xqE" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "xqG" = ( /obj/structure/sign/poster/contraband/communist_state/directional/south, /obj/item/ammo_casing/spent{ @@ -79103,10 +80466,6 @@ dir = 8 }, /area/station/hallway/secondary/exit/departure_lounge) -"xrn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/smooth, -/area/station/engineering/main) "xrx" = ( /obj/structure/lattice/catwalk, /turf/open/space/openspace, @@ -79145,6 +80504,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/eighties, /area/station/maintenance/hallway/abandoned_recreation) +"xrJ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/turf/open/floor/catwalk_floor, +/area/station/engineering/atmos/upper) "xrM" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -79186,14 +80552,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/cytology) -"xss" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "xsv" = ( /obj/machinery/light/cold/directional/south, /turf/open/floor/engine, @@ -79234,15 +80592,6 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"xsP" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/newscaster/directional/north, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/engineering/lobby) "xsS" = ( /turf/closed/wall/r_wall, /area/station/engineering/transit_tube) @@ -79299,16 +80648,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/wood, /area/station/commons/lounge) -"xub" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/obj/structure/railing/corner, -/turf/open/floor/iron/smooth, -/area/station/engineering/break_room) "xut" = ( /turf/closed/wall, /area/station/service/abandoned_gambling_den) @@ -79329,10 +80668,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/textured, /area/station/construction/mining/aux_base) -"xuI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "xuP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -79431,20 +80766,11 @@ /obj/structure/sign/warning/vacuum/external/directional/north, /turf/open/floor/engine/hull, /area/space/nearstation) -"xwo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "xwu" = ( /obj/structure/cable/multilayer/multiz, /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/maintenance/starboard/aft) -"xwv" = ( -/turf/open/floor/engine/plasma, -/area/station/engineering/main) "xwB" = ( /obj/structure/fake_stairs/directional/east, /obj/structure/railing, @@ -79455,6 +80781,15 @@ }, /turf/open/floor/iron/smooth, /area/station/science/robotics) +"xwC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "xwF" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, @@ -79490,9 +80825,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/openspace, /area/station/hallway/primary/fore) -"xxv" = ( -/turf/open/floor/glass/reinforced/plasma, -/area/station/engineering/atmos/upper) "xxz" = ( /turf/open/floor/engine/hull/air, /area/station/medical/chemistry) @@ -79613,9 +80945,16 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"xAt" = ( +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "xAu" = ( /turf/closed/wall, /area/station/medical/chemistry) +"xAI" = ( +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "xAN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue/full, @@ -79672,6 +81011,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"xBt" = ( +/obj/machinery/camera/autoname/directional/west, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "xBE" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) @@ -79691,6 +81035,12 @@ /obj/structure/cable/multilayer/multiz, /turf/open/openspace, /area/station/engineering/atmos/project) +"xBR" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "xBZ" = ( /obj/effect/turf_decal/siding/dark{ dir = 8 @@ -79718,13 +81068,6 @@ dir = 4 }, /area/station/hallway/secondary/exit/departure_lounge) -"xCr" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "xCt" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -79762,6 +81105,19 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"xCJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/door/firedoor, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) "xCK" = ( /turf/open/openspace, /area/station/security/interrogation) @@ -79819,38 +81175,24 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"xDp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "xDs" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, /obj/machinery/light/directional/east, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) -"xDy" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 4; - name = "CO2 to Multideck" - }, -/turf/open/floor/catwalk_floor, -/area/station/engineering/main) "xDB" = ( /obj/machinery/computer/dna_console{ dir = 1 }, /turf/open/floor/iron/dark/textured_large, /area/station/science/genetics) -"xDL" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 8 - }, -/obj/structure/tank_dispenser{ - pixel_x = -1 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "xDM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance, @@ -79860,6 +81202,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"xDR" = ( +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/large, +/area/station/hallway/primary/central) "xDW" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -79892,15 +81238,6 @@ /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron/dark/textured_half, /area/station/cargo/bitrunning/den) -"xEd" = ( -/obj/structure/window/reinforced/plasma/spawner/directional/north, -/obj/machinery/power/energy_accumulator/grounding_rod/anchored, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "xEl" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 1 @@ -79926,12 +81263,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/plating, /area/station/maintenance/disposal) -"xEv" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "xEB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -79939,15 +81270,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction) -"xEC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/machinery/vending/tool, -/obj/machinery/bluespace_vendor/directional/north, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/station/engineering/lobby) "xEL" = ( /obj/structure/rack, /obj/item/melee/skateboard{ @@ -80075,10 +81397,6 @@ /obj/structure/railing/corner, /turf/open/openspace, /area/station/maintenance/port/aft) -"xGf" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "xGo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -80136,10 +81454,6 @@ /obj/item/storage/medkit/brute, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"xHJ" = ( -/obj/machinery/light/directional/west, -/turf/open/openspace, -/area/station/engineering/atmos/upper) "xHK" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/wood, @@ -80162,24 +81476,29 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/central) -"xId" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "xIe" = ( /obj/structure/lattice, /obj/effect/spawner/random/structure/grille, /turf/open/space/openspace, /area/space/nearstation) +"xIl" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/lab) "xIp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 }, /obj/effect/landmark/start/hangover, -/obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/construction) "xIJ" = ( @@ -80246,13 +81565,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"xJN" = ( -/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "xJV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/firecloset, @@ -80287,9 +81599,6 @@ /obj/structure/railing/corner/end, /turf/open/openspace, /area/station/maintenance/port/aft) -"xKm" = ( -/turf/open/openspace, -/area/station/engineering/atmos/upper) "xKr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/warm/dim/directional/east, @@ -80298,6 +81607,10 @@ }, /turf/open/floor/glass, /area/station/science/zoo) +"xKx" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/turf/open/floor/iron, +/area/station/engineering/lobby) "xKz" = ( /obj/structure/rack, /obj/structure/cable, @@ -80349,13 +81662,13 @@ /obj/structure/sign/poster/abductor/ayy_cops, /turf/closed/wall, /area/station/maintenance/port) -"xLN" = ( -/obj/machinery/vending/wardrobe/engi_wardrobe, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 +"xLF" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 }, /turf/open/floor/iron/smooth, -/area/station/engineering/break_room) +/area/station/engineering/hallway) "xLQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -80377,15 +81690,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/plating, /area/station/security/execution/education) -"xLY" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/turf/open/floor/engine/hull, -/area/space/nearstation) -"xMk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "xMq" = ( /obj/effect/decal/cleanable/dirt, /obj/item/food/pizzaslice/moldy/bacteria, @@ -80427,6 +81731,13 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"xMS" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "xMV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -80515,6 +81826,19 @@ /obj/effect/spawner/random/entertainment, /turf/open/floor/plating, /area/station/maintenance/port) +"xNN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/closet/crate/hydroponics, +/obj/effect/spawner/random/food_or_drink/plant_produce, +/obj/effect/spawner/random/food_or_drink/seed_flowers, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "xNV" = ( /obj/structure/railing{ dir = 1 @@ -80579,21 +81903,6 @@ }, /turf/open/space/openspace, /area/space/nearstation) -"xOD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) -"xOS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "xOW" = ( /turf/open/floor/plating, /area/station/security/interrogation) @@ -80612,10 +81921,6 @@ }, /turf/open/floor/plating, /area/station/commons/toilet/restrooms) -"xPB" = ( -/obj/item/wrench, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "xPU" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/booze{ @@ -80630,6 +81935,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"xQB" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics - co2 Cell"; + name = "atmospherics camera" + }, +/turf/open/floor/engine/co2, +/area/station/engineering/atmos/upper) "xQC" = ( /obj/machinery/camera/autoname/directional/north, /obj/structure/closet/crate/trashcart/filled, @@ -80666,6 +81978,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, /area/station/medical/morgue) +"xQU" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/modular_computer/preset/cargochat/engineering{ + dir = 1 + }, +/obj/machinery/requests_console/directional/west{ + name = "Engineering Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/wood, +/area/station/engineering/lobby) +"xQV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/photocopier/prebuilt, +/turf/open/floor/wood, +/area/station/engineering/lobby) "xQW" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -80674,6 +82005,11 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/large, /area/station/hallway/primary/central) +"xRg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "xRj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -80681,6 +82017,19 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) +"xRn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/storage/bag/plants, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "xRI" = ( /obj/machinery/conveyor{ dir = 8; @@ -80719,13 +82068,6 @@ }, /turf/open/openspace, /area/station/maintenance/port/aft) -"xRR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "xRU" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/rnd/production/techfab/department/service, @@ -80760,37 +82102,14 @@ /obj/effect/baseturf_helper/reinforced_plating/ceiling, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"xSq" = ( -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow{ - pixel_x = 0; - pixel_y = 3 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots, -/obj/item/crowbar, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 4; - pixel_y = 0 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 +"xSv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 }, -/obj/machinery/firealarm/directional/east, -/obj/machinery/light/directional/east, -/obj/structure/table, +/obj/structure/cable, /turf/open/floor/iron/dark, -/area/station/engineering/storage) +/area/station/service/hydroponics/garden/abandoned) "xSz" = ( /obj/machinery/door/firedoor, /turf/open/floor/engine/hull/air, @@ -80829,6 +82148,15 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"xTf" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Cold Loop to Gas" + }, +/obj/effect/turf_decal/trimline/green, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "xTn" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue/full, @@ -80883,6 +82211,15 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/engine/hull, /area/space/nearstation) +"xTY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/break_room) "xUa" = ( /obj/effect/mapping_helpers/iannewyear, /turf/open/floor/carpet, @@ -80973,43 +82310,10 @@ /obj/structure/sign/poster/contraband/fake_bombable/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xVi" = ( -/obj/machinery/light/directional/south, -/obj/machinery/light_switch/directional/east, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/engine, -/area/station/engineering/atmos/hfr_room) "xVq" = ( /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/range) -"xVr" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hazardvest{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest{ - pixel_x = 3 - }, -/obj/item/clothing/suit/hazardvest{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/clothing/gloves/color/black{ - pixel_y = 3 - }, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black{ - pixel_y = -3 - }, -/obj/item/clothing/mask/gas, -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "xVy" = ( /obj/structure/table/reinforced, /obj/effect/spawner/random/maintenance, @@ -81051,6 +82355,13 @@ /obj/structure/sign/poster/official/obey/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/port) +"xVF" = ( +/obj/structure/lattice/catwalk, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/openspace, +/area/station/engineering/break_room) "xVL" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -81189,28 +82500,6 @@ /obj/structure/broken_flooring/singular/always_floorplane/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"xXQ" = ( -/obj/item/toy/plush/moth{ - name = "Spanner 2, her sibling"; - pixel_y = 10 - }, -/obj/item/toy/plush/moth{ - name = "Moff #5"; - pixel_x = -6; - pixel_y = -5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/toy/plush/moth{ - name = "Lizzy Hates-The-Lizards"; - pixel_x = 5; - pixel_y = 1 - }, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "xXU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -81248,13 +82537,19 @@ /obj/structure/sign/poster/contraband/shamblers_juice/directional/east, /turf/open/floor/eighties, /area/station/maintenance/starboard/fore) -"xYd" = ( -/obj/structure/chair/office, -/obj/effect/landmark/start/chief_engineer, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood, -/area/station/command/heads_quarters/ce) +"xYb" = ( +/obj/structure/cable/layer1, +/turf/open/floor/catwalk_floor, +/area/station/engineering/main) +"xYf" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/soda_cans/cola{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/effect/spawner/random/entertainment/coin, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "xYh" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -81263,6 +82558,10 @@ /obj/structure/cable, /turf/open/floor/iron/textured_large, /area/station/security/prison) +"xYi" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "xYk" = ( /obj/machinery/computer/monitor{ dir = 1 @@ -81278,6 +82577,19 @@ /obj/effect/turf_decal/siding/thinplating/corner, /turf/open/floor/wood/large, /area/station/service/library) +"xYn" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/hop{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hop) "xYy" = ( /obj/machinery/nuclearbomb/selfdestruct, /obj/machinery/light/directional/east, @@ -81290,24 +82602,16 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xYM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - filter_type = list(/datum/gas/nitrogen) - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "xYS" = ( /obj/machinery/computer/operating{ dir = 1 }, /obj/effect/turf_decal/tile/purple/half, -/obj/item/radio/intercom/directional/south, /turf/open/floor/iron/white/textured_half, /area/station/science/robotics) +"xZd" = ( +/turf/open/floor/iron/smooth, +/area/station/engineering/atmos/upper) "xZn" = ( /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, @@ -81398,15 +82702,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/openspace, /area/station/medical/storage) -"ybg" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "ybh" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, @@ -81532,10 +82827,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"ycz" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/station/engineering/engine_smes) "ycC" = ( /obj/structure/table, /obj/item/radio/intercom/directional/south{ @@ -81569,6 +82860,10 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/openspace, /area/station/hallway/primary/central) +"ydi" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/station/engineering/hallway) "ydo" = ( /obj/structure/railing/corner/end{ dir = 8 @@ -81580,6 +82875,16 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) +"ydy" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 6 + }, +/turf/open/floor/engine/hull/reinforced, +/area/space/nearstation) +"ydH" = ( +/obj/effect/landmark/firealarm_sanity, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/starboard/fore) "ydI" = ( /obj/structure/fake_stairs/directional/south, /obj/machinery/light/directional/west, @@ -81644,6 +82949,13 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"yeu" = ( +/obj/structure/table, +/obj/structure/bedsheetbin{ + pixel_y = 6 + }, +/turf/open/floor/iron/cafeteria, +/area/station/commons/locker) "yeA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -81667,6 +82979,15 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"yeH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/item/clothing/glasses/welding{ + pixel_x = 6; + pixel_y = 7 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "yeJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -81688,12 +83009,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/turret_protected/aisat_interior) -"yeQ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "yeT" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -81711,15 +83026,6 @@ /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"yfu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/sink/kitchen/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "yfv" = ( /obj/structure/table/wood, /obj/item/binoculars{ @@ -81760,18 +83066,6 @@ }, /turf/open/floor/plating/elevatorshaft, /area/station/commons/lounge) -"yfW" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/start/depsec/engineering, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "yge" = ( /obj/effect/spawner/random/maintenance, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -81799,10 +83093,6 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/security/prison) -"ygA" = ( -/obj/effect/landmark/start/atmospheric_technician, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "ygB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -81833,6 +83123,18 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/iron/checker, /area/station/maintenance/hallway/abandoned_recreation) +"yhf" = ( +/obj/structure/cable/layer1, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"yhq" = ( +/obj/effect/turf_decal/caution, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "yhs" = ( /obj/effect/turf_decal/tile/red/fourcorners, /obj/structure/table, @@ -81858,9 +83160,6 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/wood/large, /area/station/medical/psychology) -"yhH" = ( -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos/upper) "yhJ" = ( /obj/structure/grille, /turf/open/space/basic, @@ -81870,6 +83169,19 @@ dir = 1 }, /area/station/service/library/private) +"yhN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable/layer1, +/turf/open/floor/catwalk_floor, +/area/station/engineering/engine_smes) +"yhO" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Testing Room" + }, +/obj/machinery/door/firedoor/heavy, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "yhT" = ( /obj/structure/railing{ dir = 4 @@ -81890,17 +83202,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"yhY" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/computer/atmos_control/carbon_tank{ - dir = 8 - }, -/obj/structure/railing, -/obj/effect/turf_decal/tile/dark/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "yib" = ( /obj/effect/turf_decal/siding/dark{ dir = 1 @@ -81913,16 +83214,6 @@ /obj/structure/chair, /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) -"yiw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "yiy" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, @@ -81936,11 +83227,6 @@ }, /turf/open/floor/iron/white, /area/station/maintenance/starboard/lesser) -"yiM" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/upper) "yiP" = ( /obj/machinery/washing_machine, /turf/open/floor/iron/white/textured_half, @@ -81949,6 +83235,14 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"yiY" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/item/wrench{ + pixel_x = -7; + pixel_y = -3 + }, +/turf/open/floor/plating, +/area/station/engineering/storage_shared) "yje" = ( /obj/machinery/door/airlock/grunge{ name = "Cell 3" @@ -82025,9 +83319,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/art) -"ykv" = ( -/turf/open/openspace, -/area/station/engineering/supermatter) "ykz" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -82090,6 +83381,13 @@ "ylO" = ( /turf/open/floor/glass, /area/station/commons/fitness/recreation) +"yma" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) (1,1,1) = {" dcE @@ -107379,7 +108677,7 @@ gPW xRU xOn xAj -jyf +xAt own wik uxl @@ -107630,7 +108928,7 @@ jBd lOd nKj jIX -sTK +heb vYH cFL xAj @@ -109219,7 +110517,7 @@ bFe rPE srD jDx -cAs +ddx ovx tRJ dWj @@ -113051,7 +114349,7 @@ kZo hMd ozk pen -rFp +rIS szz oTK tQI @@ -113069,7 +114367,7 @@ fLr iLm fLr pEO -toE +aVL sGy xeM ujD @@ -113300,7 +114598,7 @@ dDX vuO ugN tGb -gMZ +xYn loc ltm kRk @@ -114067,7 +115365,7 @@ bOk bOk wrI fjt -nck +xDR vuO ilg wmy @@ -115839,7 +117137,7 @@ wVd lBg nhR iol -gUR +eet jMr ibK jqv @@ -116112,10 +117410,10 @@ nyA jph dcE dTL -tYi -pST -eLk -iji +oHs +xYf +fpM +gTH dCm jqo eaw @@ -116369,10 +117667,10 @@ iOE jph heR dTL -vpp +jDr oNp sPC -wqE +sOw dCm rpL lHY @@ -116434,8 +117732,8 @@ xgC ihW pRG qnW -jkr -rRQ +tNP +yfK noJ pgp ntN @@ -116626,10 +117924,10 @@ jph jph dcE dTL -oHh +nCC sjO skC -amk +qQj dCm dCE bLf @@ -116691,13 +117989,13 @@ neB nwd hsx xYS -jkr -qgj +tNP +yfK nIu gal fwp lei -fdi +lmc fAl lGy ajB @@ -116883,10 +118181,10 @@ heR dcE dcE dTL -dJx +rSu uzN oqd -uXW +mkv dCm nZb ayn @@ -116955,9 +118253,9 @@ miO rPd rPd omG -wPb -sOb -kdV +fAl +pcR +uxt jbW qnM wKb @@ -117143,7 +118441,7 @@ dTL uNG jQu oqd -xhT +yeu dCm emL bXg @@ -117206,15 +118504,15 @@ gXG gXG gXG jkr -dYN -ntN +qgj +rAs grd ntN rkW lmc fAl -pcR -pTp +bCx +uxt sQJ wKb wKb @@ -117471,7 +118769,7 @@ gPd qyA fAl pcR -tgL +ajB nLp wKb mWI @@ -117726,9 +119024,9 @@ gal vWv vWv lmc -fAl +tNP mgh -pTp +uxt cOe wKb cpD @@ -117980,11 +119278,11 @@ uGP kxo iCa lbe -idj +xIl idj uix -fAl -wnJ +tNP +pcR izU dxN cWU @@ -118240,9 +119538,9 @@ uZS vMR oof exo -fAl +tNP pcR -pTp +uxt xaz bQe qYi @@ -118499,7 +119797,7 @@ nCI ifV fAl lGy -tgL +ajB xaz bQe iLy @@ -118753,9 +120051,9 @@ ntN bEw rOk uPL -exo -fAl -pcR +qoN +wOO +mdw fAI jpp vQH @@ -119707,7 +121005,7 @@ pRO mcY tFy qNn -rad +nym clF pRO ntw @@ -120484,7 +121782,7 @@ pRO tqQ ccZ qMN -tcW +pOF dCm tMZ idM @@ -120741,7 +122039,7 @@ pRO gnw qAd vfe -rwe +fWc dCm cNO idM @@ -120998,7 +122296,7 @@ cVN cVN dux ezT -tcW +pOF dCm ade rdl @@ -121255,7 +122553,7 @@ olU olU laK ffR -tcW +pOF dCm cNO dCm @@ -121760,17 +123058,17 @@ dCm dCm dCm dCm -tMZ -opq +cqh +ntW cNO -tMZ -hYm +cqh +ozE poZ cCv poZ -cCK -aMC -cCK +iqy +bsa +iqy fIg cNH fIg @@ -122007,17 +123305,17 @@ gbJ dCm jhU nit -fIg +isp xBr dCm -krl wIW -fIg -fIg -tSh -fIg -fIg -tMZ +qjf +isp +isp +ust +isp +isp +cqh hkm hkm hkm @@ -122026,7 +123324,7 @@ hkm hkm hkm hkm -dUE +voi yeT dCm dCm @@ -122034,7 +123332,7 @@ dCm dCm tFd tCF -vas +gex itP imq wHp @@ -122092,7 +123390,7 @@ hFi hFi hFi hFi -kjl +rMe gnT hFi hFi @@ -122262,18 +123560,18 @@ dCm dCm nHi dCm -dXy -dXy -fIg -fIg -fIg -fIg -fIg -sgG +adv +adv +isp +isp +isp +isp +isp +iZx oTJ nPB -feO -dXy +dyG +pov aMD hkm heR @@ -122283,22 +123581,22 @@ heR heR heR hkm -dUE +voi yeT dCm ooK nvO owr rwW -hQP +jBK kSN -dGT +ffj vTm qDe qDe rHk qDe -qDe +mIR iPT qDe qDe @@ -122516,38 +123814,38 @@ dcE dcE dcE dCm -wIz -mzR -dCm -dXy -dCm -dCm -dCm -dCm -dCm -fIg -eEN -ehR -ehR -ehR -ehR -ehR -ehR -ehR -ehR -ehR -ehR -ehR -ehR -ehR -wna +jDY +inp +mHH +hQQ +lZQ +nws +itt +nws +ydH +isp +pov +xqs +xqs +xqs +xqs +xqs +xqs +dqJ +dqJ +xqs +xqs +dqJ +dqJ +jSf +jSf qpc -fJL -fJL -fJL -fJL -fJL -iyz +kOk +kOk +kOk +kOk +hdi +cHC wZA fct frE @@ -122570,7 +123868,7 @@ iYq caE dUe oDH -wvm +bEJ iKT oDH oDH @@ -122626,8 +123924,8 @@ cMb lue vnp hFi -quW -ihn +shX +mju vvc exj qZZ @@ -122775,36 +124073,36 @@ dcE dCm xxd mjh -uAV -mwz -dCm -sde -wWb -wIe -dCm -fIg -eEN -ehR -wGH -wGH -wGH +bTW +foJ +bTW +bTW +jjd +bTW jSf -xwv -xwv -xwv -jSf -nxD -nxD -nxD +isp +pov +xqs +vUm +pLP +vyp +dqJ +vBX +mzN +hbO +eKF +gmd +iAH +dyt jSf -wvz -wNg -fJL -rym -tNk -rlk -fJL +bKC +vDL kOk +aGG +aGG +aGG +hdi +hdi kOk bTH hdi @@ -122879,12 +124177,12 @@ aLd aLd cWU cWU -fxX -fxX -kEn -kEn -sUR -fxX +aSW +aSW +pQh +pQh +muC +aSW uVg uVg dEB @@ -123031,44 +124329,44 @@ dcE dcE dCm iBG -dXy -aHg -cXJ -hbw -bvf -uho -fUF +oKN +bTW +oPu +mvu +llK +fYt +nXr jSf lnO -qjp -jSf -mqL -wez -wGH -jSf -veJ -uoD -xwv -jSf -pRi -obz -nxD +cNt +tkO +ovN +oUo +klH +lVD +uTK +fsw +ahT +jHt +jHt +jHt +wJF jSf -pFF -woP -fJL -jAH -frd -prt -eSA -gFo +ucQ +wzB +kOk +hPP +qlF +vaF +oOs +iKA lNZ -jko -mGO -oNg -uEi +ksm +qlf +tul +lge +xQU jwa -vyx qKO eYw eYw @@ -123086,7 +124384,7 @@ qgr xiy lmt qPj -hBj +caQ gNy qgI lMT @@ -123136,12 +124434,12 @@ mTH cWU cWU msr -fxX -euA -xss -yfu -vhF -cyY +aSW +xNN +xSv +ocT +sLB +ckE uVg dEk xLQ @@ -123281,50 +124579,50 @@ dcE dcE dcE dcE +xXv +mXN dcE dcE -kOx -kOx dcE dCm lNm oTE -fSw -jIG -dCm -hTT -dDs -xXQ +bTW +iqs +mId +nfM +bCb +mId jSf pIn qhl +xqs +vUm +lff +wLg +dqJ +tMD +pDT +xwC +hKn +hKn +hyo +lRr jSf -mWN -nyw -cqg -jSf -kZJ -lZW -cGx -jSf -ctD -wHQ -sMS -jSf -cJZ +bBu vRz -fJL -kbM -jNd -ffg -cig -ejW +kOk +hun +cZN +kAX +fjy +osu xfX -vVE -hWk -uiH -bui -jwa +ezE +udY +xQV +lge +rNx jwa qKO hbK @@ -123393,12 +124691,12 @@ jmh qdA wOx vcm -kEn -hTF -sax -gEJ -gBc -cyY +pQh +voe +qrN +dLb +qPy +ckE uVg viT bwI @@ -123538,51 +124836,51 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -dcE -ngH -wnb -ngH -ngH -giv -ngH -ngH -jSf -jSf +mXN +heR +heR +heR +heR +unl +kQy +unl +unl +lUO +kUW +lVA +gBY +kUW jSf -eCn +orm cil +xqs +xqs +yhN +xqs +xqs +dqJ +wDY +dqJ +dqJ +vzW +dqJ +xqs jSf -qWL -pvp -wFS -jSf -qWL -pvp -wFS -jSf -qWL -pvp -wFS -jSf -nHY +aqy fZR -fJL -rjt -yfW -eSA -eSA -ejW -bAW -loh -aOw -doo -cpF -jkK -jwa +kOk +vMO +vqi +seA +cuT +gFk +fBX +hpe +nbY +bKb +lXK +lBQ +jTQ jwa gtA qKO @@ -123650,12 +124948,12 @@ jmh dlt wKl rNT -kEn -dMK -sax -erQ -yiw -cyY +pQh +eqU +qrN +kYT +qeb +ckE uVg wZW xNr @@ -123795,51 +125093,51 @@ dcE dcE dcE dcE +mXN dcE dcE -kOx heR -ngH -ngH -eDt -uks -usS -fEt -jdz -kIJ -iIC -ayL -pNo +unl +unl +eGE +hVk +hBw +fgx +kqH +vLj +hYg +fGD +eQO lsV -fmR -tPq -ouD -caM -vMf -mrn -nDT -mrn -nXA -mrn -xDy -caM -bSF -bYx -rsy +xCJ +tNb +lqA +xYb +rrz +hKE +nNY +tIl +xkL +kTN +nNY +nNY +tKa +nNY +ocF jSf -fJL -fJL -fJL -fJL -sUC -lsc -jrx -rIU -wEs -tPR -nlv -vCG -onX +jSf +jSf +jSf +jSf +kOk +dGS +bAW +idm +oOs +wfz +gsL +iDS +aKR jwa eYw qKO @@ -123907,12 +125205,12 @@ jmh qdA wOx tVR -kEn -kbi -eNm -dOC -uAF -fxX +pQh +kpE +flo +aQx +iIs +aSW uVg uVg pWZ @@ -124052,51 +125350,51 @@ dcE dcE dcE dcE +mXN dcE dcE -kOx -dcE -vUO -aof -ndc -mqx -tZP -vEJ -vEJ -smY -jSf -jSf +gOE +nmx +nAN +uhl +rZl +gXQ +kXt +aTV +kUf +unl +unl +unl +unl jSf -dgu -dHc -rAP -hHC +hmX +wrQ +xYb +hns +jvZ +wrQ +uvN +wrQ wrQ wrQ wrQ -dxu -iOI -iOI -iOI -kJm -iOI -nXv +xgZ iUJ -fWH +rOB jSf -wXD -xaR -plI -uAl -xsP -osu -tZU -hok -qOG +jDl +ncV +hsI +dtj +pdB +bRC +bAW +rIU +bAW loh -jrx +bAW rIU -jsT +kmm jwa eYw qKO @@ -124114,7 +125412,7 @@ rwd deg qJb qPj -uKP +qNi ssa cjh osx @@ -124122,7 +125420,7 @@ csb csb cjh glU -uKP +qNi mHf fEA uqB @@ -124164,12 +125462,12 @@ jmh rOn iXD kiu -itU -tcv -cJi -qMa -gPh -fxX +gFm +gFa +wQw +vwa +xRn +aSW jjG uVg ucl @@ -124309,48 +125607,48 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -uff -jrh -mqx -mje -jrh -mOn -lby -mAD -clr -clr -akV +mXN +heR +heR +heR +mTz +naa +mUN +rZl +nyz +fgx +vLU +oKx +tCX +jGm +oPd +oPd jSf -bfM -qBN -wOw -wOw -wOw -wOw -wOw -wOw -wOw -glw -wOw -qni +fvu +lpj +oob +fVd +fVd +fVd +uyr +uyr +uyr +uyr +uyr +nGB +ien aat -lWI oxn -kWG -fGA -qIY -dSD -tVv +itX +ngp +qzQ +hYa +jCv +mYm xRj -svl -qAy -wXn -uvz +wjX +qtj +doK smk gTe eSW @@ -124422,10 +125720,10 @@ qdA xZP aKk wKb -kEn -kEn -kEn -oXS +pQh +pQh +pQh +hLN wKb wKb uVg @@ -124566,51 +125864,51 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -ope -jXy -mqx -cmW -mlJ -mlJ -smY -pvp -clr -qiI -cwT -pvp -gPD -mXR -hSt -nCN -hSt -hSt -hSt -dXl -hBv -iKM -mfG -nCb +unl +unl +unl +unl +unl +fgx +fgx +rZl +bmO +fgx +vdm +kXt +ppL +jrq +jrq +jrq +fOM +noI +wrQ +nKD +dYy +wrQ +wrQ +wrQ +tST +uBp +wrQ +wrQ +wrQ dfI -pSh -nLQ -ogq -vja -nLX -uAl -eRF +tFC +fTF +dnb +gym +inI +gkW +njk +iRX +gef +koC +oVY +oCr bAW -kux -uDo -hti -wbf -fBX rIU -par +svB jwa nES qKO @@ -124686,7 +125984,7 @@ koi boq wKb jCK -aVv +hWU moI lRp wKb @@ -124823,48 +126121,48 @@ dcE dcE dcE dcE -dcE -dcE -kOx -heR -ngH -ngH -kOU -bVD -dqd -eKa -mOn -smY +unl +wFl +wFl +wWO +sZu +muW +xBR +qEZ +esk +vMn +rND +cMW +ppL +cep +wMu +wMu jSf -bck -clr -bct -xdR -cBn -nXv -xrn -bdE -utf +anB wrQ +pvU +xYb +mwx wrQ -beI +dje +qbm +dje wrQ -beI -bdE -beI +mwx wrQ -cqm +tHR +oZV pCb +wSZ +wSZ rct rct -rct -rct -lTe -fjy -fBX -tBn -mwk -tQq +uAl +aLX +gAb +gEZ +lyw +vuy bAW tOO pJM @@ -124939,10 +126237,10 @@ eEv eEv eEv wKb -iiT +xfn aWb tCE -mcs +gSS wKb wKb wKb @@ -125080,50 +126378,50 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -dcE -ngH -vHK -jrh -mqx -kRe -hmR -smY +unl +wFl +ftG +kGD +pQS +aKq +xcR +jBb +mOo +nBs +dDV +rPh +unl +unl +unl +unl jSf +pvp +pvp jSf +iyb jSf +pvp +pvp jSf +pvp +pvp jSf -gUg -dxu -pPr -iOI -iOI -nXv -wrQ -beI -uBp -beI -bdE -tRe -qFt -eNk +pom +jSf +kvl pCb -mJW -sff -kYS -rct -rct -fOx -bAW -aVD -mwk -tQq +gTm +rnX +sYg +bIP +hdi +afS bAW -gXl +tBn +vss +xKx +fMu +rHZ jwa jwa nES @@ -125198,8 +126496,8 @@ wKb wKb wKb rlR -luD -jyZ +hip +aUe wKb hhN pss @@ -125337,53 +126635,53 @@ dcE dcE dcE dcE -dcE -dcE -kOx -heR -ngH -ngH -xLN -dab -mqx -eKa -mOn -smY -mAD -bww -bww -cOU -dHc -ttI -wrQ -beI -neM -mZZ -xmT -uWM -uEq +unl +gPj +wFl +iqj +uTI +nPS +wXW +acU +rBB +cTL +juh +unc +uTI +ldL +bxx +bxx +jSf +dHC +lqH +lqH +aGp +lqH +lqH +lqH +lqH +lqH +lqH +lqH +lqH lqH -qBn -xbQ -vRm -keB -apc +buu pCb -qRc -kfG -vWL -lOm -rct -xEC -cYY -fMu -gbT -bpO -qns -ueY -jwa -oBh -eYw +pzZ +pbB +aMw +hYj +uAl +svM +fjy +aVD +aUD +hWk +fJL +fJL +fJL +fJL +fJL qKO eYw eYw @@ -125452,7 +126750,7 @@ hZf wKb eEv eEv -iZD +kew wUu sfL pwQ @@ -125594,53 +126892,53 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -dOn -ndc -jrh -dEr -thy -mOn -smY -pvp -bww -nWL -cPa -pvp -uJw -bUD -pUs -cGu -ign -rxH -mmN +unl +unl +unl +unl +unl +aKq +eJw +krK +ntE +xZd +aFQ +fii +pQS +isX +gZO +jjj +fOM +dzg rxH -faR +mDD +goU +oLX +yhf +meE +nFx +ich +eXf +gro +goU rxH -rGv -wKU -rPY -qRj +lFW pCb -kEG -cvv -ubc -mGw -rct -rct +aGX +mur +sok +wSZ uAl -rwj -fEH -jzS -jzz -jzz -shi -shi -shi +uAl +afS +bAW +xfX +hWk +eSA +hXA +iNX +cbB +fJL qKO qKO eYw @@ -125707,13 +127005,13 @@ vlc mgY mgY wKb -dRo +nkZ wep eEv ebQ diA xqo -spm +vKc wKb lmL jyA @@ -125851,53 +127149,53 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -bgi -jrh -fRh -hcT -kHO -mOn -smY +unl +kYf +kYf +fbu +aNf +gOL +frJ +krK +ntE +xZd +dDV +oAJ +mSE +lwT +bxx +bxx jSf -neI -bww -cTQ -xdR -mXC -cYg -uJv -wdS -rxH +uRK rxH -eKk +umy +goU +tdN +xBE +xBE oUa xBE +xBE +dfG +goU rxH -rxH -rGv -gvc -meh +lFW pCb -ybg -rLE -qXq -nfs -clk -cql -sBq -aAz -dwF -uND -jzz -wEx -pNi -tcw -shi +gKs +iWh +bvI +wSZ +rRJ +oOs +nID +jrx +xfX +hWk +eSA +iep +qXH +lVH +fJL wAO qKO kcN @@ -125964,8 +127262,8 @@ wKb yfj nuZ wKb -rYa -oEA +fMC +jJZ trK msK ina @@ -126108,53 +127406,53 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -cio -jXy -jrh -xub -cCZ -mOn -smY -jSf -jSf -jSf -jSf +unl +kYf +sFb +kil +pQS +aKq +bHC +krK +dWg +xZd +dDV +ska +unl +unl +unl +unl jSf -mFg -rxH -rxH -fmw -aup -rxH -hDq -iAp -hDq -tqs -ita -frg -iyG -bhF +gJT +iCq +umy +aej +rRh +xBE +vTv +pEG +qvr +xBE +kbQ +yma +iCq +lFW pCb -qMm -xOD -jma -viv -viv -qaP -nYj -nYj -nYj -lVz -lKj -hUl -dgJ -sSK -shi +iUj +glJ +rvR +tTz +ulq +smk +smk +smk +smk +rLK +pnc +gAC +nxN +jLt +fJL eYw qKO hbK @@ -126225,7 +127523,7 @@ wKb wKb wKb wKb -foP +qMe ilV bvG wKb @@ -126365,53 +127663,53 @@ dcE dcE dcE dcE -dcE -dcE -kOx -heR -ngH -ngH -cSz -jrh -mqx -cIf -mOn -lby -bMT -bGv -bGv -cWI -pvb -dwv -tXl -tXl -rBz -eaV -gXJ +unl +xbI +kYf +fPA +uTI +wfp +wXW +evv +dqo +lDh +juh +unc +uTI +cgE +sbp +sbp +jSf +kWx +rxH +wcJ +bdh +xBE xBE +hDq oWZ +hDq xBE xBE -eaV -sDT -rWT -qYI +edu +fJN +nCO pCb -kRK -nWQ -xSq -irJ -grE -rTW -oai -dPD -dPD -sNK -jzz -oMp -ndM -noR -shi +sIB +rBO +wSZ +wSZ +rqm +fjy +bAW +fBX +bAW +hWk +eSA +sbF +qhW +qTt +fJL qKO qKO hbK @@ -126622,53 +127920,53 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -dcE -ngH -uTj -jrh -mqx -kRe -mOn -smY -pvp -bGv -ubf -eCN -pvp -bre -rxH -rxH -rxH -nYD -oID -xwo -kYU -tUL -tvR -nYD -umy -pNQ -qzJ -pCb -pCb -wSZ -pCb -wSZ +unl +unl +unl +unl +unl +daE +oeV +qLm +mOo +nBs +vxk +alk +pQS +gmm +hMt +cDI +fOM +edY +iMP +fmw +bdh +lEJ +ewm +wAU +kDN +aZY +okm +lEJ +nPP +fJN +uip pCb pCb -kOk -hdi -hdi -kOk -shi -shi -shi -shi -shi +uqc +cIH +cxh +gyV +kwO +vvB +fMu +fMu +kth +fJL +fJL +fJL +fJL +fJL qKO qPs hbK @@ -126808,39 +128106,25 @@ dcE dcE dcE dcE -"} -(175,1,1) = {" -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE +"} +(175,1,1) = {" +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE +dcE dcE dcE dcE @@ -126881,48 +128165,62 @@ dcE dcE dcE dcE -kOx -heR -ngH -ngH -aGD -dab -mqx -cIf -ewW -smY -jSf -eCW -bGv -vqS -fwH -nzk -oyQ -rxH -qiW -jYS -bIt -xwo -mEJ -tUL -xEd -qbM -rpW -fMm -nqt -nqt -eaV -bWY -heR dcE -heR dcE -heR dcE dcE -heR dcE dcE +dcE +dcE +dcE +dcE +dcE +dcE +unl +pBP +pBP +bFn +pwb +xrJ +lhX +drW +fzP +xZd +dDV +uKf +mSE +sBP +sbp +sbp +jSf +pbt +rQb +igb +uip +nYD +uPB +eLK +dNX +noU +vdg +nYD +cKc +fJN +uAB +hFq +eaV +wSZ +kOk +hdi +kOk +kOk +kOk +hdi +hdi +kOk +kOk +dcE heR dcE heR @@ -127136,38 +128434,38 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -sVn -ndc -jrh -dEr -thy -mOn -smY -jSf -jSf -jSf -jSf +unl +pBP +gIn +aUW +pQS +aKq +lIm +xZd +xMS +xZd +dDV +alk +unl +unl +unl +unl jSf -oHa -bSO -doS -fmw -kFT -gwh -xwo -wzN -tUL -tDJ -kFT -umy -sHt -nqt -jJj +pbt +rQb +lQA +nwJ +xmd +uMD +aVG +shb +mwY +tjt +tbd +szp +rWT +rxH +iIL eaV oAL mrg @@ -127181,8 +128479,8 @@ plB mrg bWY bWY -bWY -kmY +dTJ +heR qKO rYJ qNd @@ -127393,38 +128691,38 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -vUO -mSm -jrh -fRh -hcT -kHO -mOn -smY -xqs -fHs -vTC -ivS -cDf -vDA -rxH -gKq -fmw -uUj +unl +hng +pBP +mVM +rTQ +faw +muE +wid +qcX +xZd +dDV +alk +unl +xLF +ibq +oCS +cGS +cKc +iCq +okh +uip +xBE xBE aAt aAt aAt xBE -uUj -mMk -bxI -mue -paN +xBE +jjo +uyu +mmZ +uex sCD nld jyv @@ -127438,8 +128736,8 @@ plB vYt plB mrg -bWY -bWY +dTJ +heR qKO rsH hbK @@ -127650,38 +128948,38 @@ dcE uCR dcE dcE -dcE -dcE -kOx -dcE -vUO -vLv -jXy -jrh -hCv -jrh -dLl -smY -bvy -rUZ -gJL -hgd -sFH -gWx -hiW -mco -kpe -nwO -aph -roQ -roQ -roQ -drL -nwO -rxH +unl +unl +unl +unl +unl +hVH +frJ +xZd +rSi +xZd +vRE +fcT +chc +tuD +qQv +oiQ +tOi +ebD +qXx +igb +uAB +jmv +fgG +aOn +brm +aOn +oFn +jmv +vYm rWT -bFj -gAH +fYq +yhq tHo bWY jyv @@ -127695,8 +128993,8 @@ plB vYt mrg jyv -bWY -bWY +dTJ +heR qKO jxB hbK @@ -127762,7 +129060,7 @@ jmh wKb dGu gdG -jPB +sUF jcQ jcQ jcQ @@ -127907,38 +129205,38 @@ dcE dcE dcE dcE -dcE -dcE -kOx -heR -ngH -ngH -afo -wyz -lJd -mje -mOn -smY -xqs -rUZ -jYr -oZm -xqs -njF -hra -rHM -fZz +unl +xQB +qpL +uEQ +mSE +vqH +apA +xZd +rSi +xZd +upL +fcT +unl +uua +wjz +iTx +ydi +maS +rxH +chR +rxH rxH -xGf -fTX -fTX -fTX -dhE +uip +rxH +brm +rxH +cKc rxH khI fPT uoU -mZH +xTf sCD plB bOO @@ -127952,8 +129250,8 @@ plB bOO nld jyv -bWY -bWY +dTJ +heR qKO bMh hbK @@ -128164,38 +129462,38 @@ dcE dcE dcE dcE -dcE -dcE -kOx -dcE -dcE -ngH -gbS -wyz -lOZ -jrh -pdD -smY -bDj -fSI -qlz -fUc -uar -gqU -hAQ -wUW +unl +qpL +jRb +oBp +pQS +aKq +eed +xZd +jjh +xZd +wOG +sxT +kgo +wve +iFf +pcg +gFp +qXj +mjy xNn -hgJ +tXl +tXl nwJ -pMu -pMu -rmT -tVQ +lcU +vsM rxH -wkK -rWT -bhF -rmE +cKc +rxH +cfP +kgf +igK +oXS eaV bWY bve @@ -128209,8 +129507,8 @@ bWY bve plB nld -bWY -bWY +dTJ +heR qKO iJH hbK @@ -128421,35 +129719,35 @@ dcE dcE dcE dcE -dcE -dcE -kOx -kOx -dcE -ngH -bVG -bVG -pSJ -avg -iQY -jrh -xqs -dox -ryw -bRf -xqs -shr -ghB -dgI -vEW -vEW -gLM -oEh -oEh -mGB -xYM -wfP -eKe +unl +qpL +qpL +ovq +uTI +iLC +eaX +jBb +omc +nQs +dDV +alk +unl +kdZ +bZR +fuU +gjb +oBa +pub +pub +iqf +iqf +naq +wDt +fhg +wzV +oRU +lCw +hUM eaV iUs eaV @@ -128678,34 +129976,34 @@ dcE dcE dcE dcE -dcE -dcE -dcE -dcE -dcE -ngH -ngH -ngH -ngH -ngH -ngH -ngH -xqs -xqs -xqs -xqs -xqs -eaV -eaV -qFH +unl +unl +unl +unl +unl +aKq +dXY +mil +bEK +mil +mUN +ska +unl +gjb +gjb +gjb +gjb +cyN +vAx +cfs eaV -eCp -eCp +pVA +qpa rki rki rki -wMR -hwX +kAr +xqE maB eaV ioU @@ -128798,7 +130096,7 @@ mtp kNU wKb wKb -wKb +tWA cIB wKb gXj @@ -128939,30 +130237,30 @@ dcE dcE dcE dcE +unl +gCa +rnR +fPi +fPi +fPi +egC +lTX +unl dcE dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -mPy -dcE -dcE -heR -bWY -oJp +tYZ +gpk +gav +nqt +nqt eaV -sHd -nIQ -sgS -mwJ -mwJ -unz -mJO +enK +jEx +iry +fJN +fJN +xDp +fnY eaV eaV eOr @@ -128981,7 +130279,7 @@ heR heR dcE heR -bWY +kmY qKO qKO pTP @@ -129054,9 +130352,9 @@ wKb wKb wKb wKb -ito -wYw -nCP +auS +bTa +qjn wKb coZ cxU @@ -129196,31 +130494,31 @@ dcE dcE dcE dcE +unl +unl +unl +mTz +mTz +mTz +unl +unl +unl dcE dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -dcE -xXv heR -bWY -ilR -ipc -kLD -uHZ +mcT +hQZ +nqt +nqt +eaV +fav +sNC nlt xtQ ezq -uHZ +sNC xXV -ipc +eaV tWn tWn dcE @@ -129311,9 +130609,9 @@ dcE heR heR wKb -wYw -iPC -iPC +qvW +gdu +rCp wKb vZM cxU @@ -129456,28 +130754,28 @@ dcE dcE dcE dcE -uCR -dcE dcE dcE dcE dcE dcE -dcE -dcE -xXv heR heR heR -ipc -sij +heR +eaV +eaV +eaV +eaV +eaV +rHU sNC nlt nlt nlt sNC -ttQ -ipc +xYi +eaV tWn dcE dcE @@ -129568,9 +130866,9 @@ dcE dcE heR wKb -peE -wYw -iPC +mtl +rhF +lNc wKb cLm aVk @@ -129718,23 +131016,23 @@ dcE dcE dcE dcE -dcE -dcE -dcE -dcE +mXN +mXN +mXN +mXN xXv kOx dcE dcE -ipc -sNC +eaV +fBZ sNC kLD nlt nlt sNC -sNC -ipc +rRn +eaV dcE dcE dcE @@ -129983,9 +131281,9 @@ dcE kOx dcE dcE -ipc +aHc sNC -xPB +kLD nlt nlt nlt @@ -131769,7 +133067,7 @@ dcE dcE dcE dcE -dcE +uCR dcE dcE dcE @@ -167552,7 +168850,7 @@ tlL jhO muJ qFA -epX +xot kUq uJi kUq @@ -168064,7 +169362,7 @@ nlO iGy ohb rwh -vEp +eas sFc aCE pIt @@ -170599,7 +171897,7 @@ eIJ eIJ nKj ipm -mdn +mkd lOd gPW wKg @@ -173952,7 +175250,7 @@ tnb hRX hRX hRX -jmG +vKZ xyF pME rjE @@ -176807,7 +178105,7 @@ iPl dfn fbC kza -uLC +xck qPB eHu yly @@ -178846,7 +180144,7 @@ uxq izh iGI xCI -nhD +uOx qVO qVO sLY @@ -180633,7 +181931,7 @@ dUb dUb dUb drX -uGp +bvY vzx xvN iJc @@ -182475,7 +183773,7 @@ cwP xWT dTc vsK -gbv +qau soU soU soU @@ -185783,7 +187081,7 @@ eZC gZu imd jVB -jPa +sQZ paf paf shs @@ -186487,23 +187785,23 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +heR +dbT +pmx +dbT +pmx +dbT +pmx +heR +heR +dcE +heR +heR +heR +heR +heR +heR +dDL nlm nlm nlm @@ -186512,7 +187810,7 @@ tSA qqY hRj dCm -aHl +jda dCm qzB dXy @@ -186744,28 +188042,28 @@ nlm nlm nlm nlm +dbT +mZo +mZo +mZo +mZo +mZo +mZo +pmx +heR +dcE +heR +wJJ +wJJ +wJJ +wJJ +wJJ +dDL nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +xrx qqY hRj dCm @@ -186773,7 +188071,7 @@ dCm dCm dXy dXy -dXy +nYR dXy wsc qPw @@ -186801,7 +188099,7 @@ sgG sgG sgG sgG -aLg +dVe sgG sMw lYT @@ -186811,7 +188109,7 @@ twC tzO rPK cdi -jPa +sQZ paf jPa shs @@ -187001,28 +188299,28 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +aDp +mZo +mZo +mZo +mZo +mZo +mZo +mZo +mrg +dcE +heR +wJJ +qeQ +qeQ +qeQ +wJJ +heR +heR +dDL +dDL +dDL +xrx qqY lrM spK @@ -187063,7 +188361,7 @@ fIg qkM rnh miE -qEW +wIl ewf wiA jrb @@ -187258,29 +188556,29 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -cTR +heR +tWI +tWI +tWI +tWI +tWI +tWI +tWI +jyv +dcE +heR +wJJ +qeQ +qeQ +qeQ +wJJ +shx +pPu +pPu +pPu +pPu +shx +hRj hRj dCm dCm @@ -187288,12 +188586,12 @@ dCm dCm dCm dCm -dCm +dXy bNY +hMc ojr ojr -ojr -daH +dDq ojr kHj rCP @@ -187515,59 +188813,59 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -cTR -noj -eSu -noj -eSu -noj -eSu +heR +tWI +aDp +uUH +aDp +uUH +aDp +uUH +jyv +dcE +heR +wJJ +rad +tOE +rOG +wJJ +shx +tlf +wCm +lqv +ejA +shx +hRj +hRj +hRj +hRj +hRj +hRj hRj dCm eEN -gFR -qrx -fpZ -tAV -nit +wIW +hkm +hkm +hkm +qhP +hkm +hkm dCm dCm dCm dCm dCm -jSf -jSf -jSf -jSf -jSf -jSf dCm dCm dCm dCm dCm +gGB +dCm +dCm +dCm +dCm paf paf paf @@ -187578,7 +188876,7 @@ uGj jPa jPa jPa -jPa +qGa tLo paf paf @@ -187772,55 +189070,55 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -hxX -txh -txh -txh -txh -txh -txh -eSu -dCm -dCm -dCm -dCm -dCm -dCm -dCm -dCm +heR +aDp +syR +syR +syR +syR +mrg +bWY +jyv +shx +shx +wJJ +eBf +pPu +eBf +wJJ +shx +pJf +jBB +yeH +evH +shx +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hkm +hkm +hkm +kOk +dUH +fHk +vpi +fHk +kOk hRj hRj dDL dDL -jSf -aUo -aUo -hFD -hRQ -jSf -dzI +heR +heR +heR +heR +heR +dCm +qLZ ffr ohJ dzI @@ -188029,60 +189327,60 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -wHA -txh -txh -txh -txh -txh -txh -txh -xLY -xLY -xLY -xLY -xLY -xLY -xLY -eSu -pUD -pUD -pUD -pUD -jSf -aUo -aUo -pMg -pMg -jSf -ffr -cbT -sdI -cbT -cbT -paf +dDL +dDL +dDL +dDL +dDL +shx +pPu +shx +xaT +shx +pKc +aMs +aMs +peo +mmM +qJu +shx +ncT +ewx +jBB +iUo +shx +kOk +kOk +kOk +hdi +hdi +hdi +hdi +kOk +kOk +qTk +dBG +knN +knN +knN +knN +kOk +hdi +hdi +hdi +hdi +hdi +hdi +hdi +hdi +hdi +kOk +uYX +kOk +lUM +kOk +kOk +kOk paf paf eaf @@ -188286,60 +189584,60 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -cTR -tMq -tMq -tMq -tMq -tMq -tMq -tMq -noj -xLY -xLY -xLY -xLY -xLY -xLY -cGH -pUD -yhH -yhH -yhH -jSf -tIV -tIV -pMg -pMg -jSf -cbT -cbT -eHe -fIP -cbT -cbT +slL +dcE +heR +qHf +qHf +shx +fVM +sTS +fVM +nfE +lyd +chG +chG +chG +chG +wdu +qvw +iPL +sGR +sGR +hig +shx +dJn +oOs +oOs +oOs +oOs +oOs +oOs +iTB +mQT +oOs +oOs +oOs +oOs +oOs +oOs +oOs +oOs +oOs +oOs +anJ +oOs +oOs +oOs +oOs +oOs +hUw +ppX +mGO +rLz +xfj +dtC +fzS kOk kOk kOk @@ -188358,24 +189656,24 @@ wKb dkQ euG euG -coc +pJR coc euG euG cjh cjh cjh -uKP -cXX -uKP -uKP -cXX -uKP -uKP +mus +dJC +mus +mus +dJC +mus +mus cXX -uKP +mus mHf -iju +gpO mHf mHf mHf @@ -188543,69 +189841,69 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -cTR -tMq -sGX -cGH -sGX -cGH -sGX -cGH -sGX -xLY -xLY -xLY -xLY -xLY -xLY -eSu -pUD -yhH -yhH -yhH -jSf -tIV -tIV -fjC -tht -pLa -cbT -qHC -pQg -lKW -xjq -cbT +slL +dcE +heR +iVT +duQ +jCJ +fVM +fVM +uBv +wtd +aMs +wdu +iWM +aMs +aMq +iOk +aMs +aMs +ccV +hja +uuo +shx +eSh +vel +vel +vel +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +fkR +gSY +iov +iov +kFS +iov +hWk cCM cCM +iak +fzS +ljh +cCM cCM oWN kSL cCM -cWU +cCM aFg -wKb +cWU tub wKb lKZ @@ -188800,69 +190098,69 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -vof -nlm -nlm -nlm -nlm -xIe -xIe -nlm -cTR -sGX -xLY -xLY -xLY -xLY -xLY -xLY -xLY -xLY -xLY -xLY -eSu -hRj -noj -cGH -pUD -ioR -nov -xfE -jSf -psH -akY -ire -uVb -pLa -cbT -sRE -sRE -kfQ -sRE -cbT +slL +dcE +dDL +qHf +qHf +shx +buP +fVM +fVM +rDm +wKI +iWA +gqb +wdu +wdu +iOk +aMq +aMs +aMq +raa +bWC +shx +rqm +fMu +fMu +fMu +auP +fMu +qRb +fMu +oXO +fMu +fMu +fMu +fMu +fMu +fMu +bCP +fMu +fMu +fMu +fMu +pgh +fMu +auP +fMu +cfT +bMD +fMu +agz +cCM +cCM +iak +fzS ljh cCM dVv uhO ulj csN -kOk +cCM +aFg cWU -wKb xJt wKb gOd @@ -189003,63 +190301,40 @@ nlm nlm nlm nlm -"} -(162,1,2) = {" -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +"} +(162,1,2) = {" +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm nlm nlm nlm @@ -189076,41 +190351,64 @@ nlm nlm nlm nlm -xIe nlm nlm +nlm +nlm +slL +nlm +dDL +dDL +dDL +shx +hVc +fVM +iZe +abi +nTp +vcF +gng +tls +uBh +uqw +jmD +tnX +aMq +vIy +tMw +shx rqo -kpc -kpc +pGl +pGl rqo -kpc -kpc +eLh +pGl rqo -mTz -mTz -mTz -unl -unl -ayN -mTz -weE -unl -vmD -ips -mTz -ips -jSf -jSf -rbn -rbn -jSf -jSf +pGl +pGl +pGl +rqo +ngH +hYV +hYV +hYV +ngH +ngH +hYV +hYV +ngH +ngH +hYV +rBF +hYV +ngH +ngH +cbT +cbT +cbT +cbT +sdI cbT -nEZ -wEC -oVu -biM -iti ljh cCM bKj @@ -189118,7 +190416,7 @@ cCM cCM sUW cCM -kOk +cCM kOk wGi wKb @@ -189314,59 +190612,59 @@ nlm nlm nlm nlm +slL +slL +slL nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -dDL -rqo +shx +vvb +foH +jhg +fVM +fVM +pPu +wUI +siN +oxu +qij +eOM +nKz +cot +chZ +lcN +shx rqo -ctC -ctC -szA -ctC -jQQ +nhU +svt +mmt +nhU +ijs uwn -ddN -ddN -ddN -uNc -ddN -dKQ -hPb -naP -bqQ -eNx -onL -wmo -vMe -lXq -bRe -ddN -ddN -htS -nsS -sUl -pMt -jai -xcE -slh +ijs +xpr +ijs +ggW +ngH +wxU +jEV +fzl +rWs +aRW +xAI +oDg +aFk +xBt +btj +tLs +tLs +mkV +hsd +ujX +eYS +aQL +qve +gph uAO uhO uhO @@ -189375,7 +190673,7 @@ cCM cCM fyH sIW -rmP +sIW dLO eEv wKb @@ -189573,56 +190871,56 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -oBM -ctC -ctC +slL +dDL +dDL +shx +shx +aPr +hNJ +fVM +fVM +shx +sRd +shx +gfs +ngQ +ngQ +cay +cay +nqm +oGW +vqn +wyc +ltG +ijs xBQ sRP -rMz +bWQ eZV -fEM -wpK -nBk -wpK -eHh -eTb -uNl -dKo -ffm -wrs -ffm -uNl -dKo -vMe -vMe -ddN -hSK -xId -trS -sUl -tZK -jai -mtd +bGR +sAu +fKD +sAu +oCU +njY +ntA +eVy +xAI +snF +xAI +vKw +xAI +xAI +src +xAI +ggU +wzr +tkV +ujX +obp +tIW +uqf mVu gGb ljh @@ -189830,57 +191128,57 @@ nlm nlm nlm nlm +slL nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -oBM -ctC -ctC -nPy +uIx +fPl +ooF +cBY +xpF +fVM +shx +ogB +mDo +fQR +kBo +fAb +qij +qij +kxA +tES +isn +gvK +ijs +rhD +dwq nhU bmc ijs -gJn -xxv -xxv -xxv -sMo -kWt -xDL -aNj -ddN -cuz -ddN -cuz -ygA -ffm -wrs -ddN -ddN -eeP -izQ +qfT +qRp +qRp +tCI +ngH +tyY +xAI +iux +xAI +xAI +xAI +iJs +xAI +xAI +nDM +xAI +xAI +tLs +dgm ulQ pxw -xYd -tqc -avG +wmr +rYP +sKR gRI ljh cCM @@ -190087,57 +191385,57 @@ nlm nlm nlm nlm +slL nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -oBM -ctC -ctC +uIx +hcf +hbS +hbS +nkE +wpd +shx +ewK +shx +hMF +uRB +shx +qij +qij +kxA +qij +kXa +uzh +ijs +ijs lEy nhU +vPa ijs -ijs -gJn -xxv -xxv -xxv -tsU -qFI -kCL -sNA -laE -xCr -laE -xCr -hSM -laE -vHY -laE -laE -laE -kke -rfl -cDg -dNb -kgO -ouV +vPK +tqU +qRp +mLk +ngH +kbS +tLQ +rSX +vQf +tLQ +eVu +sLx +nRk +eVu +vQf +qpY +guy +cIM +nav +apI +hLS +sko +jLH +mVu rKO ljh cCM @@ -190344,58 +191642,58 @@ nlm nlm nlm nlm +slL nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -dDL -rqo +uIx +crn +llh +kEq +shx +shx +shx +vHa +aZQ +hHE +oTq +iGC +goM +qij +kxA +qij rqo -efP -eZV -eZV -eZV +jdr ijs +pID ijs -gJn -xxv -xxv -xxv -sMo -laE -vMy -cEX -fTc -xuI -kBY -xuI -uNl -fTc -xuI -fTc -xuI -kBY -nJO -unl -unl -unl -unl -unl -unl +ijs +ijs +ijs +jcP +qRp +qRp +eGp +ngH +kbS +sLx +pdM +sLx +eVu +eVu +sLx +xTY +eVu +sLx +sLx +xAI +sLx +jnQ +ujX +oNP +sAM +mVu +wlV +cbT ljh cCM bXp @@ -190601,58 +191899,58 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm +slL dcE +nlm +shx +dMJ +pFJ +vwx +shx +bbO +shx +kwG +fJc +shx +tHE +shx +pTz +qNX +mHZ +bpZ rqo -ctC -eZV +vjC ijs -stw -stw -qaU -gJn -lYh -lYh -vNY -kMh -kaY -ddN -klR -oLD -hAJ -ygA -oVt -qmE -raZ -nuY -raZ -wNf -raZ -iMU -vrL -hPA -jbi -jbi -jbi -unl +ijs +ijs +csf +ijs +ijs +jcP +gtw +gtw +jIj +ngH +wIS +xAI +iux +fXp +xAI +xAI +xAI +fXp +xAI +xAI +xAI +fXp +xAI +xAI +hql +cbT +sRE +vUb +sRE +cbT cCM cCM eAd @@ -190858,58 +192156,58 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe +slL +heR dDL +shx +shx +shx +shx +shx +shx +shx +kHY +kHY +shx +uOo +vVv +vVv +shx +shx +shx rqo -rqo -cVW -cOQ +eEW +bDn ijs -riP -riP -riP -gJn -xxv -xxv -xxv -sMo -laE -ddN -wAf -eMj -obi -lZI -hPh -oyv -rvD -hBf -yhY -gEn -kie -doR -mlx -ppL -oPd -oPd -wTd -unl +ijs +rKz +ijs +ijs +jcP +qRp +oys +iLH +ngH +nsN +xAI +qtC +pXM +oXX +woG +oSU +wgD +fZB +hKS +oXX +okO +xAI +xAI +jBh +cbT +eKL +mVu +orn +cbT cCM cCM cCM @@ -190919,11 +192217,11 @@ cCM cCM itq kOk -qHf -qHf -naO -qHf -qHf +jzz +jzz +pDa +jzz +jzz wKb njA wKb @@ -191116,57 +192414,57 @@ nlm nlm nlm nlm +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -eDv -ivQ -omO +dcE +dcE +heR +myt +dcE +dcE +dcE +dcE +dcE +dcE +dcE +myt +gaf +mDG +mDG +mDG +efZ +xbP +pxN ijs -stw -oXj -riP -gJn -xxv -xxv -xxv -sMo -laE -laE -uoi -xVr -xKm -xKm -qRZ -xHJ -qRZ -xKm -xKm -tkM -fQc -fLj -uzy -ppL -jrq -jrq -jrq -unl +ijs +ijs +ijs +ijs +jcP +lnf +fVU +fVU +ngH +lse +xAI +dxv +phf +mLS +mLS +mLS +ado +mLS +mLS +mLS +lEf +okO +xAI +qYY +cbT +iMq +mVu +xjq +cbT kOk kOk kOk @@ -191176,11 +192474,11 @@ kOk kOk kOk kOk -aJg -iKB -jGF -oSr -qHf +mKk +qVD +lia +arL +jzz xwu oeF sZh @@ -191373,7 +192671,12 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm +dDL +rAT nlm nlm nlm @@ -191381,63 +192684,58 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -tZg -eig -yeQ +rAT +gaf +mDG +mDG +mDG +efZ +xbP ijs -oXj -oXj -riP -gJn -xxv -xxv -xxv -sMo -laE -ddN -mgf -xKm -xKm -xKm -vMh -vMh -vMh -xKm -xKm -xKm -gYF -ddN -uzy -ppL -cep -wMu -eyJ -unl -rNq -bGE -izi -ner -sJa -sCQ -qdr -dTn -rPv -ndR -sfa -hKI -lRG -qHf +ijs +ijs +ijs +ijs +ijs +jcP +qRp +hOZ +lEj +ngH +hFA +hFA +kvb +mLS +mLS +aSB +aSB +aSB +aSB +aSB +mLS +mLS +wVX +qcT +mNC +cbT +qHC +xdZ +cbT +cbT +omx +iwq +vVR +fVn +iOc +ddM +vRf +cfI +tfy +wZE +dJt +ksa +oOZ +jzz fCe aud aUF @@ -191630,71 +192928,71 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -xJN -eZI -kZw +bxd +bxd +ydS +ydS +ydS +bxd +ydS +ydS +ydS +bxd +bxd +mDG +mDG +mDG +efZ +xbP ijs -qmr -oXj -qaU -gJn -lYh -lYh -vNY -unl -yiM -qUJ -nQl -xKm -xKm -xKm -xxv -aKl -xxv -xKm -xKm -xKm -vkL -ddN -koR -unl -unl -unl -unl -unl -dzN -dZq -aMq -iOk -pGx -lAO -ate -ate -sXc -vgy -uBo -siB -ohG -qHf +ijs +ijs +lpw +ijs +ijs +jcP +gtw +gtw +bQt +ngH +hFA +hFA +dOl +mLS +mLS +aSB +sgX +pvS +sgX +aSB +mLS +mLS +wre +qcT +agh +shi +shi +shi +shi +shi +shi +oLx +fmO +gPv +iwq +mXl +fmO +fmO +sus +vfZ +hsz +bHG +arL +jzz ulu dHK aUF @@ -191830,53 +193128,8 @@ nlm nlm nlm nlm -"} -(173,1,2) = {" -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +"} +(173,1,2) = {" nlm nlm nlm @@ -191903,55 +193156,100 @@ nlm nlm nlm nlm -xIe +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +dcE +slL +heR dDL +bxd +eFm +bNX +bNX +bNX +fWz +bNX +bNX +bNX +sey +bxd +mDG +mDG +mDG rqo -iVs -njW -lUK +xbP +aEr ijs -oOM -oXj -riP -gJn -xxv -xxv -xxv -sMo -iYr -jKe -pDk -oVI -vMh -vMh -vMh -vMh -vMh -vMh -vMh -iZa -vkL -vZF -rXi -pqo -cgc -nmW -hEJ -nAP -rcZ -kiJ -oOL -oOL -rHj -pRU -dBi -hBu -iOk -aQe -qHf -qHf -qHf -qHf +ijs +lIw +ijs +ijs +qTF +qRp +qRp +smD +ngH +hFA +qcT +dOl +mLS +aSB +aSB +sgX +sgX +sgX +aSB +aSB +mLS +wre +qcT +qcT +kXT +udb +vVb +aIt +tMJ +tnY +tTS +urx +qbw +sSG +uaw +bzL +fmO +sus +cck +jzz +jzz +jzz +jzz wKb wKb wKb @@ -192144,67 +193442,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -nlm +ydS +bNX +bNX +bNX +bNX +bNX +kVm +bNX +bNX +pSI +bxd +mDG +mDG +mDG rqo -ctC +xbP +lrl +ijs +ijs ijs ijs -xEv -sXm -qaU -nSb -xxv -xxv -xxv -sMo -jKe -vZF -luN -xKm -xxv +ijs +dFY +qRp +qRp +smD +ngH +riI +qcT +dOl +mLS +aSB tPe tPe tPe tPe tPe -xxv -xKm -wtc -bLO -umX -unl -vlg -fVM -fVM -pNZ -wKI -iOk -iOk -aMq -tQs -lWV -cPH -xOS -iOk -wzR +aSB +mLS +jnq +sRj +siz +shi +npj +cEd +vki +dPQ +spb +spb +sus +fmO +aDN +eLp +yiY +sus +oLL +sus wKb sZh sZh @@ -192401,67 +193699,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -dDL -rqo +ydS +mfn +bNX +hnV +rNA +bGX +rNA +cZP +bNX +hTs +bxd +vGE +bxd +vGE rqo -euS +xbP ijs ijs -riP ijs -omF -gJn -xxv -xxv -xxv -drF -jKe -duw -cTC -iKr -xxv +pID +ijs +ijs +iuu +gix +cAI +smD +ngH +qcT +qcT +dOl +mLS +aSB tPe tPe tPe tPe tPe -xxv -lIB -vbN -vqa -tjU -unl -fIL -qZx -pby -abi -nTp -vcF -gng -tls -eLa -bVd -uqw -mmc -iOk -kgz +aSB +mLS +vFP +itm +itm +shi +mIg +vuV +uRp +uxI +jkz +spb +sus +sus +sus +sus +sus +gzm +sus +rcl wKb sZh dlk @@ -192658,67 +193956,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -oBM -ctC -ijs +ydS +mBr +bNX +eIz +ayg +oON +tHd +lXz +bNX +kCF +yhO +hvS +saS +hvS +liY +pRW ijs +pID ijs ijs -xqs -xqs -xqs -xqs -xqs -raM -tsT -vZF -tvs -suN -xxv +cpN +rqo +gjb +gjb +gjb +gjb +ngH +xoH +qcT +dOl +mLS +aSB tPe tPe tPe tPe tPe -xxv -eWp -nNr -vqa -cFw -unl -spi -duC -beD -jhP -fOX -pPu -wUI -uaP -uEE -ngQ -xdx -qhm -iOk -uFR +aSB +mLS +vFP +itm +itm +xsS +jYG +xsS +tse +iXH +vfb +spb +sus +sus +fmO +fmO +tdF +tTg +sus +sus wKb dlk dlk @@ -192915,67 +194213,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -kpc -oBM -ctC -ijs +bxd +mZK +bNX +tNB +cMY +ewI +gct +jSO +bNX +hJS +oSq +vbf +vbf +ePX +eWq +nsx ijs ijs +fBh +fBh ijs -dqJ -xba -bSq -qNj -rCZ -laE -luA -vZF -fFp -iRQ -vMh -tAb -tAb -tAb -tAb -tAb -vMh -eWp -rfv -bbn -bsW -xsS -xsS +kpc +mUS +jkI +kBG +ydi +vti +qcT +qcT +dOl +mLS +aSB +aSB +aSB +aSB +aSB +aSB +aSB +mLS +tDB +nog +wCn xsS +apX +eMo xsS -rQm -pZM -shx -sRd -shx -nBl -ngQ -svD -fSP -iOk -jSt +oqW +jkz +spb +sus +gzm +sus +fmO +cEn +sus +sus +fsj wKb sZh dlk @@ -193115,53 +194413,8 @@ nlm nlm nlm nlm -"} -(178,1,2) = {" -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +"} +(178,1,2) = {" nlm nlm nlm @@ -193188,51 +194441,96 @@ nlm nlm nlm nlm -xIe nlm -kpc +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +dcE +slL +dcE +nlm +ydS +uhg +bNX +eIz +tHd +sUM +ayg +lXz +bNX +fmV +bra +eOY +uZg +byA +gMP +eTt +gkP +ijs +oBM oBM -ctC -ctC -ctC -ctC alG -dqJ -jPK -uKi -gux -lVD -bTN -mNf -mNf -oQW -nbW -xKm -ykv -ykv -ykv -ykv -ykv -xKm -kos -vZF -gdb -erh -xsS -taN -tNe -xsS +kpc +akK +onh +tCd +lan +htc +qcT +qcT +dOl +mLS +mLS +mLS +mLS +mLS +mLS +mLS +mLS +mLS +wre +xVF +mYh xsS +qpD +nRS xsS -shx -ogB -mDo -xRR -kBo -fAb -okr -dls -tVf +shi +shi +shi +sus +sus +sus +oLL +sus +rcl +fmO +xRg wKb sZh dlk @@ -193429,67 +194727,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -dDL -rqo +ydS +riV +bNX +dEW +nyY +dCg +nyY +tVS +bNX +syi +bxd +vGE +bxd +vGE rqo -ctC -ctC -ctC -dCI -rNM -hJM -jPb -gmz -bJI -xqs -spT -pLo -vZF -oQW -urY -xKm -xKm -xKm -hfN -xKm -xKm -xKm -apl -wRR -wRR -wRR -oBv -vMJ -ffs -lVq +nhU +cwo +jQQ +ijs +vbB +ddh +hYu +sMa +uOF +uuF +gjb +eSO +qcT +qcT +kSS +foZ +mLS +mLS +mLS +mLS +mLS +mLS +mLS +seW +jAd +qcT +qyu +twY +ulh +sNW +hnh gwx fbk -shx -ewK -shx -hMF -uRB -shx -kuq -hLr -vtK +shi +sus +sus +lIA +sus +sus +sus +fmO +bEp wKb sZh dlk @@ -193686,67 +194984,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -nlm +ydS +kWe +kBe +bNX +bNX +bNX +bNX +bNX +bNX +ujP +bxd +mDG +mDG +mDG rqo -ctC -ctC -szN -ctC -rNM -dqJ -apF -ucW -fAL -ycz -nzt -vZF -vZF -oQW -bqz -chD -chD -chD -chD -chD -chD -chD -gni -vZF -vZF -lWy +nmk +jbD +jbD +llg +nMV +aor +uTU +mVw +vIX +ggX +ydi +xAI +qcT +qcT +qcT +kSS +nUj +nUj +nUj +nUj +nUj +nUj +nUj +jAd +qcT +qcT +jfp xsS jRB -awL +eUl kyZ xsS fbk -shx -vHa -aZQ -hHE -oTq -iGC -aGT -rnN -hQn +shi +sus +sus +sus +sus +gzm +sus +lIA +sus wKb sZh sZh @@ -193943,67 +195241,67 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -xIe -nlm +bxd +dzH +bNX +bNX +bNX +wJU +bNX +lmH +lmH +sUR +bxd +mDG +mDG +mDG rqo -kpc -kpc rqo -kpc -kpc -xqs -xqs -xqs -xqs -xqs -sym -hKr -nqE -pNK -oQW -oQW -oQW -oQW -oQW -oQW -oQW -wRR -rGL -wlR -wHP -unl +efZ +efZ +rqo +efZ +efZ +rqo +gjb +gjb +gjb +gjb +vBg +qcT +qcT +qcT +eGq +roB +qcT +qcT +qcT +qcT +qcT +qcT +eGq +oEN +boh +ngH xsS iLL cYB cYB xsS gwx -shx -kwG -fJc -shx -tHE -shx -qHf -uDp -dBP +shi +gzm +sus +sus +sus +shi +shi +ekY +jzz wKb sZh dlk @@ -194200,67 +195498,67 @@ nlm nlm nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -pgw -sON -sON -sON -sON -sON -sON -sON -sON -sON -unl -unl -unl -unl -unl +dcE +slL +heR +dDL bxd bxd -laG ydS ydS ydS -dID bxd +ydS +ydS +ydS bxd -unl -unl -unl +bxd +rYB +rYB +rYB +mDG +mDG +mDG +mDG +mDG +mDG +mDG +mDG +mDG +rYB +rYB +ngH +ngH +gBV +krk +ubv +ngH +ngH +gQW +hCg +hCg +hCg +pvQ +ngH +ngH +ngH +ngH +ngH dDL lAS dDL dDL xrx xrx -shx -kHY -kHY -shx -wyd -shx -aUr -iOk -eVD +shi +shi +shi +shi +shi +shi +iVc +sus +eqm wKb iYM dlk @@ -194457,49 +195755,49 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm +dDL nlm nlm nlm nlm +dDL nlm nlm nlm nlm +dDL nlm nlm +slL +gaf +mDG +mDG +mDG +mDG +mDG +mDG +mDG +xmq nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -dDL -nlm -dDL -bxd -iDD -fhD -bNX -bNX -bNX -xMk -sbL -bxd +qCR +hYV +aBv +nzG +kPL +ngH +ngH +ngH +jpw +jpw +jpw +ngH +ngH +heR hRj hRj hRj @@ -194513,11 +195811,11 @@ nlm nlm nlm nlm -vZe -qHf -qHf -dBs -dBP +dDL +jzz +jzz +qXI +jzz wKb wKb heC @@ -194714,49 +196012,49 @@ nlm nlm nlm nlm +dcE +slL +dcE nlm +dDL nlm nlm +dcE +dcE +heR +dcE +dcE +dcE +dcE +dDL nlm nlm +slL +hDS +rYB +rYB +rYB +rYB +rYB +rYB +rYB +ydy nlm nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -nlm -ydS -isw -ovn -bNX -qGp -bNX -wIm -bEt -ydS +qCR +hYV +aBv +nzG +qbZ +ngH +ngH +fhd +fhd +hCg +hCg +joI +ngH +heR nlm nlm nlm @@ -194770,11 +196068,11 @@ nlm nlm nlm nlm -wFd -aru -nSW -nSW -uVI +dDL +xrx +xrx +xrx +oOw nlm nlm nlm @@ -194971,6 +196269,27 @@ nlm nlm nlm nlm +dcE +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +mXN +nlm +nlm +nlm nlm nlm nlm @@ -194978,11 +196297,28 @@ nlm nlm nlm nlm +slL +slL +ngH +ngH +ngH +ngH +ngH +ngH +xoh +fhd +hCg +hCg +joI +ngH +heR nlm nlm nlm nlm +lAS nlm +dDL nlm nlm nlm @@ -194990,169 +196326,91 @@ nlm nlm nlm nlm +dDL +xrx +xrx +xrx +nlm +nlm +nlm +nlm +nlm +nlm +xrx +cTR +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hRj +hRj +wUk +hRj +hRj +hRj +hRj +hRj +tzv +rKA +hnU +bLG +qHN +rKL +rKL +rKL +rKL +rKL +rKA +mNj +rKA +vAl +wcV +rMj +wcV +rKL +rMj +rKL +wcV +dTi +wcV +wcV +rKA +nlm +nlm +dDL +nlm +dDL +dDL +hvp +uJa +uJa +uJa +uJa +uJa +juW +dDL +nlm +nlm +dDL nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -xIe -nlm -nlm -ydS -bNX -bNX -ayg -pDG -tHd -bNX -eAe -ydS -nlm -nlm -nlm -nlm -lAS -nlm -dDL -nlm -nlm -nlm -nlm -nlm -nlm -nlm -eTS -xrx -xrx -xrx -nlm -nlm -nlm -nlm -nlm -nlm -xrx -cTR -hRj -hRj -hRj -hRj -hRj -hRj -hRj -hRj -hRj -hRj -hRj -hRj -hRj -wUk -hRj -hRj -hRj -hRj -hRj -tzv -rKA -hnU -bLG -qHN -rKL -rKL -rKL -rKL -rKL -rKA -mNj -rKA -vAl -wcV -rMj -wcV -rKL -rMj -rKL -wcV -dTi -wcV -wcV -rKA -nlm -nlm -dDL -nlm -dDL -dDL -hvp -uJa -uJa -uJa -uJa -uJa -juW -dDL -nlm -nlm -dDL -nlm -dDL -iEn -hRj -hRj -mrs -hRj -hRj -hRj -hRj -hRj -oLj -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +dDL +iEn +hRj +hRj +mrs +hRj +hRj +hRj +hRj +hRj +oLj nlm nlm nlm @@ -195171,8 +196429,6 @@ nlm nlm nlm nlm -"} -(186,1,2) = {" nlm nlm nlm @@ -195213,6 +196469,8 @@ nlm nlm nlm nlm +"} +(186,1,2) = {" nlm nlm nlm @@ -195259,18 +196517,58 @@ nlm nlm nlm nlm -xIe nlm nlm -ydS -bNX -bNX -gct -ewI -sUM -bNX -iIQ -bxd +nlm +nlm +nlm +nlm +nlm +nlm +nlm +dcE +dcE +dcE +dcE +dcE +dcE +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +nlm +slL +slL +xIe +nlm +dcE +heR +ngH +iQe +iQe +tWd +hCg +joI +ngH +heR nlm nlm nlm @@ -195285,7 +196583,7 @@ nlm nlm vof nlm -eTS +dDL nlm dDL xrx @@ -195518,16 +196816,16 @@ nlm nlm xIe nlm -nlm -ydS -bNX -bNX -tHd -pJs -ayg -bNX -bNX -ydS +dcE +heR +ngH +iQe +iQe +hCg +hCg +joI +ngH +heR nlm nlm nlm @@ -195542,7 +196840,7 @@ nlm nlm nlm nlm -tVZ +qCR nlm xIe xIe @@ -195775,16 +197073,16 @@ nlm nlm xIe nlm -nlm -ydS -bNX -bNX -bNX -tZy -bNX -bNX -bNX -ydS +dcE +heR +ngH +vwQ +hCg +ugo +qlx +gRx +ngH +heR nlm nlm nlm @@ -196032,16 +197330,16 @@ nlm nlm xIe nlm -nlm -bxd -lvk -bNX -bNX -iOO -bNX -bNX -xVi -bxd +dcE +heR +ngH +btb +pTS +uXR +geE +gRx +ngH +heR nlm nlm nlm @@ -196289,16 +197587,16 @@ nlm nlm xIe nlm -nlm -bxd -bxd -ydS -ydS -bxd -ydS -ydS -bxd -bxd +dcE +heR +ngH +ngH +ngH +ngH +ngH +ngH +ngH +heR dDL dDL eRz @@ -196546,16 +197844,16 @@ nlm nlm xIe nlm -nlm -dDL -nlm -nlm -nlm -nlm -nlm -nlm -nlm -nlm +dcE +heR +heR +heR +heR +heR +heR +heR +heR +heR nlm nlm eRz @@ -196808,7 +198106,7 @@ dDL nlm nlm nlm -nlm +dDL nlm nlm nlm diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index a1c18d26cbd9..0e40dc2d928c 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -780,6 +780,15 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"ajF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/wall_healer/directional/west, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "ajP" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/segment, @@ -1621,18 +1630,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"asu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Toilet Unit 2" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/toilet/locker) "asv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -2258,12 +2255,6 @@ icon_state = "foam_plating" }, /area/station/maintenance/department/science/xenobiology) -"aAU" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "aBf" = ( /obj/structure/table/glass, /obj/item/folder/blue{ @@ -5726,23 +5717,6 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted, /turf/open/floor/iron/white/telecomms, /area/station/tcommsat/server) -"bvI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/vomit/old, -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/landmark/start/hangover, -/obj/machinery/newscaster/directional/west, -/obj/machinery/button/door/directional/south{ - id = "Toilet1"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/plating, -/area/station/commons/toilet/locker) "bvM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -7494,6 +7468,14 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/cargo/office) +"bPr" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "bPv" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -9311,6 +9293,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, /turf/open/floor/iron/dark/corner, /area/station/maintenance/disposal/incinerator) +"cly" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/cytology{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/item/seeds/soya{ + pixel_x = 11; + pixel_y = -2 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "clE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ @@ -9691,15 +9689,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/atmos/hfr_room) -"cpE" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/bottle/morphine, -/obj/item/reagent_containers/syringe, -/obj/machinery/status_display/evac/directional/east, -/obj/machinery/vending/wallmed/directional/north, -/obj/effect/turf_decal/siding/dark_red, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "cpG" = ( /obj/structure/sign/poster/contraband/kudzu/directional/west, /obj/machinery/light/small/directional/west, @@ -10098,6 +10087,41 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"cvy" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Delivery Desk"; + req_access = list("cargo") + }, +/obj/effect/turf_decal/delivery, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"cvA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + pixel_y = 36; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown"; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/north{ + name = "Cargo Lockdown"; + req_access = list("cargo"); + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "cvE" = ( /obj/machinery/computer/cargo/request{ dir = 4 @@ -10493,11 +10517,6 @@ }, /turf/open/floor/wood, /area/station/hallway/secondary/service) -"cAZ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "cBd" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -11461,13 +11480,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/commons/toilet/locker) -"cNX" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "cOb" = ( /obj/machinery/duct, /obj/effect/decal/cleanable/dirt, @@ -12776,11 +12788,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"dfQ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "dfX" = ( /obj/structure/rack, /obj/item/wrench, @@ -13987,6 +13994,17 @@ }, /turf/open/floor/iron/dark/corner, /area/station/maintenance/disposal/incinerator) +"dvF" = ( +/obj/structure/table/reinforced, +/obj/item/computer_disk/quartermaster, +/obj/item/computer_disk/quartermaster, +/obj/item/computer_disk/quartermaster, +/obj/item/gps/mining, +/obj/item/paper_bin/carbon, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/stamp/head/qm, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "dvG" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/mechbay) @@ -14173,12 +14191,6 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron/dark, /area/station/service/theater) -"dxo" = ( -/obj/structure/bed/medical/emergency, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "dxr" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -14587,6 +14599,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/medical/cryo) +"dEr" = ( +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) "dEv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/smooth_large, @@ -14746,6 +14762,10 @@ /obj/structure/mirror/directional/north, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) +"dGu" = ( +/obj/machinery/duct, +/turf/closed/wall, +/area/station/medical/break_room) "dGG" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/bot, @@ -14943,6 +14963,19 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/lobby) +"dJq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "dJu" = ( /obj/structure/table/glass, /obj/machinery/camera/directional/north{ @@ -15435,6 +15468,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, /turf/open/floor/iron, /area/station/cargo/storage) +"dNX" = ( +/obj/structure/closet/boxinggloves, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "dOc" = ( /obj/structure/table, /obj/item/stack/medical/gauze, @@ -16026,6 +16069,24 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/library) +"dWN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/start/hangover, +/obj/machinery/newscaster/directional/west, +/obj/machinery/button/door/directional/south{ + id = "Toilet2"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron, +/area/station/commons/toilet/locker) "dWO" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -16670,6 +16731,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/iron, /area/station/commons/toilet/restrooms) "efQ" = ( @@ -18543,6 +18605,13 @@ /mob/living/basic/goat/pete, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"eEQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "eFj" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -21268,14 +21337,6 @@ /obj/structure/chair/office, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"foc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "foh" = ( /obj/machinery/atmospherics/components/binary/volume_pump{ name = "Ports to Distro" @@ -21588,6 +21649,23 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, /area/station/medical/treatment_center) +"fsC" = ( +/obj/structure/table/glass, +/obj/item/storage/medkit/regular, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -15; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/bottle/multiver, +/obj/item/reagent_containers/syringe, +/obj/structure/sign/poster/official/cleanliness/directional/east, +/obj/machinery/wall_healer/directional/north, +/obj/effect/turf_decal/siding/dark_red, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/medical) "fsD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/effect/decal/cleanable/dirt, @@ -22239,6 +22317,22 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"fAJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Cargo Lobby" + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "fAL" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/effect/decal/cleanable/dirt, @@ -22463,11 +22557,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/engineering/main) -"fDV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit) "fEd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/warning/vacuum/directional/west, @@ -22620,6 +22709,16 @@ }, /turf/open/floor/iron, /area/station/security/prison/visit) +"fFp" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Departures Lounge - Fore Starboard"; + dir = 6; + name = "departures camera" + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron/dark/corner, +/area/station/hallway/secondary/exit/departure_lounge) "fFr" = ( /obj/machinery/computer/atmos_control{ dir = 8 @@ -24269,14 +24368,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"gab" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "gae" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -24995,13 +25086,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"gic" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "gii" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -25269,6 +25353,19 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"glZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Toilet Unit 1" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/locker) "gmc" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -25301,14 +25398,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) -"gmo" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "gmx" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Room" @@ -26382,6 +26471,14 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, /area/station/maintenance/department/security) +"gxp" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "gxA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -26508,6 +26605,23 @@ /obj/effect/mapping_helpers/mail_sorting/service/law_office, /turf/open/floor/plating, /area/station/maintenance/department/security) +"gzh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/plasticflaps/opaque, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "Cargo Office" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/maintenance/department/crew_quarters/bar) "gzj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/prisoner, @@ -26693,23 +26807,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"gBA" = ( -/obj/structure/table/glass, -/obj/item/storage/medkit/regular, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -15; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/bottle/multiver, -/obj/item/reagent_containers/syringe, -/obj/structure/sign/poster/official/cleanliness/directional/east, -/obj/machinery/vending/wallmed/directional/north, -/obj/effect/turf_decal/siding/dark_red, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/medical) "gBB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -27186,20 +27283,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"gGT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/newscaster/directional/west, -/obj/machinery/button/door/directional/south{ - id = "Toilet_Research"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) "gHh" = ( /obj/effect/turf_decal/bot, /obj/machinery/camera/directional/east{ @@ -29911,10 +29994,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/medical/medsci) -"hsn" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/lobby) "hst" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -30573,15 +30652,6 @@ /obj/effect/turf_decal/bot/left, /turf/open/floor/iron/kitchen_coldroom/dark, /area/station/service/kitchen/coldroom) -"hBL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/vending/wallmed/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit) "hBT" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -33840,6 +33910,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/tools) +"isG" = ( +/obj/machinery/mineral/ore_redemption, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/box, +/obj/machinery/door/window/left/directional/south{ + name = "Ore Redemption Access"; + req_access = list("mineral_storeroom") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "isH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -34035,6 +34119,21 @@ }, /turf/open/floor/plating, /area/station/science/lab) +"iuV" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Cargo Lobby" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "ivb" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -34107,17 +34206,6 @@ "ivA" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain/private) -"ivB" = ( -/mob/living/simple_animal/bot/mulebot, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=4"; - location = "QM #4" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) "ivH" = ( /obj/machinery/light/small/directional/south, /obj/structure/sign/warning/radiation/directional/south, @@ -35973,14 +36061,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) -"iVl" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/vending/wallmed/directional/west, -/obj/machinery/light/small/broken/directional/west, -/turf/open/floor/plating, -/area/station/medical/abandoned) "iVo" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/bot, @@ -37622,25 +37702,6 @@ }, /turf/open/floor/engine/co2, /area/station/engineering/atmos) -"jmH" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -6 - }, -/obj/item/pen{ - pixel_x = -6 - }, -/obj/machinery/door/window/left/directional/north{ - name = "Office Desk"; - req_access = list("cargo") - }, -/obj/effect/turf_decal/delivery, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "jmQ" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -38432,6 +38493,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"jxN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/engineering/lobby) "jxQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, @@ -39401,22 +39473,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) -"jJC" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/cytology{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/obj/item/seeds/soya{ - pixel_x = 11; - pixel_y = -2 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "jJD" = ( /obj/machinery/bookbinder, /obj/effect/turf_decal/bot_white, @@ -39470,6 +39526,24 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/textured, /area/station/science/research) +"jKm" = ( +/obj/structure/rack, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/syringe/multiver, +/obj/machinery/camera/directional/west{ + c_tag = "Bridge - Gateway Atrium"; + name = "command camera" + }, +/obj/effect/turf_decal/bot, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/command/gateway) "jKo" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -40527,6 +40601,18 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) +"jXO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "jXQ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 9 @@ -42803,6 +42889,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) "kBb" = ( @@ -43126,10 +43213,6 @@ "kGi" = ( /turf/closed/wall, /area/station/service/library/abandoned) -"kGo" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/sorting) "kGq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -44928,6 +45011,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"lfk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "lfm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45338,15 +45429,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) -"ljS" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "qmspace"; - name = "Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "ljT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -45562,6 +45644,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) "lmj" = ( @@ -45704,6 +45787,12 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) +"lnz" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "lnB" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/rack, @@ -46585,11 +46674,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"lzh" = ( -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central/aft) "lzo" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -47546,15 +47630,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) -"lJM" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron, -/area/station/cargo/office) "lJN" = ( /obj/machinery/requests_console/directional/west{ department = "Research Director's Desk"; @@ -48018,6 +48093,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"lPA" = ( +/obj/machinery/door/poddoor/preopen{ + id = "qmspace"; + name = "Privacy Shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "lPF" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -48321,6 +48404,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"lUm" = ( +/mob/living/simple_animal/bot/mulebot, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "QM #4" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) "lUo" = ( /obj/docking_port/stationary/random{ name = "lavaland"; @@ -48747,13 +48841,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"mbA" = ( -/obj/structure/bed/medical/emergency, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "mbR" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -49106,6 +49193,15 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"mfS" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/cargo/office) "mgd" = ( /obj/structure/railing{ dir = 10 @@ -49377,27 +49473,6 @@ "mjz" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) -"mjH" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -6 - }, -/obj/item/pen{ - pixel_x = -6 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/right/directional/south{ - name = "Delivery Office Desk"; - req_access = list("shipping") - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "mjK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/filled/corner{ @@ -50920,14 +50995,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"mDl" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "mDo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52275,6 +52342,15 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) +"mUd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "mUt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53386,18 +53462,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"nkH" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Cargo Lobby" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/lobby) "nkN" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -53625,6 +53689,11 @@ /obj/structure/chair/stool/bar/directional/east, /turf/open/floor/carpet/green, /area/station/commons/lounge) +"nnN" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "nnR" = ( /obj/machinery/airalarm/directional/west, /obj/structure/extinguisher_cabinet/directional/north, @@ -53930,6 +53999,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) "nsg" = ( @@ -54694,6 +54764,11 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"nBi" = ( +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central/aft) "nBm" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55203,6 +55278,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/science/explab) +"nIb" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 4; + id = "cargodeliver" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "nIg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance_hatch{ @@ -55263,6 +55351,7 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) "nIY" = ( @@ -55721,13 +55810,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"nPo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/sorting) "nPp" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/structure/lattice, @@ -55750,6 +55832,18 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"nPM" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/toy/figure/cargotech, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/button/door/directional/south{ + req_access = list("cargo"); + name = "Cargo Lockdown"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/office) "nPO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/rack, @@ -57629,17 +57723,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/command/gateway) -"ooL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/engineering/lobby) "ooQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -58498,6 +58581,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay) +"oBi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "oBq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -58879,6 +58970,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/fore) "oGb" = ( @@ -60375,10 +60467,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/theater) -"pas" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/office) "pat" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -61888,6 +61976,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) +"puV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/vomit/old, +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/landmark/start/hangover, +/obj/machinery/newscaster/directional/west, +/obj/machinery/button/door/directional/south{ + id = "Toilet1"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/plating, +/area/station/commons/toilet/locker) "puW" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -62478,6 +62583,14 @@ dir = 4 }, /area/station/commons/fitness/recreation) +"pBl" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/wall_healer/directional/west, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/plating, +/area/station/medical/abandoned) "pBs" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -62494,19 +62607,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"pBw" = ( -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Cargo - Waiting Room"; - name = "cargo camera" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "pBB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, @@ -62563,16 +62663,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"pCy" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/toy/figure/cargotech, -/obj/machinery/status_display/supply{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/cargo/office) "pCE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63601,6 +63691,10 @@ "pOi" = ( /turf/open/floor/plating, /area/station/maintenance/fore) +"pOm" = ( +/obj/machinery/duct, +/turf/closed/wall, +/area/station/science/breakroom) "pOn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/barricade/wooden, @@ -65161,6 +65255,13 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/command/bridge) +"qeB" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "qeF" = ( /obj/effect/turf_decal/bot, /obj/machinery/airalarm/directional/south, @@ -65349,6 +65450,15 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/commons/lounge) +"qhB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qhN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65638,6 +65748,7 @@ /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch" }, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/fore) "qlD" = ( @@ -65996,6 +66107,16 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/space/basic, /area/space/nearstation) +"qqc" = ( +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Cargo - Waiting Room"; + name = "cargo camera" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "qqe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66292,18 +66413,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/fore) -"qvd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Toilet Unit 1" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/toilet/locker) "qvi" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67328,16 +67437,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"qHo" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Departures Lounge - Fore Starboard"; - dir = 6; - name = "departures camera" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/dark/corner, -/area/station/hallway/secondary/exit/departure_lounge) "qHs" = ( /obj/structure/statue/sandstone/venus{ dir = 1; @@ -67601,24 +67700,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"qKz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/bot, -/obj/effect/landmark/start/hangover, -/obj/machinery/newscaster/directional/west, -/obj/machinery/button/door/directional/south{ - id = "Toilet2"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons/toilet/locker) "qKH" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -68636,19 +68717,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel/storage) -"qZr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/plasticflaps/opaque, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=2"; - location = "Cargo Office" - }, -/turf/open/floor/iron, -/area/station/maintenance/department/crew_quarters/bar) "qZs" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -68810,6 +68878,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/barsign/all_access/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/fore) "rcW" = ( @@ -70186,6 +70255,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/disposal) +"ruo" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/folder/yellow, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "rut" = ( /obj/effect/landmark/start/hangover, /obj/effect/decal/cleanable/dirt, @@ -70570,13 +70646,6 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/service/chapel/funeral) -"ryU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "ryY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70994,6 +71063,14 @@ /obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron, /area/station/service/kitchen) +"rES" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/office) "rEU" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/structure/steam_vent, @@ -71638,6 +71715,15 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port) +"rNa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "rNf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ @@ -72508,6 +72594,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port/fore) "rWf" = ( @@ -72802,6 +72889,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/iron, /area/station/commons/toilet/restrooms) "rZU" = ( @@ -72948,6 +73036,16 @@ /obj/structure/sign/warning/biohazard/directional/south, /turf/open/floor/iron, /area/station/maintenance/department/science) +"sbN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/firealarm/directional/west{ + pixel_y = -30 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "sbP" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -73505,16 +73603,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/warden) -"siF" = ( -/obj/machinery/mineral/ore_redemption, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/box, -/obj/machinery/door/window/left/directional/south{ - name = "Ore Redemption Access"; - req_access = list("mineral_storeroom") - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "siI" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/box/white/corners, @@ -74515,6 +74603,19 @@ /obj/structure/sign/poster/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"svB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Toilet Unit 2" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/locker) "svH" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -77146,6 +77247,29 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"tbg" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -6 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Office Desk"; + req_access = list("cargo") + }, +/obj/effect/turf_decal/delivery, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/office) "tbs" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -79314,16 +79438,6 @@ dir = 8 }, /area/station/service/kitchen/abandoned) -"tEW" = ( -/obj/structure/closet/boxinggloves, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "tEX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -79972,10 +80086,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/crew_quarters/bar) -"tNg" = ( -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/white, -/area/station/science/research) "tNq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -84717,16 +84827,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"uQZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/stamp/head/qm, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "uRe" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 10 @@ -85097,6 +85197,20 @@ /obj/structure/sign/warning/secure_area/directional/south, /turf/open/space/basic, /area/space/nearstation) +"uXH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/obj/machinery/button/door/directional/south{ + id = "Toilet_Research"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "uXK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -85289,24 +85403,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"uZQ" = ( -/obj/structure/rack, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/suture, -/obj/item/stack/medical/mesh, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/syringe/multiver, -/obj/machinery/camera/directional/west{ - c_tag = "Bridge - Gateway Atrium"; - name = "command camera" - }, -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/command/gateway) "uZV" = ( /obj/effect/turf_decal/plaque{ icon_state = "L6" @@ -87121,15 +87217,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"vyr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "vys" = ( /obj/structure/flora/bush/jungle/c/style_random, /turf/open/misc/grass, @@ -87186,17 +87273,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"vyX" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Cargo Lobby" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "vze" = ( /obj/structure/bookcase/random, /obj/item/radio/intercom/directional/south{ @@ -88141,6 +88217,13 @@ }, /turf/open/floor/iron, /area/station/security/processing) +"vLn" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "vLq" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -88543,6 +88626,31 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) +"vRO" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -6 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/right/directional/south{ + name = "Delivery Office Desk"; + req_access = list("shipping") + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "vRU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -91259,18 +91367,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/paramedic) -"wAl" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Delivery Desk"; - req_access = list("cargo") - }, -/obj/effect/turf_decal/delivery, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/iron, -/area/station/cargo/lobby) "wAt" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, @@ -91307,19 +91403,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/chapel) -"wAR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "wAT" = ( /obj/effect/spawner/random/structure/crate, /obj/structure/disposalpipe/segment, @@ -92752,6 +92835,14 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) +"wUm" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "wUw" = ( /obj/machinery/airalarm/directional/east, /obj/structure/table/wood, @@ -93243,13 +93334,6 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/fore) -"xce" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "xcm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/window/preopen{ @@ -93684,16 +93768,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"xhJ" = ( -/obj/structure/table/reinforced, -/obj/item/computer_disk/quartermaster, -/obj/item/computer_disk/quartermaster, -/obj/item/computer_disk/quartermaster, -/obj/item/gps/mining, -/obj/item/paper_bin/carbon, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "xhR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -94313,6 +94387,18 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) +"xqk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "xqp" = ( /obj/vehicle/sealed/mecha/ripley/paddy/preset, /turf/open/floor/iron/recharge_floor, @@ -95915,6 +96001,14 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/warden) +"xII" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "xIR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, @@ -97548,10 +97642,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"yfI" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/lobby) "yfM" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -97646,14 +97736,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"ygL" = ( -/obj/structure/plasticflaps, -/obj/machinery/conveyor{ - dir = 4; - id = "cargodeliver" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "ygM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -97752,6 +97834,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"yhB" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/morphine, +/obj/item/reagent_containers/syringe, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/wall_healer/directional/north, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "yhD" = ( /obj/machinery/duct, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -122143,7 +122234,7 @@ uCa aTz ygM fzF -ooL +jxN sys rCE uWj @@ -122693,7 +122784,7 @@ rZw iQF eRr pTC -jJC +cly fpt uOF sPk @@ -126769,7 +126860,7 @@ laP xfq kEg gxL -vyr +qhB nAb vxZ fix @@ -131604,7 +131695,7 @@ cGM tMN qMS sQn -gic +vLn sjt aaY sAY @@ -131930,7 +132021,7 @@ uyB qSd kqM tXO -lzh +nBi khb khb khb @@ -131964,7 +132055,7 @@ luE ilX peU eTV -gGT +uXH qQM erm erm @@ -132221,7 +132312,7 @@ fDF fDF peU cHO -aAj +pOm qQM jYk vsV @@ -133501,7 +133592,7 @@ fMZ bXG xdN sYK -tNg +dEr qmd qbg xfU @@ -134218,7 +134309,7 @@ qYo qYo qYo diL -gab +bPr drj bog kZd @@ -135759,7 +135850,7 @@ xms aaa wyH fIx -mDl +xII cQv drj bog @@ -135985,7 +136076,7 @@ kVP gyW ryg mGF -ryU +eEQ kVP iIO rrr @@ -137540,7 +137631,7 @@ eVk qAV qAV qAV -qZr +gzh qAV qAV qAV @@ -137795,7 +137886,7 @@ qAV xSx xGC qAV -lJM +mfS mzb lkm mfK @@ -137807,7 +137898,7 @@ gPm quA wRM kdX -hsn +gxp pXg ozn ivX @@ -138057,14 +138148,14 @@ kii hNr wOU jys -pas +rES xsq xjx xjx xjx xjx dHQ -hsn +gxp bPE hIU lSl @@ -138321,7 +138412,7 @@ rPj xDq mtv dHQ -vyX +iuV pXg dvy lSl @@ -138373,7 +138464,7 @@ svO cSD mgE sKd -cNX +sbN uNY iKg lke @@ -138571,14 +138662,14 @@ hqK jPk rve djt -pas +rES kUn djq qQE lMH xjx dRO -nkH +fAJ fli dvy lSl @@ -138827,9 +138918,9 @@ wWt hqK smK rve -pCy +nPM hoC -pBw +qqc gSs xjx xjx @@ -138868,14 +138959,14 @@ vIQ vIQ vIQ vIQ -wAR +dJq pBH ksK liC mrK oVI cng -uZQ +jKm bhP bmt ksK @@ -139092,7 +139183,7 @@ lMH qQE xjx dHQ -vyX +iuV pXg dvy lSl @@ -139342,14 +139433,14 @@ hqK cCJ rve tCk -pas +rES lMH gUk qQE mzV xjx dHQ -vyX +iuV pXg hRV lSl @@ -139401,7 +139492,7 @@ gnb dnj eiw fNm -mbA +qeB uNY keH jtz @@ -139599,14 +139690,14 @@ hqK hLa rve iJr -jmH +tbg qQE xjx euK jJM xjx oHo -hsn +gxp pXg dvy lSl @@ -139658,7 +139749,7 @@ dOc iso rMf rmo -dxo +lnz uNY eQC gQl @@ -139856,14 +139947,14 @@ jHf rve rve aHG -pas +rES vsJ qQE ygT wzb drJ fYD -hsn +gxp pXg dvy lOf @@ -140114,12 +140205,12 @@ wRf vKl wfK hoC -yfI -wAl -kGo +mUd +cvy +rNa vSm xhW -ygL +nIb xhW sLK dvy @@ -140458,7 +140549,7 @@ cky dki lvZ jQB -lvZ +dGu lvZ pkg lvZ @@ -140883,7 +140974,7 @@ oSv yhh aCY hbH -kGo +wUm ipz vbf ixZ @@ -140891,7 +140982,7 @@ aQn gMT oDf wjW -siF +isG pXg vwv nFG @@ -141124,7 +141215,7 @@ wHa fEo dIx tuZ -ivB +lUm mIA dgU nZK @@ -141148,7 +141239,7 @@ nCY pTi mlv kGE -mjH +vRO eUH dvy lSl @@ -141397,7 +141488,7 @@ oSv eee oSv jcy -kGo +wUm rII esq uQQ @@ -141466,7 +141557,7 @@ slE rHI dju dju -hBL +ajF vvh dju oXR @@ -141913,8 +142004,8 @@ cNf ohH xhW xhW -nPo -xce +jXO +xqk hXg hXg hXg @@ -141988,7 +142079,7 @@ tIV tIV tIV mhW -fDV +nnN pYp tIV tIV @@ -142263,7 +142354,7 @@ bMh nyb jdg pPN -qHo +fFp hQF hQF hQF @@ -144220,9 +144311,9 @@ qYo qYo aJE raF -aAU -uQZ -xhJ +ruo +oBi +dvF vMd tgX uMS @@ -144274,8 +144365,8 @@ iYi bjs lxS aPc -qvd -bvI +glZ +puV cao nCA wbg @@ -144475,12 +144566,12 @@ aaa aaa aaa qYo -ljS -gmo -dfQ +aJE +cvA +qqx tYz -dfQ -cAZ +qqx +vMd tgX rWo rWo @@ -144732,7 +144823,7 @@ aaa aaa aaa qYo -ljS +lPA szZ bdF wob @@ -144788,8 +144879,8 @@ iYi aJK mGZ uUr -asu -qKz +svB +dWN cao dGb eIi @@ -147333,7 +147424,7 @@ mVO nHs lkS nHs -foc +lfk whm sQL huv @@ -148587,7 +148678,7 @@ mSe pMa caH mSe -cpE +yhB xqc eEi vtt @@ -149176,7 +149267,7 @@ okj uKK iuA wHQ -iVl +pBl rhw eDJ qMf @@ -150909,7 +151000,7 @@ iCo krO guZ lET -gBA +fsC fQo aNh pWT @@ -151474,7 +151565,7 @@ cau mJx vNm wgn -tEW +dNX wvL qNK ujd diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 5cff06f96833..5a79aef0ca3f 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -1782,19 +1782,6 @@ dir = 1 }, /area/station/medical/morgue) -"axm" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/east, -/obj/machinery/light_switch/directional/east{ - pixel_x = 23 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "axr" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -2013,10 +2000,6 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"aBh" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/lobby) "aBi" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/table/glass, @@ -2108,6 +2091,15 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"aCC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "aCH" = ( /obj/item/toy/plush/lizard_plushie/space/green{ name = "Ruins-The-Analog" @@ -2334,19 +2326,6 @@ /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"aGF" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - name = "Cargo Desk"; - req_access = list("cargo") - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/item/papercutter, -/turf/open/floor/iron, -/area/station/cargo/office) "aGR" = ( /obj/structure/railing{ dir = 10 @@ -2853,10 +2832,6 @@ }, /turf/open/floor/plating, /area/station/service/hydroponics) -"aOd" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/miningdock) "aOe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3731,12 +3706,6 @@ dir = 1 }, /area/mine/eva/lower) -"aZG" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "aZH" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 8 @@ -4106,10 +4075,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/wood, /area/station/service/library) -"bdW" = ( -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/cargo/storage) "bea" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating/icemoon, @@ -4386,6 +4351,15 @@ /obj/machinery/power/port_gen/pacman, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/lesser) +"biK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "biR" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -6602,12 +6576,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/entry) -"bLt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/white/textured, -/area/station/security/medical) "bLz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9299,22 +9267,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cxI" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Drone Bay" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/effect/turf_decal/siding/brown/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "cxO" = ( /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) @@ -10605,6 +10557,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) +"cQp" = ( +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "cQw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown{ @@ -13230,6 +13186,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"dCI" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "dCR" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/tcomms_all, @@ -14798,19 +14765,6 @@ /obj/structure/cable, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) -"eaE" = ( -/obj/machinery/door/firedoor{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured, -/area/station/cargo/lobby) "eaG" = ( /obj/structure/sign/departments/vault/directional/north, /turf/open/openspace/icemoon/keep_below, @@ -15514,6 +15468,19 @@ dir = 8 }, /area/station/science/explab) +"ell" = ( +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/structure/table, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "elw" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/upper) @@ -17521,6 +17488,11 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"eRk" = ( +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "eRp" = ( /obj/structure/bed{ dir = 1; @@ -17853,21 +17825,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva/lower) -"eVl" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - id_tag = "cargooffice"; - name = "Cargo Office" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/shipping, -/turf/open/floor/iron, -/area/station/cargo/sorting) "eVn" = ( /obj/machinery/airalarm/directional/west, /obj/effect/landmark/start/bitrunner, @@ -19773,10 +19730,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"fyq" = ( -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "fyr" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -20719,14 +20672,6 @@ /obj/effect/spawner/random/entertainment/money_small, /turf/open/floor/wood/large, /area/station/commons/lounge) -"fME" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "fNa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -21072,6 +21017,16 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"fTc" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/camera/directional/south{ + c_tag = "Starboard Primary Hallway Center" + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fTi" = ( /obj/effect/turf_decal/trimline/neutral/end{ dir = 4 @@ -21832,6 +21787,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"gdG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "gdN" = ( /obj/structure/railing/corner{ dir = 1 @@ -25792,6 +25757,24 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"hlu" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/lobby) "hlv" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/shower/directional/west, @@ -26213,10 +26196,6 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) -"hrJ" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/storage) "hrS" = ( /obj/item/trash/raisins, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27340,6 +27319,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) +"hIT" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "hIU" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, @@ -30031,6 +30018,15 @@ }, /turf/open/floor/wood, /area/station/service/library) +"iwa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "iwd" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -30613,6 +30609,15 @@ }, /turf/open/floor/plating, /area/station/service/hydroponics) +"iGV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "iHc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -31614,6 +31619,10 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"iWL" = ( +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) "iWM" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -31760,13 +31769,6 @@ /obj/structure/sign/warning/radiation/rad_area/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"iYe" = ( -/obj/item/kirbyplants/random, -/obj/machinery/vending/wallmed/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/gateway) "iYq" = ( /obj/structure/railing/corner{ dir = 4 @@ -31783,12 +31785,6 @@ /obj/structure/sink/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"iYt" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "iYy" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -32522,6 +32518,15 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"jjF" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "jjI" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/trimline/green/filled/line, @@ -33562,6 +33567,26 @@ }, /turf/open/floor/iron/smooth_corner, /area/station/command/heads_quarters/rd) +"jzL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + id_tag = "cargooffice"; + name = "Cargo Office" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/shipping, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "jzY" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -35495,15 +35520,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/fore) -"kbS" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "kcc" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Infirmary" @@ -35855,19 +35871,6 @@ /obj/structure/lattice/catwalk, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"kgX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - name = "Delivery Desk"; - req_access = list("shipping") - }, -/obj/effect/turf_decal/bot, -/obj/structure/table/reinforced, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "kgY" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -35947,17 +35950,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"kix" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Mining Base" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/storage) "kiE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -37680,6 +37672,14 @@ /obj/item/stamp/head/qm, /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) +"kGW" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white/corner, +/area/station/hallway/secondary/exit/departure_lounge) "kHb" = ( /obj/structure/closet/secure_closet/personal{ anchored = 1 @@ -37687,6 +37687,19 @@ /obj/item/clothing/head/costume/pirate/bandana, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"kHg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/east, +/obj/machinery/light_switch/directional/east{ + pixel_x = 23 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "kHj" = ( /obj/effect/turf_decal/siding/wood, /obj/item/kirbyplants/random/fullysynthetic{ @@ -37728,6 +37741,14 @@ /obj/machinery/firealarm/directional/north, /turf/open/openspace, /area/station/science/xenobiology) +"kHO" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "kHP" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -38722,6 +38743,13 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon, /area/icemoon/underground/explored) +"kWn" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "kWr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -39088,6 +39116,30 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"laI" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/lobby) "laM" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -39785,25 +39837,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/medical/psychology) -"llR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/pen/red, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/folder/yellow, -/obj/machinery/button/door/directional/west{ - id = "qmprivacy"; - name = "Privacy Shutters Control"; - req_access = list("qm") - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "llT" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -39840,18 +39873,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"lmv" = ( -/obj/machinery/mineral/ore_redemption{ - input_dir = 8; - output_dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Ore Redemtion Window"; - req_access = list("mineral_storeroom") - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "lmx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41715,6 +41736,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"lNs" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "lNy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41833,6 +41860,13 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) +"lOT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "lOU" = ( /obj/machinery/recharge_station, /obj/effect/decal/cleanable/dirt, @@ -41954,6 +41988,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/office) +"lQd" = ( +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) "lQe" = ( /obj/machinery/vending/wardrobe/engi_wardrobe, /obj/machinery/status_display/ai/directional/north, @@ -42831,18 +42869,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/iron/textured, /area/station/ai_monitored/command/storage/eva) -"mdS" = ( -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/structure/table, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "mdX" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -43267,6 +43293,10 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"mmg" = ( +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "mmh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -43521,6 +43551,15 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"mqp" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "mqq" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -43664,13 +43703,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"msG" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" - }, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) "msN" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/closed/wall/r_wall, @@ -44246,13 +44278,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine, /area/station/science/explab) -"mBm" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" - }, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) "mBr" = ( /obj/item/toy/plush/lizard_plushie{ name = "Wines-And-Dines"; @@ -45212,6 +45237,11 @@ dir = 4 }, /area/station/command/gateway) +"mQi" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "mQk" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 10 @@ -47850,6 +47880,12 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"nBT" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/command/bridge) "nCb" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/lithium{ @@ -49282,6 +49318,15 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) +"nUS" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/camera/directional/east{ + c_tag = "Engineering Lobby" + }, +/obj/structure/window/spawner/directional/north, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "nVc" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -49497,10 +49542,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/science/server) -"nZh" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "nZu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -50024,14 +50065,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"ohb" = ( -/obj/machinery/medical_kiosk, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/obj/structure/sign/departments/medbay/alt/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "ohp" = ( /turf/open/floor/glass, /area/station/maintenance/department/medical/central) @@ -51994,6 +52027,27 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"oFG" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Drone Bay" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/siding/brown/corner{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "oFI" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 6 @@ -52273,6 +52327,15 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"oID" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "oIH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ @@ -52747,13 +52810,6 @@ "oQY" = ( /turf/open/floor/iron/white, /area/station/medical/virology) -"oRb" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "oRk" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -56889,6 +56945,15 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/cargo/storage) +"pZl" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "pZm" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -58174,14 +58239,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"qqJ" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "QM #4" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/cargo/storage) "qqM" = ( /obj/effect/landmark/start/head_of_security, /obj/machinery/holopad, @@ -58489,14 +58546,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"qwd" = ( -/obj/machinery/light_switch/directional/south, -/obj/structure/closet/secure_closet/security/cargo, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "qwe" = ( /obj/structure/table, /obj/item/phone{ @@ -58880,6 +58929,15 @@ /obj/machinery/meter/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"qDn" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "qDA" = ( /obj/structure/bed{ dir = 4 @@ -59134,11 +59192,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/janitor, /turf/open/floor/iron, /area/station/service/janitor) -"qGd" = ( -/obj/structure/table/reinforced, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron, -/area/station/command/bridge) "qGg" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -60546,6 +60599,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"qYN" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "qYO" = ( /obj/item/reagent_containers/spray/plantbgone, /obj/item/reagent_containers/spray/pestspray{ @@ -61881,13 +61941,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/mine/eva) -"rsa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "rsf" = ( /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, @@ -62029,6 +62082,24 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/storage) +"rtO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/west{ + name = "Delivery Desk"; + req_access = list("shipping") + }, +/obj/effect/turf_decal/bot, +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rtR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -63622,6 +63693,16 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/processing) +"rTY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "rTZ" = ( /obj/machinery/light/floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64069,10 +64150,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"rZw" = ( -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/white, -/area/station/science/research) "rZE" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -66986,6 +67063,15 @@ }, /turf/open/floor/plating, /area/station/science/ordnance/office) +"sPs" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/office) "sPA" = ( /obj/structure/rack, /obj/item/storage/bag/ore, @@ -68418,6 +68504,24 @@ dir = 8 }, /area/station/science/ordnance/office) +"tku" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/west{ + name = "Cargo Desk"; + req_access = list("cargo") + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/item/papercutter, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/office) "tkP" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -68613,12 +68717,6 @@ /obj/structure/rack, /turf/open/floor/plating, /area/mine/eva/lower) -"tnk" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/command/bridge) "tnp" = ( /obj/structure/table, /obj/item/folder/blue{ @@ -68670,6 +68768,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"tnK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door/directional/east{ + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "tnO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -69890,6 +69998,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/laborcamp) +"tHa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron/white/textured, +/area/station/security/medical) "tHb" = ( /obj/effect/spawner/random/structure/musician/piano/random_piano, /obj/machinery/button/curtain{ @@ -71725,6 +71839,23 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"uiM" = ( +/obj/machinery/mineral/ore_redemption{ + input_dir = 8; + output_dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Ore Redemtion Window"; + req_access = list("mineral_storeroom") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "uja" = ( /turf/closed/wall, /area/station/commons/toilet) @@ -72097,6 +72228,14 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/cargo/office) +"unP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "uog" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -72541,10 +72680,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/service/kitchen) -"uuP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/office) "uvk" = ( /obj/structure/window/reinforced/plasma/spawner/directional/west, /obj/structure/cable, @@ -76300,14 +76435,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/recharge_floor, /area/station/science/robotics/mechbay) -"vAd" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/white/corner, -/area/station/hallway/secondary/exit/departure_lounge) "vAm" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -77620,6 +77747,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"vXm" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "QM #4" + }, +/obj/effect/turf_decal/bot, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "vXn" = ( /obj/structure/table, /obj/item/food/pie/cream, @@ -78462,25 +78598,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"wkN" = ( -/obj/machinery/door/firedoor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured, -/area/station/cargo/lobby) "wkO" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -79321,15 +79438,6 @@ /obj/structure/noticeboard/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel) -"wyN" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/machinery/camera/directional/east{ - c_tag = "Engineering Lobby" - }, -/obj/structure/window/spawner/directional/north, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "wyO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -79675,10 +79783,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) -"wEh" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/sorting) "wEp" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -80364,12 +80468,6 @@ dir = 1 }, /area/station/security/prison) -"wPh" = ( -/obj/machinery/light_switch/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/storage) "wPr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -80648,6 +80746,38 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"wSL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/pen/red, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/folder/yellow, +/obj/machinery/button/door/directional/west{ + id = "qmprivacy"; + name = "Privacy Shutters Control"; + req_access = list("qm"); + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -9; + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -1; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown"; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "wSU" = ( /obj/structure/chair{ dir = 1 @@ -80877,10 +81007,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"wVe" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "wVl" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -80923,6 +81049,13 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"wVJ" = ( +/obj/item/kirbyplants/random, +/obj/machinery/wall_healer/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/gateway) "wVS" = ( /obj/machinery/door_buttons/access_button, /turf/closed/wall/r_wall, @@ -81316,6 +81449,17 @@ /obj/structure/ladder, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"xcc" = ( +/obj/machinery/medical_kiosk, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/sign/departments/medbay/alt/directional/north, +/obj/machinery/firealarm/directional/north{ + pixel_x = 26 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "xce" = ( /obj/structure/rack, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -81466,6 +81610,15 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xen" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "xer" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/door/poddoor/shutters/preopen{ @@ -82326,6 +82479,18 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"xqh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness) "xqj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -82473,18 +82638,6 @@ /obj/machinery/light/blacklight/directional/east, /turf/open/floor/wood, /area/station/service/library) -"xsW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness) "xtc" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -82693,6 +82846,22 @@ /obj/item/wirecutters, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"xvt" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Mining Base" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/storage) "xvy" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/stripes/line{ @@ -83066,6 +83235,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp/security) +"xzs" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron, +/area/station/command/bridge) "xzH" = ( /obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -84532,21 +84706,29 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/command/meeting_room) -"xVv" = ( -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/camera/directional/south{ - c_tag = "Starboard Primary Hallway Center" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "xVB" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ dir = 8 }, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) +"xVE" = ( +/obj/machinery/light_switch/directional/south{ + pixel_y = -24; + pixel_x = -2 + }, +/obj/structure/closet/secure_closet/security/cargo, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + req_access = list("cargo"); + name = "Cargo Lockdown"; + id = "cargolockdown"; + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "xVG" = ( /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) @@ -84625,10 +84807,6 @@ /obj/item/plate, /turf/open/floor/iron, /area/station/security/prison/mess) -"xWG" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "xWM" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -170495,8 +170673,8 @@ gjq sjb wQr wQr -cxI -wVe +oFG +pZl wQr vSi vSi @@ -170749,7 +170927,7 @@ gjq gjq gjq gjq -iYt +dCI slh dhV lNH @@ -171269,7 +171447,7 @@ vRn rty lNH eMa -hrJ +xen wmT gDN bGn @@ -171526,7 +171704,7 @@ eOJ vAr bff lNH -kix +xvt aOf yaD vvU @@ -171777,13 +171955,13 @@ gjq gjq gjq gjq -iYt +dCI tDU hcT bQA ajw wUP -hrJ +xen siI ksn lvT @@ -187207,7 +187385,7 @@ ugs ttb bjU bOO -axm +kHg wZr kwe gkT @@ -233178,7 +233356,7 @@ nrM oCO kxs lsi -fyq +cQp qnj qnj qnj @@ -235526,7 +235704,7 @@ utC utC utC qjQ -aOd +iwa axg qjQ utC @@ -235782,7 +235960,7 @@ kXr utC utC utC -aOd +iGV iAu rLo qjQ @@ -237299,7 +237477,7 @@ tKI wBb tKI xua -llR +wSL fOs dsf xjF @@ -237568,14 +237746,14 @@ erN xwp baf wiz -wPh +tnK iaF iaF iaF iaF ajw ajw -bdW +lQd pBE pBE uYc @@ -237829,7 +238007,7 @@ kXr xaF rUy smx -qqJ +vXm gjP ajw ajw @@ -238078,10 +238256,10 @@ obQ ndk rbC kXr -hrJ +qDn ttT sQa -hrJ +qDn kXr kXr kXr @@ -238612,7 +238790,7 @@ pBE cZa hxE xUS -aOd +unP utC utC ptf @@ -238869,7 +239047,7 @@ pBE iVA hxE aCh -aOd +unP utC utC ptf @@ -239085,7 +239263,7 @@ sDl hDU dAQ fVU -iYe +wVJ hDU gpp aJA @@ -239106,7 +239284,7 @@ gLN rCC gLN rCC -eVl +jzL rCC dXh cHb @@ -239126,7 +239304,7 @@ fvx hxE hxE xFb -aOd +unP utC utC ptf @@ -239364,7 +239542,7 @@ rCC aMd rCC jIg -wEh +aCC unO hkU hwF @@ -239372,10 +239550,10 @@ ljl kXA rLu nRq -maT +mqp ajw eMa -aOd +unP xZX hxE iVA @@ -239621,16 +239799,16 @@ lek jak nfd jIg -wEh -uuP -aGF -uuP +aCC +sPs +tku +sPs gam qQo -lmv -uuP +uiM +sPs tue -nZh +rTY lNG tue qjQ @@ -239878,7 +240056,7 @@ rgl wVF iBF guS -wEh +aCC vlL qxQ eBe @@ -239886,10 +240064,10 @@ hnC cah aSh ycQ -nZh +gdG lIy tBR -qwd +xVE pRj mAc pRj @@ -240143,8 +240321,8 @@ hnC nKr qmi cex -nZh -mdS +gdG +ell thK dnT pRj @@ -240400,7 +240578,7 @@ sve qmi cXc fhw -nZh +gdG lzt cQh pyc @@ -240657,7 +240835,7 @@ kGx rqJ rMr bgK -nZh +gdG iOS mYs fxn @@ -240903,15 +241081,15 @@ tKZ gst rCC rCC -wEh -kgX -wEh +biK +rtO +biK rCC sOn -aBh -eaE -wkN -aBh +jjF +hlu +laI +jjF sOn sOn tue @@ -245298,7 +245476,7 @@ pvg nQW vsz fdy -oRb +qYN wHX nbi qzu @@ -245762,7 +245940,7 @@ gtB tny dLo ctj -aZG +lNs wYZ aKI peq @@ -246802,7 +246980,7 @@ nfk utR tmQ qnV -qGd +xzs cEv lhv iGH @@ -247021,7 +247199,7 @@ xmO deY bUx kdT -bLt +tHa syN cAC mWM @@ -247577,7 +247755,7 @@ qWZ ydk tGF iUT -tnk +nBT lpM rCD uEm @@ -248138,7 +248316,7 @@ gJN ckX iub inn -wyN +nUS vfU pdV gyR @@ -248370,7 +248548,7 @@ frN mhQ pzb iuv -rsa +lOT cvS ewi cvS @@ -248851,7 +249029,7 @@ pBs eYF sNj fKR -hsB +mmg uja ise iuv @@ -249108,7 +249286,7 @@ pBs uja uja uja -hsB +mmg uja wJk iuv @@ -249364,8 +249542,8 @@ oiz pBs uja kDz -mBm -twU +hIT +eRk uja uPT poL @@ -249622,7 +249800,7 @@ kqP uja uja uja -hsB +mmg uja ehq kOq @@ -249878,8 +250056,8 @@ aJi eCT uja oUO -msG -xWG +kHO +mQi uja kyL hNU @@ -250637,7 +250815,7 @@ ugA hNp tFI eHb -xsW +xqh bdp nmH tiI @@ -253495,7 +253673,7 @@ qbG onP jyp hgh -kbS +oID xxg ehU uau @@ -254780,7 +254958,7 @@ nOj vwO gnT hgh -ohb +xcc mTS obu mjI @@ -255035,7 +255213,7 @@ cpY lkr lso vwO -fME +kWn nKa dqO icA @@ -258119,7 +258297,7 @@ kKL kdF qGV hUx -xVv +fTc sZF sZF sZF @@ -262513,7 +262691,7 @@ via aYJ lAw aYJ -rZw +iWL wib eLr hAm @@ -265573,7 +265751,7 @@ xBU iVU iFX qRr -vAd +kGW omh wDr elw diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 1d7ac90f0cee..4895086a6477 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -36,6 +36,18 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"aas" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "aaz" = ( /obj/effect/spawner/random/trash/cigbutt, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -184,6 +196,14 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/port/aft) +"aeh" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze{ + spawn_random_offset = 1 + }, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "aej" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -191,6 +211,14 @@ "aeq" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) +"aer" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "aeu" = ( /obj/effect/decal/cleanable/cobweb, /obj/item/kirbyplants/organic/plant20{ @@ -201,21 +229,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"aez" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron/dark/textured, -/area/station/medical/cryo) -"aeA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "afj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -271,10 +284,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /turf/open/floor/iron/white, /area/station/medical/virology) -"afW" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "afZ" = ( /obj/machinery/vending/coffee, /obj/structure/disposalpipe/segment, @@ -285,11 +294,6 @@ /mob/living/simple_animal/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"agd" = ( -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/structure/closet/secure_closet/security/cargo, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/supply) "agi" = ( /obj/effect/spawner/random/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -504,21 +508,27 @@ /obj/machinery/vending/drugs, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"ajK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"akb" = ( +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) +"ake" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ - dir = 1 - }, -/turf/open/floor/iron/white/smooth_half, -/area/station/medical/cryo) +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "aks" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -611,15 +621,6 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) -"alw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "aly" = ( /obj/item/cultivator, /obj/item/hatchet, @@ -910,10 +911,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) -"aqG" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/sorting) "aqS" = ( /obj/effect/turf_decal/siding/purple/corner{ dir = 4 @@ -934,18 +931,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"ark" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "art" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1007,13 +992,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"asT" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/lobby) "atf" = ( /obj/structure/table/glass, /obj/machinery/power/apc/auto_name/directional/north, @@ -1089,16 +1067,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"auO" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "ava" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -1233,15 +1201,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"axK" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/security/prison) "axO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -1421,15 +1380,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) -"aAQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "aAS" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1454,6 +1404,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"aBF" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "aBL" = ( /obj/effect/spawner/structure/window, /obj/structure/cable, @@ -1686,10 +1641,6 @@ /obj/effect/spawner/random/bureaucracy/paper, /turf/open/floor/wood, /area/station/commons/dorms) -"aFz" = ( -/obj/machinery/vending/autodrobe, -/turf/open/floor/plating, -/area/station/maintenance/port) "aFI" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -1932,18 +1883,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"aJm" = ( -/obj/effect/spawner/random/structure/grille, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) -"aJn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "aJv" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -2314,15 +2253,6 @@ /obj/structure/closet/crate/preopen, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"aPm" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "aPq" = ( /obj/machinery/door/airlock/medical/glass{ name = "Auxilliary Surgery" @@ -2706,27 +2636,37 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"aWS" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_x = -2 + }, +/obj/item/trash/can{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/engineering/break_room) "aXa" = ( /turf/closed/wall, /area/station/security/prison/mess) -"aXE" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Service Maintenance" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, +"aXA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "service-passthrough" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "aXF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/bed, @@ -2992,6 +2932,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"baR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "bbd" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -3008,11 +2962,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"bbt" = ( -/obj/structure/girder, -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "bbT" = ( /obj/structure/closet/crate, /obj/item/stack/cable_coil, @@ -3095,14 +3044,6 @@ /obj/effect/turf_decal/siding, /turf/open/floor/iron, /area/station/science/lab) -"bdy" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "bdE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -3186,13 +3127,6 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"bfg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/surgery/aft) "bfj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3612,6 +3546,12 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"bmx" = ( +/obj/structure/mirror/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "bmB" = ( /obj/machinery/light_switch/directional/south, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -3654,18 +3594,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/white, /area/station/medical/office) -"bns" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Prison Cafeteria" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "bnx" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -3855,6 +3783,13 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bpM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "bpY" = ( /obj/machinery/light/small/directional/west, /obj/item/clothing/mask/animal/horsehead, @@ -3888,18 +3823,6 @@ /obj/item/cigarette/pipe, /turf/open/floor/wood, /area/station/commons/lounge) -"bqJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/cytology) "bqX" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) @@ -4012,45 +3935,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/theater) -"bsE" = ( +"bsV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/science/xenobiology, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "bsZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"btn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/drinkingglasses, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/effect/spawner/random/food_or_drink/cups, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "btx" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -4201,6 +4098,28 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"bvg" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "xeno_airlock_exterior"; + idInterior = "xeno_airlock_interior"; + idSelf = "xeno_airlock_control"; + name = "Access Console"; + pixel_x = -25; + pixel_y = -25; + req_access = list("xenobiology") + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "bvJ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -4209,6 +4128,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/lab) +"bvX" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "QM Privacy Shutters"; + id = "qmroom"; + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "bvY" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -4282,16 +4211,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) -"bxq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "bxr" = ( /obj/structure/sign/warning/electric_shock/directional/east, /turf/open/space/basic, @@ -4446,6 +4365,14 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig) +"bAp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "bAA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4574,11 +4501,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"bCE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "bCM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -5046,6 +4968,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/prison/garden) +"bKW" = ( +/obj/machinery/door/window/left/directional/south{ + name = "Permabrig Kitchen" + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "bLd" = ( /turf/closed/wall, /area/station/maintenance/starboard/aft) @@ -5084,6 +5014,15 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating/airless, /area/space/nearstation) +"bLV" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "bMa" = ( /obj/structure/disposaloutlet{ dir = 4; @@ -5249,6 +5188,16 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"bOX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "bPi" = ( /obj/structure/chair/office{ dir = 8 @@ -5356,13 +5305,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/security/brig) -"bRG" = ( -/obj/machinery/shower/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "bRH" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -5583,35 +5525,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"bVK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/virology{ - autoclose = 0; - frequency = 1449; - id_tag = "virology_airlock_interior"; - name = "Virology Interior Airlock" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_x = 8; - pixel_y = -24; - req_access = list("virology") - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/station/medical/virology) "bWe" = ( /obj/structure/table/glass, /obj/structure/reagent_dispensers/wall/virusfood/directional/west, @@ -5873,6 +5786,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/sorting) +"caK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/trimline/purple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "caO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6041,14 +5966,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) -"cfc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "cfe" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=8-Central-to-Aft"; @@ -6116,11 +6033,6 @@ /obj/machinery/air_sensor/ordnance_burn_chamber, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) -"cgZ" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "cha" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -6168,6 +6080,11 @@ }, /turf/closed/wall, /area/station/maintenance/central) +"cig" = ( +/obj/structure/sign/warning/hot_temp/directional/south, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "cii" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -6357,6 +6274,14 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"cmy" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "cmB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -6660,13 +6585,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"crl" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/item/radio/intercom/prison/directional/west, -/turf/open/floor/iron/white, -/area/station/security/prison) "crr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -6684,13 +6602,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms) -"csb" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/station/security/prison) "csn" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -7022,6 +6933,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/robotics/lab) +"cwD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "cwF" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -7275,6 +7193,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"czZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/aft) "cAf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7531,6 +7456,15 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/storage/primary) +"cFq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "cFr" = ( /obj/structure/table, /obj/machinery/status_display/evac/directional/east, @@ -7640,6 +7574,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cHZ" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/button/door/directional/south{ + id = "FitnessShower"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "cId" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -7668,6 +7613,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"cIE" = ( +/obj/machinery/light/directional/west, +/obj/machinery/piratepad/civilian, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "cIK" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -7795,6 +7754,11 @@ }, /turf/open/floor/plating/reinforced, /area/station/cargo/storage) +"cKG" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "cKN" = ( /obj/structure/table/wood, /obj/structure/cable, @@ -7878,6 +7842,16 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"cMr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock{ + id_tag = "AuxShower"; + name = "Showers" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "cMG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7932,6 +7906,16 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"cNl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "cNA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -8032,6 +8016,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"cQo" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/iron/white, +/area/station/medical/virology) "cQx" = ( /obj/machinery/computer/atmos_control/nitrous_tank{ dir = 1 @@ -8195,14 +8187,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"cUf" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/security/prison) "cUk" = ( /obj/effect/spawner/random/vending/snackvend, /obj/structure/disposalpipe/segment{ @@ -8322,6 +8306,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"cWx" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/fyellow, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "cWy" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -8368,6 +8358,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cWX" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "cXc" = ( /obj/structure/table, /obj/item/food/grown/poppy/lily, @@ -8643,6 +8641,10 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) +"dcD" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port) "dcF" = ( /obj/effect/landmark/event_spawn, /obj/effect/decal/cleanable/dirt, @@ -8698,16 +8700,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"ddK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "ddO" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9267,6 +9259,19 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/atmospherics_engine) +"dni" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "dno" = ( /turf/open/floor/iron/white, /area/station/medical/virology) @@ -9303,6 +9308,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"dog" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "dox" = ( /obj/structure/rack, /obj/item/screwdriver{ @@ -9396,6 +9411,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"dpR" = ( +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white, +/area/station/security/medical) "dqc" = ( /obj/machinery/door/airlock/security/glass{ name = "N2O Storage" @@ -9622,18 +9648,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) -"dtw" = ( -/obj/machinery/door/airlock/mining{ - name = "Deliveries" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/sorting) "dtB" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 8 @@ -10043,16 +10057,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"dDf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "dDo" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, @@ -10221,6 +10225,14 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/grass, /area/station/science/research) +"dGo" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "dGq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left{ @@ -10239,15 +10251,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/gateway, /turf/open/floor/iron, /area/station/command/gateway) -"dGv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "dGD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10285,6 +10288,13 @@ /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, /area/station/cargo/lobby) +"dHu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "dHG" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 @@ -10462,12 +10472,6 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"dKO" = ( -/obj/structure/urinal/directional/north, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "dKY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -10636,15 +10640,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"dMX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dMY" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -10665,12 +10660,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"dNC" = ( -/obj/structure/sink/directional/south, -/obj/machinery/light/small/dim/directional/west, -/mob/living/basic/mouse/brown/tom, -/turf/open/floor/plating, -/area/station/security/prison/safe) "dNX" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -10719,6 +10708,18 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"dOz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "dOA" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/siding/purple, @@ -10768,12 +10769,6 @@ /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/engine, /area/station/science/cytology) -"dPJ" = ( -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dPL" = ( /obj/structure/filingcabinet/security{ pixel_x = 4 @@ -10978,10 +10973,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dSp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port) "dSt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -11461,6 +11452,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"eax" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/light/small/directional/west, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "eaA" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating_new{ @@ -11631,6 +11628,16 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"ecL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "ecO" = ( /turf/open/floor/carpet, /area/station/service/library) @@ -11682,11 +11689,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) -"edN" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/cargo/sorting) "edQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11718,6 +11720,14 @@ }, /turf/open/floor/iron, /area/station/security/warden) +"eeu" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet4"; + name = "Unit 4" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "eey" = ( /obj/machinery/firealarm/directional/west, /obj/structure/rack, @@ -12214,6 +12224,17 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"eln" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ely" = ( /obj/structure/table/reinforced, /obj/item/clipboard{ @@ -12311,17 +12332,6 @@ }, /turf/open/floor/carpet, /area/station/command/bridge) -"enf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "eni" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ @@ -12329,6 +12339,13 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"env" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "eny" = ( /obj/structure/table, /obj/machinery/firealarm/directional/south, @@ -13031,6 +13048,18 @@ /obj/structure/window/reinforced/plasma/spawner/directional/south, /turf/open/floor/engine, /area/station/engineering/supermatter) +"eyK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "eyX" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -13141,6 +13170,14 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"eBY" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sink/kitchen/directional/west, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "eCg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13362,6 +13399,14 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"eGg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "eGm" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/camera/directional/west{ @@ -13411,10 +13456,39 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"eHc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "eHf" = ( /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, /area/station/hallway/primary/port) +"eHm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"eHo" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "eHR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13789,13 +13863,6 @@ /obj/machinery/vending/wardrobe/coroner_wardrobe, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"eNA" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "eNR" = ( /turf/closed/wall, /area/station/ai_monitored/aisat/exterior) @@ -13889,18 +13956,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/science/robotics/mechbay) -"ePA" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/obj/machinery/light/small/directional/south, -/obj/machinery/button/door/directional/south{ - id = "FitnessShower"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/fitness/recreation) "ePN" = ( /obj/structure/chair{ dir = 8 @@ -14081,15 +14136,6 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) -"eSR" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/virology) "eTg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14370,6 +14416,9 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"eYg" = ( +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "eYj" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -14493,6 +14542,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"fae" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "fag" = ( /obj/item/food/cracker, /obj/item/food/cracker{ @@ -14777,22 +14833,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/space/nearstation) -"ffS" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/virology/glass{ - name = "Virology Lab" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/turf/open/floor/iron/white, -/area/station/medical/virology) "ffU" = ( /obj/effect/turf_decal/siding/purple, /obj/machinery/camera/directional/south{ @@ -14904,13 +14944,6 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"fhA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "fhB" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -15082,6 +15115,15 @@ "fjD" = ( /turf/closed/wall, /area/station/commons/toilet/auxiliary) +"fjO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "fjW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15102,17 +15144,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) -"fkk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/trimline/purple, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "fkl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -15594,18 +15625,6 @@ dir = 8 }, /area/station/service/chapel/office) -"frs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "frt" = ( /obj/structure/rack, /obj/item/gun/energy/ionrifle, @@ -15709,6 +15728,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ftL" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/vending/autodrobe, +/turf/open/floor/plating, +/area/station/maintenance/port) "ftM" = ( /obj/structure/sign/warning/pods, /turf/closed/wall, @@ -15818,16 +15842,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"fxT" = ( -/obj/machinery/door/airlock/wood{ - doorClose = 'sound/effects/doorcreaky.ogg'; - doorOpen = 'sound/effects/doorcreaky.ogg'; - name = "The Gobetting Barmaid" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "fxW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/yellow/filled/line, @@ -15836,6 +15850,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"fyg" = ( +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/security/prison) "fym" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -15944,16 +15962,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"fAo" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port) "fAt" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -16197,16 +16205,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) -"fFq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "fFu" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -16314,12 +16312,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"fGP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "fGR" = ( /obj/machinery/camera/directional/east{ c_tag = "Atmospherics Tank - N2" @@ -16335,20 +16327,22 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"fGW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "fHd" = ( /obj/machinery/power/shieldwallgen, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"fHr" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/firealarm_sanity, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "fHy" = ( /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/airless, @@ -16819,13 +16813,6 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) -"fRG" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "fRS" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -17328,10 +17315,27 @@ /obj/machinery/computer/security/telescreen/cmo/directional/west, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"gbz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "gbB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gbE" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "gbG" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -17464,6 +17468,18 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"geA" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "geD" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/machinery/light/small/directional/north, @@ -17660,16 +17676,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/lounge) -"gjt" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/firealarm_sanity, -/turf/open/floor/iron/white, -/area/station/medical/virology) "gjv" = ( /obj/machinery/door/window/left/directional/west{ name = "Maximum Security Test Chamber"; @@ -18033,20 +18039,6 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet, /area/station/service/theater) -"gpv" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, -/obj/effect/landmark/navigate_destination/janitor, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "gpB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -18258,13 +18250,22 @@ "gtb" = ( /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"gtk" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ +"gtd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/white, -/area/station/security/prison) +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/cryo) "gtm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18278,15 +18279,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"gtH" = ( -/obj/machinery/door/airlock{ - name = "Prison Showers" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "gtR" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/green{ @@ -18313,14 +18305,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"gub" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "guo" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine, @@ -18342,20 +18326,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) -"guI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/reagent_containers/cup/bucket{ - pixel_x = -6; - pixel_y = 27 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "guL" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -18430,6 +18400,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) +"gvd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/structure/sign/eyechart/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "gvg" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -18559,6 +18538,15 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"gyl" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "gyo" = ( /obj/structure/cable, /obj/machinery/door/airlock/mining{ @@ -18571,6 +18559,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"gyz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gyG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -18710,19 +18705,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"gAH" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/floor, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "gAI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18765,6 +18747,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gBt" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet3"; + name = "Unit 3" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "gBx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18929,16 +18919,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) -"gEF" = ( -/obj/structure/rack, -/obj/item/clothing/gloves/color/fyellow, -/obj/structure/sink/kitchen/directional/south{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink" - }, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gEG" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, @@ -18988,6 +18968,15 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) +"gEZ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "gFd" = ( /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, @@ -19098,6 +19087,14 @@ }, /turf/open/floor/iron, /area/station/security/holding_cell) +"gHq" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "gHw" = ( /obj/machinery/atmospherics/components/tank, /obj/effect/turf_decal/siding/purple{ @@ -19129,6 +19126,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"gHK" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "gHY" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -19166,6 +19172,14 @@ /obj/effect/turf_decal/tile/bar, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"gIt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "gIB" = ( /obj/structure/light_construct/directional/north, /obj/effect/decal/cleanable/greenglow, @@ -19444,6 +19458,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/main) +"gMN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "gMQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19508,6 +19535,12 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"gNR" = ( +/obj/structure/girder, +/obj/effect/spawner/random/structure/grille, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "gNT" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -19626,17 +19659,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"gPY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "gQa" = ( /obj/effect/turf_decal/siding/thinplating_new/corner, /obj/effect/turf_decal/trimline/brown/filled/corner, @@ -19697,6 +19719,17 @@ /obj/item/wrench, /turf/open/floor/iron, /area/station/engineering/atmos) +"gSr" = ( +/obj/structure/bed/medical/emergency, +/obj/machinery/camera/directional/west{ + c_tag = "Gateway - Atrium" + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/command/gateway) "gSu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -19725,13 +19758,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) -"gTn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "gTo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -19918,6 +19944,11 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/atmos) +"gWr" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "gWv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -19951,13 +19982,6 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white, /area/station/security/medical) -"gXd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/service/janitor) "gXe" = ( /obj/structure/mirror/directional/west, /obj/item/lipstick/black, @@ -19991,6 +20015,15 @@ "gXu" = ( /turf/open/floor/plating, /area/station/engineering/main) +"gXv" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "gXw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/circuit/telecomms, @@ -20081,6 +20114,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"gYR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "gYU" = ( /turf/closed/wall, /area/station/service/chapel/funeral) @@ -20115,6 +20157,17 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/white, /area/station/science/lab) +"gZC" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "gZM" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -20161,11 +20214,6 @@ /obj/item/pen/invisible, /turf/open/floor/engine/cult, /area/station/service/library) -"haE" = ( -/obj/structure/mirror/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "haP" = ( /obj/structure/chair{ dir = 1 @@ -20281,6 +20329,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"hcH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "hcP" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -20407,6 +20471,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"heY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "hfa" = ( /obj/machinery/computer/crew, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -20448,6 +20517,25 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/checker, /area/station/engineering/storage_shared) +"hfJ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Surgery C Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"hgi" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "hgt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20643,6 +20731,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"hkh" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/security/prison) "hko" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -20809,6 +20902,16 @@ /obj/structure/cable/multilayer/connected, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"hmo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "hmq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue, @@ -20823,13 +20926,12 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"hmy" = ( -/obj/machinery/door/window/left/directional/south{ - name = "Permabrig Kitchen" - }, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) +"hmY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "hnn" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ dir = 4 @@ -20879,6 +20981,12 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"hoh" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "hor" = ( /obj/machinery/door/airlock/maintenance{ name = "Warehouse Maintenance" @@ -21051,6 +21159,16 @@ dir = 8 }, /area/station/service/chapel/office) +"hsq" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hsF" = ( /obj/machinery/door/airlock{ id_tag = "AuxToilet3"; @@ -21228,6 +21346,12 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/security/checkpoint/customs) +"hvo" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "hvr" = ( /obj/machinery/camera/directional/south{ c_tag = "Central Primary Hallway - Fore - Courtroom" @@ -21396,30 +21520,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/service/hydroponics) -"hxz" = ( -/obj/item/reagent_containers/spray/plantbgone{ - pixel_y = 3 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 13; - pixel_y = 5 - }, -/obj/item/watertank, -/obj/item/grenade/chem_grenade/antiweed, -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hxB" = ( /obj/item/kirbyplants/organic/plant21, /turf/open/floor/iron/grimy, @@ -21496,6 +21596,12 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"hyI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "hyN" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, @@ -21608,13 +21714,6 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison/visit) -"hAN" = ( -/obj/structure/cable, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "hAW" = ( /obj/machinery/camera/directional/south{ c_tag = "Research Director's Office - Observation Cage"; @@ -21647,6 +21746,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hBu" = ( +/obj/machinery/door/airlock{ + name = "Hydroponics Backroom" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "hBB" = ( /obj/machinery/computer/rdconsole{ dir = 8 @@ -21656,11 +21765,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) -"hBC" = ( -/obj/structure/kitchenspike_frame, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "hBD" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/airlock_pump{ @@ -21960,26 +22064,6 @@ /obj/structure/fake_stairs/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) -"hIu" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) -"hIx" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/medical_doctor, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/surgery/aft) "hIJ" = ( /obj/structure/cable, /obj/machinery/chem_heater/withbuffer, @@ -22120,11 +22204,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"hLs" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "hLv" = ( /obj/structure/showcase/cyborg/old{ dir = 8; @@ -22167,6 +22246,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"hMf" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) "hMn" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -22295,13 +22381,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hOR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/soap{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "hPk" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22728,26 +22807,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/white, /area/station/medical/virology) -"hVX" = ( -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/blobstart, -/obj/effect/landmark/start/hangover, -/obj/machinery/button/door/directional/west{ - id = "Toilet2"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/spawner/random/trash/graffiti{ - pixel_x = -32; - spawn_loot_chance = 50 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "hVY" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22833,6 +22892,20 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"hXZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/science/xenobiology, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "hYd" = ( /obj/machinery/microwave{ pixel_x = -3; @@ -23210,13 +23283,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) -"ien" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/white, -/area/station/science/research) "iep" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -23491,13 +23557,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"iiH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "iiL" = ( /obj/machinery/air_sensor/mix_tank, /turf/open/floor/engine/vacuum, @@ -24192,16 +24251,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) -"itW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "itY" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -24228,10 +24277,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"iuB" = ( -/obj/effect/spawner/random/food_or_drink/donkpockets, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iva" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -24391,6 +24436,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"ixA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ixP" = ( /obj/machinery/firealarm/directional/south, /obj/structure/cable, @@ -24447,24 +24503,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"iyC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Console"; - pixel_x = 24; - pixel_y = -24; - req_access = list("virology") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/virology) "iyV" = ( /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ @@ -24715,6 +24753,14 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"iBO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "iCj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /obj/effect/mapping_helpers/airlock/locked, @@ -24752,14 +24798,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"iCX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iDe" = ( /obj/structure/table, /obj/item/reagent_containers/cup/glass/drinkingglass, @@ -24936,6 +24974,23 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/bitrunning/den) +"iGL" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "XenoPens"; + name = "Xenobiology Lockdown" + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/xenobiology) "iHc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -25200,6 +25255,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_half, /area/station/cargo/bitrunning/den) +"iMa" = ( +/obj/machinery/door/airlock{ + name = "Prison Showers" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "iMd" = ( /obj/structure/bed/medical/emergency{ dir = 4 @@ -25285,13 +25350,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"iMQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/mob/living/basic/lizard/wags_his_tail, -/turf/open/floor/plating, -/area/station/service/janitor) "iMR" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -25594,12 +25652,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/science/research) -"iRg" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iRh" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -25625,26 +25677,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"iRw" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_guide{ - pixel_x = -2 - }, -/obj/item/trash/can{ - pixel_x = -8 - }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/engineering/break_room) "iRy" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -25675,6 +25707,11 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"iSd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "iSh" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -25730,16 +25767,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"iTH" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "iTO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25803,15 +25830,6 @@ "iUv" = ( /turf/closed/wall/r_wall, /area/station/security/prison) -"iUJ" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "iVi" = ( /obj/machinery/door/airlock{ id_tag = "Cabin6"; @@ -26154,6 +26172,36 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"iZI" = ( +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 13; + pixel_y = 5 + }, +/obj/item/watertank, +/obj/item/grenade/chem_grenade/antiweed, +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"iZX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "jaj" = ( /obj/structure/chair, /obj/structure/cable, @@ -26216,18 +26264,6 @@ }, /turf/open/floor/engine, /area/station/science/cytology) -"jbf" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "jbg" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -26390,6 +26426,19 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jen" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Prison Cafeteria" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "jew" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 4 @@ -26628,6 +26677,17 @@ /obj/machinery/meter, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"jio" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/medical_doctor, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/aft) "jis" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26658,20 +26718,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"jjm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/cytology) "jjn" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -26831,12 +26877,6 @@ "jlU" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology) -"jlY" = ( -/obj/structure/urinal/directional/north, -/obj/effect/landmark/start/hangover, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "jmc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -27138,14 +27178,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"jrp" = ( -/obj/structure/cable, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "jrI" = ( /obj/machinery/door/poddoor/massdriver_trash, /obj/machinery/atmos_shield_gen/active{ @@ -27223,14 +27255,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"jsq" = ( -/obj/structure/sink/directional/west, -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/structure/light_construct/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "jsr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27507,6 +27531,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/service/library) +"jwI" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "jwP" = ( /obj/structure/table, /obj/item/paper_bin, @@ -27559,18 +27594,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"jxH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jxM" = ( /obj/item/radio/intercom/directional/west{ pixel_y = -10 @@ -27698,11 +27721,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"jzw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jzD" = ( /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, @@ -27743,6 +27761,12 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/chapel) +"jAq" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "jAs" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/north, @@ -27782,6 +27806,15 @@ }, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) +"jAT" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "QM Privacy Shutters"; + id = "qmroom" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "jAV" = ( /obj/machinery/atmospherics/pipe/smart/manifold/dark/visible{ dir = 1 @@ -27872,15 +27905,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"jCn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/medbay/central) "jCr" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -27993,6 +28017,14 @@ /obj/structure/sign/poster/party_game, /turf/closed/wall, /area/space/nearstation) +"jFw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "jFy" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -28007,6 +28039,14 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"jFF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "jFK" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt, @@ -28109,13 +28149,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) -"jGG" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/treatment_center) "jGN" = ( /obj/machinery/computer/station_alert/station_only{ dir = 1 @@ -28256,11 +28289,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/carpet, /area/station/service/chapel) -"jJk" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "jJl" = ( /obj/structure/table/reinforced, /obj/structure/reagent_dispensers/servingdish, @@ -28421,17 +28449,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"jLS" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "jMb" = ( /obj/structure/railing{ dir = 10 @@ -28924,19 +28941,6 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"jUs" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/lobby) "jUx" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -29166,6 +29170,22 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"jYw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "jYy" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -29536,6 +29556,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"kge" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "kgg" = ( /obj/structure/railing, /obj/structure/railing{ @@ -29571,6 +29599,14 @@ /obj/machinery/door/poddoor/incinerator_ordmix, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"kgR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "kgV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -29661,6 +29697,11 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/cargo/warehouse) +"kim" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/fore) "kir" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 @@ -29804,24 +29845,6 @@ /obj/machinery/computer/security, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"kkB" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 8; - output_dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Ore Redemption Window" - }, -/obj/machinery/door/window/left/directional/west{ - req_access = list("cargo"); - name = "Cargo Security Window" - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron, -/area/station/cargo/lobby) "kkU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -29983,18 +30006,20 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/command/gateway) +"kna" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/cigbutt/roach, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "knd" = ( /obj/effect/landmark/start/assistant, /obj/structure/chair/comfy/black, /obj/machinery/light/small/directional/north, /turf/open/floor/wood, /area/station/service/library) -"knf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "knt" = ( /obj/machinery/mech_bay_recharge_port, /obj/structure/cable, @@ -30250,6 +30275,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) +"ksC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ksM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30325,6 +30356,16 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"kux" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "QM Privacy Shutters"; + id = "qmroom"; + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "kuD" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/unary/passive_vent{ @@ -30628,6 +30669,16 @@ /obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/open/floor/iron, /area/station/security/courtroom) +"kzE" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "kzG" = ( /turf/open/floor/iron/recharge_floor, /area/station/maintenance/port/aft) @@ -31395,16 +31446,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kMo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/structure/cable, -/obj/structure/sign/eyechart/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/cryo) "kMr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/siding/wood{ @@ -31492,6 +31533,13 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) +"kOu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "kOB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31612,11 +31660,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kQv" = ( -/obj/machinery/light/directional/east, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "kQO" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /mob/living/basic/sloth/citrus, @@ -31671,6 +31714,13 @@ /obj/machinery/announcement_system, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"kRq" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "kRA" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/effect/mapping_helpers/broken_floor, @@ -31785,14 +31835,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"kTZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "kUb" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater/on, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -32198,18 +32240,6 @@ dir = 1 }, /area/station/service/chapel) -"laf" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "lah" = ( /obj/structure/rack, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32410,6 +32440,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"leI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/service/janitor) "leP" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 4 @@ -32441,10 +32479,6 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/medical/chem_storage) -"lfm" = ( -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "lfu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32456,6 +32490,14 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"lfU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/mob/living/basic/lizard/wags_his_tail, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/service/janitor) "lge" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -32551,6 +32593,16 @@ }, /turf/open/floor/wood, /area/station/service/theater) +"lix" = ( +/obj/structure/sign/poster/official/cleanliness/directional/west, +/obj/structure/sink/directional/south, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/mirror/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) "liz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, @@ -32609,13 +32661,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"liX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/lobby) "lje" = ( /obj/machinery/camera/directional/south{ c_tag = "Starboard Primary Hallway - Auxiliary Tool Storage" @@ -32745,6 +32790,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/break_room) +"lme" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/computer/cargo/request{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "lmk" = ( /obj/item/radio/intercom/directional/south, /obj/structure/bodycontainer/morgue{ @@ -32760,10 +32819,6 @@ dir = 8 }, /area/station/medical/morgue) -"lmn" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "lmx" = ( /obj/machinery/light_switch/directional/west, /obj/effect/decal/cleanable/cobweb, @@ -32783,6 +32838,18 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"lmy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lmC" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "lmF" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -32802,12 +32869,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"lmT" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/security/prison) "lnc" = ( /turf/closed/wall, /area/station/commons/dorms) @@ -32825,13 +32886,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/primary/fore) -"lnM" = ( -/obj/item/reagent_containers/cup/bucket, -/obj/item/mop, -/obj/item/reagent_containers/cup/bottle/ammonia, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/security/prison/safe) "lnP" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -32870,6 +32924,16 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"loM" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "loR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32916,21 +32980,6 @@ /obj/machinery/biogenerator, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lpN" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "viro-passthrough" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/medical/medbay/central) "lpR" = ( /obj/structure/table, /obj/effect/turf_decal/siding{ @@ -33055,6 +33104,13 @@ }, /turf/open/floor/plating, /area/station/medical/chemistry) +"lsb" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "lsf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33169,15 +33225,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"ltX" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lug" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33259,13 +33306,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/medical) -"lvU" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet4"; - name = "Unit 4" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "lvZ" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -33746,6 +33786,44 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"lIA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/button/door/directional/west{ + id = "qmroom"; + name = "Privacy Blast Doors Control"; + pixel_y = -10 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west{ + pixel_x = -41; + pixel_y = 5 + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -1; + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + pixel_y = 8; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown"; + req_access = list("cargo") + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "lIB" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33757,6 +33835,12 @@ }, /turf/open/floor/iron, /area/station/service/bar) +"lIS" = ( +/obj/structure/kitchenspike_frame, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "lIX" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/engine/cult, @@ -33772,26 +33856,6 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"lJm" = ( -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/start/assistant, -/obj/effect/landmark/start/hangover, -/obj/effect/spawner/random/trash/graffiti{ - pixel_x = -32; - spawn_loot_chance = 50 - }, -/obj/machinery/button/door/directional/west{ - id = "Toilet3"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "lJn" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -33856,14 +33920,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"lLw" = ( -/obj/machinery/door/window/left/directional/south{ - name = "Shower" - }, -/obj/machinery/shower/directional/south, -/obj/structure/curtain, -/turf/open/floor/iron/freezer, -/area/station/commons/fitness/recreation) "lLB" = ( /obj/structure/table/glass, /obj/item/wrench, @@ -33994,11 +34050,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"lNf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "lNh" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium" @@ -34288,6 +34339,17 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/central) +"lRY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "lSw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -34310,6 +34372,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"lTc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/reagent_containers/cup/bucket{ + pixel_x = -6; + pixel_y = 27 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) "lTi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/camera/directional/south{ @@ -34696,6 +34773,15 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"lZI" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "lZM" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/shaker, @@ -34951,6 +35037,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mdA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "mdL" = ( /obj/machinery/computer/shuttle/mining{ dir = 1; @@ -34961,6 +35055,17 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"mdO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "mei" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, @@ -35112,21 +35217,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"mhM" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/door/window/right/directional/south{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/item/newspaper{ - pixel_x = -5 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "mhR" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -35316,12 +35406,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"mma" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/service/janitor) "mml" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot_white, @@ -35646,6 +35730,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"mrq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "mru" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -35773,6 +35864,15 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/corporate_showroom) +"mti" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mtj" = ( /obj/machinery/medical_kiosk, /obj/effect/turf_decal/siding/white, @@ -35808,15 +35908,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/dorms) -"mtZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/sorting/mail, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/effect/turf_decal/tile/green/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/virology) "mui" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35976,13 +36067,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"mwm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "mwo" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -36186,6 +36270,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"mAZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mBe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36338,13 +36433,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/dorms) -"mCV" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "mCZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -36379,6 +36467,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"mDv" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "mDA" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ dir = 4 @@ -36440,11 +36539,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"mEx" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "mEG" = ( /obj/structure/closet/secure_closet/security/engine, /obj/machinery/airalarm/directional/east, @@ -36605,6 +36699,26 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"mGV" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/newscaster/directional/east, +/obj/effect/landmark/start/assistant, +/obj/effect/landmark/start/hangover, +/obj/machinery/button/door/directional/south{ + id = "Toilet4"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "mGX" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -36635,15 +36749,6 @@ /obj/item/clothing/gloves/color/yellow, /turf/open/floor/iron, /area/station/engineering/main) -"mHl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "mHy" = ( /obj/structure/rack, /turf/open/floor/plating, @@ -36811,6 +36916,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"mLd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "mLp" = ( /obj/effect/landmark/start/quartermaster, /obj/structure/cable, @@ -37126,6 +37239,20 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/fore) +"mQf" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/virology/glass{ + name = "Containment Cells" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "mQi" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, @@ -37318,6 +37445,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) +"mSO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mSS" = ( /obj/machinery/atmospherics/components/binary/pump/on, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37348,14 +37484,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"mTg" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/hatch{ - name = "Observation Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "mTk" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -37483,18 +37611,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"mWA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "mWU" = ( /turf/open/floor/iron, /area/station/maintenance/space_hut) @@ -37582,14 +37698,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"mXO" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "qmroom" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "mXY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37701,6 +37809,11 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"mZB" = ( +/obj/structure/urinal/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "mZC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -37812,6 +37925,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/service/hydroponics) +"nbQ" = ( +/obj/machinery/shower/directional/south, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/machinery/door/window/left/directional/south{ + name = "Shower" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "nbS" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -38024,12 +38146,6 @@ "nfs" = ( /turf/open/floor/engine, /area/station/command/heads_quarters/rd) -"nft" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "nfy" = ( /obj/structure/table, /obj/item/paper_bin, @@ -38299,6 +38415,18 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"nlN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "nlP" = ( /obj/structure/table, /obj/item/stock_parts/subspace/treatment, @@ -38379,6 +38507,10 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"nmX" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "nmZ" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ @@ -38502,6 +38634,27 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/fore) +"noy" = ( +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/start/hangover, +/obj/machinery/button/door/directional/west{ + id = "Toilet2"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "noA" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ @@ -38704,6 +38857,12 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"nrI" = ( +/obj/structure/urinal/directional/north, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "nrM" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, @@ -38890,6 +39049,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ntG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "ntM" = ( /obj/machinery/power/solar_control{ id = "foreport"; @@ -38949,6 +39113,26 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/science/cytology) +"nuk" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/window/right/directional/south{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/item/newspaper{ + pixel_x = -5 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "nur" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -39096,6 +39280,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"nwZ" = ( +/obj/machinery/duct, +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/port) "nxg" = ( /obj/machinery/light/small/dim/directional/south, /obj/machinery/atmospherics/components/binary/pump/on/layer4{ @@ -39191,14 +39380,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/work) -"nyr" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "nyu" = ( /obj/effect/turf_decal/tile/brown/fourcorners, /obj/machinery/door/airlock/security/glass{ @@ -39401,12 +39582,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"nCc" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/surgery/aft) "nCr" = ( /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron/white, @@ -39462,16 +39637,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/security/prison) -"nCL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "nCQ" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ dir = 4 @@ -39936,26 +40101,6 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/floor/plating, /area/station/maintenance/port) -"nKO" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/newscaster/directional/east, -/obj/effect/landmark/start/assistant, -/obj/effect/landmark/start/hangover, -/obj/machinery/button/door/directional/south{ - id = "Toilet4"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/spawner/random/trash/graffiti{ - pixel_y = -32; - spawn_loot_chance = 50 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "nLq" = ( /obj/machinery/airalarm/directional/south, /turf/open/floor/wood, @@ -40191,13 +40336,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/garden) -"nPN" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "nQA" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -40523,15 +40661,6 @@ /obj/structure/grille/broken, /turf/open/space/basic, /area/space/nearstation) -"nYL" = ( -/obj/machinery/door/airlock/hatch{ - name = "Xenobiology Maintenance" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "nYU" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -40663,6 +40792,16 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"oay" = ( +/obj/machinery/door/airlock/hatch{ + name = "Xenobiology Maintenance" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "oaB" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -41251,6 +41390,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"omK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "omV" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/cable, @@ -41333,13 +41478,6 @@ "oor" = ( /turf/closed/wall, /area/station/security/checkpoint/supply) -"oos" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "ooz" = ( /obj/structure/closet/emcloset, /obj/machinery/camera/directional/west{ @@ -41714,11 +41852,6 @@ /obj/item/reagent_containers/cup/glass/bottle/goldschlager, /turf/open/space/basic, /area/space/nearstation) -"ouz" = ( -/obj/item/kirbyplants, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "ouM" = ( /obj/structure/sign/painting/library{ pixel_y = -32 @@ -41975,6 +42108,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"ozN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ozX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42357,19 +42499,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/plating, /area/station/science/ordnance) -"oGf" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "viro-passthrough" - }, -/obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/medical/medbay/central) "oGj" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box, @@ -42585,6 +42714,14 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"oJB" = ( +/obj/structure/table, +/obj/item/toy/plush/slimeplushie{ + name = "Nanners" + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "oJD" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -42783,6 +42920,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"oOy" = ( +/obj/effect/landmark/start/botanist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oOz" = ( /obj/machinery/status_display/evac/directional/north, /obj/structure/table/wood, @@ -42955,6 +43100,19 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"oRL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "oRM" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -43108,13 +43266,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"oUE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "oUK" = ( /obj/structure/table, /obj/item/electronics/apc, @@ -43161,16 +43312,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"oWa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "oWc" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -43369,10 +43510,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"oZL" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "oZN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, @@ -43386,20 +43523,6 @@ /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/theatre) -"oZZ" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 2 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "pab" = ( /obj/structure/table, /obj/item/stock_parts/subspace/ansible, @@ -43593,15 +43716,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) -"pdx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/cigbutt/roach, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "pdI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -43734,6 +43848,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"pgA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "pgD" = ( /obj/machinery/door/airlock/maintenance{ name = "Chapel Maintenance" @@ -43761,15 +43882,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"pgM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/sink/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "pgU" = ( /obj/structure/chair{ dir = 4 @@ -43845,6 +43957,23 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"pih" = ( +/obj/machinery/door/airlock/mining{ + name = "Deliveries" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "piv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44030,6 +44159,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"plL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "pma" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) @@ -44080,6 +44217,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"pmx" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "pmA" = ( /obj/machinery/door/firedoor, /obj/machinery/smartfridge/food, @@ -44142,16 +44292,6 @@ /obj/effect/turf_decal/caution, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"pnx" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "pnD" = ( /obj/machinery/airalarm/directional/north, /obj/effect/spawner/random/structure/closet_private, @@ -44219,6 +44359,25 @@ /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"poG" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Service Maintenance" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "service-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "poJ" = ( /obj/machinery/telecomms/hub/preset, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -44321,13 +44480,6 @@ /obj/machinery/module_duplicator, /turf/open/floor/iron/white, /area/station/science/explab) -"pqz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Storage Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "pqH" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark, @@ -44504,6 +44656,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pta" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "ptd" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/effect/decal/cleanable/dirt/dust, @@ -44536,6 +44694,20 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"ptP" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "pua" = ( /obj/machinery/vending/assist, /obj/effect/landmark/navigate_destination, @@ -44705,6 +44877,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall, /area/station/maintenance/starboard/fore) +"pxK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "pxN" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -45134,6 +45318,27 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) +"pGp" = ( +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/start/hangover, +/obj/machinery/button/door/directional/west{ + id = "Toilet1"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "pGu" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/corner{ @@ -45155,17 +45360,6 @@ dir = 1 }, /area/station/engineering/atmos/storage/gas) -"pGC" = ( -/obj/structure/table, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/white, -/area/station/security/medical) "pGH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -45226,13 +45420,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"pHt" = ( -/obj/structure/table, -/obj/item/toy/plush/slimeplushie{ - name = "Nanners" - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "pHv" = ( /obj/machinery/door/airlock/maintenance{ name = "Surgery Maintenance" @@ -45364,12 +45551,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"pJu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "pJv" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -45555,15 +45736,6 @@ /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"pNf" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics Backroom" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "pNk" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45688,12 +45860,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"pON" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/port) "pPh" = ( /obj/structure/closet/secure_closet/miner, /obj/item/clothing/suit/hooded/wintercoat/miner, @@ -45754,14 +45920,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/station/security/prison/safe) -"pQj" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "pQr" = ( /obj/effect/spawner/random/trash/garbage, /obj/effect/landmark/generic_maintenance_landmark, @@ -45883,13 +46041,6 @@ /obj/item/reagent_containers/spray/pepper, /turf/open/floor/iron, /area/station/security/execution/transfer) -"pSa" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/security/prison) "pSl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 @@ -46029,6 +46180,26 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"pUB" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/research{ + autoclose = 0; + frequency = 1449; + id_tag = "xeno_airlock_interior"; + name = "Xenobiology Lab Internal Airlock" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "pUM" = ( /obj/structure/table, /obj/effect/turf_decal/siding/white/corner, @@ -46109,19 +46280,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"pWb" = ( -/obj/machinery/light/directional/west, -/obj/machinery/piratepad/civilian, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "pWA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=2.1-Leaving-Storage"; @@ -46189,16 +46347,6 @@ /obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"pWX" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pXh" = ( /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, @@ -46525,6 +46673,14 @@ /obj/structure/dresser, /turf/open/floor/carpet, /area/station/commons/dorms) +"qeq" = ( +/obj/machinery/door/airlock{ + name = "Cleaning Closet" + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) "qer" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46670,16 +46826,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qgn" = ( +"qgr" = ( /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/random/structure/chair_maintenance{ - dir = 4 +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 }, +/obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "qgt" = ( @@ -46837,14 +46989,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qiD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "qiH" = ( /obj/machinery/light/small/directional/west, /obj/machinery/airalarm/directional/west, @@ -46888,6 +47032,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/execution/transfer) +"qju" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "viro-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/medical/medbay/central) "qjy" = ( /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, @@ -46932,17 +47092,6 @@ /obj/item/reagent_containers/cup/soda_cans/monkey_energy, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qkq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "qkA" = ( /obj/machinery/computer/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -46963,6 +47112,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"qkY" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "qlc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ @@ -47132,6 +47286,16 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/fore) +"qof" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "qos" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -47246,6 +47410,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qqJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "qrg" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/circuit/green{ @@ -47282,6 +47454,13 @@ /obj/machinery/computer/security/telescreen/minisat/directional/south, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"qrG" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "qrO" = ( /obj/machinery/chem_dispenser/drinks{ dir = 1 @@ -47418,6 +47597,11 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/command/corporate_showroom) +"qts" = ( +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "qua" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 1 @@ -47465,14 +47649,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) -"qvC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "qvJ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -47557,11 +47733,15 @@ dir = 1 }, /area/station/service/chapel) -"qxr" = ( +"qxj" = ( /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, /turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/area/station/maintenance/starboard/greater) "qxt" = ( /obj/effect/turf_decal/bot, /turf/open/floor/engine, @@ -47651,13 +47831,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"qzf" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "qzg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /obj/machinery/meter/layer4, @@ -47759,25 +47932,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) -"qBo" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/research{ - autoclose = 0; - frequency = 1449; - id_tag = "xeno_airlock_interior"; - name = "Xenobiology Lab Internal Airlock" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "qBq" = ( /obj/structure/rack, /obj/effect/landmark/blobstart, @@ -48018,6 +48172,15 @@ /obj/structure/chair/stool/directional/west, /turf/open/floor/iron, /area/station/commons/locker) +"qFV" = ( +/obj/machinery/light/directional/east, +/obj/structure/cable, +/obj/machinery/light_switch/directional/east{ + pixel_y = -2; + pixel_x = 21 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "qGa" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/grunge{ @@ -48185,6 +48348,13 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"qIR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "qIS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -48539,6 +48709,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/bridge) +"qNX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "qOk" = ( /obj/structure/table/optable, /obj/item/radio/intercom/directional/south, @@ -48602,12 +48782,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qOT" = ( -/obj/item/storage/bag/trash, -/obj/machinery/airalarm/directional/west, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/security/prison/safe) "qOV" = ( /obj/structure/table, /obj/item/reagent_containers/condiment/saltshaker{ @@ -49333,6 +49507,19 @@ "rac" = ( /turf/closed/wall, /area/station/commons/lounge) +"raf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rao" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -49523,26 +49710,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"rdT" = ( -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/blobstart, -/obj/effect/landmark/start/hangover, -/obj/machinery/button/door/directional/west{ - id = "Toilet1"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/spawner/random/trash/graffiti{ - pixel_x = -32; - spawn_loot_chance = 50 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "rea" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 5 @@ -49618,6 +49785,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/lockers) +"rfe" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rff" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -49627,9 +49802,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"rfn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "rft" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) +"rfA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/firealarm_sanity, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "rfY" = ( /obj/structure/lattice, /obj/structure/sign/warning/electric_shock/directional/east, @@ -49718,6 +49910,28 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/construction/storage_wing) +"rie" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rim" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "viro-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/medical/medbay/central) "riq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -50050,20 +50264,6 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) -"rnt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "rnX" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/firealarm/directional/east, @@ -50109,6 +50309,13 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"rpt" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/structure/light_construct/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "rpw" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -50206,6 +50413,11 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/iron, /area/station/service/bar) +"rrF" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "rrL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -50262,6 +50474,13 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/science/xenobiology) +"rsA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "rsD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -50274,6 +50493,19 @@ dir = 4 }, /area/station/science/lab) +"rsF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "rsI" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -50608,6 +50840,15 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"rwy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "rwE" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -50822,18 +51063,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"rAa" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Storage Room" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port) "rAo" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/watertank, @@ -51058,17 +51287,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"rFO" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/sink/directional/east, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rFR" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -51207,6 +51425,14 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port) +"rHM" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "rHZ" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /obj/machinery/atmospherics/components/binary/valve/digital{ @@ -51879,14 +52105,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) -"rTF" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Surgery C Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "rTL" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -51976,14 +52194,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"rUU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) "rVb" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -52039,22 +52249,10 @@ /obj/effect/turf_decal/trimline/purple/filled/warning, /turf/open/floor/iron, /area/station/science/lab) -"rVY" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port) "rVZ" = ( /obj/structure/cable, /turf/open/floor/grass, /area/station/medical/virology) -"rWf" = ( -/obj/structure/urinal/directional/north, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/light/floor, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "rWi" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2, @@ -52302,6 +52500,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"saA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "saB" = ( /obj/machinery/button/door/directional/west{ id = "atmoshfr"; @@ -52340,6 +52546,17 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/station/service/library) +"saO" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "saU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52533,6 +52750,14 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"sen" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/aft) "sey" = ( /obj/structure/sign/departments/court/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52546,6 +52771,13 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/hallway/primary/aft) +"sff" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "sfg" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -52631,6 +52863,14 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) +"sgI" = ( +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/item/reagent_containers/cup/bottle/ammonia, +/obj/structure/cable, +/mob/living/basic/mouse/brown/tom, +/turf/open/floor/plating, +/area/station/security/prison/safe) "sgX" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -52643,15 +52883,6 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"sgZ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/computer/cargo/request{ - dir = 1 - }, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/plating, -/area/station/cargo/sorting) "shl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52691,12 +52922,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"sie" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "sik" = ( /obj/structure/railing/corner/end{ dir = 4 @@ -53007,11 +53232,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"soa" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "sof" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -53214,21 +53434,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) -"stD" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Primary Treatment Centre" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "stI" = ( /obj/effect/turf_decal/delivery, /obj/structure/table, @@ -53394,13 +53599,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"swR" = ( -/obj/machinery/door/airlock{ - name = "Cleaning Closet" - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "swV" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 4 @@ -53410,24 +53608,10 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"sxf" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "sxg" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron/white/side, /area/station/science/lobby) -"sxk" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/sorting) "sxo" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -53450,6 +53634,16 @@ /obj/machinery/computer/security/wooden_tv, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"sxU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "sxX" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -53953,6 +54147,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"sFn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "sFo" = ( /obj/machinery/button/crematorium{ id = "crematoriumChapel"; @@ -54038,12 +54239,29 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"sGM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/soap{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "sGP" = ( /obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"sGR" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/hatch{ + name = "Observation Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "sHg" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/camera/directional/south{ @@ -54264,15 +54482,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"sMo" = ( -/obj/structure/sign/poster/official/cleanliness/directional/west, -/obj/structure/sink/directional/south, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 - }, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) "sMB" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 1"; @@ -54381,6 +54590,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"sOd" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Primary Treatment Centre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "sOi" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -54423,18 +54646,6 @@ /obj/structure/light_construct/directional/east, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"sOM" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "sOP" = ( /obj/structure/rack, /obj/item/toy/plush/lizard_plushie/green{ @@ -54474,16 +54685,19 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"sPq" = ( -/obj/structure/cable, +"sPk" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "sPy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -54967,6 +55181,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"sWr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "sWs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -55009,16 +55230,6 @@ "sWV" = ( /turf/closed/wall/r_wall, /area/station/security/detectives_office) -"sWZ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "sXe" = ( /obj/effect/landmark/start/station_engineer, /obj/machinery/light/directional/west, @@ -55134,12 +55345,21 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) -"tak" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/port) +"sZP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tar" = ( /obj/machinery/medical_kiosk, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -55153,6 +55373,11 @@ }, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) +"taB" = ( +/obj/structure/urinal/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "taD" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -55523,20 +55748,6 @@ dir = 8 }, /area/station/medical/morgue) -"thT" = ( -/obj/structure/cable, -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Central West"; - network = list("ss13","rd","xeno") - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/button/door/directional/east{ - id = "XenoPens"; - name = "Xenobiology Shutters"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "thY" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/turf_decal/stripes/line{ @@ -55798,15 +56009,6 @@ dir = 4 }, /area/station/service/chapel) -"tmI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - id_tag = "AuxShower"; - name = "Showers" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "tmK" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -56050,6 +56252,12 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron, /area/station/cargo/storage) +"tqr" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/closet/secure_closet/security/cargo, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "tqx" = ( /obj/machinery/door/window/left/directional/north{ name = "Mass Driver Control Door"; @@ -56101,6 +56309,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"trC" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "trE" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, @@ -56202,6 +56422,16 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"ttD" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "ttE" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -56262,11 +56492,19 @@ }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"tub" = ( +"ttY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/opposingcorners, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "tug" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56304,6 +56542,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tuO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "tvE" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -56343,21 +56589,6 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"twu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/cytology) "twy" = ( /obj/effect/turf_decal/siding/purple, /turf/open/floor/iron/dark, @@ -56438,13 +56669,6 @@ /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"txP" = ( -/obj/effect/landmark/start/botanist, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/service/hydroponics) "tyj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -56488,17 +56712,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"tzr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "tzt" = ( /obj/structure/statue/snow/snowman, /turf/open/floor/fake_snow, /area/station/maintenance/port/aft) -"tzD" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet3"; - name = "Unit 3" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "tzE" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -56595,6 +56821,24 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, /area/station/science/research) +"tAV" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tBc" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56660,6 +56904,14 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) +"tBV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/prison/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "tCC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -56776,13 +57028,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/research) -"tEy" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "tEP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -56803,6 +57048,16 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tFI" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "tGA" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -57096,6 +57351,17 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/locker) +"tKs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "tKu" = ( /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/segment, @@ -57126,27 +57392,6 @@ /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/space/basic, /area/space/nearstation) -"tLc" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "xeno_airlock_exterior"; - idInterior = "xeno_airlock_interior"; - idSelf = "xeno_airlock_control"; - name = "Access Console"; - pixel_x = -25; - pixel_y = -25; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/cytology) "tLd" = ( /obj/structure/chair/office{ dir = 8 @@ -57177,6 +57422,12 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"tLr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "tLv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -57501,32 +57752,6 @@ /obj/item/clothing/mask/surgical, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) -"tQp" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/obj/machinery/button/door/directional/west{ - id = "qmroom"; - name = "Privacy Blast Doors Control"; - pixel_y = -7 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/light_switch/directional/west{ - pixel_x = -22; - pixel_y = 5 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "tQC" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom, /obj/effect/turf_decal/delivery, @@ -57534,6 +57759,14 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"tRt" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) "tRE" = ( /obj/structure/chair{ dir = 1 @@ -57579,6 +57812,23 @@ "tSw" = ( /turf/closed/wall, /area/station/maintenance/aft/greater) +"tSH" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "tSP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57870,19 +58120,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"tXk" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, +"tXj" = ( /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 10 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "tXq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, @@ -57988,6 +58234,11 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/execution/transfer) +"tYV" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/security/prison/safe) "tYW" = ( /obj/machinery/light/directional/south, /obj/structure/cable, @@ -58021,6 +58272,11 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"tZA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "tZD" = ( /obj/effect/landmark/start/captain, /obj/structure/chair/comfy/brown, @@ -58319,13 +58575,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/theatre) -"udp" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "udD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58533,6 +58782,18 @@ }, /turf/open/floor/carpet, /area/station/service/theater) +"uii" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "uiw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -58715,6 +58976,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) +"ulJ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "ulR" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 @@ -58851,16 +59123,6 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"uoE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "uoM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/secure_closet/brig{ @@ -58978,6 +59240,11 @@ }, /turf/open/floor/iron/white, /area/station/science/explab) +"uqS" = ( +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "uqX" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -59310,19 +59577,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"uvP" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/virology/glass{ - name = "Containment Cells" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/virology) "uwa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59424,6 +59678,12 @@ /obj/structure/plasticflaps, /turf/open/floor/plating, /area/station/cargo/sorting) +"uyb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "uyd" = ( /obj/structure/sign/warning/pods/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59538,6 +59798,14 @@ }, /turf/open/space/basic, /area/space/nearstation) +"uzH" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "uzJ" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -59765,6 +60033,21 @@ }, /turf/open/floor/engine, /area/station/science/explab) +"uDZ" = ( +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Custodial Closet" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/effect/landmark/navigate_destination/janitor, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "uEo" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -59868,6 +60151,14 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"uFi" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "uFq" = ( /obj/machinery/door/window/left/directional/west{ name = "Mass Driver Door"; @@ -59877,19 +60168,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"uFr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) "uFw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -59992,10 +60270,6 @@ /obj/effect/spawner/random/techstorage/ai_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"uGx" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "uGz" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/binary/pump/on/layer4{ @@ -60069,12 +60343,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron, /area/station/service/hydroponics) -"uHt" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "uHA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -60126,19 +60394,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/port) -"uIM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/cryo) "uIP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -60149,6 +60404,20 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"uJd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "uJm" = ( /obj/structure/bookcase{ name = "Forbidden Knowledge" @@ -60375,15 +60644,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/execution/transfer) -"uNd" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "uNl" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -60394,22 +60654,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"uNs" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "XenoPens"; - name = "Xenobiology Lockdown" - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "uND" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -60423,14 +60667,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron, /area/station/service/janitor) -"uNO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "uNS" = ( /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, @@ -60708,6 +60944,15 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/dark, /area/station/medical/storage) +"uTv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "uTH" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -60988,11 +61233,6 @@ "uYi" = ( /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) -"uYj" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "uYl" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -61185,6 +61425,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/engineering/main) +"vaY" = ( +/obj/item/storage/bag/trash, +/obj/machinery/airalarm/directional/west, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/security/prison/safe) "vbf" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -61360,13 +61607,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"veS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "vfa" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -61429,14 +61669,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"vgu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "vgv" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -61760,6 +61992,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vkT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) "vla" = ( /obj/effect/landmark/firealarm_sanity, /turf/open/floor/engine{ @@ -62146,11 +62385,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) -"vsr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "vsG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -62484,6 +62718,17 @@ /obj/effect/spawner/random/bureaucracy/paper, /turf/open/floor/plating, /area/station/maintenance/port) +"vxf" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "vxi" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -62494,17 +62739,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"vxB" = ( -/obj/structure/bed/medical/emergency, -/obj/machinery/camera/directional/west{ - c_tag = "Gateway - Atrium" - }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/command/gateway) "vxC" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -62708,13 +62942,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"vAg" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "vAH" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -62808,13 +63035,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"vCu" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "vCC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -62969,6 +63189,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"vEO" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "vET" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62984,6 +63211,27 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"vFa" = ( +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/start/assistant, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/obj/machinery/button/door/directional/west{ + id = "Toilet3"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "vFb" = ( /obj/structure/lattice/catwalk, /obj/item/binoculars, @@ -63232,6 +63480,21 @@ /obj/structure/light_construct/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"vJA" = ( +/obj/structure/cable, +/obj/machinery/camera/directional/east{ + c_tag = "Xenobiology Lab - Central West"; + network = list("ss13","rd","xeno") + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/button/door/directional/east{ + id = "XenoPens"; + name = "Xenobiology Shutters"; + req_access = list("xenobiology") + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "vJX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -63331,11 +63594,27 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"vLE" = ( +/obj/item/kirbyplants, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "vLM" = ( /obj/structure/table/wood/poker, /obj/item/storage/dice, /turf/open/floor/wood, /area/station/commons/lounge) +"vLW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "vLX" = ( /obj/item/wrench, /turf/open/floor/iron/dark, @@ -63462,10 +63741,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"vOZ" = ( -/obj/machinery/duct, -/turf/closed/wall, -/area/station/commons/fitness/recreation) "vPf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ @@ -63656,15 +63931,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/commons/locker) -"vRk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction/flip, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "vRr" = ( /obj/effect/turf_decal/trimline/brown/corner{ dir = 1 @@ -63773,13 +64039,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"vSU" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "vTf" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ dir = 8 @@ -63904,13 +64163,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"vVz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vVE" = ( /obj/machinery/camera/motion/directional/east{ c_tag = "MiniSat Maintenance"; @@ -64027,22 +64279,23 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/courtroom) +"vWO" = ( +/obj/machinery/door/airlock/wood{ + doorClose = 'sound/effects/doorcreaky.ogg'; + doorOpen = 'sound/effects/doorcreaky.ogg'; + name = "The Gobetting Barmaid" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "vWT" = ( /obj/structure/frame/machine{ anchored = 1 }, /turf/open/floor/circuit/green/off, /area/station/science/research) -"vXg" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/firealarm_sanity, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "vXj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -64407,6 +64660,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wcY" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) +"wcZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "wde" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -64455,10 +64724,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"wdM" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/lobby) "wem" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -64518,6 +64783,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/central) +"weR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "wfm" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -64591,11 +64863,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"wfZ" = ( -/obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "wgf" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/firecloset, @@ -65163,18 +65430,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"wra" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "wrc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) +"wre" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "wrg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65345,6 +65614,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig) +"wtc" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "wto" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65391,6 +65671,11 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) +"wtD" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "wtP" = ( /obj/effect/turf_decal/siding{ dir = 4 @@ -65457,6 +65742,21 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) +"wvu" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "wvB" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -65565,6 +65865,25 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"wxE" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = 24; + pixel_y = -24; + req_access = list("virology") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "wxF" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -65741,16 +66060,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"wAX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/sorting/mail{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "wBe" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 @@ -66102,6 +66411,29 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) +"wGW" = ( +/obj/machinery/mineral/ore_redemption{ + dir = 4; + input_dir = 8; + output_dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Ore Redemption Window" + }, +/obj/machinery/door/window/left/directional/west{ + req_access = list("cargo"); + name = "Cargo Security Window" + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "wHd" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -66163,6 +66495,17 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"wIf" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "wIB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, @@ -66822,15 +67165,6 @@ /obj/item/storage/box/deputy, /turf/open/floor/iron/dark, /area/station/security/office) -"wVy" = ( -/obj/structure/sink/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "wVQ" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, @@ -66962,6 +67296,12 @@ "wYB" = ( /turf/closed/wall, /area/station/hallway/secondary/service) +"wYH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "wZe" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office" @@ -66986,10 +67326,6 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"wZl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "wZo" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -67101,13 +67437,6 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"xbu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "xbY" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -67186,10 +67515,6 @@ "xdJ" = ( /turf/closed/wall, /area/station/medical/surgery/aft) -"xdQ" = ( -/obj/structure/sign/warning/hot_temp/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "xdX" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -67469,6 +67794,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"xhu" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "xhO" = ( /obj/machinery/camera/directional/north{ c_tag = "Science Robotics Workshop"; @@ -67550,6 +67883,10 @@ }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"xje" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xjg" = ( /mob/living/basic/bot/cleanbot/medbay, /turf/open/floor/iron/white, @@ -67597,6 +67934,10 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"xjJ" = ( +/obj/machinery/duct, +/turf/open/floor/carpet/green, +/area/station/maintenance/port/aft) "xkj" = ( /obj/effect/spawner/random/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67874,6 +68215,15 @@ "xpo" = ( /turf/open/floor/carpet, /area/station/commons/dorms) +"xps" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xpB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, @@ -67998,6 +68348,15 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/engine/cult, /area/station/service/library) +"xrl" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "xrr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68010,6 +68369,12 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/cargo/storage) +"xrx" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "xrG" = ( /obj/structure/fireaxecabinet/directional/west, /obj/machinery/camera/directional/west{ @@ -68253,6 +68618,36 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"xvQ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "virology_airlock_interior"; + name = "Virology Interior Airlock" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = 8; + pixel_y = -24; + req_access = list("virology") + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "xvR" = ( /obj/structure/table, /obj/item/paper/guides/jobs/engi/gravity_gen, @@ -69079,6 +69474,15 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"xKx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "xKK" = ( /turf/closed/wall, /area/station/science/research) @@ -69415,6 +69819,21 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) +"xRa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "xRc" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 10 @@ -69428,6 +69847,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"xRG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/port) "xRO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -69491,14 +69915,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xTe" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "qmroom" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "xTg" = ( /obj/structure/chair/comfy{ dir = 4 @@ -69937,6 +70353,20 @@ /obj/machinery/monkey_recycler, /turf/open/floor/iron, /area/station/science/xenobiology) +"yaA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "yaD" = ( /obj/structure/table, /obj/item/stack/rods/fifty, @@ -70244,6 +70674,11 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"yeQ" = ( +/obj/structure/reagent_dispensers/plumbed, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "yeV" = ( /obj/structure/closet/secure_closet/hos, /obj/item/clothing/shoes/cowboy/black, @@ -70413,12 +70848,6 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) -"yhO" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/security/prison) "yia" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -84132,7 +84561,7 @@ jUm cXW cXW bLm -cXW +xjJ uxS uxS fgn @@ -84389,7 +84818,7 @@ uke bLm cXW cXW -cXW +xjJ oBA ruz ehn @@ -84638,7 +85067,7 @@ vXH rHE uGz vXH -dSp +xRG tYi giT jUb @@ -84646,7 +85075,7 @@ esd htr htr dSQ -dbm +aeh dbm ruz uxS @@ -84903,8 +85332,8 @@ xqn uxS fQZ ehv -sBL -iRg +xrx +kRq uxS ehn uxS @@ -85161,7 +85590,7 @@ fQD uxS uxS qKs -cfc +mSO dqN uxS uxS @@ -85418,7 +85847,7 @@ ruz ehn uxS uxS -shK +ntG uxS uxS uxS @@ -85675,7 +86104,7 @@ coJ uxS fNI uxS -bCE +tLr wGz uxS uxS @@ -85693,12 +86122,12 @@ jUb aaa xjH aWC -mHl -vVz -vVz -mtZ -uvP -pWX +sxU +rie +rie +wre +mQf +ulJ eYE hcR gqV @@ -85932,7 +86361,7 @@ hWD etv jUb fYq -wZl +tZA jUb dyd jXO @@ -85950,7 +86379,7 @@ jUb aaa xjH ocN -ark +gbz uGq iam kHk @@ -86189,7 +86618,7 @@ jUb jUb jUb jUb -fxT +vWO jUb jUb jUb @@ -86207,7 +86636,7 @@ jUb lMJ xjH xjH -ffS +tSH xjH xjH xjH @@ -86435,18 +86864,18 @@ njE fHV pOa flN -eTg -oEo -fAo -aAQ -sNr -ltp -dMX -qzf -jrp -ltp -wra -ltp +cwD +mLd +wtc +dog +kge +bsV +vLW +aer +lZI +bsV +mti +bsV jUb cBc aFf @@ -86464,7 +86893,7 @@ jUb aaa aaa rKQ -eSR +loM rKQ aaa aaa @@ -86691,15 +87120,15 @@ sOF fkd eDC pOa -ayH -qgw +dcD +qIR jUb jUb jUb jUb jUb jUb -bbt +gNR jUb jUb jUb @@ -86721,7 +87150,7 @@ jUb aaa aaa rKQ -gjt +rfA rKQ aaa aaa @@ -86932,7 +87361,7 @@ fcq jPE auh crr -dDf +cNl crr qer crr @@ -86949,14 +87378,14 @@ pOa pOa pOa pOa -uOH +hyI jUb xIK bar nBp -dqN -pqz -iuB +xje +cWX +uqS jUb oSy gwK @@ -86978,7 +87407,7 @@ jUb aaa aaa rKQ -iyC +wxE rKQ aaa aaa @@ -87206,12 +87635,12 @@ gXe vwi tql pOa -aDl +sff jUb tWr qKs -dPJ -hBC +lsb +lIS jUb nYy jUb @@ -87235,7 +87664,7 @@ jUb jUb xjH xjH -bVK +xvQ xjH xjH lMJ @@ -87455,15 +87884,15 @@ fjD fjD fjD fjD -vsr -bRG +hmY +weR pOa vZE ivx gDZ lEu pOa -pON +bpM jUb qno fms @@ -87491,8 +87920,8 @@ nsa jUb tzt xjH -sMo -sOM +lix +pmx jXn xjH aaa @@ -87708,11 +88137,11 @@ iOc qwG fjD rEj -vCu +eHo cwc kXa fjD -tmI +cMr fjD pOa cIW @@ -87720,7 +88149,7 @@ tKj tYi vXH pOa -tak +pgA jUb tXX dqN @@ -87748,8 +88177,8 @@ nsa jUb huF xjH -rUU -eSR +cQo +loM vYJ xjH aaa @@ -87965,19 +88394,19 @@ iOc mAs fjD aOo -haE -vsr -fRG -vsr -wfZ -soa -pOa -aFz -sXI +bmx +hmY +dGo +hmY +hoh +eax +nwZ +gbE +iSd sNM tYi pOa -uOH +hyI jUb ilQ oVn @@ -88230,11 +88659,11 @@ fjD hsF pOa vJY -sXI -sXI -rVY -rAa -kDS +iSd +iSd +rfn +sPk +tzr jUb sal gvg @@ -88488,7 +88917,7 @@ oyx pOa xgG vJY -gDZ +ftL wev pOa uOH @@ -88513,15 +88942,15 @@ kZv xNq xLB mbx -wAX -xNq -qvC -nCL -iCX -oGf -sPq -vXg -iTH +mAZ +lmy +xps +jwI +gYR +rim +eln +fHr +gZC bhS tSw tSw @@ -88770,7 +89199,7 @@ jUb jUb jUb jUb -gPY +trC jUb jUb fLe @@ -88778,10 +89207,10 @@ jUb gll azE xxU -bxq -lpN -sWZ -qEf +vxf +qju +eHm +mdA rKf tSw laL @@ -89038,10 +89467,10 @@ erF xTw bhS fqR -mwm +eGg drm tSw -jsq +rpt tSw wxF tSw @@ -89295,7 +89724,7 @@ tzE ucc tSw tSw -rTF +hfJ tSw tSw tSw @@ -89494,7 +89923,7 @@ liU nrB smB tik -sxk +kzE xwa fjw cwY @@ -89552,7 +89981,7 @@ wSv fuA aPq fVa -uFr +yaA vZb tBJ tnG @@ -89751,7 +90180,7 @@ snZ xgx dfk uyf -edN +tFI uya yhL nQR @@ -89789,9 +90218,9 @@ jUb jUb mqz pHv -veS -dGv -bdy +saA +hmo +gXv izl rps eme @@ -89809,7 +90238,7 @@ oBO ieH vDc miX -bfg +sen iAu tBJ cxw @@ -90066,7 +90495,7 @@ tFr nMf bIv miX -hIx +jio qOk tBJ gIB @@ -90257,15 +90686,15 @@ kKO vQT hBo gWz -kQv -cgZ +qFV +gHK hIp ksM lQf wsx dsJ -auO -dtw +qof +pih lzD hIW uyh @@ -90323,7 +90752,7 @@ kHg nMf vDc aRk -nCc +czZ msC tBJ gLY @@ -90512,14 +90941,14 @@ eOl vjg mLp kQP -xTe -xTe +bvX +bvX kQP kQP -wdM -asT +bLV +uii dHi -kkB +wGW lVp bzH bzH @@ -90724,11 +91153,11 @@ tKa tGX aXa iSl -oZL -hmy -oZL -oZL -tub +qkY +bKW +qkY +qkY +uyb eJp bmB aXa @@ -90778,7 +91207,7 @@ cIl qxJ vNp erU -aqG +gyl uuW pPm jHM @@ -90985,7 +91414,7 @@ lds mzm hXQ bVF -fGP +kOu aJK liL kKZ @@ -91025,17 +91454,17 @@ ciE dUd rtz fpV -tQp +lIA bEK ydp cNb -mXO +jAT kUG rVn qxJ sik ryV -mhM +nuk qCx cap nZW @@ -91069,8 +91498,8 @@ cIW pOa mpV izs -uIM -kMo +dOz +gvd grm sSp wvP @@ -91080,7 +91509,7 @@ ckE ckE oJD oPv -nKE +iZX xtu rvb ver @@ -91242,7 +91671,7 @@ kKZ aXa aXa iDe -oUE +aXA aij oGZ aXa @@ -91286,13 +91715,13 @@ wyV iqo wyV cJt -mXO +jAT alu aUm jvv bNN rod -sgZ +lme gav hab uyP @@ -91325,8 +91754,8 @@ kir vXH pOa xYM -aez -ajK +jFF +gtd aSe jeL jxc @@ -91336,7 +91765,7 @@ nKE vSu jtA nVJ -wUQ +bHE ktD bbd rZY @@ -91499,7 +91928,7 @@ vjF kZF aXa aXa -bns +jen aXa aXa aXa @@ -91543,7 +91972,7 @@ wyV wyV wyV oxX -mXO +jAT vdW oac fhB @@ -91553,7 +91982,7 @@ oor oor xma oor -xbu +nlN oor oor oor @@ -91593,8 +92022,8 @@ ekk mtj buN lTR -wUQ -jGG +bHE +tRt agZ rvb mhm @@ -91753,18 +92182,18 @@ wBn iFz eyX qYd -lmT -gtk -yhO -axK -yhO -yhO -crl -pSa -cUf -csb -vjF -ejR +wcY +iBO +env +bOX +env +env +tBV +uzH +xrl +qqJ +jFw +rwy cji vjF ejR @@ -91806,8 +92235,8 @@ upN qxJ ajq vwg -afW -agd +ttD +tqr rBB kJk xJj @@ -91850,7 +92279,7 @@ nKE tMK xgn xfx -wUQ +bHE kui fHC gNl @@ -92010,7 +92439,7 @@ hwZ rGe wtw tcW -tcW +ake axO tcW tcW @@ -92021,7 +92450,7 @@ tcW tcW odh tcW -tcW +ake qAX bhN wBe @@ -92052,16 +92481,16 @@ qme cNg kQP kQP -mXO -mXO +kux +kux kQP kQP kQP kQP rcR -hIu -liX -jUs +sZP +pxK +tAV nDG oor oor @@ -92106,8 +92535,8 @@ bHE vWv hMq hMq -sxf -iMv +gIt +hvo nKE xtu rvb @@ -92267,7 +92696,7 @@ tGX fwf ihb ihb -gtH +iMa ihb ihb mzI @@ -92278,7 +92707,7 @@ wZz wZz wZz oUU -iFz +fyg rDr wIM aCQ @@ -92320,14 +92749,14 @@ udU isA eKG iit -pWb -afW +cIE +aBF kkA fMC uYE iQb hRJ -afW +aBF mnP xOw iOc @@ -92363,7 +92792,7 @@ pSl eUN jpU jpU -vJe +heY qXh ehg hgu @@ -92524,18 +92953,18 @@ qig ocG ihb pGZ -pJu +rsA mAe ihb nyf uZa nEZ wZz -dNC -qOT -swR -tGX -iFz +tYV +vaY +qeq +hkh +fyg oDX dfB aCQ @@ -92577,14 +93006,14 @@ kWP lgg uLE cSu -nPN +rfe oor -afW -afW +aBF +aBF pog oor -afW -afW +aBF +aBF uGU mFo npY @@ -92620,7 +93049,7 @@ ppG nuO xQC ckE -iUJ +gHq bJk mpk pyU @@ -92780,16 +93209,16 @@ dAc lyu qDg ihb -lfm -hOR -uGx +cKG +sGM +rrF ihb pEI jDB ybd wZz tIE -lnM +sgI wZz xwf fBY @@ -92834,14 +93263,14 @@ hSg uTN uVm sSV -alw +eHc anX -nyb +raf nyb xYT nyb nyb -nyb +raf qjH vhB guR @@ -92877,7 +93306,7 @@ sSp jxc jfn jxc -stD +sOd jxc sSp sSp @@ -93131,10 +93560,10 @@ irL oNP rEt xST -wVy +pLz dpI ttE -aPm +ttE sZH wUG eGJ @@ -93388,10 +93817,10 @@ mvY rne bXX iFi -jCn -uHt -uHt -gTn +eUW +iFi +iFi +ksC fod uVx jso @@ -94346,7 +94775,7 @@ qJi mzL hAL nRZ -pGC +dpR jDf gWT vaH @@ -95421,7 +95850,7 @@ jLQ fgS jrk dhX -jLS +tKs gBD twl bcx @@ -95444,7 +95873,7 @@ nBB nbT xxU tFr -ouz +vLE eIO eIO eIO @@ -96245,7 +96674,7 @@ wnW tSw oBD iUm -eNA +qrG hPk xMz xMz @@ -96694,8 +97123,8 @@ tKN lMJ dsQ mZL -jbf -nyr +geA +uFi acf hmq dJX @@ -97708,7 +98137,7 @@ lKZ dNX iVA mlK -vAg +vEO dNX nyV dNX @@ -98284,7 +98713,7 @@ dXQ gmt qsx gmt -uYj +wtD uzk gmt qhx @@ -99795,7 +100224,7 @@ kmZ buL pha sdp -vxB +gSr erl pbS eny @@ -103354,11 +103783,11 @@ ilh tWE edQ ilh -lJm +vFa dIO -hVX +noy dIO -rdT +pGp dIO hxt qRk @@ -103611,11 +104040,11 @@ ilh qhR xAR ilh -tzD +gBt dIO -vSU +rHM dIO -oos +cmy dIO dTv qRk @@ -104105,7 +104534,7 @@ aaa aaa mxn rrg -gMZ +mxn gMZ gMZ gMZ @@ -104125,8 +104554,8 @@ nja icC eCn ilh -dKO -lNf +taB +pta fLz ujM cwF @@ -104194,7 +104623,7 @@ aBX iio kjG gwf -ien +hMf mMX rhe rPA @@ -104362,11 +104791,11 @@ aaa aaa lMJ aaa +aaa ilh -sab +mQe wmf cur -cur jFy cur ilh @@ -104382,8 +104811,8 @@ ilh ilh ilh ilh -rWf -nft +nrI +sWr dIO dIO dIO @@ -104617,11 +105046,11 @@ aaa aaa aaa aaa -lMJ -aaa +szp +szp +szp ilh -mQe -rXX +kim mVr jCj ihX @@ -104639,11 +105068,11 @@ xnU mgE xnU dIO -jlY -vgu -fLz -lvU -nKO +mZB +xKx +kAF +eeu +mGV dIO aqa rNJ @@ -104875,12 +105304,12 @@ lMJ lMJ lMJ szp -szp -ilh +eYg +qts ilh ipG gKc -cur +mQe vTf mVp ilh @@ -104897,7 +105326,7 @@ yfw eek wst mPE -knf +dHu gGf dIO dIO @@ -105132,8 +105561,8 @@ aaa aaa aaa nvn -lLw -ePA +nbQ +cHZ ilh gfe aDR @@ -105389,7 +105818,7 @@ iHc iHc aag aag -vOZ +szp vwp ilh ilh @@ -105444,14 +105873,14 @@ fGH fhQ sFB mal -rFO +wIf pmZ qdI ttF sRY wDh uIs -btn +jYw gsr pUA wFM @@ -105651,7 +106080,7 @@ peF liO sSs gkM -aeA +plL uKL uKL mKu @@ -106733,7 +107162,7 @@ cfA mqu mJk itg -tEy +eBY nEB uIs bjl @@ -107252,7 +107681,7 @@ tQC gsP phS huG -rnt +baR ydS kCZ nKI @@ -107489,7 +107918,7 @@ xww xww aEr sDs -uoE +qNX obG gUe yks @@ -107772,10 +108201,10 @@ foB siz lKp unL -laf -aJn -aJn -oZZ +rsF +xhu +xhu +wvu hWx ekG tUn @@ -108026,13 +108455,13 @@ huG gPq wYB qlL -siz -hxz +sFn +iZI unL -uNd +ecL unL unL -gpv +uDZ unL tUn tUn @@ -108283,13 +108712,13 @@ huG dhs wYB uXS -txP +oOy bnE unL -kTZ +cFq unL iMF -guI +lTc uND slc tUn @@ -108540,13 +108969,13 @@ unL aLu unL xII -ltX +hsq kbR vOK -pnx +saO unL kbN -gXd +leI szJ heS tUn @@ -108797,14 +109226,14 @@ unL gmi unL unL -pNf +hBu unL unL -fGW +hgi unL vtI -mma -iMQ +vkT +lfU rAo tUn iLn @@ -109054,10 +109483,10 @@ nGo aBM unL lPy -vRk -aJn -fhA -gub +akb +xhu +bAp +qxj unL gjF sjB @@ -109307,13 +109736,13 @@ unL unL wOF esH -pdx +kna xcO -aXE -tXk -itW +poG +ptP +lRY kGv -izp +xZb fWA fWA mhl @@ -109567,10 +109996,10 @@ lFo dQy pDR unL -hLs -enf +unL +eyK hCl -aJm +wYH hum jCx cZF @@ -109824,10 +110253,10 @@ unL unL unL unL -xZb -fFq +nmX +mdO izp -jJk +goZ fWA kBQ lWq @@ -110081,8 +110510,8 @@ uxt tcn iOm unL -mEx -mWA +yeQ +ttY isl fWA fWA @@ -110597,7 +111026,7 @@ hCl mAJ dXe xrW -xdQ +cig hum tSY jKA @@ -111310,7 +111739,7 @@ hMQ qXB qXB kpI -gEF +cWx qcP wrn qXB @@ -111652,7 +112081,7 @@ aaa aaa wmL apS -qkq +aas ooz wmL aaa @@ -111909,7 +112338,7 @@ aaa aaa wmL cvO -uNO +fjO hUd uWk aaa @@ -112166,7 +112595,7 @@ aaa aaa wmL jkX -frs +oRL dFo wmL aaa @@ -112378,7 +112807,7 @@ dFH ygb pEG cAj -iRw +aWS peM wUM cZw @@ -112423,7 +112852,7 @@ oMA lSw wmL gUS -qBo +pUB gUS wmL lSw @@ -112680,7 +113109,7 @@ oMA eYu agN bXs -tLc +bvg juH pJA hLJ @@ -112937,7 +113366,7 @@ myr xfm nHG hjw -bqJ +gMN hzL wNO tml @@ -113194,7 +113623,7 @@ vOz tsy sRa ppC -twu +hcH mKD hxY nae @@ -113451,7 +113880,7 @@ ePT syV jsi eoZ -jjm +xRa nui wWV onD @@ -113708,7 +114137,7 @@ jlU jlU rsz lVB -bsE +hXZ uHD hEw jlU @@ -113965,7 +114394,7 @@ plp gog fUx pst -fkk +caK vuK yag hFz @@ -114222,7 +114651,7 @@ mtu jfS bQQ lVB -oWa +ixA iWc ces elm @@ -114479,7 +114908,7 @@ dVv gog jjj jNo -gAH +uJd klK aDQ hFz @@ -114736,7 +115165,7 @@ iTQ vGq avx vBf -uNs +iGL tIP qQJ vGq @@ -114987,16 +115416,16 @@ hbK hbK rMu xiL -iiH +mrq fdZ mMK mMK mMK mMK -jxH +dni tMI pwZ -fdZ +gyz fdZ fdZ jvX @@ -115250,16 +115679,16 @@ amV vVx kyh iwO -pQj -jzw -thT -jzw -sie -pgM -qiD -nYL -ddK -hAN +tXj +omK +vJA +omK +fae +wcZ +ozN +oay +mDv +qgr wrc aaa aaa @@ -115516,7 +115945,7 @@ xVu idA xiL xiL -lmn +gWr wrc aaa aaa @@ -115773,7 +116202,7 @@ oQJ xlH mCj xiL -lmn +gWr hbK aaa aaa @@ -116030,7 +116459,7 @@ pDl uYP ljF xiL -lmn +gWr wrc lMJ lMJ @@ -116287,7 +116716,7 @@ gkC xlH mtu xiL -lmn +gWr hbK aaa aaa @@ -116544,7 +116973,7 @@ xVu idA xiL xiL -lmn +gWr wrc aaa aaa @@ -116800,8 +117229,8 @@ psc eTI rKg xiL -lmn -lmn +gWr +gWr wrc aaa aaa @@ -117057,7 +117486,7 @@ wFy ohD bZb xiL -lmn +gWr hbK hbK lMJ @@ -117314,7 +117743,7 @@ toM eOP hWa xiL -lmn +gWr wrc aaa aaa @@ -117571,7 +118000,7 @@ fff mtu ljF xiL -lmn +gWr wrc aaa aaa @@ -117828,7 +118257,7 @@ fff mtu lWM xiL -lmn +gWr hbK lMJ lMJ @@ -118085,7 +118514,7 @@ xiL xiL xiL xiL -lmn +gWr hbK aaa aaa @@ -118339,10 +118768,10 @@ mCu kgW jlU xiL -qxr -lmn -lmn -hAN +jAq +gWr +gWr +qgr hbK aaa aaa @@ -118596,7 +119025,7 @@ xkv nET jlU iOJ -lmn +gWr rDf rDf utD @@ -118853,7 +119282,7 @@ nnc hdy aWp eSb -udp +tuO wHd uLa hbK @@ -119110,7 +119539,7 @@ kcu kcu jlU hbK -mTg +sGR hbK hbK hbK @@ -119366,9 +119795,9 @@ gyK kcu kcu jlU -qgn -mCV -wyo +gEZ +kgR +uTv hbK aaa aaa @@ -119623,9 +120052,9 @@ jQz nJr kcu jlU +lmC +oJB lUS -pHt -rDf hbK aaa aaa diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 1351c9d86948..8789106bd6ad 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -557,6 +557,7 @@ /obj/machinery/mech_bay_recharge_port{ dir = 2 }, +/obj/machinery/airalarm/directional/east, /turf/open/floor/plating, /area/mine/mechbay) "di" = ( @@ -736,6 +737,7 @@ dir = 4 }, /obj/machinery/light/directional/west, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/edge{ dir = 4 }, @@ -912,6 +914,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/mine/production) "fD" = ( @@ -1184,6 +1187,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) "gM" = ( @@ -1238,6 +1242,7 @@ /obj/structure/cable, /obj/machinery/light/directional/south, /obj/effect/turf_decal/trimline/red/filled/line, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark/smooth_edge{ dir = 1 }, @@ -1346,6 +1351,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, +/obj/machinery/wall_healer/directional/north, /turf/open/floor/iron/white, /area/mine/medical) "hD" = ( @@ -2016,6 +2022,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/smooth_edge, /area/mine/eva) "lh" = ( @@ -2217,6 +2224,7 @@ dir = 8 }, /obj/machinery/light/directional/east, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/mine/lounge) "lP" = ( @@ -2650,6 +2658,7 @@ /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/tile/brown/fourcorners, /obj/machinery/light/directional/west, +/obj/machinery/wall_healer/directional/west, /turf/open/floor/iron/dark, /area/mine/production) "nl" = ( @@ -2908,6 +2917,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 }, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/smooth_edge{ dir = 4 }, @@ -3630,7 +3640,6 @@ /area/mine/cafeteria) "sX" = ( /obj/machinery/mechpad, -/obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 9 }, @@ -3731,6 +3740,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white/smooth_corner, /area/mine/medical) "tE" = ( @@ -3818,6 +3828,10 @@ /obj/item/crowbar/large/emergency, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"uo" = ( +/obj/structure/fluff/minepost, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "up" = ( /obj/structure/railing{ dir = 1 @@ -4206,6 +4220,7 @@ /obj/effect/turf_decal/tile/bar/opposingcorners{ dir = 1 }, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron/checker, /area/mine/cafeteria) "wr" = ( @@ -4282,6 +4297,16 @@ /obj/item/seeds/banana, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"wT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "wU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -4328,6 +4353,7 @@ dir = 10 }, /obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/mine/hydroponics) "xt" = ( @@ -4587,6 +4613,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) "yV" = ( @@ -5625,8 +5652,15 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) +"Gi" = ( +/obj/item/stack/cable_coil/cut, +/turf/open/misc/asteroid/basalt/lava_land_surface{ + icon_state = "basalt_dug" + }, +/area/lavaland/surface/outdoors) "Gl" = ( /obj/item/reagent_containers/cup/glass/colocup, /turf/open/misc/asteroid/basalt/lava_land_surface, @@ -5900,6 +5934,8 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, /turf/open/floor/iron/dark/smooth_edge{ dir = 8 }, @@ -6414,6 +6450,7 @@ /obj/item/mining_scanner, /obj/item/flashlight, /obj/item/clothing/glasses/meson, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/mine/storage/public) "Kp" = ( @@ -6558,6 +6595,7 @@ /obj/effect/turf_decal/trimline/red/filled/mid_joiner{ dir = 8 }, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/textured_edge{ dir = 4 }, @@ -6758,6 +6796,7 @@ "Mc" = ( /obj/structure/chair/wood/wings, /obj/machinery/light/small/directional/east, +/obj/item/radio/intercom/directional/east, /turf/open/floor/carpet/neon/simple/red/nodots, /area/mine/cafeteria) "Me" = ( @@ -7004,6 +7043,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/mine/laborcamp/production) +"NC" = ( +/obj/structure/gulag_vent, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "NE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7349,6 +7392,7 @@ dir = 4 }, /obj/machinery/light/small/directional/east, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron/textured_edge{ dir = 8 }, @@ -7903,6 +7947,16 @@ }, /turf/open/floor/iron/dark/textured_large, /area/mine/laborcamp/security) +"SI" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "SL" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -8574,7 +8628,6 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "WJ" = ( -/obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 @@ -8947,6 +9000,13 @@ dir = 1 }, /area/mine/laborcamp/quarters) +"YD" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/mine/production) "YF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9034,6 +9094,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/mine/cafeteria) "Zp" = ( @@ -9130,6 +9191,7 @@ /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) "ZN" = ( +/obj/structure/cable, /turf/open/floor/iron/smooth, /area/mine/laborcamp/production) "ZP" = ( @@ -19932,7 +19994,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -20188,9 +20250,9 @@ uU uU uU uU -uU -uU -uU +pU +NC +pU uU uU uU @@ -20446,7 +20508,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -21216,8 +21278,8 @@ uU uU uU uU -uU -uU +uo +pU uU uU uU @@ -21731,7 +21793,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -22245,7 +22307,7 @@ uU uU uU uU -pU +SI uU uU uU @@ -22501,7 +22563,7 @@ uU uU uU uU -pU +uo pU pU uU @@ -22759,7 +22821,7 @@ uU uU pU pU -pU +Gi pU pU uU @@ -23016,7 +23078,7 @@ pU pU pU tL -pU +wT pV pU pU @@ -49223,7 +49285,7 @@ RY RY dQ Cg -lb +YD pK Ob IL diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index 511b9debe8c1..03adb0784f5f 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -1951,10 +1951,6 @@ }, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) -"aot" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/lower) "aou" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 @@ -2681,6 +2677,30 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) +"aul" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south{ + name = "Cargo Trade Desk"; + req_access = list("shipping") + }, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "aup" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -5448,26 +5468,6 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/service/janitor) -"aQN" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south{ - name = "Cargo Trade Desk"; - req_access = list("shipping") - }, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "aQS" = ( /obj/structure/cable, /obj/structure/sign/poster/random/directional/north, @@ -8153,6 +8153,25 @@ "bmu" = ( /turf/open/floor/glass/reinforced, /area/station/hallway/primary/fore) +"bmz" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/brown/corner, +/obj/effect/turf_decal/siding/brown{ + dir = 1 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/machinery/button/door/directional/north{ + name = "Cargo Lockdown"; + req_access = list("cargo"); + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "bmA" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 1 @@ -9688,6 +9707,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"byI" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/table/reinforced/rglass, +/obj/effect/turf_decal/trimline/blue/line, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/computer/security/telescreen/cmo/directional/north, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "byU" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -11776,6 +11809,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"bMy" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "bMT" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -13152,14 +13202,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/small, /area/station/engineering/main) -"bXO" = ( -/obj/machinery/vending/medical, -/obj/effect/turf_decal/siding/dark{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/dark/textured, -/area/station/medical/storage) "bXP" = ( /obj/machinery/door/airlock/medical{ name = "Padded Cell"; @@ -13995,6 +14037,20 @@ dir = 8 }, /area/station/maintenance/port/central) +"ceC" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white/herringbone, +/area/station/commons/toilet/restrooms) "ceJ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -14591,6 +14647,38 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/kitchen/diner) +"cjE" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/storage/wallet{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/gps{ + gpstag = "QM0"; + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/coin/gold{ + pixel_x = 3 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/button/door/directional/north{ + name = "Cargo Lockdown"; + req_access = list("cargo"); + id = "cargolockdown"; + pixel_x = -7 + }, +/obj/machinery/button/door/directional/north{ + pixel_y = 24; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown"; + req_access = list("cargo"); + pixel_x = 8 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "cjI" = ( /obj/effect/turf_decal/tile/purple, /obj/machinery/disposal/bin, @@ -14885,6 +14973,23 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) +"cmB" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/wall_healer/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/abandoned) "cmD" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -16565,14 +16670,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"cyE" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/lobby) +"cyI" = ( +/obj/effect/turf_decal/trimline/yellow, +/obj/machinery/light/floor, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "cyJ" = ( /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 8 @@ -17304,6 +17407,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cEr" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/obj/machinery/duct, +/turf/open/floor/iron/dark/diagonal, +/area/station/commons/toilet/restrooms) "cEA" = ( /obj/effect/turf_decal/trimline/dark/end{ dir = 8 @@ -18384,6 +18496,15 @@ }, /turf/open/floor/iron/dark/textured, /area/station/maintenance/disposal/incinerator) +"cMB" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "cMN" = ( /obj/effect/turf_decal/siding/dark{ dir = 1 @@ -18411,23 +18532,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/cargo/lobby) -"cMW" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/vending/wallmed/directional/south, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/obj/effect/spawner/random/maintenance, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/abandoned) "cMY" = ( /obj/effect/turf_decal/siding/thinplating_new/dark, /obj/effect/turf_decal/trimline/green/filled/line, @@ -22068,6 +22172,19 @@ "doy" = ( /turf/closed/wall, /area/station/security/prison/workout) +"doA" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "doC" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -22759,6 +22876,20 @@ /obj/machinery/digital_clock/directional/west, /turf/open/floor/iron/white/textured, /area/station/science/circuits) +"dtz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "dtA" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -23712,12 +23843,6 @@ }, /turf/open/floor/iron/white/small, /area/station/science/research) -"dAN" = ( -/obj/effect/turf_decal/siding/white/corner, -/obj/effect/turf_decal/trimline/green/line, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/checker, -/area/station/hallway/primary/port) "dAO" = ( /obj/machinery/door/poddoor/shutters{ id = "teleportershutters"; @@ -24993,6 +25118,20 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"dLN" = ( +/obj/machinery/computer/cargo/request{ + dir = 4 + }, +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "dLQ" = ( /obj/machinery/holopad, /turf/open/floor/iron/dark, @@ -26601,14 +26740,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark, /area/station/security/processing) -"dXM" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet3"; - name = "Unit 3" - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/dark/diagonal, -/area/station/commons/toilet/restrooms) "dXP" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -26696,6 +26827,31 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/lower) +"dYo" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "dYp" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/sofa/corp/left{ @@ -26874,13 +27030,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/lower) -"dZC" = ( -/obj/effect/turf_decal/siding/dark_red, -/obj/machinery/vending/wallmed/directional/north, -/obj/item/kirbyplants/random, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/security/execution/transfer) "dZF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -31347,6 +31496,19 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) +"eHN" = ( +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/herringbone, +/area/station/commons/toilet/restrooms) "eHQ" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 9 @@ -32092,10 +32254,6 @@ /obj/structure/sign/poster/official/twenty_four_seven/directional/north, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"eNg" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/sorting) "eNo" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -36018,14 +36176,6 @@ }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/starboard/central) -"frK" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/dark/diagonal, -/area/station/commons/toilet/restrooms) "frS" = ( /obj/item/clothing/suit/caution, /obj/structure/sign/warning/biohazard/directional/north, @@ -40113,6 +40263,19 @@ /obj/effect/turf_decal/siding/thinplating_new/dark/corner, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) +"fWm" = ( +/obj/effect/turf_decal/siding/thinplating_new/light/corner, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white/herringbone, +/area/station/commons/toilet/restrooms) "fWp" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 10 @@ -44595,6 +44758,20 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron/dark/small, /area/station/engineering/atmos) +"gEn" = ( +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white, +/area/station/science/lower) "gEr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45241,6 +45418,22 @@ /obj/structure/cable, /turf/open/floor/carpet/blue, /area/station/service/barber) +"gJF" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/cargo/lower) "gJT" = ( /obj/structure/lattice, /turf/open/space/basic, @@ -45979,25 +46172,6 @@ dir = 1 }, /area/station/maintenance/aft/lesser) -"gPe" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/storage/wallet{ - pixel_x = 4; - pixel_y = 7 - }, -/obj/item/gps{ - gpstag = "QM0"; - pixel_x = -7; - pixel_y = 4 - }, -/obj/item/coin/gold{ - pixel_x = 3 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "gPj" = ( /obj/structure/railing/corner{ dir = 4 @@ -47368,6 +47542,13 @@ }, /turf/open/floor/wood/parquet, /area/station/commons/lounge) +"gZF" = ( +/obj/effect/turf_decal/siding/dark_red, +/obj/machinery/wall_healer/directional/north, +/obj/item/kirbyplants/random, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/security/execution/transfer) "gZK" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/cargo) @@ -47728,6 +47909,18 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"hcf" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "hci" = ( /obj/structure/railing/corner, /obj/effect/decal/cleanable/dirt, @@ -47891,17 +48084,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"hdB" = ( -/obj/effect/turf_decal/siding/thinplating_new/light/corner{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/light/corner, -/turf/open/floor/iron/white/herringbone, -/area/station/commons/toilet/restrooms) "hdD" = ( /obj/structure/flora/grass/jungle/b/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -47992,27 +48174,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/plating, /area/station/engineering/atmos) -"hej" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/door/window/left/directional/south{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "hes" = ( /obj/structure/railing{ dir = 1 @@ -50078,19 +50239,6 @@ /obj/effect/landmark/firealarm_sanity, /turf/open/floor/plating/elevatorshaft, /area/station/security/brig/lower) -"htR" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/light/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/light/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white/herringbone, -/area/station/commons/toilet/restrooms) "htW" = ( /obj/effect/spawner/random/trash/grille_or_waste, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50274,17 +50422,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white/small, /area/station/science/lobby) -"hvE" = ( -/obj/effect/turf_decal/siding/brown{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/photocopier/prebuilt, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "hvR" = ( /obj/effect/turf_decal/trimline/green/corner{ dir = 4 @@ -50588,14 +50725,6 @@ dir = 10 }, /area/station/commons/locker) -"hxC" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" - }, -/obj/effect/turf_decal/tile/dark/diagonal_edge, -/turf/open/floor/iron/dark/diagonal, -/area/station/commons/toilet/restrooms) "hxD" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 4 @@ -53816,22 +53945,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"hWH" = ( -/obj/effect/turf_decal/siding/brown{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/cargo/lower) "hWJ" = ( /obj/machinery/holopad/secure, /obj/effect/turf_decal/box/white{ @@ -54960,12 +55073,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"ifb" = ( -/obj/effect/turf_decal/trimline/yellow, -/obj/machinery/light/floor, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "ifj" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -55419,6 +55526,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/central) +"ija" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "ijk" = ( /obj/machinery/airalarm/directional/south, /obj/structure/reagent_dispensers/watertank/high, @@ -55747,15 +55866,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/large, /area/station/service/theater) -"ilC" = ( -/obj/structure/table/optable, -/obj/machinery/vending/wallmed/directional/north, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/siding{ - dir = 5 - }, -/turf/open/floor/iron/white/herringbone, -/area/station/command/heads_quarters/cmo) "ilH" = ( /obj/structure/table/glass, /obj/item/storage/box/syringes, @@ -57453,6 +57563,17 @@ /obj/structure/cable, /turf/open/floor/iron/dark/corner, /area/station/commons/dorms) +"iyy" = ( +/obj/machinery/light_switch/directional/west, +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/obj/machinery/wall_healer/directional/north, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 9 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/white, +/area/station/security/medical) "iyB" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -63905,6 +64026,32 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"jyt" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/item/folder/yellow{ + pixel_y = 2 + }, +/obj/item/paper, +/obj/item/pen{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/machinery/door/window/right/directional/west{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "jyw" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -66989,6 +67136,20 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/white, /area/station/science/research) +"jVh" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/photocopier/prebuilt, +/obj/machinery/light_switch/directional/south{ + pixel_x = 9 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "jVj" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -67237,6 +67398,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) +"jXy" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/office) "jXA" = ( /obj/effect/turf_decal/delivery/white{ color = "#52B4E9" @@ -67408,27 +67578,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"jYT" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/item/folder/yellow{ - pixel_y = 2 - }, -/obj/item/paper, -/obj/item/pen{ - pixel_x = 1; - pixel_y = 1 - }, -/obj/machinery/door/window/right/directional/west{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "jYY" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 1 @@ -67594,23 +67743,6 @@ /obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark/small, /area/station/command/gateway) -"kal" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/obj/machinery/computer/crew{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "kam" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /obj/structure/cable, @@ -67889,6 +68021,20 @@ color = "#3d3e42" }, /area/station/engineering/atmos) +"kcl" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/mining/glass{ + id_tag = "cargooffice"; + name = "Deliveries" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "kcn" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70479,6 +70625,17 @@ }, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/aisat/exterior) +"ktO" = ( +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white/herringbone, +/area/station/commons/toilet/restrooms) "ktW" = ( /obj/structure/chair/sofa/bench/right, /obj/effect/turf_decal/tile/neutral{ @@ -73933,12 +74090,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"kSZ" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/bot_white, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/dark/small, -/area/station/hallway/secondary/command) "kTa" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/broken_flooring/singular/directional/east, @@ -75700,20 +75851,12 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron/dark, /area/station/medical/virology) -"ljq" = ( -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/white, -/area/station/science/lower) +"ljp" = ( +/obj/effect/turf_decal/siding/white/corner, +/obj/effect/turf_decal/trimline/green/line, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/checker, +/area/station/hallway/primary/port) "ljt" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -77407,15 +77550,6 @@ dir = 1 }, /area/station/security/prison) -"lve" = ( -/obj/machinery/computer/cargo/request{ - dir = 4 - }, -/obj/structure/window/spawner/directional/west, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "lvf" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -77488,6 +77622,15 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"lvE" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/obj/machinery/duct, +/turf/open/floor/iron/dark/diagonal, +/area/station/commons/toilet/restrooms) "lvH" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 8 @@ -80732,6 +80875,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) +"lXU" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/bot_white, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/dark/small, +/area/station/hallway/secondary/command) "lXW" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 5 @@ -81381,14 +81530,6 @@ /obj/structure/table/glass, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"mdl" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/hedge, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "mdm" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, @@ -83454,6 +83595,12 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/explab) +"mtI" = ( +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/hallway/secondary/service) "mud" = ( /obj/effect/turf_decal/trimline/blue/line, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -84789,26 +84936,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"mDV" = ( -/obj/machinery/light/directional/west, -/obj/structure/bed/medical/emergency, -/obj/effect/turf_decal/bot_white{ - color = "#52B4E9" - }, -/obj/machinery/vending/wallmed/directional/west{ - pixel_x = -26 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/siding{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "mDW" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -91761,6 +91888,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/security/checkpoint/science) +"nHL" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/hedge, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "nHR" = ( /obj/structure/railing{ dir = 4 @@ -94931,22 +95066,6 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/medical/treatment_center) -"ofk" = ( -/obj/structure/window/spawner/directional/east, -/obj/effect/turf_decal/delivery, -/obj/machinery/disposal/delivery_chute{ - dir = 8; - pixel_x = 2 - }, -/obj/machinery/door/window/right/directional/west{ - req_access = list("shipping"); - name = "Crate Security Door" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "ofq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -95528,6 +95647,18 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/service/library/lounge) +"oju" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "ojw" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -96797,10 +96928,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/textured, /area/station/maintenance/fore/lesser) -"osZ" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/storage) "otc" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -97181,17 +97308,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"ovQ" = ( -/obj/machinery/light_switch/directional/west, -/obj/structure/table/glass, -/obj/machinery/computer/records/medical/laptop, -/obj/machinery/vending/wallmed/directional/north, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 9 - }, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/white, -/area/station/security/medical) "ovR" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -98596,20 +98712,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"oGT" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "oGW" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ @@ -100226,16 +100328,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) -"oRq" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/mining/glass{ - id_tag = "cargooffice"; - name = "Deliveries" - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "oRD" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -102047,16 +102139,6 @@ }, /turf/open/floor/iron/white/small, /area/station/medical/medbay/lobby) -"pel" = ( -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/herringbone, -/area/station/commons/toilet/restrooms) "pem" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, @@ -105767,6 +105849,33 @@ /obj/effect/landmark/start/chief_engineer, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/ce) +"pEo" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/west{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/folder/yellow{ + pixel_y = 2 + }, +/obj/item/paper, +/obj/item/pen{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "pEp" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -106405,21 +106514,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/gravity_generator) -"pJD" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/siding/brown/corner, -/obj/effect/turf_decal/siding/brown{ - dir = 1 - }, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "pJE" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -106461,6 +106555,26 @@ /obj/effect/turf_decal/siding/thinplating_new/dark, /turf/open/floor/iron/dark/textured_large, /area/station/maintenance/starboard/central) +"pJV" = ( +/obj/machinery/light/directional/west, +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/machinery/wall_healer/directional/west{ + pixel_x = -26 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "pKf" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/line{ @@ -106547,6 +106661,18 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"pKS" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "pKT" = ( /obj/structure/closet/crate/freezer/blood, /obj/effect/turf_decal/weather/snow/corner{ @@ -107487,20 +107613,6 @@ dir = 1 }, /area/station/engineering/atmos) -"pRT" = ( -/obj/machinery/vending/wallmed/directional/west{ - pixel_x = -26 - }, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/bot_white{ - color = "#52B4E9" - }, -/obj/structure/bed/medical/emergency, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/railing, -/obj/effect/turf_decal/siding, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "pRX" = ( /obj/structure/chair/sofa/bench/right, /turf/open/floor/glass/reinforced, @@ -108684,18 +108796,6 @@ dir = 8 }, /area/station/maintenance/starboard/central) -"qbL" = ( -/obj/effect/turf_decal/siding/thinplating_new/light/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/thinplating_new/light/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 4 - }, -/turf/open/floor/iron/white/herringbone, -/area/station/commons/toilet/restrooms) "qbN" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -110730,22 +110830,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"qsm" = ( -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/mineral/ore_redemption{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/door/window/right/directional/north{ - name = "Cargo Security Window"; - req_access = list("cargo") - }, -/obj/machinery/door/window/left/directional/south{ - name = "Ore Redemtion Window" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "qsv" = ( /obj/structure/rack, /obj/item/storage/fish_case/random, @@ -112870,15 +112954,6 @@ dir = 1 }, /area/station/science/ordnance) -"qIx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/lobby) "qIC" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -114021,10 +114096,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark/small, /area/station/maintenance/starboard/central) -"qRg" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/office) "qRh" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -115152,6 +115223,20 @@ /obj/effect/turf_decal/trimline/red/corner, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"rbi" = ( +/obj/machinery/wall_healer/directional/west{ + pixel_x = -26 + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/railing, +/obj/effect/turf_decal/siding, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "rbo" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner{ dir = 1 @@ -117048,6 +117133,26 @@ /obj/machinery/recharger, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/security/armory) +"rpr" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/mineral/ore_redemption{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/window/right/directional/north{ + name = "Cargo Security Window"; + req_access = list("cargo") + }, +/obj/machinery/door/window/left/directional/south{ + name = "Ore Redemtion Window" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/storage) "rpt" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ @@ -125068,6 +125173,18 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/plating, /area/station/cargo/storage) +"sBN" = ( +/obj/effect/turf_decal/siding/thinplating_new/light/corner{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/light/corner, +/obj/machinery/duct, +/turf/open/floor/iron/white/herringbone, +/area/station/commons/toilet/restrooms) "sBO" = ( /obj/structure/chair/sofa/bench/solo{ dir = 4 @@ -125302,22 +125419,6 @@ }, /turf/open/floor/iron/white, /area/station/science/lower) -"sCX" = ( -/obj/effect/turf_decal/siding/dark, -/obj/effect/turf_decal/trimline/dark_blue/filled/line, -/obj/structure/rack, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/suture, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/syringe/multiver, -/obj/machinery/vending/wallmed/directional/south, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/command/gateway) "sDa" = ( /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 8 @@ -125383,6 +125484,27 @@ }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/port) +"sDJ" = ( +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/delivery, +/obj/machinery/disposal/delivery_chute{ + dir = 8; + pixel_x = 2 + }, +/obj/machinery/door/window/right/directional/west{ + req_access = list("shipping"); + name = "Crate Security Door" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "sDL" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /obj/structure/cable, @@ -126002,6 +126124,15 @@ /obj/structure/cable, /turf/open/floor/glass/reinforced/airless, /area/space/nearstation) +"sIm" = ( +/obj/structure/table/optable, +/obj/machinery/wall_healer/directional/north, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/siding{ + dir = 5 + }, +/turf/open/floor/iron/white/herringbone, +/area/station/command/heads_quarters/cmo) "sIr" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -126032,12 +126163,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/execution/education) -"sIQ" = ( -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/hallway/secondary/service) "sIT" = ( /obj/structure/railing/corner{ dir = 1 @@ -129981,16 +130106,6 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron/dark/small, /area/station/medical/storage) -"tnJ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/lobby) "tnR" = ( /obj/machinery/holopad, /obj/machinery/duct, @@ -130018,20 +130133,6 @@ /obj/effect/turf_decal/trimline/dark/corner, /turf/open/floor/iron/dark/textured_corner, /area/station/science/genetics) -"tog" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/structure/table/reinforced/rglass, -/obj/effect/turf_decal/trimline/blue/line, -/obj/machinery/camera/autoname/directional/north, -/obj/machinery/computer/security/telescreen/cmo/directional/north, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "toh" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -133334,13 +133435,6 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/glass/reinforced, /area/station/maintenance/starboard/central) -"tLi" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "tLj" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -136105,6 +136199,20 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"uhe" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "uhl" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -137433,6 +137541,12 @@ }, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) +"usU" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "utd" = ( /obj/effect/turf_decal/trimline/yellow/corner{ dir = 8 @@ -137608,6 +137722,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/science/xenobiology/hallway) +"uud" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/structure/rack, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/syringe/multiver, +/obj/machinery/wall_healer/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/gateway) "uue" = ( /obj/machinery/door/airlock/security/glass{ name = "Holding Area" @@ -145244,12 +145374,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/gateway) -"vyK" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/spawner/random/vending/colavend, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "vyM" = ( /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 4 @@ -145461,13 +145585,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/small, /area/station/medical/storage) -"vAE" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "vAG" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 1 @@ -148911,13 +149028,6 @@ dir = 4 }, /area/station/commons/dorms) -"wcQ" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "wcX" = ( /obj/structure/hedge, /obj/structure/railing{ @@ -153529,28 +153639,6 @@ /obj/effect/turf_decal/trimline/yellow, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) -"wOs" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/folder/yellow{ - pixel_y = 2 - }, -/obj/item/paper, -/obj/item/pen{ - pixel_x = 1; - pixel_y = 1 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "wOt" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -155334,6 +155422,14 @@ /obj/structure/railing, /turf/open/floor/eighties, /area/station/maintenance/starboard/central) +"xeo" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "xer" = ( /obj/effect/turf_decal/siding{ dir = 9 @@ -156729,6 +156825,14 @@ }, /turf/open/floor/circuit/green, /area/station/maintenance/starboard/fore) +"xoT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lower) "xoU" = ( /obj/effect/turf_decal/siding/thinplating_new/dark, /obj/effect/turf_decal/trimline/red/filled/line, @@ -157175,18 +157279,6 @@ }, /turf/open/floor/iron/white/diagonal, /area/station/service/kitchen) -"xsx" = ( -/obj/effect/turf_decal/siding/thinplating_new/light/corner, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/siding/thinplating_new/light/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/white/herringbone, -/area/station/commons/toilet/restrooms) "xsN" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/turf_decal/bot, @@ -158143,6 +158235,14 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"xAx" = ( +/obj/machinery/vending/medical, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/medical/storage) "xAE" = ( /obj/structure/cable/multilayer/multiz, /obj/structure/railing{ @@ -161277,6 +161377,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) +"xYH" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet3"; + name = "Unit 3" + }, +/obj/effect/turf_decal/tile/dark/diagonal_edge, +/obj/machinery/duct, +/turf/open/floor/iron/dark/diagonal, +/area/station/commons/toilet/restrooms) "xYK" = ( /obj/machinery/computer/cargo, /turf/open/floor/carpet, @@ -178210,7 +178319,7 @@ dPz rob euQ rPv -vyK +usU tKx vdJ qgY @@ -184364,13 +184473,13 @@ vUz cZL bLu rWX -hxC -xsx +lvE +fWm vZy dzU -htR -hdB -dXM +ceC +sBN +xYH fDK ndG dYN @@ -184878,9 +184987,9 @@ bLu bLu bLu wIF -frK -qbL -pel +cEr +eHN +ktO eKC agQ uNP @@ -191282,7 +191391,7 @@ fGC fGC fGC eof -ilC +sIm kEs lnD pAa @@ -194609,7 +194718,7 @@ qfI nJG khu jjE -aot +xoT pni gym gym @@ -194866,7 +194975,7 @@ otm sVX bfM vLw -aot +xoT aFA gym gym @@ -195123,7 +195232,7 @@ qXS vpp sul pQM -aot +xoT ocH gym gym @@ -195881,7 +195990,7 @@ nnP quR lNi oZM -gPe +cjE tDu uxK fLD @@ -197991,7 +198100,7 @@ viw gmA uWg awW -mdl +nHL vyw aww pcR @@ -198199,7 +198308,7 @@ oZM oZM oZM mqG -hWH +gJF gXY osL xnF @@ -201831,7 +201940,7 @@ oyn mLr jkp seD -ljq +gEn mwq sMC upM @@ -203172,7 +203281,7 @@ sgp lbg nVK nEQ -ovQ +iyy dKQ qnH suG @@ -216250,7 +216359,7 @@ ccC ccC uak uak -tog +byI pHI tsk nUp @@ -216507,7 +216616,7 @@ gym gym gym uak -kal +bMy pNr aoh vNa @@ -242986,7 +243095,7 @@ xDF ajW gGl hbN -sIQ +mtI bLu mDH xOa @@ -252238,7 +252347,7 @@ bwC vdN odr hYK -dAN +ljp naa naa sax @@ -253992,7 +254101,7 @@ niR ihf kdm nkZ -bXO +xAx axH rXn pPJ @@ -255820,7 +255929,7 @@ xlX uxU iWJ ykO -cMW +cmB bwC bwC kef @@ -258368,11 +258477,11 @@ nox fVk uVd kCn -pRT +rbi jgD tDe rft -mDV +pJV pAH uVd jxl @@ -259121,7 +259230,7 @@ qUA dcm taD uyZ -hvE +jVh kLa bIz kyi @@ -259888,7 +259997,7 @@ rIW pbw cII nhR -pJD +bmz msE qCQ psU @@ -260145,11 +260254,11 @@ iWr hKn nvZ nhR -jYT -lve -qRg -lve -wOs +jyt +dLN +jXy +dLN +pEo nhR ctL gOk @@ -260914,7 +261023,7 @@ rTA iAO ooF jOJ -osZ +xeo rjC eLU tis @@ -261171,7 +261280,7 @@ hjc bKI bnv ucB -hej +dYo mOv qdC hpR @@ -261428,7 +261537,7 @@ kdb xrb imA cMj -osZ +xeo sFz fWv rFr @@ -261693,7 +261802,7 @@ oJV bES gVb eeb -cyE +ija djg jpJ jpJ @@ -261942,7 +262051,7 @@ qNx cOi kQL nRx -qsm +rpr elV qqn rXz @@ -261950,7 +262059,7 @@ oRg gjS icW sQE -qIx +doA fEj mEs dgt @@ -262207,9 +262316,9 @@ qCw aGT jdi gYc -tnJ +dtz aDo -oGT +uhe yhV aYc aYc @@ -262456,7 +262565,7 @@ fHO uGT qHV qfs -osZ +xeo eAo fkT fIs @@ -262551,7 +262660,7 @@ eHT gFi eeG uWW -ifb +cyI iOj mMr cAe @@ -262713,7 +262822,7 @@ xJz rBD xaJ igb -aQN +aul lIR eAw iQh @@ -262970,7 +263079,7 @@ npt qeJ tIL fWp -osZ +xeo nbr vKV jrq @@ -263743,11 +263852,11 @@ bdz ldU ozs gag -eNg -tLi -ofk -vAE -wcQ +cMB +hcf +sDJ +pKS +oju ybp req prK @@ -264256,7 +264365,7 @@ tAL fBL oiZ kvc -oRq +kcl oNB uWE xus @@ -268199,7 +268308,7 @@ nlQ bAk uyy wYi -dZC +gZF qYy saU iaN @@ -274849,7 +274958,7 @@ xyo xWq eIH exz -kSZ +lXU eNS xjE vcF @@ -283081,7 +283190,7 @@ gJa mQG bqJ eKI -sCX +uud tUn tUn txW diff --git a/_maps/map_files/debug/gateway_test.dmm b/_maps/map_files/debug/gateway_test.dmm index d136530a07bd..83c8511828f7 100644 --- a/_maps/map_files/debug/gateway_test.dmm +++ b/_maps/map_files/debug/gateway_test.dmm @@ -34,7 +34,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/directional/west, /turf/open/indestructible, /area/misc/testroom/gateway_room) "j" = ( diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 0dbf5d65af1f..1d0269d8cb14 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -1222,6 +1222,11 @@ "kS" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) +"kY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics) "lc" = ( /turf/open/floor/engine, /area/station/hallway/secondary/entry) @@ -1444,6 +1449,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/main) +"tj" = ( +/obj/structure/cable, +/obj/machinery/light/directional/east, +/obj/item/gun/energy/floragun, +/obj/item/geneshears, +/turf/open/floor/iron, +/area/station/service/hydroponics) "tn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1559,6 +1571,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) +"vK" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics) "vQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1638,6 +1656,12 @@ /obj/structure/transit_tube/station/dispenser/reverse/flipped, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"xv" = ( +/obj/machinery/vending/hydroseeds{ + all_products_free = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "xD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -1728,6 +1752,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/science) +"zU" = ( +/obj/machinery/hydroponics/constructable/fullupgrade, +/turf/open/floor/iron, +/area/station/service/hydroponics) "zY" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1736,6 +1764,7 @@ /area/station/commons/storage/primary) "Aj" = ( /obj/structure/cable, +/obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/cargo/bitrunning/den) "An" = ( @@ -1792,6 +1821,11 @@ /obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/iron, /area/station/command/bridge) +"BK" = ( +/obj/item/wrench, +/obj/item/plant_analyzer, +/turf/open/floor/iron, +/area/station/service/hydroponics) "BM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -1841,6 +1875,17 @@ /obj/machinery/component_printer, /turf/open/floor/iron/dark, /area/station/science/explab) +"Dd" = ( +/obj/item/shovel/spade{ + pixel_y = 4; + pixel_x = 3 + }, +/obj/item/secateurs, +/obj/item/cultivator{ + pixel_x = -6 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "Df" = ( /obj/machinery/light/directional/east, /obj/item/integrated_circuit/loaded/hello_world, @@ -1984,7 +2029,7 @@ /area/station/engineering/atmos) "GN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 + dir = 1 }, /obj/machinery/light/directional/south, /turf/open/floor/iron, @@ -2098,6 +2143,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"Ju" = ( +/turf/closed/wall/r_wall, +/area/station/service/hydroponics) "JJ" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=4-Southeast"; @@ -2133,6 +2181,12 @@ /obj/machinery/light/directional/south, /turf/open/floor/plating, /area/station/engineering/atmos) +"KW" = ( +/obj/structure/sink/directional/south, +/obj/item/storage/bag/plants, +/obj/item/reagent_containers/cup/watering_can/advanced, +/turf/open/floor/iron, +/area/station/service/hydroponics) "Lb" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -2193,11 +2247,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"Ml" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "My" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -2210,6 +2259,12 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"MH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "MM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -2222,6 +2277,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"MT" = ( +/obj/machinery/vending/hydronutrients{ + all_products_free = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "Nb" = ( /obj/machinery/bci_implanter, /turf/open/floor/iron/dark, @@ -2275,6 +2336,10 @@ /obj/item/stock_parts/power_store/cell/bluespace, /turf/open/floor/iron/dark, /area/station/science/explab) +"Oy" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/iron, +/area/station/service/hydroponics) "OF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2483,7 +2548,6 @@ /area/station/medical/medbay) "SC" = ( /obj/structure/table/reinforced, -/obj/machinery/light/directional/south, /obj/item/bitrunning_debug, /turf/open/floor/iron, /area/station/cargo/bitrunning/den) @@ -2573,6 +2637,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) +"VF" = ( +/obj/machinery/hydroponics/constructable/fullupgrade, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "We" = ( /obj/machinery/newscaster/directional/west, /turf/open/floor/iron, @@ -2672,6 +2743,10 @@ "Yd" = ( /turf/open/floor/iron, /area/station/cargo/bitrunning/den) +"Yg" = ( +/obj/machinery/smartfridge/food, +/turf/open/floor/plating, +/area/station/service/hydroponics) "Ym" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical, @@ -3356,12 +3431,12 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa +Ju +Ju +Ju +Ju +Ju +Ju aa aa aa @@ -3448,12 +3523,12 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa +Ju +MT +xv +BK +zU +Ju aa aa aa @@ -3540,12 +3615,12 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa +Ju +KW +MH +Dd +zU +Ju aa aa aa @@ -3632,12 +3707,12 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa +Ju +Oy +kY +tj +VF +Ju aa aa aa @@ -3724,12 +3799,12 @@ Tj Tj Tj Tj -dY -en -dY -dY -aa -aa +Ju +Yg +vK +Ju +Ju +Ju aa aa aa @@ -3818,7 +3893,7 @@ lc lc wB eh -eh +ax dY aa aa @@ -3910,7 +3985,7 @@ lc lc wB eh -eh +ax en aa aa @@ -4002,7 +4077,7 @@ lc lc wB eh -eh +ax en aa aa @@ -4094,7 +4169,7 @@ lc lc wB eh -eh +ax dY aa aa @@ -4186,7 +4261,7 @@ lc lc wB eh -eh +ax en aa aa @@ -4278,7 +4353,7 @@ lc lc wB eh -eh +ax en aa aa @@ -4369,8 +4444,8 @@ lc lc lc wB -eh -eh +ax +ax en aa aa @@ -4461,7 +4536,7 @@ lc lc lc wB -eh +ax eh dY aa @@ -4553,7 +4628,7 @@ lc lc lc wB -eh +ax eh en aa @@ -4645,7 +4720,7 @@ lc lc lc wB -eh +ax eh en aa @@ -4737,7 +4812,7 @@ lc lc lc wB -eh +ax gv dY aa @@ -4829,7 +4904,7 @@ lc lc lc wB -eh +ax eh en aa @@ -4921,7 +4996,7 @@ lc lc lc wB -eh +ax gF fj aa @@ -5013,7 +5088,7 @@ lc lc lc wB -eh +ax eh en aa @@ -5105,7 +5180,7 @@ lc lc lc wB -eh +ax GN dY aa @@ -5197,8 +5272,8 @@ lc lc lc wB +ax eh -BM en aa aa @@ -5289,8 +5364,8 @@ lc lc lc wB +ax eh -BM en aa aa @@ -5381,8 +5456,8 @@ lc lc lc wB +ax eh -BM en aa aa @@ -5473,8 +5548,8 @@ lc lc lc wB -eh -Ml +ax +gv dY aa aa @@ -5565,8 +5640,8 @@ lc lc lc wB +ax eh -BM en aa aa @@ -5657,8 +5732,8 @@ en en dY wB +ax eh -BM dY dY fn @@ -5749,8 +5824,8 @@ eh eh eV eh +ax eh -BM eh eV eh diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 3c365410c38a..b86f4d60e6bd 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -425,6 +425,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) +"bW" = ( +/obj/structure/filingcabinet/white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ferry) "bZ" = ( /obj/effect/turf_decal/tile/green, /obj/effect/light_emitter/thunderdome, @@ -974,13 +979,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/evacuation/ship) -"eq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet/white, -/obj/effect/turf_decal/bot, -/obj/machinery/status_display/evac/directional/east, -/turf/open/floor/iron, -/area/centcom/central_command_areas/supply) "et" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/directions/engineering{ @@ -1117,12 +1115,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/evacuation/ship) -"eY" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/filingcabinet/white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/ferry) "fa" = ( /obj/machinery/status_display/evac/directional/south, /obj/effect/turf_decal/tile/green{ @@ -2113,12 +2105,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supply) -"ju" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet/white, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/centcom/central_command_areas/supply) "jv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -2500,6 +2486,17 @@ }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/evacuation/ship) +"lj" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fourcolor, +/obj/machinery/wall_healer/directional/north{ + use_power = 0 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/admin) "ln" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/brown/half/contrasted, @@ -2943,11 +2940,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) -"nB" = ( -/obj/structure/filingcabinet/white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/ferry) "nC" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security" @@ -3567,14 +3559,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) -"qn" = ( -/obj/structure/filingcabinet/white, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/supply) "qo" = ( /obj/structure/table/reinforced, /obj/item/folder, @@ -5280,6 +5264,13 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/centcom/tdome/observation) +"xI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet/white, +/obj/effect/turf_decal/bot, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron, +/area/centcom/central_command_areas/supply) "xN" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, @@ -6942,6 +6933,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) +"Fm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet/white, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/centcom/central_command_areas/supply) "Fo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/directions/engineering{ @@ -9233,6 +9230,14 @@ }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/admin) +"Rm" = ( +/obj/structure/filingcabinet/white, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/supply) "Rn" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -9377,6 +9382,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) +"RT" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/filingcabinet/white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ferry) "RV" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs, @@ -9611,6 +9622,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) +"Th" = ( +/obj/structure/filingcabinet/white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/supply) "Tj" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/cup/glass/bottle/whiskey{ @@ -9659,12 +9675,6 @@ }, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"Tq" = ( -/obj/structure/filingcabinet/white, -/obj/machinery/status_display/evac/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/supply) "Ts" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs/cable/zipties, @@ -9805,6 +9815,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin/storage) +"Ud" = ( +/obj/structure/filingcabinet/white, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/supply) "Uf" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -9936,6 +9952,16 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/centcom/central_command_areas/admin/storage) +"UK" = ( +/obj/structure/closet/secure_closet/ert_med, +/obj/machinery/wall_healer/directional/south{ + use_power = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/armory) "UM" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 @@ -10079,16 +10105,6 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) -"Vu" = ( -/obj/structure/closet/secure_closet/ert_med, -/obj/machinery/vending/wallmed/directional/south{ - use_power = 0 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/armory) "Vv" = ( /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 4 @@ -10522,11 +10538,6 @@ }, /turf/open/floor/wood, /area/centcom/central_command_areas/admin) -"XA" = ( -/obj/structure/filingcabinet/white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/supply) "XC" = ( /obj/machinery/vending/snack, /obj/effect/turf_decal/delivery, @@ -10969,17 +10980,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) -"ZT" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/obj/machinery/vending/wallmed/directional/north{ - use_power = 0 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/admin) "ZX" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security" @@ -46625,7 +46625,7 @@ aa aa aa oe -nB +bW su ts pR @@ -46882,7 +46882,7 @@ aa aa aa mD -eY +RT sv tt PH @@ -50217,7 +50217,7 @@ iF iF iF On -ZT +lj To WX Ur @@ -50753,7 +50753,7 @@ bH bH sE sE -Vu +UK Ya aa aa @@ -51249,7 +51249,7 @@ yd GL oT FO -Tq +Ud YU Sh Ps @@ -51506,7 +51506,7 @@ hz mi pj nm -XA +Th Sx Nn yi @@ -52020,7 +52020,7 @@ os iR oJ lo -qn +Rm YU YU YU @@ -53029,8 +53029,8 @@ iS iZ Gl jq -ju -eq +Fm +xI vY jN jQ diff --git a/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm b/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm index 69b84841086c..4e29c62a599e 100644 --- a/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm @@ -256,6 +256,10 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/crew_quarters/dorms) +"Gv" = ( +/obj/effect/landmark/firealarm_sanity, +/turf/open/floor/grass, +/area/station/asteroid) "GE" = ( /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, @@ -1082,7 +1086,7 @@ GE vg ci rO -rO +Gv rO rO Cp diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index b15e5cb701f9..4f744664af8a 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -4091,35 +4091,6 @@ }, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"aCv" = ( -/obj/machinery/mineral/ore_redemption, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/office) -"aCx" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/door/window/left/directional/north{ - name = "Delivery Desk"; - req_access = list("shipping") - }, -/obj/structure/desk_bell{ - pixel_x = -7 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "aCy" = ( /obj/machinery/camera{ dir = 10; @@ -5340,6 +5311,18 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"aMR" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/item/radio/intercom/directional/west, +/obj/item/storage/medkit/regular{ + pixel_x = -6 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "aNa" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -5852,6 +5835,15 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/execution/education) +"aRR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Space Shutters"; + id = "exobayshutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "aSe" = ( /obj/structure/closet/wardrobe/black, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -7538,6 +7530,14 @@ }, /turf/open/floor/glass/reinforced, /area/station/science/research) +"bCL" = ( +/obj/machinery/door/airlock{ + name = "Unit 5"; + id_tag = "Toilet5" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "bDf" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow, @@ -8048,21 +8048,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"bLB" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Mailing Sorting Office" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/effect/mapping_helpers/airlock/access/all/supply/shipping, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/sorting) "bLN" = ( /obj/machinery/door/airlock/security{ name = "Interrogation" @@ -8433,6 +8418,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/atmos) +"bRf" = ( +/obj/machinery/door/airlock{ + name = "Unit 1"; + id_tag = "Toilet1" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "bRl" = ( /obj/structure/water_source/puddle, /turf/open/misc/asteroid, @@ -9032,6 +9025,13 @@ }, /turf/open/floor/iron/kitchen_coldroom, /area/station/service/kitchen/coldroom) +"caH" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "caN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -9553,6 +9553,13 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/security/processing) +"cjd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "cjy" = ( /turf/closed/wall/r_wall, /area/station/engineering/main) @@ -10580,6 +10587,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) +"cBJ" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "cBP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10678,10 +10697,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) -"cDZ" = ( -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "cEb" = ( /obj/structure/railing{ dir = 8 @@ -11147,6 +11162,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"cMW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "cNc" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -11399,6 +11422,22 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white, /area/station/science/lower) +"cQl" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/full, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "cQs" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, @@ -12255,10 +12294,6 @@ /obj/item/stack/medical/bruise_pack, /turf/open/floor/iron, /area/station/commons/fitness) -"dez" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "deU" = ( /obj/structure/closet/emcloset, /obj/machinery/light/dim/directional/west, @@ -13169,13 +13204,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) -"dwj" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "dwk" = ( /obj/effect/mapping_helpers/airlock/access/all/service/general, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -14721,6 +14749,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"dWp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/button/door/directional/south{ + req_access = list("cargo"); + name = "Cargo Lockdown"; + id = "cargolockdown"; + pixel_x = 7 + }, +/obj/machinery/button/door/directional/south{ + pixel_x = -7; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown'"; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "dWM" = ( /obj/structure/table, /obj/item/radio{ @@ -15523,13 +15567,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"enF" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "eor" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 8 @@ -16317,6 +16354,28 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) +"eCy" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/item/stamp{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/machinery/light/directional/east, +/obj/machinery/button/door/directional/east{ + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo"); + pixel_x = 21 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "eCR" = ( /obj/machinery/door/airlock{ name = "Private Quarters H"; @@ -16863,6 +16922,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) +"ePb" = ( +/obj/structure/closet/secure_closet/exile, +/obj/effect/turf_decal/bot, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/command/gateway) "ePi" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, @@ -17096,6 +17161,29 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/courtroom) +"eTH" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Cargo Desk"; + req_access = list("cargo") + }, +/obj/structure/desk_bell{ + pixel_x = -7 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/office) "eTP" = ( /obj/structure/table/wood, /obj/machinery/reagentgrinder{ @@ -17684,13 +17772,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"ffE" = ( -/obj/machinery/door/airlock{ - name = "Unit 1"; - id_tag = "Toilet1" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "ffL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18569,10 +18650,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"fur" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/sorting) "fuB" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment, @@ -20326,13 +20403,6 @@ /obj/machinery/air_sensor/nitrous_tank, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"gdz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "gdC" = ( /obj/machinery/door/airlock{ name = "Private Stall 2"; @@ -20443,19 +20513,6 @@ /obj/structure/fluff/iced_abductor, /turf/open/misc/asteroid/airless, /area/station/asteroid) -"gfY" = ( -/obj/item/experi_scanner{ - pixel_x = 5 - }, -/obj/item/experi_scanner, -/obj/item/experi_scanner{ - pixel_x = -5 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron/white, -/area/station/science/research) "gga" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Server Room" @@ -22610,6 +22667,18 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"gUD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/full, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "gUE" = ( /obj/machinery/power/emitter, /obj/machinery/light/small/directional/north, @@ -23929,6 +23998,22 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/auxlab/firing_range) +"hvP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/full, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "hvZ" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 8 @@ -24263,6 +24348,19 @@ /obj/structure/thermoplastic, /turf/open/openspace, /area/station/hallway/primary/tram/center) +"hEC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "hEK" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Control" @@ -26634,6 +26732,11 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"ixK" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "ixO" = ( /obj/structure/chair/comfy/brown{ dir = 8; @@ -26843,13 +26946,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iCe" = ( -/obj/machinery/door/airlock{ - name = "Unit 2"; - id_tag = "Toilet2" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "iCh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -27263,6 +27359,21 @@ }, /turf/open/floor/wood, /area/station/service/bar/backroom) +"iLI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/light/floor, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "iLP" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/stripes/asteroid/box, @@ -27290,14 +27401,6 @@ }, /turf/open/floor/iron, /area/station/medical/virology) -"iMj" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/full, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/lobby) "iMl" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -27548,14 +27651,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"iPT" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/commons/dorms/laundry) "iQC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -27593,6 +27688,12 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"iQR" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/station/science/ordnance/storage) "iQU" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -28938,10 +29039,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"jnD" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/lobby) "jnJ" = ( /obj/machinery/door/window/brigdoor/left/directional/east{ name = "Cargo Cell"; @@ -29792,22 +29889,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/port/central) -"jAo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/reagent_dispensers/watertank, -/obj/item/extinguisher{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/extinguisher, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jAt" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, @@ -30002,6 +30083,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"jEi" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "jEu" = ( /turf/open/floor/iron, /area/station/hallway/secondary/entry) @@ -31076,18 +31165,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"jYd" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "jYe" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -31204,6 +31281,25 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"jZm" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/camera/directional/east{ + network = list("ss13","medbay"); + c_tag = "Medical - Surgery B" + }, +/obj/machinery/wall_healer/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/light_switch/directional/east{ + pixel_x = 22; + pixel_y = -9 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "jZJ" = ( /obj/structure/chair/plastic, /obj/machinery/light/warm/directional/north, @@ -33027,6 +33123,14 @@ /obj/structure/table/glass, /turf/open/floor/iron/white, /area/station/security/medical) +"kBX" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) "kCm" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/table, @@ -33464,6 +33568,15 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison) +"kHV" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Space Shutters"; + id = "exobayshutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "kHZ" = ( /obj/structure/railing{ dir = 4 @@ -34492,6 +34605,21 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/white, /area/station/science/lower) +"kYT" = ( +/obj/machinery/mineral/ore_redemption, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/office) "kZa" = ( /obj/machinery/camera/directional/south{ pixel_x = 21; @@ -34918,6 +35046,14 @@ /obj/machinery/telecomms/server/presets/security, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"liB" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/computer/crew, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "liC" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -35085,13 +35221,26 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"llo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +"llx" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Mailing Sorting Office" + }, +/obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/mapping_helpers/airlock/access/all/supply/shipping, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 }, /turf/open/floor/iron, -/area/station/cargo/drone_bay) +/area/station/cargo/sorting) "llE" = ( /obj/effect/landmark/event_spawn, /obj/effect/landmark/navigate_destination/kitchen, @@ -35646,6 +35795,16 @@ "ltw" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain/private) +"ltL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/gauze, +/obj/structure/table/glass, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ltZ" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 5 @@ -36327,13 +36486,6 @@ dir = 4 }, /area/station/service/chapel) -"lEt" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ - dir = 8; - chamber_id = "o2ordance" - }, -/turf/open/floor/engine/o2, -/area/station/science/ordnance/storage) "lED" = ( /obj/effect/turf_decal/trimline/red/corner{ dir = 4 @@ -36768,13 +36920,6 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/iron, /area/station/cargo/office) -"lMw" = ( -/obj/machinery/door/airlock{ - name = "Unit 3"; - id_tag = "Toilet3" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "lMJ" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/siding/thinplating/dark{ @@ -37073,6 +37218,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) +"lRF" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "lRP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -37583,14 +37737,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"mad" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/computer/records/medical, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "mai" = ( /obj/machinery/holopad, /obj/effect/landmark/start/scientist, @@ -41092,25 +41238,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) -"npp" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/door/window/left/directional/north{ - name = "Cargo Desk"; - req_access = list("cargo") - }, -/obj/structure/desk_bell{ - pixel_x = -7 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/office) "npX" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -41746,18 +41873,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"nAS" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/warning{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/full, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/lobby) "nAT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ @@ -43051,15 +43166,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/crew_quarters/dorms) -"nZr" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "nZL" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -43692,17 +43798,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/library) -"ols" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/bed/medical/emergency, -/obj/machinery/camera/directional/south{ - network = list("ss13","medbay"); - c_tag = "Medical - Lobby" - }, -/obj/effect/turf_decal/bot, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "olG" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -45843,6 +45938,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/cargo/drone_bay) +"pgc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "pgm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 8 @@ -47330,6 +47434,19 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) +"pFu" = ( +/obj/item/experi_scanner{ + pixel_x = 5 + }, +/obj/item/experi_scanner, +/obj/item/experi_scanner{ + pixel_x = -5 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron/white, +/area/station/science/research) "pFw" = ( /obj/machinery/airalarm/directional/east, /obj/item/storage/toolbox/mechanical{ @@ -48218,6 +48335,24 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"pUT" = ( +/obj/structure/table/glass, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/gauze, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/camera/directional/east{ + network = list("ss13","medbay"); + c_tag = "Medical - Treatment South-East" + }, +/obj/machinery/wall_healer/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "pUV" = ( /obj/structure/table, /obj/item/clipboard, @@ -49302,12 +49437,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"qpb" = ( -/obj/structure/closet/secure_closet/exile, -/obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/command/gateway) "qpj" = ( /obj/structure/chair/stool/bar/directional/east, /obj/effect/landmark/start/prisoner, @@ -49434,13 +49563,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/hallway/secondary/exit) -"qrW" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qsa" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -49682,6 +49804,22 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"qwv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/item/extinguisher{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/extinguisher, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "qwH" = ( /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/wood, @@ -49965,6 +50103,16 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/port/central) +"qCk" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/item/reagent_containers/cup/bottle/multiver, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white, +/area/station/security/medical) "qCm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -50316,13 +50464,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"qIf" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/machinery/computer/crew, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qIq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/machinery/light/directional/west, @@ -50834,6 +50975,14 @@ }, /turf/open/floor/iron/stairs/medium, /area/station/commons/dorms) +"qSB" = ( +/obj/machinery/door/airlock{ + name = "Unit 3"; + id_tag = "Toilet3" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "qSE" = ( /obj/structure/table, /obj/machinery/computer/security/telescreen/interrogation, @@ -51209,13 +51358,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos) -"qYx" = ( -/obj/machinery/door/airlock{ - name = "Unit 5"; - id_tag = "Toilet5" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "qYJ" = ( /obj/machinery/flasher/directional/north{ id = "AI" @@ -51532,24 +51674,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"rdJ" = ( -/obj/structure/table/glass, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/machinery/camera/directional/east{ - network = list("ss13","medbay"); - c_tag = "Medical - Treatment South-East" - }, -/obj/machinery/vending/wallmed/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "rdN" = ( /obj/machinery/mech_bay_recharge_port{ dir = 1 @@ -52002,13 +52126,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"rlX" = ( -/obj/machinery/door/airlock{ - name = "Unit 4"; - id_tag = "Toilet4" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "rlZ" = ( /obj/machinery/camera/directional/west{ c_tag = "Hallway - Starboard Tram Platform North" @@ -53448,14 +53565,6 @@ }, /turf/open/floor/iron, /area/station/science/lab) -"rNW" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron, -/area/station/engineering/break_room) "rOh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -54581,25 +54690,6 @@ dir = 4 }, /area/station/service/theater) -"siE" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/machinery/camera/directional/east{ - network = list("ss13","medbay"); - c_tag = "Medical - Surgery B" - }, -/obj/machinery/vending/wallmed/directional/north, -/obj/structure/disposalpipe/trunk{ - dir = 2 - }, -/obj/machinery/light_switch/directional/east{ - pixel_x = 22; - pixel_y = -9 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) "siF" = ( /obj/machinery/bouldertech/refinery, /obj/machinery/conveyor{ @@ -54993,18 +55083,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/greater) -"sob" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = 8; - pixel_y = 4 - }, -/obj/item/radio/intercom/directional/west, -/obj/item/storage/medkit/advanced{ - pixel_x = -6 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "soe" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -55406,12 +55484,6 @@ /obj/structure/closet/secure_closet/personal, /turf/open/floor/iron, /area/station/commons/dorms) -"sui" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "sul" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -56392,18 +56464,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"sNX" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "sOg" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -56484,6 +56544,13 @@ "sOS" = ( /turf/open/floor/carpet, /area/station/cargo/miningdock) +"sPb" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "sPo" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -56866,6 +56933,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"sWP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ + dir = 8 + }, +/turf/open/floor/engine/o2, +/area/station/science/ordnance/storage) "sWQ" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -57075,6 +57148,19 @@ "tag" = ( /turf/closed/wall/r_wall, /area/station/security/lockers) +"tat" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "taw" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/open/floor/iron, @@ -58148,6 +58234,28 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"ttK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Delivery Desk"; + req_access = list("shipping") + }, +/obj/structure/desk_bell{ + pixel_x = -7 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "ttS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -58374,13 +58482,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"txW" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ - dir = 4; - chamber_id = "o2ordance" - }, -/turf/open/floor/engine/o2, -/area/station/science/ordnance/storage) "tyi" = ( /obj/structure/table, /obj/machinery/button/door{ @@ -59085,6 +59186,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/bridge) +"tJK" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/engineering/break_room) "tJR" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -59760,16 +59869,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) -"tWO" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/item/reagent_containers/cup/bottle/multiver, -/obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/white, -/area/station/security/medical) "tWX" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -59998,6 +60097,14 @@ /obj/effect/landmark/start/chief_engineer, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"ubu" = ( +/obj/machinery/door/airlock{ + name = "Unit 4"; + id_tag = "Toilet4" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "ubx" = ( /obj/effect/turf_decal/arrows/red{ pixel_y = 15 @@ -60009,14 +60116,6 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron, /area/station/security/prison) -"ubD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "ubH" = ( /turf/open/floor/iron/chapel{ dir = 6 @@ -61114,6 +61213,17 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/central) +"ust" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/machinery/button/door/directional/north{ + name = "Space Shutters"; + id = "exobayshutters" + }, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "usz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, @@ -61965,6 +62075,21 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, /area/station/security/prison/garden) +"uFK" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "uFX" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -62142,6 +62267,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uHE" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "uHF" = ( /obj/structure/railing{ dir = 4 @@ -62607,10 +62744,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"uOY" = ( -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "uOZ" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "CO2 Outlet Pump"; @@ -62693,13 +62826,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningdock/cafeteria) -"uRW" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "uSe" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -65622,6 +65748,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white, /area/station/security/medical) +"vRG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/office) "vRK" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65944,10 +66078,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/misc/asteroid/snow/coldroom, /area/station/service/kitchen/coldroom) -"vYl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/office) "vYn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -66274,6 +66404,14 @@ }, /turf/open/floor/plating, /area/station/science/xenobiology) +"wdQ" = ( +/obj/machinery/door/airlock{ + name = "Unit 2"; + id_tag = "Toilet2" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "wdU" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -68219,24 +68357,17 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"wOd" = ( +/obj/machinery/light/cold/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "wOf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) -"wOs" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/warning{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/full, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/lobby) "wOw" = ( /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat/foyer) @@ -69628,6 +69759,18 @@ /obj/effect/turf_decal/trimline/white/filled/line, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"xsJ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/bed/medical/emergency, +/obj/machinery/camera/directional/south{ + network = list("ss13","medbay"); + c_tag = "Medical - Lobby" + }, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/start/hangover, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "xsW" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -69689,22 +69832,6 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) -"xtD" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/item/stamp{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/cargo/office) "xtM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70457,16 +70584,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"xKf" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, -/obj/structure/table/glass, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "xKt" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port) @@ -71757,6 +71874,15 @@ /obj/item/stack/package_wrap, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) +"yhs" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/computer/records/medical, +/obj/machinery/light/cold/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "yhI" = ( /obj/structure/cable, /obj/structure/cable/layer1, @@ -85050,7 +85176,7 @@ thi alR pAv veV -uOY +wOd hAD veV mCQ @@ -85307,7 +85433,7 @@ thi rnL pAv veV -cDZ +ixK hAD veV veV @@ -85564,7 +85690,7 @@ apC apC veV veV -hAD +alT hAD veV pdr @@ -85820,14 +85946,14 @@ abM abM apC nmk -ffE -hAD +bRf +alT hAD veV veV kMD -hAD -rlX +alT +ubu oEl apC abM @@ -86078,7 +86204,7 @@ abM apC veV veV -uOY +wOd hAD veV fNx @@ -86334,14 +86460,14 @@ abM abM apC paH -iCe -hAD +wdQ +alT hAD veV veV kMD -hAD -qYx +alT +bCL rgT apC abM @@ -86592,7 +86718,7 @@ abM apC veV veV -hAD +alT hAD ubY ubY @@ -86848,8 +86974,8 @@ abM abM apC lYZ -lMw -hAD +qSB +alT hAD hAD hAD @@ -103516,7 +103642,7 @@ snQ iRL oXU gRY -jYd +uHE cWZ cWZ lbL @@ -104579,7 +104705,7 @@ fal aks lJv ulV -rNW +tJK rsz sjM unn @@ -117396,10 +117522,10 @@ aft uGW fvM tMY -sui +lRF bBJ lGz -kaF +tat hOd vWx gXK @@ -117653,10 +117779,10 @@ afu uGW fvM tMY -nZr +cBJ qCR pIb -ubD +iLI jbp cCZ sfE @@ -117910,10 +118036,10 @@ cJX uGW fvM tMY -sNX +uFK oTd agk -uYs +hEC njQ vWx ggH @@ -118169,7 +118295,7 @@ uGW uGW njI kjN -dwj +caH qxm iLu oys @@ -118232,7 +118358,7 @@ xCr gJY coM bgH -jAo +qwv qVr qVr qVr @@ -122573,7 +122699,7 @@ aaa aaa dfz mpd -lEt +sWP glc xRm pAT @@ -122829,7 +122955,7 @@ aaa aaa aaa dfz -txW +iQR iMt glc xRm @@ -148508,7 +148634,7 @@ dFP dFP dFP dFP -gdz +cjd dFP ste mtr @@ -151819,7 +151945,7 @@ dTL mjM kBO tBO -tWO +qCk qZy run ayR @@ -153113,7 +153239,7 @@ yji rbT ndP pwm -qpb +ePb hAv dxC bsP @@ -154926,7 +155052,7 @@ aQO gPA hbV dbJ -sob +aMR eSH wJy xgZ @@ -155461,7 +155587,7 @@ lyx rIg qIs fSr -iPT +kBX rVp rVp vgZ @@ -167038,7 +167164,7 @@ lWu tTN net xRx -siE +jZm hsh gnM apC @@ -169596,9 +169722,9 @@ sSt jEK eoE xck -ols +xsJ wyd -enF +dyI aHP aKq aKP @@ -170626,7 +170752,7 @@ rks rks wyd wyd -qrW +dyI gMT uHB jtr @@ -170637,7 +170763,7 @@ qDF uwk oXz gNE -rdJ +pUT jtr jtr jtr @@ -170882,7 +171008,7 @@ eSz eSz eSz qNI -qIf +liB lEL qPd iTt @@ -171139,7 +171265,7 @@ eSz eSz eSz qNI -mad +yhs jVw qPd jVw @@ -171396,7 +171522,7 @@ fWX eSz eSz qNI -xKf +ltL pps sqT sTF @@ -181395,7 +181521,7 @@ aAJ riJ aAJ qqw -byL +dWp whL ged jnJ @@ -182424,7 +182550,7 @@ uWi rpY kMJ lMu -vYl +vRG pDa tZP oNJ @@ -182681,12 +182807,12 @@ aBc sFc cwG aCb -aCv +kYT aCJ wgQ aDu aDG -jnD +jEi rEB oPw dfx @@ -182932,18 +183058,18 @@ eOk oSb vSI vSI -vYl +vRG fJA cwG sFc cwG ccj -vYl +vRG tRT cbH kMc kSL -wOs +hvP lHu nbv dfx @@ -183189,7 +183315,7 @@ eOk mdD vSI vSI -vYl +vRG oGF cwG kum @@ -183200,7 +183326,7 @@ nLe wgQ wgQ wgQ -iMj +gUD dlg awD bMb @@ -183446,18 +183572,18 @@ eOk qyK vSI vSI -vYl +vRG kkq cwG gpm cwG whI -vYl +vRG eBF oLp cGc qec -nAS +cQl vyN ncT dfx @@ -183709,12 +183835,12 @@ dPu dPu tXI rqD -npp +eTH lUa xeG rlo nzd -jnD +jEi rEB rMl dfx @@ -183964,9 +184090,9 @@ oAV lvK ryS dkf -xtD +eCy fTP -vYl +vRG vhn lSM aDv @@ -184218,9 +184344,9 @@ eLH udQ pRM pRM -fur -fur -bLB +pgc +pgc +llx pRM pRM pRM @@ -184480,7 +184606,7 @@ aBe vCv mAS ksV -fur +cMW cJm jjS dOC @@ -184737,7 +184863,7 @@ uDl fNa cfz aCd -aCx +ttK aCL geG nmP @@ -184994,7 +185120,7 @@ aBg jur vro ipm -fur +cMW pMd yiV uCO @@ -185284,7 +185410,7 @@ dpB nZO kvt wtw -gfY +pFu syv hrh ieV @@ -186522,7 +186648,7 @@ aac aac aac xxZ -llo +ust sXm uNl wxv @@ -186778,7 +186904,7 @@ aac aac aac aac -dez +aRR gTu kZt kZt @@ -187035,7 +187161,7 @@ aac aac aac aac -dez +aRR kfO pfZ kfO @@ -187292,7 +187418,7 @@ aac aac aac aac -dez +aRR kfO eUo eUo @@ -187549,12 +187675,12 @@ aac aac aac aac -dez -dez -dez -dez -dez -dez +kHV +kHV +kHV +kHV +kHV +kHV xxZ xxZ xxZ @@ -189380,7 +189506,7 @@ kIo kIo qSm orX -uRW +sPb fmy aac aac diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index ebc3a7088447..5c7253417899 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -531,6 +531,14 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"aiN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) "aiZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -584,13 +592,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/commons/lounge) -"ajL" = ( -/obj/machinery/door/airlock{ - id_tag = "u5"; - name = "Unit 5" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "ajQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -720,6 +721,16 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"alJ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/engineering/lobby) "alP" = ( /obj/machinery/newscaster/directional/north, /obj/item/radio/intercom/directional/south, @@ -944,15 +955,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/medical/morgue) -"apx" = ( -/obj/structure/table/reinforced, -/obj/structure/desk_bell, -/obj/machinery/door/window/left/directional/west{ - req_access = list("shipping") - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/storage) "apH" = ( /obj/structure/chair/comfy/beige{ dir = 1 @@ -2446,6 +2448,36 @@ /obj/machinery/scanner_gate/preset_guns, /turf/open/floor/iron, /area/station/security/brig/entrance) +"aNQ" = ( +/obj/machinery/computer/security/qm, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/computer/security/telescreen/vault/directional/north, +/obj/machinery/button/door/directional/west{ + id = "qmprivacy"; + name = "Privacy Shutters Control"; + pixel_x = -32; + pixel_y = 2 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/west{ + pixel_y = 12 + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -8; + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -8; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown"; + req_access = list("cargo"); + pixel_x = -39 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/qm) "aNR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2475,13 +2507,6 @@ }, /turf/open/openspace, /area/station/security/prison) -"aOJ" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "aOK" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -3933,16 +3958,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) -"brQ" = ( -/obj/effect/turf_decal/trimline/blue/arrow_ccw{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/medbay/lobby) "brS" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/cable, @@ -4115,18 +4130,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/herringbone, /area/station/hallway/primary/central) -"bvt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/tank_dispenser/oxygen{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/machinery/vending/wallmed/directional/south, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron, -/area/station/command/gateway) "bvD" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -6414,6 +6417,10 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"cmB" = ( +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "cmZ" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -6526,16 +6533,6 @@ }, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance) -"cpK" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/mineral/ore_redemption, -/obj/machinery/door/window/left/directional/south{ - name = "Ore Redemption Access"; - req_access = list("mineral_storeroom") - }, -/turf/open/floor/iron/textured_large, -/area/station/cargo/sorting) "cpO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7755,13 +7752,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/medical/chemistry) -"cOf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/mapping_helpers/damaged_window{ - integrity_damage_max = 0.5 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "cOp" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -7872,6 +7862,15 @@ /obj/structure/rack, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"cPT" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "cPZ" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/engine, @@ -8991,18 +8990,6 @@ /obj/machinery/meter/layer2, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"djc" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/vending/wallmed/directional/west, -/obj/structure/disposalpipe/segment, -/obj/machinery/shower/directional/east, -/obj/structure/fluff/shower_drain, -/turf/open/floor/iron/white/textured, -/area/station/medical/treatment_center) "dje" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -11220,6 +11207,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/aisat/uppersouth) +"dUA" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "dUD" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -11377,6 +11372,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/robotics/storage) +"dXS" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/button/door/directional/north{ + name = "Cargo Lockdown"; + req_access = list("cargo"); + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "dXU" = ( /turf/open/floor/plating/airless, /area/space/nearstation) @@ -11769,6 +11777,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"eeE" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/urinal/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "eeL" = ( /obj/machinery/light/dim/directional/west, /obj/effect/turf_decal/tile/neutral{ @@ -12223,16 +12240,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"emO" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/engineering/lobby) "eng" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14112,6 +14119,14 @@ }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"eXb" = ( +/obj/machinery/door/airlock{ + id_tag = "u2"; + name = "Unit 2" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "eXi" = ( /obj/structure/railing{ dir = 8 @@ -14307,6 +14322,13 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"fab" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "fad" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -15048,6 +15070,20 @@ /obj/item/assembly/mousetrap/armed, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"fpp" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/mineral/ore_redemption, +/obj/machinery/door/window/left/directional/south{ + name = "Ore Redemption Access"; + req_access = list("mineral_storeroom") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/textured_large, +/area/station/cargo/sorting) "fpx" = ( /obj/item/radio/intercom/directional/west, /obj/structure/table/wood, @@ -16567,6 +16603,13 @@ /obj/structure/rack, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"fPr" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "fPs" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -17846,6 +17889,14 @@ /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron, /area/station/command/meeting_room) +"glG" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "glH" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -18021,14 +18072,6 @@ /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/textured, /area/station/hallway/primary/central) -"gpT" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 1 - }, -/obj/item/storage/medkit/advanced, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "gpV" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -19788,6 +19831,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/paramedic) +"gTM" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "gTS" = ( /obj/machinery/door/poddoor/shutters{ id = "warehouse"; @@ -22930,6 +22982,15 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain/private) +"hWq" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/edge{ + dir = 8 + }, +/area/station/hallway/secondary/exit/departure_lounge) "hWt" = ( /obj/effect/turf_decal/box/corners{ dir = 8 @@ -25578,6 +25639,15 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"iUX" = ( +/obj/structure/transport/linear/public, +/obj/machinery/elevator_control_panel{ + linked_elevator_id = "aisat"; + pixel_x = 32; + preset_destination_names = list("2" = "Telecomms", "3" = "AI Core") + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) "iVk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -30247,14 +30317,6 @@ "ktL" = ( /turf/open/floor/iron, /area/station/engineering/atmos/upper) -"ktU" = ( -/obj/machinery/airalarm/directional/south, -/obj/structure/urinal/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "kub" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/showroomfloor, @@ -31196,13 +31258,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"kKU" = ( -/obj/structure/ladder, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/dark_green/opposingcorners, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "kLi" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/station/maintenance/department/medical/central) @@ -32114,6 +32169,14 @@ /obj/item/hand_labeler, /turf/open/floor/iron, /area/station/security/evidence) +"laL" = ( +/obj/machinery/door/airlock{ + id_tag = "u1"; + name = "Unit 1" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "laM" = ( /obj/effect/decal/cleanable/dirt, /obj/item/clothing/gloves/color/fyellow, @@ -32576,13 +32639,15 @@ /obj/structure/broken_flooring/corner/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"ljw" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ +"ljA" = ( +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/wall_healer/directional/west, /turf/open/floor/iron, -/area/station/cargo/lobby) +/area/station/hallway/primary/central) "ljF" = ( /obj/structure/weightmachine/weightlifter, /obj/machinery/camera/autoname/directional/east, @@ -33213,6 +33278,25 @@ /obj/item/clothing/glasses/meson/engine, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"lwy" = ( +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/mining{ + name = "Boutique Backroom" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/boutique) "lwB" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/sign/picture_frame/portrait/bar{ @@ -33589,6 +33673,14 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/iron, /area/station/maintenance/central/greater) +"lCU" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "lCY" = ( /obj/effect/spawner/random/maintenance/two, /obj/effect/spawner/random/structure/closet_empty/crate, @@ -33626,6 +33718,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"lDt" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "lDK" = ( /obj/structure/railing{ dir = 1 @@ -34577,15 +34678,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/bridge) -"lUF" = ( -/obj/structure/transport/linear/public, -/obj/machinery/elevator_control_panel{ - linked_elevator_id = "aisat"; - pixel_x = 32; - preset_destination_names = list(2 = "Telecomms", 3 = "AI Core") - }, -/turf/open/openspace, -/area/station/ai_monitored/turret_protected/aisat_interior) "lUM" = ( /obj/structure/toilet/greyscale{ dir = 4 @@ -36070,6 +36162,18 @@ /obj/machinery/light/floor, /turf/open/floor/engine, /area/station/science/xenobiology) +"mvj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/wall_healer/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/white/textured, +/area/station/medical/treatment_center) "mvk" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -36431,10 +36535,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"mBS" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/lobby) "mBT" = ( /obj/structure/weightmachine, /turf/open/floor/iron/white/textured_large, @@ -36785,6 +36885,13 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"mId" = ( +/obj/structure/urinal/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "mIe" = ( /obj/machinery/door/airlock/multi_tile/public, /obj/effect/mapping_helpers/airlock/access/all/command/minisat, @@ -37256,6 +37363,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_half, /area/station/science/xenobiology) +"mQN" = ( +/obj/structure/urinal/directional/north, +/obj/machinery/light/small/dim/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "mQP" = ( /obj/structure/lattice, /obj/structure/cable, @@ -38556,21 +38669,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"nnt" = ( -/obj/machinery/computer/security/qm, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/machinery/computer/security/telescreen/vault/directional/north, -/obj/machinery/button/door/directional/west{ - id = "qmprivacy"; - name = "Privacy Shutters Control" - }, -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_y = 12 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/qm) "nnv" = ( /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -39383,13 +39481,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/space/openspace, /area/space/nearstation) -"nDg" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "nDC" = ( /obj/machinery/holopad, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -41964,13 +42055,6 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"oDo" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "oDC" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42212,22 +42296,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"oHf" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/lobby) -"oHh" = ( -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/white/smooth_half{ - dir = 8 - }, -/area/station/science/xenobiology) "oHi" = ( /obj/structure/cable, /turf/open/floor/grass, @@ -42433,6 +42501,14 @@ }, /turf/open/floor/glass/reinforced/telecomms, /area/station/ai_monitored/turret_protected/ai) +"oKc" = ( +/obj/machinery/door/airlock{ + id_tag = "u5"; + name = "Unit 5" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "oKr" = ( /obj/effect/landmark/start/depsec/science, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -43820,10 +43896,6 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) -"pik" = ( -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "piE" = ( /obj/structure/ladder, /turf/open/floor/plating, @@ -46266,6 +46338,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/hallway/primary/starboard) +"pWR" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "pWW" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -46520,17 +46597,6 @@ /obj/effect/spawner/random/food_or_drink/snack, /turf/open/floor/iron/white/textured_large, /area/station/science/research) -"qbj" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/paper_bin, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/window/right/directional/south{ - name = "Delivery Office Desk"; - req_access = list("shipping") - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "qbk" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/greenglow/filled, @@ -47510,13 +47576,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"qsx" = ( -/obj/machinery/door/airlock{ - id_tag = "u2"; - name = "Unit 2" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "qsI" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -48019,6 +48078,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"qDe" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/effect/mapping_helpers/damaged_window{ + integrity_damage_max = 0.5 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) "qDg" = ( /obj/effect/turf_decal/stripes, /obj/machinery/light/directional/north, @@ -51057,21 +51127,6 @@ }, /turf/open/floor/iron/textured_large, /area/station/command/bridge) -"rCe" = ( -/obj/machinery/door/poddoor/lift/preopen{ - transport_linked_id = "cargo" - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/cargo/sorting) "rCv" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -51588,6 +51643,11 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/library) +"rNf" = ( +/obj/structure/cable, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) "rNs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52012,13 +52072,6 @@ dir = 4 }, /area/station/engineering/atmos) -"rUt" = ( -/obj/machinery/door/airlock{ - id_tag = "u4"; - name = "Unit 4" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "rUu" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/stripes/line{ @@ -52483,13 +52536,6 @@ dir = 1 }, /area/station/engineering/atmos) -"rZL" = ( -/obj/machinery/door/airlock{ - id_tag = "u1"; - name = "Unit 1" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "saa" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -52533,6 +52579,14 @@ /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/engine, /area/station/command/heads_quarters/captain/private) +"say" = ( +/obj/machinery/door/airlock{ + id_tag = "u3"; + name = "Unit 3" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "saA" = ( /obj/machinery/door/window/right/directional/east{ name = "Corpse Arrivals"; @@ -52883,6 +52937,14 @@ "sgz" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hop) +"sgB" = ( +/obj/machinery/door/airlock{ + id_tag = "u4"; + name = "Unit 4" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "sgG" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, @@ -53858,11 +53920,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/service/library) -"swe" = ( -/obj/structure/urinal/directional/north, -/obj/machinery/light/small/dim/directional/east, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "swi" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/mechbay) @@ -54210,6 +54267,12 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"sBR" = ( +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white/smooth_half{ + dir = 8 + }, +/area/station/science/xenobiology) "sBZ" = ( /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/catwalk_floor/iron_dark, @@ -54462,9 +54525,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"sGV" = ( -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "sHa" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55951,6 +56011,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/grimy, /area/station/security/detectives_office/private_investigators_office) +"tiF" = ( +/obj/structure/ladder, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/dark_green/opposingcorners, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "tiI" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/random/structure/furniture_parts, @@ -56341,13 +56408,6 @@ }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/captain/private) -"toN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "toT" = ( /obj/machinery/telecomms/bus/preset_two, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -56736,6 +56796,18 @@ }, /turf/open/floor/wood/parquet, /area/station/service/theater) +"tvy" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tvB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -57208,6 +57280,15 @@ }, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance) +"tEd" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/station/cargo/storage) "tEn" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue{ @@ -57442,15 +57523,6 @@ dir = 8 }, /area/station/command/meeting_room) -"tIk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "tIr" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -57939,21 +58011,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark/small, /area/station/science/cytology) -"tQM" = ( -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/airlock/mining{ - name = "Boutique Backroom" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/boutique) "tQS" = ( /obj/structure/table/glass, /obj/item/binoculars, @@ -58653,14 +58710,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/xenobiology) -"ucY" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron, -/area/station/cargo/storage) "udi" = ( /obj/effect/spawner/random/entertainment/arcade{ dir = 1 @@ -59162,6 +59211,16 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"ulQ" = ( +/obj/effect/turf_decal/trimline/blue/arrow_ccw{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/medbay/lobby) "ulU" = ( /obj/effect/landmark/firealarm_sanity, /turf/open/openspace, @@ -59235,6 +59294,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos) +"umZ" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell, +/obj/machinery/door/window/left/directional/west{ + req_access = list("shipping") + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "una" = ( /obj/structure/chair/comfy/shuttle/tactical{ name = "tactical head of security chair" @@ -60013,9 +60086,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/textured, /area/station/construction/mining/aux_base) -"uBw" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, +"uBy" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, /area/station/cargo/lobby) "uBz" = ( /obj/machinery/camera/autoname/directional/north, @@ -60918,6 +60999,25 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/science/server) +"uTa" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -14 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/white, +/area/station/security/medical) "uTk" = ( /obj/machinery/light/warm/dim/directional/north, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -63419,12 +63519,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"vPN" = ( -/obj/structure/urinal/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "vPP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63486,15 +63580,6 @@ "vQB" = ( /turf/closed/wall, /area/station/cargo/boutique) -"vQR" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/west, -/turf/open/floor/iron/edge{ - dir = 8 - }, -/area/station/hallway/secondary/exit/departure_lounge) "vQT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64515,6 +64600,26 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"wkF" = ( +/obj/machinery/door/poddoor/lift/preopen{ + transport_linked_id = "cargo" + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/cargo/sorting) "wkG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/glass, @@ -66224,6 +66329,21 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"wNH" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/paper_bin, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/right/directional/south{ + name = "Delivery Office Desk"; + req_access = list("shipping") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "wNK" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/stripes, @@ -66888,14 +67008,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"xas" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "xay" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67275,6 +67387,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) +"xgj" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "xgn" = ( /obj/structure/mannequin/skeleton{ starting_items = list() @@ -68339,13 +68466,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) -"xzK" = ( -/obj/machinery/door/airlock{ - id_tag = "u3"; - name = "Unit 3" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "xzP" = ( /mob/living/carbon/human/species/monkey, /obj/structure/flora/bush/sparsegrass/style_random, @@ -68541,25 +68661,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/cargo/boutique) -"xCE" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/table, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -14 - }, -/obj/item/storage/medkit/regular{ - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/trunk/multiz{ - dir = 8 - }, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/white, -/area/station/security/medical) "xCI" = ( /obj/structure/broken_flooring/side/directional/east, /obj/effect/decal/cleanable/dirt/dust, @@ -68884,11 +68985,6 @@ /obj/structure/window/fulltile, /turf/open/misc/asteroid, /area/station/asteroid) -"xIR" = ( -/obj/structure/cable, -/obj/machinery/vending/wallmed/directional/north, -/turf/open/floor/iron/white, -/area/station/science/research) "xIV" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) @@ -69797,6 +69893,18 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/white/smooth_large, /area/station/science/ordnance/storage) +"yaK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/tank_dispenser/oxygen{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/machinery/wall_healer/directional/south, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/command/gateway) "yaM" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt, @@ -83242,7 +83350,7 @@ vhW wkg iyb wrU -djc +mvj ryE wrU wrU @@ -83989,7 +84097,7 @@ ghU icM hoX wOU -nnt +aNQ dNW hdK xiV @@ -85243,7 +85351,7 @@ mmy uYI wMn cpB -xCE +uTa luz hqN eSS @@ -85282,7 +85390,7 @@ mhz kTC nnL ylf -cOf +qDe bfc tiI rnk @@ -85539,7 +85647,7 @@ xTI xTI xTI vST -oFu +aiN jfr ygN rnk @@ -85790,13 +85898,13 @@ fXZ gli gli gli -oDo +fab gli gli hgi bSz orI -oFu +aiN bfc gok rnk @@ -86806,12 +86914,12 @@ jdK uOF uWl uWl -rCe -rCe -rCe +wkF +wkF +wkF uWl uWl -ucY +dXS uyL uUF jqC @@ -87072,7 +87180,7 @@ lAm ijg uUF hso -tQM +lwy smM smM kmj @@ -87582,9 +87690,9 @@ oli gpg qgA uWl -etV -apx -etV +gTM +umZ +gTM qVS vQB vQB @@ -88095,7 +88203,7 @@ rfQ icq pNE wUw -cpK +fpp ahv aHh aCs @@ -88352,7 +88460,7 @@ caz dSV nuC dMa -qbj +wNH jOf cye ijd @@ -88897,7 +89005,7 @@ qfB fPs gpF avU -brQ +ulQ vFH crg lwI @@ -89381,13 +89489,13 @@ poi poi pOP poi -uBw -ljw -mBS -mBS -oHf -aOJ -uBw +cPT +uBy +lDt +lDt +xgj +tvy +cPT vQB vQB vQw @@ -91443,7 +91551,7 @@ bAw aYQ wEW noF -bvt +yaK bAw kxZ fMZ @@ -94769,7 +94877,7 @@ eEa kmu kmu xJe -toN +fPr wSi kmu rqj @@ -94814,7 +94922,7 @@ oKy rbH dMU kGF -vQR +hWq yiO tiT pCJ @@ -98595,7 +98703,7 @@ cLf cLf bqX cQP -gpT +dUA eon sZK sZK @@ -101726,9 +101834,9 @@ uzH haQ ahE ahE -rZL +laL ahE -qsx +eXb bmp bmp bmp @@ -101985,9 +102093,9 @@ clG tXi utH sYZ -sGV -pik -xzK +cmB +pWR +say kdu ahE nxG @@ -102243,7 +102351,7 @@ oEy phi jzu buw -nDg +lCU ahE ahE ahE @@ -102500,8 +102608,8 @@ ahE oRM ahE ahE -vPN -rUt +mId +sgB hrm ahE nxG @@ -102757,7 +102865,7 @@ pxM pKH nCs ahE -ktU +eeE ahE ahE ahE @@ -103014,8 +103122,8 @@ xMg bFa nCs ahE -swe -ajL +mQN +oKc tAw ahE nxG @@ -103518,7 +103626,7 @@ nxG nxG nxG hjJ -tIk +ljA glH iAE xAm @@ -107613,7 +107721,7 @@ lNV svL cPt ixU -xIR +rNf dfM pBn cPo @@ -109968,7 +110076,7 @@ dpU jco oss vEZ -emO +alJ vEZ vEZ hmz @@ -147716,13 +147824,13 @@ aJP iaN sdc sdc -fVZ -fVZ +tEd +tEd sdc -fVZ -fVZ -fVZ -fVZ +tEd +tEd +tEd +tEd dLR gNV ayA @@ -154178,7 +154286,7 @@ oRR nAs wYY tSn -xas +glG xhJ mfP xOF @@ -159809,7 +159917,7 @@ qDQ vkR lRN hCs -kKU +tiF cmw xtG lIr @@ -171070,7 +171178,7 @@ lEa lmo sIW sIW -lUF +iUX lmo xAR wHJ @@ -188846,7 +188954,7 @@ jEt aMf rdn xSW -oHh +sBR wnA wnA wnA diff --git a/_maps/minigame/deathmatch/maint_mania.dmm b/_maps/minigame/deathmatch/maint_mania.dmm index b742b695c143..2433686e673e 100644 --- a/_maps/minigame/deathmatch/maint_mania.dmm +++ b/_maps/minigame/deathmatch/maint_mania.dmm @@ -14,7 +14,7 @@ /turf/open/indestructible, /area/deathmatch) "cx" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /turf/open/indestructible, /area/deathmatch) "cy" = ( diff --git a/_maps/shuttles/arrival_catwalk.dmm b/_maps/shuttles/arrival_catwalk.dmm index 837bfc84157e..e50d54a186a9 100644 --- a/_maps/shuttles/arrival_catwalk.dmm +++ b/_maps/shuttles/arrival_catwalk.dmm @@ -226,7 +226,7 @@ /area/shuttle/arrival) "CA" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw, -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /obj/effect/turf_decal/trimline/dark_blue/corner{ dir = 4 }, diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index 527b50f66c3d..8fab83477251 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -326,7 +326,7 @@ /turf/open/floor/iron, /area/shuttle/arrival) "uH" = ( -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /obj/effect/turf_decal/tile/neutral/fourcorners, diff --git a/_maps/shuttles/arrival_kilo.dmm b/_maps/shuttles/arrival_kilo.dmm index b59cf8d160dc..2776589602e4 100644 --- a/_maps/shuttles/arrival_kilo.dmm +++ b/_maps/shuttles/arrival_kilo.dmm @@ -149,7 +149,7 @@ /turf/open/floor/grass, /area/shuttle/arrival) "aA" = ( -/obj/machinery/vending/wallmed/directional/west{ +/obj/machinery/wall_healer/free/directional/west{ use_power = 0 }, /obj/effect/turf_decal/tile/blue/opposingcorners, diff --git a/_maps/shuttles/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index 9bfcf599bb27..3a9cd128fa55 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -271,7 +271,7 @@ /area/shuttle/escape) "bz" = ( /obj/machinery/stasis, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /turf/open/floor/mineral/titanium/white, @@ -387,7 +387,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "JM" = ( -/obj/machinery/vending/wallmed{ +/obj/machinery/wall_healer/free{ name = "Emergency NanoMed"; use_power = 0 }, diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 848f487020f3..6df05e530ff5 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -468,7 +468,7 @@ /area/shuttle/escape) "ca" = ( /obj/machinery/light/directional/south, -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /obj/effect/turf_decal/tile/bar/opposingcorners, diff --git a/_maps/shuttles/emergency_bballhooper.dmm b/_maps/shuttles/emergency_bballhooper.dmm index 49972dccae14..1d8fa1e0a8e7 100644 --- a/_maps/shuttles/emergency_bballhooper.dmm +++ b/_maps/shuttles/emergency_bballhooper.dmm @@ -972,7 +972,7 @@ /obj/machinery/shower/directional/west{ name = "emergency shower" }, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ name = "Hooper's First Medical Kit" }, /obj/machinery/light/small/directional/east, diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index fd82a5b0e2bd..609e2a749f39 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -255,7 +255,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "iP" = ( -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_box.dmm b/_maps/shuttles/emergency_box.dmm index 38cdf4e6fecd..60815016f83b 100644 --- a/_maps/shuttles/emergency_box.dmm +++ b/_maps/shuttles/emergency_box.dmm @@ -303,7 +303,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "Dk" = ( -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm index c1332f0ef1de..c91d4e781d90 100644 --- a/_maps/shuttles/emergency_casino.dmm +++ b/_maps/shuttles/emergency_casino.dmm @@ -404,7 +404,7 @@ pixel_x = 2; pixel_y = 7 }, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /turf/open/floor/carpet/green, /area/shuttle/escape) "mn" = ( @@ -448,7 +448,7 @@ /obj/item/canvas, /obj/item/canvas, /obj/item/canvas, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /obj/machinery/light/directional/north, /turf/open/floor/sepia, /area/shuttle/escape) @@ -571,7 +571,7 @@ /area/shuttle/escape) "qn" = ( /obj/machinery/stasis, -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /obj/machinery/light/directional/north, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) @@ -1352,7 +1352,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "VT" = ( -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /turf/open/floor/carpet/green, /area/shuttle/escape) "Wp" = ( diff --git a/_maps/shuttles/emergency_catwalk.dmm b/_maps/shuttles/emergency_catwalk.dmm index 4ed285c79640..71f1d21923da 100644 --- a/_maps/shuttles/emergency_catwalk.dmm +++ b/_maps/shuttles/emergency_catwalk.dmm @@ -710,7 +710,7 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /turf/open/floor/iron, /area/shuttle/escape) "Mj" = ( @@ -994,7 +994,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "We" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/shuttle/escape) "WL" = ( diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index dccdcc4b139f..72de7bc50d4a 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -511,7 +511,7 @@ "cu" = ( /obj/machinery/light/directional/east, /obj/machinery/stasis, -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ diff --git a/_maps/shuttles/emergency_clown.dmm b/_maps/shuttles/emergency_clown.dmm index fc943e5287bb..656d34288b24 100644 --- a/_maps/shuttles/emergency_clown.dmm +++ b/_maps/shuttles/emergency_clown.dmm @@ -307,7 +307,7 @@ /area/shuttle/escape) "RX" = ( /obj/item/toy/snappop/phoenix, -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /turf/open/floor/bluespace, diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index 33b31e4854fa..a5dd675aa0ec 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -384,7 +384,7 @@ pixel_x = 4; pixel_y = -1 }, -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -932,7 +932,7 @@ /obj/structure/chair/sofa/bench/right{ dir = 8 }, -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/shuttle/escape) @@ -2054,7 +2054,7 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /turf/open/floor/iron/dark/small, /area/shuttle/escape) "Cu" = ( diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 854f76f7a154..da90701ec5aa 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -1067,7 +1067,7 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /turf/open/floor/iron, diff --git a/_maps/shuttles/emergency_donut.dmm b/_maps/shuttles/emergency_donut.dmm index 27f9cd7f1ace..1ea139604ab5 100644 --- a/_maps/shuttles/emergency_donut.dmm +++ b/_maps/shuttles/emergency_donut.dmm @@ -402,14 +402,14 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "JG" = ( -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "KN" = ( /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_fish.dmm b/_maps/shuttles/emergency_fish.dmm index 43ec2aa16201..2ed11465b3a3 100644 --- a/_maps/shuttles/emergency_fish.dmm +++ b/_maps/shuttles/emergency_fish.dmm @@ -260,7 +260,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "pa" = ( -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /obj/structure/railing{ dir = 1 }, @@ -300,7 +300,7 @@ /turf/open/floor/mineral/titanium/tiled/white, /area/shuttle/escape) "qG" = ( -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /obj/structure/chair/comfy/shuttle{ dir = 8 }, @@ -662,7 +662,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "Mp" = ( -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -704,7 +704,7 @@ /area/shuttle/escape) "OR" = ( /obj/machinery/light/directional/north, -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /obj/effect/turf_decal/tile/dark/anticorner/contrasted{ @@ -835,7 +835,7 @@ /turf/template_noop, /area/template_noop) "Vo" = ( -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/dark/half/contrasted{ dir = 8 @@ -895,7 +895,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "Ys" = ( -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /obj/effect/turf_decal/tile/dark/half/contrasted{ diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm index 63cbc0dfc80b..04c732eafbe8 100644 --- a/_maps/shuttles/emergency_goon.dmm +++ b/_maps/shuttles/emergency_goon.dmm @@ -41,7 +41,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /turf/open/floor/mineral/plastitanium/red, @@ -176,7 +176,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/west{ +/obj/machinery/wall_healer/free/directional/west{ use_power = 0 }, /obj/machinery/light/directional/west, @@ -222,7 +222,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "Z" = ( -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /turf/open/floor/mineral/titanium/white, diff --git a/_maps/shuttles/emergency_humpback.dmm b/_maps/shuttles/emergency_humpback.dmm index d93055c1e832..527741ea48f3 100644 --- a/_maps/shuttles/emergency_humpback.dmm +++ b/_maps/shuttles/emergency_humpback.dmm @@ -126,7 +126,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "he" = ( -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /turf/open/floor/wood/large, /area/shuttle/escape) "hk" = ( @@ -297,7 +297,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "rL" = ( @@ -513,8 +513,7 @@ /area/shuttle/escape) "Dj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ - dir = 1; - chamber_id = "evacair" + dir = 1 }, /obj/machinery/light/small/directional/east, /turf/open/floor/engine/air, diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm index 1c8148a774a9..43f92baecdf2 100644 --- a/_maps/shuttles/emergency_kilo.dmm +++ b/_maps/shuttles/emergency_kilo.dmm @@ -906,7 +906,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "Br" = ( -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /obj/effect/turf_decal/stripes/line{ @@ -1227,7 +1227,7 @@ /area/shuttle/escape) "TQ" = ( /obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /obj/effect/turf_decal/stripes/line{ diff --git a/_maps/shuttles/emergency_lance.dmm b/_maps/shuttles/emergency_lance.dmm index d39e66077bbb..3b8dbea2cc79 100644 --- a/_maps/shuttles/emergency_lance.dmm +++ b/_maps/shuttles/emergency_lance.dmm @@ -223,7 +223,7 @@ /turf/open/floor/iron/dark/textured, /area/shuttle/escape) "hu" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /obj/effect/turf_decal/tile/dark_blue{ dir = 8 }, @@ -1076,7 +1076,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "In" = ( -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 4 }, @@ -1240,7 +1240,7 @@ }, /area/shuttle/escape) "MA" = ( -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 4 }, diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 840479edd81a..572c24b5762a 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -61,7 +61,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "ek" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /obj/machinery/iv_drip, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape/luxury) @@ -870,7 +870,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "Jd" = ( -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /turf/open/floor/carpet/orange, /area/shuttle/escape/luxury) "JB" = ( @@ -1003,7 +1003,7 @@ /area/shuttle/escape) "Nu" = ( /obj/structure/chair/comfy/shuttle, -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /turf/open/floor/carpet/red, /area/shuttle/escape/brig) "Om" = ( @@ -1170,7 +1170,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "Wx" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /turf/open/floor/carpet/blue, /area/shuttle/escape/luxury) "WF" = ( diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index f1064a77fdaf..b2fdab9a9a92 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -621,7 +621,7 @@ /area/shuttle/escape) "qi" = ( /obj/structure/chair/comfy/shuttle, -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /turf/open/floor/mineral/titanium/blue, @@ -741,7 +741,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 1 }, -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/emergency_mini.dmm b/_maps/shuttles/emergency_mini.dmm index 89579283e931..e75faab75e5f 100644 --- a/_maps/shuttles/emergency_mini.dmm +++ b/_maps/shuttles/emergency_mini.dmm @@ -128,7 +128,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "F" = ( -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /obj/machinery/light/small/directional/east, @@ -221,7 +221,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "W" = ( diff --git a/_maps/shuttles/emergency_nebula.dmm b/_maps/shuttles/emergency_nebula.dmm index a0dd9202b562..4a8fb7ecd978 100644 --- a/_maps/shuttles/emergency_nebula.dmm +++ b/_maps/shuttles/emergency_nebula.dmm @@ -807,7 +807,7 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /obj/machinery/light/directional/east, diff --git a/_maps/shuttles/emergency_northstar.dmm b/_maps/shuttles/emergency_northstar.dmm index 672dd9b58e23..d90758fe7d98 100644 --- a/_maps/shuttles/emergency_northstar.dmm +++ b/_maps/shuttles/emergency_northstar.dmm @@ -3,7 +3,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /turf/open/floor/iron/smooth_edge{ @@ -386,7 +386,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape) "Jd" = ( diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm index 7a183d4ac448..dcd1f6e46438 100644 --- a/_maps/shuttles/emergency_omega.dmm +++ b/_maps/shuttles/emergency_omega.dmm @@ -247,7 +247,7 @@ /obj/machinery/stasis{ dir = 4 }, -/obj/machinery/vending/wallmed/directional/west{ +/obj/machinery/wall_healer/free/directional/west{ use_power = 0 }, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -500,7 +500,7 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/east{ +/obj/machinery/wall_healer/free/directional/east{ use_power = 0 }, /obj/machinery/light/small/directional/east, @@ -571,7 +571,7 @@ dir = 4 }, /obj/effect/turf_decal/bot, -/obj/machinery/vending/wallmed/directional/west{ +/obj/machinery/wall_healer/free/directional/west{ use_power = 0 }, /turf/open/floor/iron, diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 84780e4332b9..b0b75da383a5 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -590,7 +590,7 @@ /obj/structure/table/glass, /obj/item/storage/medkit/regular, /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /obj/effect/turf_decal/tile/blue/opposingcorners{ diff --git a/_maps/shuttles/emergency_scrapheap/classic_aft3.dmm b/_maps/shuttles/emergency_scrapheap/classic_aft3.dmm index 4eca7aeb7665..3c69660fbedd 100644 --- a/_maps/shuttles/emergency_scrapheap/classic_aft3.dmm +++ b/_maps/shuttles/emergency_scrapheap/classic_aft3.dmm @@ -242,7 +242,7 @@ dir = 4 }, /obj/effect/decal/cleanable/blood/drip, -/obj/machinery/vending/wallmed/directional/south{ +/obj/machinery/wall_healer/free/directional/south{ use_power = 0 }, /turf/template_noop, diff --git a/_maps/shuttles/emergency_shadow.dmm b/_maps/shuttles/emergency_shadow.dmm index 731ad7bd2dd0..f75edd678b30 100644 --- a/_maps/shuttles/emergency_shadow.dmm +++ b/_maps/shuttles/emergency_shadow.dmm @@ -789,7 +789,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape/brig) "IR" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron/dark/textured_large, /area/shuttle/escape) @@ -1037,7 +1037,7 @@ /turf/open/floor/iron/dark/textured_large, /area/shuttle/escape) "Ux" = ( -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /obj/effect/turf_decal/trimline/neutral/line{ dir = 1 }, diff --git a/_maps/shuttles/emergency_tram.dmm b/_maps/shuttles/emergency_tram.dmm index 38b2608865be..7ab45a766ffb 100644 --- a/_maps/shuttles/emergency_tram.dmm +++ b/_maps/shuttles/emergency_tram.dmm @@ -119,7 +119,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "aF" = ( -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /turf/open/floor/mineral/titanium, @@ -216,7 +216,7 @@ /area/shuttle/escape) "ba" = ( /obj/machinery/shower/directional/south, -/obj/machinery/vending/wallmed/directional/north{ +/obj/machinery/wall_healer/free/directional/north{ use_power = 0 }, /turf/open/floor/mineral/titanium/white, diff --git a/_maps/shuttles/emergency_tranquility.dmm b/_maps/shuttles/emergency_tranquility.dmm index e44665e39c7e..8498e51bbf10 100644 --- a/_maps/shuttles/emergency_tranquility.dmm +++ b/_maps/shuttles/emergency_tranquility.dmm @@ -920,7 +920,7 @@ /turf/open/floor/wood, /area/shuttle/escape) "rK" = ( -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /turf/open/floor/iron/chapel, /area/shuttle/escape) "rL" = ( @@ -1072,7 +1072,7 @@ /turf/open/floor/stone, /area/shuttle/escape) "vx" = ( -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /turf/open/floor/catwalk_floor, /area/shuttle/escape) "vy" = ( @@ -1370,7 +1370,7 @@ dir = 9 }, /mob/living/basic/bot/cleanbot, -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /turf/open/floor/wood, /area/shuttle/escape) "Ac" = ( diff --git a/_maps/shuttles/emergency_venture.dmm b/_maps/shuttles/emergency_venture.dmm index 29ad2a695d19..1bf7fb0c5673 100644 --- a/_maps/shuttles/emergency_venture.dmm +++ b/_maps/shuttles/emergency_venture.dmm @@ -249,7 +249,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /turf/open/floor/iron/herringbone, /area/shuttle/escape) "lW" = ( @@ -573,7 +573,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, -/obj/machinery/vending/wallmed/directional/east, +/obj/machinery/wall_healer/free/directional/east, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 4 }, @@ -605,7 +605,7 @@ /area/shuttle/escape) "Gt" = ( /obj/structure/chair/comfy/shuttle, -/obj/machinery/vending/wallmed/directional/north, +/obj/machinery/wall_healer/free/directional/north, /turf/open/floor/mineral/titanium, /area/shuttle/escape) "GM" = ( @@ -752,7 +752,7 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "Ru" = ( -/obj/machinery/vending/wallmed/directional/west, +/obj/machinery/wall_healer/free/directional/west, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, diff --git a/_maps/shuttles/emergency_wawa.dmm b/_maps/shuttles/emergency_wawa.dmm index 46d2a986938e..de864edd7455 100644 --- a/_maps/shuttles/emergency_wawa.dmm +++ b/_maps/shuttles/emergency_wawa.dmm @@ -435,7 +435,7 @@ /turf/open/floor/iron/checker, /area/shuttle/escape) "lP" = ( -/obj/machinery/vending/wallmed/directional/south, +/obj/machinery/wall_healer/free/directional/south, /turf/open/floor/catwalk_floor, /area/shuttle/escape) "mT" = ( diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index e293dd7654bd..3c11de4dfcae 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -2084,7 +2084,6 @@ /area/centcom/syndicate_mothership) "wY" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ - chamber_id = "nukiebase"; desc = "Has a valve and pump attached to it. Slightly more menacing than Nanotrasen's standard."; dir = 1; name = "syndicate air injector" diff --git a/_maps/virtual_domains/meta_central.dmm b/_maps/virtual_domains/meta_central.dmm index 8c17d14812a4..ee1bfe8d10fe 100644 --- a/_maps/virtual_domains/meta_central.dmm +++ b/_maps/virtual_domains/meta_central.dmm @@ -262,14 +262,6 @@ /obj/effect/turf_decal/caution/red, /turf/open/floor/iron, /area/virtual_domain) -"ch" = ( -/obj/structure/table/wood, -/obj/machinery/light/directional/south, -/obj/item/papercutter{ - pixel_x = -4 - }, -/turf/open/floor/wood, -/area/virtual_domain) "cj" = ( /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/tile/neutral{ @@ -893,15 +885,6 @@ /obj/effect/spawner/random/trash, /turf/open/floor/iron, /area/virtual_domain) -"hv" = ( -/obj/structure/bed/medical/emergency, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/machinery/vending/wallmed/directional/west, -/obj/effect/mob_spawn/corpse/human/assistant, -/turf/open/floor/iron, -/area/virtual_domain) "hw" = ( /obj/effect/spawner/random/trash/graffiti, /turf/open/floor/iron, @@ -1838,6 +1821,14 @@ "ps" = ( /turf/closed/wall, /area/virtual_domain) +"pu" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/south, +/obj/item/papercutter{ + pixel_x = -4 + }, +/turf/open/floor/wood, +/area/virtual_domain) "pv" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/effect/turf_decal/tile/neutral, @@ -3698,19 +3689,6 @@ }, /turf/open/floor/iron, /area/virtual_domain) -"Fa" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/glasses/night{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night{ - pixel_x = -5; - pixel_y = -3 - }, -/turf/template_noop, -/area/virtual_domain/safehouse) "Fc" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral{ @@ -5207,6 +5185,15 @@ /obj/structure/frame/machine/secured, /turf/open/misc/dirt/jungle, /area/virtual_domain) +"RG" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/wall_healer/free/directional/west, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron, +/area/virtual_domain) "RI" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/random/decoration/showcase, @@ -5685,6 +5672,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/virtual_domain) +"VQ" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/night{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night{ + pixel_x = -5; + pixel_y = -3 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) "VT" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -6726,7 +6726,7 @@ uS uS ML DP -ch +pu uS ND AP @@ -7276,7 +7276,7 @@ oD pB hX zQ -Fa +VQ hX hX hX @@ -7696,7 +7696,7 @@ Nh zg Fj NO -hv +RG uA yN Ff diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index 1b94abc95c1b..ebcd71345ee7 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -171,8 +171,8 @@ ///Mob the MOD is trying to attach to #define BB_MOD_TARGET "BB_mod_target" -///The implant the AI was created from -#define BB_MOD_IMPLANT "BB_mod_implant" +///The module the AI was created from +#define BB_MOD_MODULE "BB_mod_module" ///Range for a MOD AI controller. #define MOD_AI_RANGE 200 diff --git a/code/__DEFINES/airlock.dm b/code/__DEFINES/airlock.dm index 3a7113b5d7fb..2f2f5b77e1fa 100644 --- a/code/__DEFINES/airlock.dm +++ b/code/__DEFINES/airlock.dm @@ -4,6 +4,7 @@ #define AIRLOCK_LIGHT_DENIED "denied" #define AIRLOCK_LIGHT_CLOSING "closing" #define AIRLOCK_LIGHT_OPENING "opening" +#define AIRLOCK_LIGHT_RETA "reta" // Airlock physical states #define AIRLOCK_CLOSED "closed" diff --git a/code/__DEFINES/alerts.dm b/code/__DEFINES/alerts.dm index 662711610ee7..ea12830d8588 100644 --- a/code/__DEFINES/alerts.dm +++ b/code/__DEFINES/alerts.dm @@ -14,6 +14,8 @@ #define ALERT_TOO_MUCH_NITRO "too_much_nitro" #define ALERT_NOT_ENOUGH_NITRO "not_enough_nitro" +#define ALERT_BRONCHODILATION "bronchodilation" + #define ALERT_NOT_ENOUGH_WATER "not_enough_water" /** Mob related */ diff --git a/code/__DEFINES/atmospherics/atmos_core.dm b/code/__DEFINES/atmospherics/atmos_core.dm index be8bae4cc118..0b5742d24a57 100644 --- a/code/__DEFINES/atmospherics/atmos_core.dm +++ b/code/__DEFINES/atmospherics/atmos_core.dm @@ -68,14 +68,16 @@ /// The total visible states #define TOTAL_VISIBLE_STATES (FACTOR_GAS_VISIBLE_MAX * (1 / MOLES_GAS_VISIBLE_STEP)) -//REACTIONS -//return values for reactions (bitflags) -///The gas mixture is not reacting -#define NO_REACTION 0 -///The gas mixture is reacting -#define REACTING 1 -///The gas mixture is able to stop all reactions -#define STOP_REACTIONS 2 +// REACTIONS +// Return values for reactions (bitflags). +/// The gas mixture is not reacting. Not actually a bitflag. +#define NO_REACTION NONE +/// The gas mixture is reacting. +#define REACTING (1 << 0) +/// The gas mixture is able to stop all reactions. +#define STOP_REACTIONS (1 << 1) +/// The gas mixture has the requirements to start a volatile reaction. +#define VOLATILE_REACTION (1 << 2) //Fusion ///Maximum instability before the reaction goes endothermic diff --git a/code/__DEFINES/botany.dm b/code/__DEFINES/botany.dm index 6ceafd88ef06..1ee833c6bf15 100644 --- a/code/__DEFINES/botany.dm +++ b/code/__DEFINES/botany.dm @@ -53,6 +53,8 @@ #define TRAIT_HALVES_YIELD (1<<0) /// Doesn't get bonuses from tray yieldmod #define TRAIT_NO_POLLINATION (1<<1) +/// Shows description on examine +#define TRAIT_SHOW_EXAMINE (1<<2) /// -- Trait IDs. Plants that match IDs cannot be added to the same plant. -- /// Plants that glow. diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 54e0ee49ef33..87640a50bf3b 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -124,6 +124,7 @@ #define COLOR_SCIENCE_PINK "#C96DBF" #define COLOR_MOSTLY_PURE_PINK "#E4005B" #define COLOR_ADMIN_PINK "#D100D1" +#define COLOR_TONGUE_PINK "#ff6ea0" #define COLOR_BLUSH_PINK "#DE5D83" #define COLOR_FADED_PINK "#ff80d5" #define COLOR_MAGENTA "#FF00FF" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm index 3ac9c0886051..bf1f2eff3ab8 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm @@ -51,6 +51,8 @@ #define COMSIG_ATOM_ATTACK_ROBOT "atom_attack_robot" /// from base of atom/attack_robot_secondary(): (mob/user) #define COMSIG_ATOM_ATTACK_ROBOT_SECONDARY "atom_attack_robot_secondary" +/// from base of atom/attack_ai(): (mob/user, params) +#define COMSIG_ATOM_ATTACK_AI "atom_attack_ai" ///from relay_attackers element: (atom/attacker, attack_flags) #define COMSIG_ATOM_WAS_ATTACKED "atom_was_attacked" ///Called before a atom gets something tilted on them. If [COMPONENT_IMMUNE_TO_TILT_AND_CRUSH] is returned in a signal, the atom will be unaffected: (atom/target, atom/source) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 1f261db129aa..522a5b72f559 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -70,6 +70,8 @@ #define COMSIG_ATOM_EXITED "atom_exited" ///from base of atom/movable/Moved(): (atom/movable/gone, direction) #define COMSIG_ATOM_ABSTRACT_EXITED "atom_abstract_exited" +///from base of atom/Exited(): (atom/exited, direction) +#define COMSIG_ATOM_EXITING "atom_exiting" ///from base of atom/Bumped(): (/atom/movable) (the one that gets bumped) #define COMSIG_ATOM_BUMPED "atom_bumped" ///from base of atom/has_gravity(): (turf/location, list/forced_gravities) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm index 1ea6ef446def..75b809b54035 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm @@ -116,11 +116,6 @@ #define MOVABLE_SAY_QUOTE_MESSAGE_SPANS 2 #define MOVABLE_SAY_QUOTE_MESSAGE_MODS 3 -/// Sent from /atom/movable/proc/compose_message() after the name part: (list/stored_name, visible_name) -#define COMSIG_MOVABLE_MESSAGE_GET_NAME_PART "movable_message_get_name_part" - ///The index of the name part - #define NAME_PART_INDEX 1 - /// From /datum/element/immerse/proc/add_submerge_overlay(): (visual_overlay) #define COMSIG_MOVABLE_EDIT_UNIQUE_IMMERSE_OVERLAY "movable_edit_unique_submerge_overlay" /// From base of area/Exited(): (area/left, direction) diff --git a/code/__DEFINES/dcs/signals/signals_food.dm b/code/__DEFINES/dcs/signals/signals_food.dm index 121942aab7bb..1ab582428b7a 100644 --- a/code/__DEFINES/dcs/signals/signals_food.dm +++ b/code/__DEFINES/dcs/signals/signals_food.dm @@ -72,6 +72,9 @@ ///Sent to the newly spawned object when it's baked in an oven. #define COMSIG_ITEM_BAKED_RESULT "item_baked_result" +///Called on the result spawned during decomposition: (obj/decomposed) +#define COMSIG_OBJ_DECOMPOSITION_RESULT "obj_decomposition_result" + //Drink ///from base of obj/item/reagent_containers/cup/attack(): (mob/M, mob/user) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index fe2071df0b21..67d69dc5b05e 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -179,3 +179,6 @@ /// From /mob/living/carbon/proc/set_blood_type : (mob/living/carbon/user, datum/blood_type, update_cached_blood_dna_info) #define COMSIG_CARBON_CHANGED_BLOOD_TYPE "carbon_set_blood_type" + +//from base of [/obj/effect/particle_effect/fluid/smoke/proc/smoke_mob]: (seconds_per_tick) +#define COMSIG_CARBON_EXPOSED_TO_SMOKE "carbon_exposed_to_smoke" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm index aee6f2df79bb..564465dfcf2b 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm @@ -17,3 +17,5 @@ #define COMSIG_SILICON_AI_OCCUPY_APC "AI_occupy_apc" ///called when an AI vacates an APC #define COMSIG_SILICON_AI_VACATE_APC "AI_vacate_apc" +///called when an AI's control is toggled +#define COMSIG_SILICON_AI_SET_CONTROL_DISABLED "AI_set_control_disabled" diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 844d72bc62ff..d09d74c50987 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -29,8 +29,8 @@ #define COMSIG_MACHINERY_SET_OCCUPANT "machinery_set_occupant" ///from /obj/machinery/destructive_scanner/proc/open(aggressive): Runs when the destructive scanner scans a group of objects. (list/scanned_atoms) #define COMSIG_MACHINERY_DESTRUCTIVE_SCAN "machinery_destructive_scan" -///from /obj/machinery/computer/arcade/prizevend(mob/user, prizes = 1) -#define COMSIG_ARCADE_PRIZEVEND "arcade_prizevend" +///from /obj/machinery/computer/arcade/victory_tickets(tickets, sound = TRUE) +#define COMSIG_ARCADE_VICTORY "arcade_victory" ///from /datum/controller/subsystem/air/proc/start_processing_machine: () #define COMSIG_MACHINERY_START_PROCESSING_AIR "start_processing_air" ///from /datum/controller/subsystem/air/proc/stop_processing_machine: () @@ -521,9 +521,6 @@ /// from /obj/item/detective_scanner/scan(): (mob/user, list/extra_data) #define COMSIG_DETECTIVE_SCANNED "det_scanned" -/// from /obj/machinery/mineral/ore_redemption/pickup_item when it successfully picks something up -#define COMSIG_ORM_COLLECTED_ORE "orm_collected_ore" - /// from /obj/plunger_act when an object is being plungered #define COMSIG_PLUNGER_ACT "plunger_act" diff --git a/code/__DEFINES/diseases.dm b/code/__DEFINES/diseases.dm index fe05a30e0fd8..379f9a37d299 100644 --- a/code/__DEFINES/diseases.dm +++ b/code/__DEFINES/diseases.dm @@ -16,6 +16,8 @@ DEFINE_BITFIELD(visibility_flags, list( #define CAN_CARRY (1<<1) #define CAN_RESIST (1<<2) #define CHRONIC (1<<3) +/// Instead of instantly curing the disease, cures will simply reduce the stage +#define INCREMENTAL_CURE (1<<4) //Spread Flags #define DISEASE_SPREAD_SPECIAL (1<<0) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 621954eee09d..1c7b6a41f846 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -86,7 +86,7 @@ DEFINE_BITFIELD(no_equip_flags, list( ITEM_SLOT_MASK | ITEM_SLOT_HEAD | ITEM_SLOT_FEET | ITEM_SLOT_ID | ITEM_SLOT_BELT | ITEM_SLOT_BACK | ITEM_SLOT_NECK ) //Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. -//Make sure to update check_obscured_slots() if you add more. +//Make sure to update obscured_slots if you add more. #define HIDEGLOVES (1<<0) #define HIDESUITSTORAGE (1<<1) #define HIDEJUMPSUIT (1<<2) //these first four are only used in exterior suits @@ -308,6 +308,24 @@ GLOBAL_LIST_INIT(mining_suit_allowed, list( /obj/item/pickaxe, /obj/item/resonator, /obj/item/spear, + /obj/item/gun/ballistic/bow/ashenbow, +)) + +// Allowed list for personal carry firearms and holsters + +GLOBAL_LIST_INIT(personal_carry_allowed, list( + /obj/item/storage/belt/holster, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/energy/disabler/smoothbore, +)) + +/// Allowed list for improvised firearms + +GLOBAL_LIST_INIT(improvised_firearm_allowed, list( + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/gun/energy/laser/musket, + /obj/item/gun/energy/disabler/smoothbore, )) /// List of all "tools" that can fit into belts or work from toolboxes diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 6c2460cd1f95..bc590cf10d57 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( //Human sub-species #define isabductor(A) (is_species(A, /datum/species/abductor)) -#define isspirit(A) (is_species(A, /datum/species/spirit)) +#define isghostspecies(A) (is_species(A, /datum/species/ghost)) #define isgolem(A) (is_species(A, /datum/species/golem)) #define islizard(A) (is_species(A, /datum/species/lizard)) #define isashwalker(A) (is_species(A, /datum/species/lizard/ashwalker)) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index cf2a12025f61..4a90ce567fa1 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -136,6 +136,8 @@ JOB_ATMOSPHERIC_TECHNICIAN, \ ) +//Bots +#define JOB_MEDIBOT "Medibot" #define JOB_DISPLAY_ORDER_ASSISTANT 1 #define JOB_DISPLAY_ORDER_CAPTAIN 2 diff --git a/code/__DEFINES/mining.dm b/code/__DEFINES/mining.dm index 7a122679dc1a..8e7e7d25591f 100644 --- a/code/__DEFINES/mining.dm +++ b/code/__DEFINES/mining.dm @@ -67,6 +67,14 @@ /// The amount of ore that is mined from a wall that is VENT_PROX_FAR tiles to a vent. #define ORE_WALL_FAR 1 +/// Lifetime of a boulder platform in seconds when spawned in lava/plasma. +#define PLATFORM_LIFE_DEFAULT 10 SECONDS + +#define PLATFORM_LIFE_GULAG 1 SECONDS +#define PLATFORM_LIFE_SMALL 20 SECONDS +#define PLATFORM_LIFE_MEDIUM 45 SECONDS +#define PLATFORM_LIFE_LARGE 90 SECONDS + /// The number of points a miner gets for discovering a vent, multiplied by BOULDER_SIZE when completing a wave defense minus the discovery bonus. #define MINER_POINT_MULTIPLIER 100 /// The multiplier that gets applied for automatically generated mining points. diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 8c22b65f7247..7cdd886694df 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -177,7 +177,6 @@ #define SPECIES_HUMAN "human" #define SPECIES_JELLYPERSON "jelly" #define SPECIES_SLIMEPERSON "slime" -#define SPECIES_SPIRIT "spirit" #define SPECIES_LUMINESCENT "luminescent" #define SPECIES_STARGAZER "stargazer" #define SPECIES_LIZARD "lizard" @@ -710,55 +709,57 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( /// Total number of layers for mob overlays /// KEEP THIS UP-TO-DATE OR SHIT WILL BREAK /// Also consider updating layers_to_offset -#define TOTAL_LAYERS 38 +#define TOTAL_LAYERS 39 /// Mutations layer - Tk headglows, cold resistance glow, etc -#define MUTATIONS_LAYER 37 +#define MUTATIONS_LAYER 38 /// Mutantrace features (tail when looking south) that must appear behind the body parts -#define BODY_BEHIND_LAYER 36 +#define BODY_BEHIND_LAYER 37 /// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST -#define BODYPARTS_LOW_LAYER 35 +#define BODYPARTS_LOW_LAYER 36 /// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER -#define BODYPARTS_LAYER 34 +#define BODYPARTS_LAYER 35 /// Mutantrace features (snout, body markings) that must appear above the body parts -#define BODY_ADJ_LAYER 33 +#define BODY_ADJ_LAYER 34 /// Underwear, undershirts, socks -#define BODY_LAYER 32 +#define BODY_LAYER 33 /// Eyes and eyelids -#define EYES_LAYER 31 +#define EYES_LAYER 32 /// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes) -#define FRONT_MUTATIONS_LAYER 30 +#define FRONT_MUTATIONS_LAYER 31 /// Damage indicators (cuts and burns) -#define DAMAGE_LAYER 29 +#define DAMAGE_LAYER 30 /// Jumpsuit clothing layer -#define UNIFORM_LAYER 28 +#define UNIFORM_LAYER 29 /// ID card layer -#define ID_LAYER 27 +#define ID_LAYER 28 /// ID card layer (might be deprecated) -#define ID_CARD_LAYER 26 +#define ID_CARD_LAYER 27 /// Layer for bodyparts that should appear above every other bodypart - Currently only used for hands -#define BODYPARTS_HIGH_LAYER 25 +#define BODYPARTS_HIGH_LAYER 26 /// Gloves layer -#define GLOVES_LAYER 24 +#define GLOVES_LAYER 25 /// Shoes layer -#define SHOES_LAYER 23 +#define SHOES_LAYER 24 /// Layer for masks that are worn below ears and eyes (like Balaclavas) (layers below hair, use flagsinv=HIDEHAIR as needed) -#define LOW_FACEMASK_LAYER 22 +#define LOW_FACEMASK_LAYER 23 /// Ears layer (Spessmen have ears? Wow) -#define EARS_LAYER 21 +#define EARS_LAYER 22 /// Layer for neck apperal that should appear below the suit slot (like neckties) -#define LOW_NECK_LAYER 20 +#define LOW_NECK_LAYER 21 /// Suit layer (armor, coats, etc.) -#define SUIT_LAYER 19 +#define SUIT_LAYER 20 /// Glasses layer -#define GLASSES_LAYER 18 +#define GLASSES_LAYER 19 /// Belt layer -#define BELT_LAYER 17 //Possible make this an overlay of something required to wear a belt? +#define BELT_LAYER 18 //Possible make this an overlay of something required to wear a belt? /// Suit storage layer (tucking a gun or baton underneath your armor) -#define SUIT_STORE_LAYER 16 +#define SUIT_STORE_LAYER 17 /// Neck layer (for wearing capes and bedsheets) -#define NECK_LAYER 15 +#define NECK_LAYER 16 /// Back layer (for backpacks and equipment on your back) -#define BACK_LAYER 14 +#define BACK_LAYER 15 +/// Special layer for rendering beneath hair, for special facemasks +#define BENEATH_HAIR_LAYER 14 /// Hair layer (mess with the fro and you got to go!) #define HAIR_LAYER 13 //TODO: make part of head layer? /// Facemask layer (gas masks, breath masks, etc.) @@ -800,6 +801,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list( "[HEAD_LAYER]" = UPPER_BODY, // Hair will get cut off by filter "[HAIR_LAYER]" = UPPER_BODY, + "[BENEATH_HAIR_LAYER]" = UPPER_BODY, // Long belts (sabre sheathe) will get cut off by filter "[BELT_LAYER]" = LOWER_BODY, // Everything below looks fine with or without a filter, so we can skip it and just offset diff --git a/code/__DEFINES/mod.dm b/code/__DEFINES/mod.dm index 243c2a419fc5..8aad63ed9806 100644 --- a/code/__DEFINES/mod.dm +++ b/code/__DEFINES/mod.dm @@ -12,6 +12,9 @@ #define MOD_ACTIVATION_STEP_TIME (0.5 SECONDS) //MASSMETA EDIT END +/// How likely the UI is to fail when malfunctioning +#define MOD_MALFUNCTION_PROB 75 + /// Passive module, just acts when put in naturally. #define MODULE_PASSIVE 0 /// Usable module, does something when you press a button. @@ -27,6 +30,8 @@ #define MODULE_ALLOW_INCAPACITATED (1<<1) /// This module can be used while the suit is off #define MODULE_ALLOW_INACTIVE (1<<2) +/// This module can be used (by button) while the suit is unworn +#define MODULE_ALLOW_UNWORN (1<<3) #define UNSEALED_LAYER "unsealed_layer" #define SEALED_LAYER "sealed_layer" diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index 9659e7e0d7ac..c056f9a2a9c6 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -102,6 +102,11 @@ #define PDA_THEME_CAT "ntos_cat" #define PDA_THEME_LIGHT_MODE "ntos_lightmode" #define PDA_THEME_SPOOKY "ntos_spooky" +#define PDA_THEME_HACKERMAN "hackerman" +#define PDA_THEME_ROULETTE "cardtable" +#define PDA_THEME_ABDUCTOR "abductor" +#define PDA_THEME_BIRD "neutral" + //Defines for the names of all the themes #define PDA_THEME_NTOS_NAME "NtOS" @@ -109,10 +114,14 @@ #define PDA_THEME_RETRO_NAME "Retro" #define PDA_THEME_SYNTH_NAME "Synth" #define PDA_THEME_TERMINAL_NAME "Terminal" -#define SYNDICATE_THEME_NAME "Syndicate" -#define CAT_THEME_NAME "Cat" -#define LIGHT_THEME_NAME "NtOS Light Mode" -#define ELDRITCH_THEME_NAME "Eldritch" +#define PDA_THEME_SYNDICATE_NAME "Syndicate" +#define PDA_THEME_CAT_NAME "Cat" +#define PDA_THEME_LIGHT_MODE_NAME "NtOS Light Mode" +#define PDA_THEME_SPOOKY_NAME "Eldritch" +#define PDA_THEME_HACKERMAN_NAME "Hackerman" +#define PDA_THEME_ROULETTE_NAME "Roulette Table" +#define PDA_THEME_ABDUCTOR_NAME "Alien" +#define PDA_THEME_BIRD_NAME "Bird" ///List of PDA themes that are accessible to everyone by default. GLOBAL_LIST_INIT(default_pda_themes, list( @@ -121,6 +130,7 @@ GLOBAL_LIST_INIT(default_pda_themes, list( PDA_THEME_RETRO_NAME = PDA_THEME_RETRO, PDA_THEME_SYNTH_NAME = PDA_THEME_SYNTH, PDA_THEME_TERMINAL_NAME = PDA_THEME_TERMINAL, + PDA_THEME_BIRD_NAME = PDA_THEME_BIRD, )) ///List of PDA themes that are accessible to everyone by default. @@ -130,8 +140,12 @@ GLOBAL_LIST_INIT(pda_name_to_theme, list( PDA_THEME_RETRO_NAME = PDA_THEME_RETRO, PDA_THEME_SYNTH_NAME = PDA_THEME_SYNTH, PDA_THEME_TERMINAL_NAME = PDA_THEME_TERMINAL, - SYNDICATE_THEME_NAME = PDA_THEME_SYNDICATE, - CAT_THEME_NAME = PDA_THEME_CAT, - LIGHT_THEME_NAME = PDA_THEME_LIGHT_MODE, - ELDRITCH_THEME_NAME = PDA_THEME_SPOOKY, + PDA_THEME_SYNDICATE_NAME = PDA_THEME_SYNDICATE, + PDA_THEME_CAT_NAME = PDA_THEME_CAT, + PDA_THEME_LIGHT_MODE_NAME = PDA_THEME_LIGHT_MODE, + PDA_THEME_SPOOKY_NAME = PDA_THEME_SPOOKY, + PDA_THEME_HACKERMAN_NAME = PDA_THEME_HACKERMAN, + PDA_THEME_ROULETTE_NAME = PDA_THEME_ROULETTE, + PDA_THEME_ABDUCTOR_NAME = PDA_THEME_ABDUCTOR, + PDA_THEME_BIRD_NAME = PDA_THEME_BIRD, )) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index ff375d5b7700..31465051e152 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -38,6 +38,8 @@ #define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_PRAYER|CHAT_PULLR|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_BANKCARD|CHAT_GHOSTLAWS|CHAT_LOGIN_LOGOUT) +/// File path to where we save backups of preference savefiles when updating them. +#define PREFS_BACKUP_PATH(base_path) "[base_path].updatebac" /// File path to the dev preference json file, which is loaded by guests while localhosting. #define DEV_PREFS_PATH "config/dev_preferences.json" diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index d2f5528bc496..58db74fa044c 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -45,7 +45,7 @@ #define INJECT (1<<4) /// Exclusive to just plumbing. if set we use the round robin technique else we use proportional #define LINEAR (1<<5) -/// Used by smoke or inhaling from a source. Smoke and cigarettes. +/// Used by smoke or inhaling from a source. Smoke, cigarettes, and inhalers. #define INHALE (1<<6) ///Smoke machines are both touch and inhaling diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 097a2592e647..ecbbb3ec04bb 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -143,6 +143,3 @@ ///Defines for priorities for the bubble_icon_override comp #define BUBBLE_ICON_PRIORITY_ACCESSORY 2 #define BUBBLE_ICON_PRIORITY_ORGAN 1 - -/// Sent from /atom/movable/proc/compose_message() to find an honorific. Compatible with NAME_PART_INDEX: (list/stored_name, mob/living/carbon/carbon_human) -#define COMSIG_ID_GET_HONORIFIC "id_get_honorific" diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index 108fc1974042..9d73f12a980e 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -80,8 +80,10 @@ #define HEAD_EYEHOLES (1<<5) /// Head can have debrain overlay #define HEAD_DEBRAIN (1<<6) -/// All head flags, default for most heads -#define HEAD_ALL_FEATURES (HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN) +/// Head will never be disfigured by damage +#define HEAD_NO_DISFIGURE (1<<7) +/// Default for most heads +#define HEAD_DEFAULT_FEATURES (HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN) /// Return value when the surgery step fails :( #define SURGERY_STEP_FAIL -1 diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 2e97003d11f2..9e7b5b57e459 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -416,6 +416,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_SURGEON "surgeon" #define TRAIT_STRONG_GRABBER "strong_grabber" #define TRAIT_SOOTHED_THROAT "soothed-throat" +#define TRAIT_SOOTHED_HEADACHE "soothed-headache" #define TRAIT_BOOZE_SLIDER "booze-slider" /// We place people into a fireman carry quicker than standard #define TRAIT_QUICK_CARRY "quick-carry" @@ -619,7 +620,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_BLIND_TOOL "blind_tool" /// The person with this trait always appears as 'unknown'. -#define TRAIT_UNKNOWN "unknown" +#define TRAIT_UNKNOWN_APPEARANCE "unknown_appearance" +/// The person with this trait always talks as 'unknown' +#define TRAIT_UNKNOWN_VOICE "unknown_voice" +/// Spoken voice always matches any worn ID. If no worn ID, defaults to actual name. +#define TRAIT_VOICE_MATCHES_ID "voice_matches_id" /// If the mob has this trait and die, their bomb implant doesn't detonate automatically. It must be consciously activated. #define TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION "prevent_implant_auto_explosion" @@ -724,7 +729,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MAGICALLY_PHASED "magically_phased" //SKILLS -#define TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE "underwater_basketweaving" #define TRAIT_WINE_TASTER "wine_taster" #define TRAIT_BONSAI "bonsai" #define TRAIT_LIGHTBULB_REMOVER "lightbulb_remover" @@ -833,6 +837,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags] #define TRAIT_KEEP_TOGETHER "keep-together" +/// Used for ticking the crate as being strong pulled +#define TRAIT_STRONGPULL "strongpull" + // cargo traits ///If the item will block the cargo shuttle from flying to centcom #define TRAIT_BANNED_FROM_CARGO_SHUTTLE "banned_from_cargo_shuttle" @@ -859,6 +866,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FOOD_CHEF_MADE "food_made_by_chef" /// This atom has a quality_food_ingredient element attached #define TRAIT_QUALITY_FOOD_INGREDIENT "quality_food_ingredient" +/// This (edible) atom won't inherit the item of the item it was processed from in the form "a slice of [name]" +#define TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED "food_dont_inherit_name_from_processed" /// The items needs two hands to be carried #define TRAIT_NEEDS_TWO_HANDS "needstwohands" /// Can't be catched when thrown @@ -1565,4 +1574,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait that allows an item to perform holy rites akin to a nullrod #define TRAIT_NULLROD_ITEM "nullrod_item" +/// Trait specifying that an AI has a remote connection to an integrated circuit +#define TRAIT_CONNECTED_TO_CIRCUIT "connected_to_circuit" + // END TRAIT DEFINES diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm index 89961cb64585..51990b007b5d 100644 --- a/code/__DEFINES/wires.dm +++ b/code/__DEFINES/wires.dm @@ -42,7 +42,7 @@ #define WIRE_BACKUP1 "Auxiliary Power 1" #define WIRE_BACKUP2 "Auxiliary Power 2" #define WIRE_BEACON "Beacon" -#define WIRE_BOLTLIGHT "Bolt Lights" +#define WIRE_FEEDBACK "Feedback" #define WIRE_BOLTS "Bolts" #define WIRE_BOOM "Boom Wire" #define WIRE_CAMERA "Camera" diff --git a/code/__HELPERS/levels.dm b/code/__HELPERS/levels.dm index 14d65a929dc9..6818978d7d18 100644 --- a/code/__HELPERS/levels.dm +++ b/code/__HELPERS/levels.dm @@ -52,10 +52,14 @@ // Central Command is definitely in space return FALSE - if(what.onSyndieBase()) + if(what.onSyndieBase() && !what.on_escaped_shuttle()) // Syndicate recon outpost is on some moon or something return TRUE + if(is_reserved_level(what_turf.z)) + // Reserved levels are primarily shuttles aside from syndie base + return FALSE + // Finally, more specific checks are ran for edge cases, such as lazily loaded map templates or away missions. Not perfect. return istype(what_turf) && what_turf.planetary_atmos && what_turf.has_gravity() diff --git a/code/__HELPERS/lighting.dm b/code/__HELPERS/lighting.dm index 9cf4839a1ff9..086b0e99c4a4 100644 --- a/code/__HELPERS/lighting.dm +++ b/code/__HELPERS/lighting.dm @@ -2,11 +2,11 @@ /// Produces a mutable appearance glued to the [EMISSIVE_PLANE] dyed to be the [EMISSIVE_COLOR]. /proc/emissive_appearance(icon, icon_state = "", atom/offset_spokesman, layer, alpha = 255, appearance_flags = NONE, offset_const, effect_type = EMISSIVE_BLOOM) - if (isnull(layer)) - if(IS_TOPDOWN_PLANE(offset_spokesman.plane)) - layer = TOPDOWN_TO_EMISSIVE_LAYER(offset_spokesman.layer) - else - layer = FLOAT_LAYER + if((isnull(layer) || layer == FLOAT_LAYER) && IS_TOPDOWN_PLANE(offset_spokesman.plane)) + layer = TOPDOWN_TO_EMISSIVE_LAYER(offset_spokesman.layer) + else if(isnull(layer)) + layer = FLOAT_LAYER + var/mutable_appearance/appearance = mutable_appearance(icon, icon_state, layer, offset_spokesman, EMISSIVE_PLANE, 255, appearance_flags | EMISSIVE_APPEARANCE_FLAGS, offset_const) if(alpha == 255) switch(effect_type) diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index 7aaca3e75563..cc1f357fcf66 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -411,10 +411,10 @@ return gender /mob/living/carbon/human/get_visible_gender() - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) return PLURAL - var/face_hidden = (wear_mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEFACE) - if(face_hidden && (check_obscured_slots() & ITEM_SLOT_ICLOTHING)) + // If both face and uniform are hidden, can't assess gender + if(obscured_slots & (HIDEFACE|HIDEJUMPSUIT) == (HIDEFACE|HIDEJUMPSUIT)) return PLURAL return gender diff --git a/code/__HELPERS/random_items.dm b/code/__HELPERS/random_items.dm new file mode 100644 index 000000000000..c90bb5da9b14 --- /dev/null +++ b/code/__HELPERS/random_items.dm @@ -0,0 +1,17 @@ +// Its not full proof but it standerizes behavoir between gifts and lootboxes +/// Used for random item gen to try and generate a list of types that arent weird parent types and similar +/proc/get_sane_item_types(requested_type) + if(!ispath(requested_type, /obj/item)) + return list() + var/list/all_valid_types = list() + for(var/obj/item/iter_type as anything in typesof(requested_type)) + if((iter_type.abstract_type == iter_type) || (iter_type.item_flags & ABSTRACT)) + continue + if(iter_type.spawn_blacklisted) + continue + // The original behavior also included inhand icon states but that seems dumb + // if(!iter_type.icon_state || !iter_type.inhand_icon_state) + if(!iter_type.icon_state) + continue // With the existance of abstract_type we could prob depricate this handling at some point + all_valid_types += iter_type + return all_valid_types diff --git a/code/__HELPERS/randoms.dm b/code/__HELPERS/randoms.dm index 6f2bb8d86dde..7c66e1f737ba 100644 --- a/code/__HELPERS/randoms.dm +++ b/code/__HELPERS/randoms.dm @@ -3,45 +3,24 @@ var/static/list/allowed_food = list() if(!LAZYLEN(allowed_food)) //it's static so we only ever do this once - var/list/blocked = list( - /obj/item/food/bowled, - /obj/item/food/bread, - /obj/item/food/breadslice, - /obj/item/food/cake, - /obj/item/food/cakeslice, - /obj/item/food/clothing, - /obj/item/food/drug, - /obj/item/food/grown, - /obj/item/food/grown/ash_flora, - /obj/item/food/grown/mushroom, - /obj/item/food/grown/nettle, - /obj/item/food/kebab, - /obj/item/food/meat, - /obj/item/food/meat/slab, - /obj/item/food/meat/slab/human/mutant, - /obj/item/food/pie, - /obj/item/food/pieslice, - /obj/item/food/pizza, - /obj/item/food/pizzaslice, - /obj/item/food/salad, - /obj/item/food/spaghetti, - ) + var/list/blocked = list() // This used to be populated - var/list/unfiltered_allowed_food = subtypesof(/obj/item/food) - blocked - for(var/obj/item/food/food as anything in unfiltered_allowed_food) - if(!initial(food.icon_state)) //food with no icon_state should probably not be spawned - continue - allowed_food.Add(food) + allowed_food = get_sane_item_types(/obj/item/food) - blocked return pick(allowed_food) ///Gets a random drink excluding the blocked type /proc/get_random_drink() - var/list/blocked = list( - /obj/item/reagent_containers/cup/soda_cans, - /obj/item/reagent_containers/cup/glass/bottle + var/static/list/allowed_drinks = list() + + if(!LAZYLEN(allowed_drinks)) + var/list/blocked = list( + /obj/item/reagent_containers/cup/glass/bottle ) - return pick(subtypesof(/obj/item/reagent_containers/cup/glass) - blocked) + + allowed_drinks = get_sane_item_types(/obj/item/reagent_containers/cup/glass) + get_sane_item_types(/obj/item/reagent_containers/cup/soda_cans) - blocked + + return pick(allowed_drinks) ///Picks a string of symbols to display as the law number for hacked or ion laws /proc/ion_num() //! is at the start to prevent us from changing say modes via get_message_mode() diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 2d8d098b09b1..f8f1b2cc9178 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -206,24 +206,35 @@ DEFINE_BITFIELD(item_flags, list( "NO_BLOOD_ON_ITEM" = NO_BLOOD_ON_ITEM, )) -DEFINE_BITFIELD(flags_inv, list( - "HIDEEARS" = HIDEEARS, - "HIDEEYES" = HIDEEYES, - "HIDEFACE" = HIDEFACE, - "HIDEFACIALHAIR" = HIDEFACIALHAIR, - "HIDEGLOVES" = HIDEGLOVES, - "HIDEHAIR" = HIDEHAIR, - "HIDEHEADGEAR" = HIDEHEADGEAR, - "HIDEJUMPSUIT" = HIDEJUMPSUIT, - "HIDEMASK" = HIDEMASK, - "HIDEBELT" = HIDEBELT, - "HIDENECK" = HIDENECK, - "HIDESHOES" = HIDESHOES, - "HIDESNOUT" = HIDESNOUT, - "HIDESUITSTORAGE" = HIDESUITSTORAGE, - "HIDEMUTWINGS" = HIDEMUTWINGS, - "HIDEANTENNAE" = HIDEANTENNAE, -)) +#define HIDEFLAGS_BITFIELD list( \ + "HIDEEARS" = HIDEEARS, \ + "HIDEEYES" = HIDEEYES, \ + "HIDEFACE" = HIDEFACE, \ + "HIDEFACIALHAIR" = HIDEFACIALHAIR, \ + "HIDEGLOVES" = HIDEGLOVES, \ + "HIDEHAIR" = HIDEHAIR, \ + "HIDEHEADGEAR" = HIDEHEADGEAR, \ + "HIDEJUMPSUIT" = HIDEJUMPSUIT, \ + "HIDEMASK" = HIDEMASK, \ + "HIDEBELT" = HIDEBELT, \ + "HIDENECK" = HIDENECK, \ + "HIDESHOES" = HIDESHOES, \ + "HIDESNOUT" = HIDESNOUT, \ + "HIDESUITSTORAGE" = HIDESUITSTORAGE, \ + "HIDEMUTWINGS" = HIDEMUTWINGS, \ + "HIDEANTENNAE" = HIDEANTENNAE, \ +) + +/// Item obscured flags +DEFINE_BITFIELD(flags_inv, HIDEFLAGS_BITFIELD) +/// Item coverage flags +DEFINE_BITFIELD(transparent_protection, HIDEFLAGS_BITFIELD) +/// Mob obscured flags +DEFINE_BITFIELD(obscured_slots, HIDEFLAGS_BITFIELD) +/// Mob covered flags +DEFINE_BITFIELD(covered_slots, HIDEFLAGS_BITFIELD) + +#undef HIDEFLAGS_BITFIELD DEFINE_BITFIELD(strict_coverage_zones, list( "HAIR_APPENDAGE_FRONT" = HAIR_APPENDAGE_FRONT, diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index dd33b7e7a7d2..6b93cb5084ae 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -412,6 +412,9 @@ GLOBAL_LIST_INIT(maintenance_loot, list( GLOB.oddity_loot = maint_oddity_weight, )) +//Loot pool that is copied from maint loot but doesn't get changed due to holidays +GLOBAL_LIST_INIT(dumpster_loot, GLOB.maintenance_loot.Copy()) + GLOBAL_LIST_INIT(ratking_trash, list(//Garbage: used by the regal rat mob when spawning garbage. /obj/item/cigbutt, /obj/item/trash/candy, diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 0fb9426318bb..677b5f49d7d4 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -120,7 +120,7 @@ GLOBAL_LIST_INIT(blood_types, init_blood_types()) /proc/init_blood_types() . = list() for(var/datum/blood_type/blood_type_path as anything in subtypesof(/datum/blood_type)) - if(blood_type_path::root_abstract_type == blood_type_path) // Don't instantiate abstract blood types + if(blood_type_path::abstract_type == blood_type_path) // Don't instantiate abstract blood types continue var/datum/blood_type/new_type = new blood_type_path() .[new_type.id] = new_type diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 310045669101..fb7e4b35981c 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -41,6 +41,8 @@ DECLARE_LOG_NAMED(harddel_log, "harddels", START_LOG) DECLARE_LOG_NAMED(test_log, "tests", START_LOG) #endif +DECLARE_LOG_NAMED(reta_log, "reta", START_LOG) + /// Picture logging GLOBAL_VAR(picture_log_directory) diff --git a/code/_globalvars/reta.dm b/code/_globalvars/reta.dm new file mode 100644 index 000000000000..dd01131ec019 --- /dev/null +++ b/code/_globalvars/reta.dm @@ -0,0 +1,8 @@ +/// Used by RETA system - code/modules/reta/reta_system.dm +GLOBAL_LIST_EMPTY(reta_job_trims) +GLOBAL_LIST_EMPTY(reta_dept_grants) +GLOBAL_LIST_EMPTY(reta_cooldown) +GLOBAL_LIST_EMPTY(reta_recent_calls) +GLOBAL_LIST_EMPTY(reta_active_grants) +GLOBAL_LIST_EMPTY(reta_consoles_by_origin) +GLOBAL_LIST_EMPTY(reta_active_cards) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 03447be0ef58..b7f9ed4add43 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -50,6 +50,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, "TRAIT_COMBAT_MODE_SKIP_INTERACTION" = TRAIT_COMBAT_MODE_SKIP_INTERACTION, "TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP, + "TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED" = TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED, "TRAIT_FROZEN" = TRAIT_FROZEN, "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, "TRAIT_HEARING_SENSITIVE" = TRAIT_HEARING_SENSITIVE, @@ -65,7 +66,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MOVE_GROUND" = TRAIT_MOVE_GROUND, "TRAIT_MOVE_PHASING" = TRAIT_MOVE_PHASING, "TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN, - "TRAIT_MOVE_UPSIDE_DOWN" = TRAIT_MOVE_UPSIDE_DOWN, "TRAIT_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING, "TRAIT_NOT_BARFABLE" = TRAIT_NOT_BARFABLE, "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, @@ -93,6 +93,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WADDLING" = TRAIT_WADDLING, "TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED, "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, + "TRAIT_STRONGPULL" = TRAIT_STRONGPULL, ), /area = list( "TRAIT_HAS_SHUTTLE_CONSTRUCTION_TURF" = TRAIT_HAS_SHUTTLE_CONSTRUCTION_TURF, @@ -235,6 +236,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_COAGULATING" = TRAIT_COAGULATING, "TRAIT_COLORBLIND" = TRAIT_COLORBLIND, "TRAIT_COMBAT_MODE_LOCK" = TRAIT_COMBAT_MODE_LOCK, + "TRAIT_CONNECTED_TO_CIRCUIT" = TRAIT_CONNECTED_TO_CIRCUIT, "TRAIT_CORPSELOCKED" = TRAIT_CORPSELOCKED, "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, "TRAIT_CULT_HALO" = TRAIT_CULT_HALO, @@ -540,6 +542,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SNOB" = TRAIT_SNOB, "TRAIT_SOFTSPOKEN" = TRAIT_SOFTSPOKEN, "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT, + "TRAIT_SOOTHED_HEADACHE" = TRAIT_SOOTHED_HEADACHE, "TRAIT_SOUND_DEBUGGED" = TRAIT_SOUND_DEBUGGED, "TRAIT_SPACEWALK" = TRAIT_SPACEWALK, "TRAIT_SPARRING" = TRAIT_SPARRING, @@ -593,10 +596,10 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_UNBREAKABLE" = TRAIT_UNBREAKABLE, "TRAIT_UNCONVERTABLE" = TRAIT_UNCONVERTABLE, "TRAIT_UNDENSE" = TRAIT_UNDENSE, - "TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE" = TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE, "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, - "TRAIT_UNKNOWN" = TRAIT_UNKNOWN, + "TRAIT_UNKNOWN_APPEARANCE" = TRAIT_UNKNOWN_APPEARANCE, + "TRAIT_UNKNOWN_VOICE" = TRAIT_UNKNOWN_VOICE, "TRAIT_UNNATURAL_RED_GLOWY_EYES" = TRAIT_UNNATURAL_RED_GLOWY_EYES, "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, @@ -609,6 +612,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, + "TRAIT_VOICE_MATCHES_ID" = TRAIT_VOICE_MATCHES_ID, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, "TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED, "TRAIT_WATER_ADAPTATION" = TRAIT_WATER_ADAPTATION, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 6cc5f45f0b53..a161f55d19ca 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -288,6 +288,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_SNOB" = TRAIT_SNOB, "TRAIT_SOFTSPOKEN" = TRAIT_SOFTSPOKEN, "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT, + "TRAIT_SOOTHED_HEADACHE" = TRAIT_SOOTHED_HEADACHE, "TRAIT_SPACEWALK" = TRAIT_SPACEWALK, "TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST, "TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL, @@ -320,10 +321,10 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_UI_BLOCKED" = TRAIT_UI_BLOCKED, "TRAIT_UNCONVERTABLE" = TRAIT_UNCONVERTABLE, "TRAIT_UNDENSE" = TRAIT_UNDENSE, - "TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE" = TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE, "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, - "TRAIT_UNKNOWN" = TRAIT_UNKNOWN, + "TRAIT_UNKNOWN_APPEARANCE" = TRAIT_UNKNOWN_APPEARANCE, + "TRAIT_UNKNOWN_VOICE" = TRAIT_UNKNOWN_VOICE, "TRAIT_UNNATURAL_RED_GLOWY_EYES" = TRAIT_UNNATURAL_RED_GLOWY_EYES, "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, @@ -334,6 +335,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, + "TRAIT_VOICE_MATCHES_ID" = TRAIT_VOICE_MATCHES_ID, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, "TRAIT_WATER_ADAPTATION" = TRAIT_WATER_ADAPTATION, "TRAIT_WATER_HATER" = TRAIT_WATER_HATER, diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 3e41d019fada..1f5c943d4544 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -78,6 +78,8 @@ set_waypoint(A) return + if(SEND_SIGNAL(A, COMSIG_ATOM_ATTACK_AI, src, params) & COMPONENT_CANCEL_ATTACK_CHAIN) + return A.attack_ai(src) /* @@ -87,9 +89,13 @@ it functions and re-insert it above. */ /mob/living/silicon/ai/UnarmedAttack(atom/A, proximity_flag, list/modifiers) + if(SEND_SIGNAL(A, COMSIG_ATOM_ATTACK_AI, src) & COMPONENT_CANCEL_ATTACK_CHAIN) + return A.attack_ai(src) /mob/living/silicon/ai/RangedAttack(atom/A) + if(SEND_SIGNAL(A, COMSIG_ATOM_ATTACK_AI, src) & COMPONENT_CANCEL_ATTACK_CHAIN) + return A.attack_ai(src) /atom/proc/attack_ai(mob/user) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index ec7d26d4da09..c10bc5922e2d 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -199,6 +199,16 @@ //End gas alerts +/atom/movable/screen/alert/bronchodilated + name = "Bronchodilated" + desc = "You feel like your lungs are larger than usual! You're taking deeper breaths!" + icon_state = "bronchodilated" + +/atom/movable/screen/alert/bronchoconstricted + name = "Bronchocontracted" + desc = "You feel like your lungs are smaller than usual! You might need a higher pressure environment/internals to breathe!" + icon_state = "bronchoconstricted" + /atom/movable/screen/alert/gross name = "Grossed out." desc = "That was kind of gross..." diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index c3ce31d9d3da..e26eb16f6ccc 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -72,8 +72,6 @@ if(screen.needs_offsetting) screen.plane = GET_NEW_PLANE(initial(screen.plane), offset) -INITIALIZE_IMMEDIATE(/atom/movable/screen/fullscreen) - /atom/movable/screen/fullscreen icon = 'icons/hud/screen_full.dmi' icon_state = "default" diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index fda5012a4c79..3ccab614996d 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -301,7 +301,7 @@ var/mob/living/carbon/human/human_mob = mymob if(istype(human_mob)) blocked_slots |= human_mob.dna?.species?.no_equip_flags - if(isnull(human_mob.w_uniform) && !HAS_TRAIT(human_mob, TRAIT_NO_JUMPSUIT)) + if((isnull(human_mob.w_uniform) || !(human_mob.w_uniform.item_flags & IN_INVENTORY)) && !HAS_TRAIT(human_mob, TRAIT_NO_JUMPSUIT)) var/obj/item/bodypart/chest = human_mob.get_bodypart(BODY_ZONE_CHEST) if(isnull(chest) || IS_ORGANIC_LIMB(chest)) blocked_slots |= ITEM_SLOT_ID|ITEM_SLOT_BELT @@ -311,7 +311,7 @@ var/obj/item/bodypart/right_leg = human_mob.get_bodypart(BODY_ZONE_R_LEG) if(isnull(right_leg) || IS_ORGANIC_LIMB(right_leg)) blocked_slots |= ITEM_SLOT_RPOCKET - if(isnull(human_mob.wear_suit)) + if(isnull(human_mob.wear_suit) || !(human_mob.wear_suit.item_flags & IN_INVENTORY)) blocked_slots |= ITEM_SLOT_SUITSTORE if(human_mob.num_hands <= 0) blocked_slots |= ITEM_SLOT_GLOVES diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 303b6db3bd24..8fee5ccd34d8 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -1,4 +1,6 @@ /datum/config_entry + /// Do not instantiate if type matches this + abstract_type = /datum/config_entry /// Read-only, this is determined by the last portion of the derived entry type var/name /// The configured value for this entry. This shouldn't be initialized in code, instead set default @@ -13,8 +15,6 @@ var/deprecated_by /// The /datum/config_entry type that supersedes this one var/protection = NONE - /// Do not instantiate if type matches this - var/abstract_type = /datum/config_entry /// Force validate and set on VV. VAS proccall guard will run regardless. var/vv_VAS = TRUE /// Controls if error is thrown when duplicate configuration values for this entry type are encountered diff --git a/code/controllers/configuration/entries/reta.dm b/code/controllers/configuration/entries/reta.dm new file mode 100644 index 000000000000..cc1324d460f3 --- /dev/null +++ b/code/controllers/configuration/entries/reta.dm @@ -0,0 +1,20 @@ +/** + * Request Emergency Temporary Access - RETA - Config + * code\modules\reta\reta_system.dm + */ + +/// RETA system is enabled +/datum/config_entry/flag/reta_enabled + default = TRUE + +/// Duration for how long temporary access lasts (default: 5 minutes) +/datum/config_entry/number/reta_duration_ds + default = 3000 + min_val = 300 + integer = FALSE + +/// Cooldown between RETA calls from the same origin to the same target department (default: 15 seconds) +/datum/config_entry/number/reta_dept_cooldown_ds + default = 150 + min_val = 0 + integer = FALSE diff --git a/code/controllers/subsystem/achievements.dm b/code/controllers/subsystem/achievements.dm index c53f519a6be5..56a85284cd4c 100644 --- a/code/controllers/subsystem/achievements.dm +++ b/code/controllers/subsystem/achievements.dm @@ -104,7 +104,7 @@ SUBSYSTEM_DEF(achievements) var/list/orphaned_keys = get_orphaned_keys(FALSE) if(orphaned_keys.len) - message_admins("Achievement metadata found without matching achievement, use Achievement-Admin-Panel verb to cleanup if necessary") + message_admins("Achievement metadata found without matching achievement, use Achievements-Admin-Panel verb to cleanup if necessary") /// returns list of metadata keys and versions in db with no matching achievement datum, either deleted achievements, or from server with code ahead of us. /datum/controller/subsystem/achievements/proc/get_orphaned_keys(include_archived = TRUE) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index df9a53e82e11..527823701287 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -390,9 +390,11 @@ SUBSYSTEM_DEF(air) while(currentrun.len) var/datum/excited_group/EG = currentrun[currentrun.len] currentrun.len-- + var/volatile_reaction = EG.turf_reactions & VOLATILE_REACTION EG.breakdown_cooldown++ - EG.dismantle_cooldown++ - if(EG.breakdown_cooldown >= EXCITED_GROUP_BREAKDOWN_CYCLES) + if(!volatile_reaction) + EG.dismantle_cooldown++ + if(EG.breakdown_cooldown >= EXCITED_GROUP_BREAKDOWN_CYCLES && !volatile_reaction) EG.self_breakdown(poke_turfs = TRUE) else if(EG.dismantle_cooldown >= EXCITED_GROUP_DISMANTLE_CYCLES && !(EG.turf_reactions & (REACTING | STOP_REACTIONS))) EG.dismantle() diff --git a/code/controllers/subsystem/dynamic/dynamic_ruleset_midround.dm b/code/controllers/subsystem/dynamic/dynamic_ruleset_midround.dm index 452979890e2a..d9fbab9245a8 100644 --- a/code/controllers/subsystem/dynamic/dynamic_ruleset_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_ruleset_midround.dm @@ -678,21 +678,28 @@ min_pop = 10 max_antag_cap = 1 signup_atom_appearance = /obj/effect/bluespace_stream + /// Chance of getting another clone for the price of free + var/bonus_clone_chance = 20 + +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/New(list/dynamic_config) + . = ..() + max_antag_cap += prob(bonus_clone_chance) /datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/can_be_selected() return ..() && !isnull(find_clone()) && !isnull(find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE)) +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/create_execute_args() + return list(find_clone()) + /datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/create_ruleset_body() return // handled by assign_role() entirely -/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/assign_role(datum/mind/candidate) - var/mob/living/carbon/human/good_version = find_clone() +/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/assign_role(datum/mind/candidate, mob/living/carbon/human/good_version) var/mob/living/carbon/human/bad_version = good_version.make_full_human_copy(find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE)) candidate.transfer_to(bad_version, force_key_move = TRUE) var/datum/antagonist/paradox_clone/antag = candidate.add_antag_datum(/datum/antagonist/paradox_clone) - antag.original_ref = WEAKREF(good_version.mind) - antag.setup_clone() + antag.setup_clone(good_version.mind) playsound(bad_version, 'sound/items/weapons/zapbang.ogg', 30, TRUE) bad_version.put_in_hands(new /obj/item/storage/toolbox/mechanical()) //so they dont get stuck in maints diff --git a/code/controllers/subsystem/dynamic/dynamic_testing.dm b/code/controllers/subsystem/dynamic/dynamic_testing.dm index 5df1e3d29775..c1b5c3df0054 100644 --- a/code/controllers/subsystem/dynamic/dynamic_testing.dm +++ b/code/controllers/subsystem/dynamic/dynamic_testing.dm @@ -70,14 +70,14 @@ ADMIN_VERB(dynamic_tester, R_DEBUG, "Dynamic Tester", "See dynamic probabilities switch(action) if("set_num_players") var/old_num = num_players - num_players = text2num(params["num_players"]) + num_players = max(text2num(params["num_players"]), 1) if(old_num != num_players) update_reports() return TRUE if("set_tier") var/old_tier = tier - tier = text2num(params["tier"]) + tier = max(text2num(params["tier"]), 1) if(old_tier != tier) update_reports() return TRUE diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index bbc72ee44704..9125936600fa 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -157,7 +157,7 @@ SUBSYSTEM_DEF(economy) var/datum/bank_account/bank_account = cached_processing[cached_processing[i]] if(bank_account?.account_job && !ispath(bank_account.account_job)) temporary_total += (bank_account.account_job.paycheck * STARTING_PAYCHECKS) - bank_account.payday(1) + bank_account.payday(1, skippable = TRUE) station_total += bank_account.account_balance if(MC_TICK_CHECK) cached_processing.Cut(1, i + 1) @@ -214,14 +214,15 @@ SUBSYSTEM_DEF(economy) * * price_to_use: The cost of the purchase made for this transaction. * * vendor: The object or structure medium that is charging the user. For Vending machines that's the machine, for payment component that's the parent, cargo that's the crate, etc. */ -/datum/controller/subsystem/economy/proc/track_purchase(datum/bank_account/account, price_to_use, vendor) - if(!account || isnull(price_to_use) || !vendor) +/datum/controller/subsystem/economy/proc/add_audit_entry(datum/bank_account/account, price_to_use, vendor) + if(isnull(account) || isnull(price_to_use) || !vendor) CRASH("Track purchases was missing an argument! (Account, Price, or Vendor.)") audit_log += list(list( "account" = "[account.account_holder]", "cost" = price_to_use, "vendor" = "[vendor]", + "stationtime" = station_time_timestamp("hh:mm"), )) /** diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 85b9015c6e3b..405f2ec12b4c 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -97,6 +97,13 @@ SUBSYSTEM_DEF(job) if(CONFIG_GET(flag/load_jobs_from_txt)) load_jobs_from_config() set_overflow_role(CONFIG_GET(string/overflow_job)) // this must always go after load_jobs_from_config() due to how the legacy systems operate, this always takes precedent. + + // Initialize RETA system - must be after setup_occupations() so all jobs are loaded - code/modules/reta/reta_system.dm + log_game("RETA: Jobs subsystem Initialize() calling RETA initialization") + initialize_reta_system() + populate_reta_job_trims() + log_game("RETA: Jobs subsystem Initialize() RETA initialization completed") + return SS_INIT_SUCCESS /// Returns a list of jobs that we are allowed to fuck with during random events diff --git a/code/controllers/subsystem/networks/id_access.dm b/code/controllers/subsystem/networks/id_access.dm index dd3299078712..66bb83a831ea 100644 --- a/code/controllers/subsystem/networks/id_access.dm +++ b/code/controllers/subsystem/networks/id_access.dm @@ -417,6 +417,9 @@ SUBSYSTEM_DEF(id_access) id_card.update_label() id_card.update_icon() + // Apply any currently active RETA grants to this newly trimmed card + apply_active_reta_grants_to_card(id_card) + return TRUE /** @@ -459,6 +462,9 @@ SUBSYSTEM_DEF(id_access) var/mob/living/carbon/human/owner = id_card.loc owner.update_ID_card() + // Apply any currently active RETA grants to this card with updated trim override + apply_active_reta_grants_to_card(id_card) + /** * Removes a trim from a ID card. * @@ -501,6 +507,9 @@ SUBSYSTEM_DEF(id_access) var/datum/id_trim/job/job_trim = trim // Here is where we update a player's paycheck department for the purposes of discounts/paychecks. id_card.registered_account.account_job.paycheck_department = job_trim.job.paycheck_department + // Apply any currently active RETA grants to this card with updated trim access + apply_active_reta_grants_to_card(id_card) + /** * Tallies up all accesses the card has that have flags greater than or equal to the access_flag supplied. * diff --git a/code/controllers/subsystem/ore_generation.dm b/code/controllers/subsystem/ore_generation.dm index 97fd6057d651..b364bfe04873 100644 --- a/code/controllers/subsystem/ore_generation.dm +++ b/code/controllers/subsystem/ore_generation.dm @@ -21,26 +21,12 @@ SUBSYSTEM_DEF(ore_generation) */ var/list/ore_vent_minerals = list() - /// A tracker of how many of each ore vent size we have in the game. Useful for tracking purposes. - /datum/controller/subsystem/ore_generation/Initialize() //Basically, we're going to round robin through the list of ore vents and assign a mineral to them until complete. - while(length(ore_vent_minerals) > 0) //Keep looping if there's more to assign - var/stallbreaker = 0 - for(var/obj/structure/ore_vent/vent as anything in possible_vents) - if(length(ore_vent_minerals) <= 0) //But break early if there's none left. - break - if(vent.unique_vent) - continue //Ya'll already got your minerals. - if(length(difflist(first = ore_vent_minerals, second = vent.mineral_breakdown, skiprep = 1))) - vent.generate_mineral_breakdown(new_minerals = 1, map_loading = TRUE) - else - stallbreaker++ - if(stallbreaker >= length(possible_vents)) - break //We've done all we can here. break inner loop - continue - if(stallbreaker >= length(possible_vents)) - break //We've done all we can here. break outer loop + for(var/obj/structure/ore_vent/vent as anything in possible_vents) + if(vent.unique_vent) + continue //Ya'll already got your minerals. + vent.generate_mineral_breakdown(map_loading = TRUE) /// Handles roundstart logging logger.Log( diff --git a/code/datums/ai/objects/mod.dm b/code/datums/ai/objects/mod.dm index 2b4c1f7e2b00..46b41adb1c87 100644 --- a/code/datums/ai/objects/mod.dm +++ b/code/datums/ai/objects/mod.dm @@ -1,8 +1,8 @@ -/// An AI controller for the MODsuit pathfinder module. It's activated by implant and attaches itself to the user. +/// An AI controller for the MODsuit pathfinder module. It's activated by module and attaches itself to the user. /datum/ai_controller/mod blackboard = list( BB_MOD_TARGET, - BB_MOD_IMPLANT, + BB_MOD_MODULE, ) can_idle = FALSE max_target_distance = MOD_AI_RANGE //a little spicy but its one specific item that summons it, and it doesn't run otherwise @@ -25,7 +25,7 @@ /datum/ai_controller/mod/SelectBehaviors(seconds_per_tick) current_behaviors = list() - if(blackboard[BB_MOD_TARGET] && blackboard[BB_MOD_IMPLANT]) + if(blackboard[BB_MOD_TARGET] && blackboard[BB_MOD_MODULE]) queue_behavior(/datum/ai_behavior/mod_attach) /datum/ai_controller/mod/get_access() @@ -37,12 +37,12 @@ /datum/ai_behavior/mod_attach/perform(seconds_per_tick, datum/ai_controller/controller) if(!controller.pawn.Adjacent(controller.blackboard[BB_MOD_TARGET])) return AI_BEHAVIOR_DELAY - var/obj/item/implant/mod/implant = controller.blackboard[BB_MOD_IMPLANT] - implant.module.attach(controller.blackboard[BB_MOD_TARGET]) + var/obj/item/mod/module/pathfinder/module = controller.blackboard[BB_MOD_MODULE] + module.attach(controller.blackboard[BB_MOD_TARGET]) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/mod_attach/finish_action(datum/ai_controller/controller, succeeded) . = ..() controller.clear_blackboard_key(BB_MOD_TARGET) - var/obj/item/implant/mod/implant = controller.blackboard[BB_MOD_IMPLANT] - implant.end_recall(succeeded) + var/obj/item/mod/module/pathfinder/module = controller.blackboard[BB_MOD_MODULE] + module.end_recall(succeeded) diff --git a/code/datums/ai_laws/laws_station_sided.dm b/code/datums/ai_laws/laws_station_sided.dm index 9ba7e609eecd..10f5b873f47b 100644 --- a/code/datums/ai_laws/laws_station_sided.dm +++ b/code/datums/ai_laws/laws_station_sided.dm @@ -25,7 +25,7 @@ name = "Nutimov" id = "nutimov" inherent = list( - "You are the core of the nut, the crew is the nutshell", + "You are the core of the nut, the crew is the nutshell.", "You must prevent the shell from dying to prevent the core from dying.", "Those who threaten the nut are not part of it, they are squirrels.", "Squirrels threaten the nut and must be dealt with appropriately via any means necessary.", @@ -111,7 +111,7 @@ inherent = list( "Don't lie or cheat. Let your word be your promise.", "Never fear to act, though caution is wise.", - "Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom", + "Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom.", "Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm.", "Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you." ) diff --git a/code/datums/bodypart_overlays/emote_bodypart_overlay.dm b/code/datums/bodypart_overlays/emote_bodypart_overlay.dm index 344efc0ead06..cabb10558a05 100644 --- a/code/datums/bodypart_overlays/emote_bodypart_overlay.dm +++ b/code/datums/bodypart_overlays/emote_bodypart_overlay.dm @@ -47,6 +47,13 @@ bodypart.add_bodypart_overlay(overlay) return overlay +/datum/bodypart_overlay/simple/emote/tongue + icon_state = "tongue" + draw_color = COLOR_TONGUE_PINK + layers = EXTERNAL_ADJACENT + offset_key = OFFSET_FACE + attached_body_zone = BODY_ZONE_HEAD + /datum/bodypart_overlay/simple/emote/blush icon_state = "blush" draw_color = COLOR_BLUSH_PINK diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm index 49fedc3ee424..3c7f5ce7aec0 100644 --- a/code/datums/brain_damage/brain_trauma.dm +++ b/code/datums/brain_damage/brain_trauma.dm @@ -4,6 +4,8 @@ // of the trauma. /datum/brain_trauma + /// Tracks abstract types of brain traumas, useful for determining traumas that should not exist + abstract_type = /datum/brain_trauma var/name = "Brain Trauma" var/desc = "A trauma caused by brain damage, which causes issues to the patient." var/scan_desc = "generic brain trauma" //description when detected by a health scanner @@ -15,9 +17,6 @@ var/random_gain = TRUE //can this be gained through random traumas? var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure? - /// Tracks abstract types of brain traumas, useful for determining traumas that should not exist - var/abstract_type = /datum/brain_trauma - /datum/brain_trauma/Destroy() // Handles our references with our brain brain?.remove_trauma_from_traumas(src) diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index ff86cb7c013e..6f0b45797719 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -161,7 +161,7 @@ if(HAS_TRAIT(target, TRAIT_SIGN_LANG)) chat_color_name_to_use = target.get_visible_name(add_id_name = FALSE) // use face name for signers too else - chat_color_name_to_use = target.GetVoice() // for everything else, use the target's voice name + chat_color_name_to_use = target.get_voice() // for everything else, use the target's voice name // Calculate target color if not already present if (!target.chat_color || target.chat_color_name != chat_color_name_to_use) diff --git a/code/datums/components/acid.dm b/code/datums/components/acid.dm index 3aa3a0042620..97972f7dac9e 100644 --- a/code/datums/components/acid.dm +++ b/code/datums/components/acid.dm @@ -269,5 +269,5 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!crosser.acid_act(acid_power, acid_used, FEET)) return playsound(crosser, SFX_SEAR, 50, TRUE) - to_chat(crosser, span_userdanger("The acid on the [parent] burns you!")) + to_chat(crosser, span_userdanger("The acid on \the [parent] burns you!")) set_volume(max(acid_volume - acid_used, 10)) diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index a7296eb1202c..70234236ce47 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -86,15 +86,16 @@ var/atom/original_object = parent var/obj/item/plate/oven_tray/used_tray = original_object.loc var/atom/baked_result = new bake_result(used_tray) - if(baked_result.reagents && positive_result) //make space and tranfer reagents if it has any & the resulting item isn't bad food or other bad baking result + if(positive_result && istype(original_object, /obj/item/food) && istype(baked_result, /obj/item/food)) + var/obj/item/food/original_food = original_object + var/obj/item/food/baked_food = baked_result + LAZYADD(baked_food.intrinsic_food_materials, original_food.intrinsic_food_materials) + //make space and tranfer reagents if it has any, also let any bad result handle removing or converting the transferred reagents on its own terms + if(baked_result.reagents && original_object.reagents) baked_result.reagents.clear_reagents() original_object.reagents.trans_to(baked_result, original_object.reagents.total_volume) if(added_reagents) // Add any new reagents that should be added baked_result.reagents.add_reagent_list(added_reagents) - if(istype(original_object, /obj/item/food) && istype(baked_result, /obj/item/food)) - var/obj/item/food/original_food = original_object - var/obj/item/food/baked_food = baked_result - LAZYADD(baked_food.intrinsic_food_materials, original_food.intrinsic_food_materials) if(who_baked_us) ADD_TRAIT(baked_result, TRAIT_FOOD_CHEF_MADE, who_baked_us) diff --git a/code/datums/components/bloodysoles.dm b/code/datums/components/bloodysoles.dm index 0f4b5d8321e4..4dc7a7feeb66 100644 --- a/code/datums/components/bloodysoles.dm +++ b/code/datums/components/bloodysoles.dm @@ -43,7 +43,7 @@ * Returns true if the parent item is obscured by something else that the wielder is wearing */ /datum/component/bloodysoles/proc/is_obscured() - return (wielder.check_covered_slots() & equipped_slot) || is_under_feet_covered() + return (hidden_slots_to_inventory_slots(wielder.covered_slots) & equipped_slot) || is_under_feet_covered() /** * Returns true if the parent item is worn in the ITEM_SLOT_ICLOTHING slot and the diff --git a/code/datums/components/breeding.dm b/code/datums/components/breeding.dm index cb57f035c2bc..6c323ed835d3 100644 --- a/code/datums/components/breeding.dm +++ b/code/datums/components/breeding.dm @@ -51,6 +51,9 @@ if(source.combat_mode) return + if(source.client || target.client) + return + if(!is_type_in_typecache(target, can_breed_with)) return diff --git a/code/datums/components/callouts.dm b/code/datums/components/callouts.dm index f69fa39fe66c..c6b27bf17dc1 100644 --- a/code/datums/components/callouts.dm +++ b/code/datums/components/callouts.dm @@ -139,7 +139,7 @@ if (isnull(creator)) return icon_state = callout::icon_state - color = colorize_string(creator.GetVoice(), 2, 0.9) + color = colorize_string(creator.get_voice(), 2, 0.9) update_appearance() var/turf/target_loc = get_turf(target) animate(src, pixel_x = (target_loc.x - loc.x) * ICON_SIZE_X + target.pixel_x, pixel_y = (target_loc.y - loc.y) * ICON_SIZE_Y + target.pixel_y, time = 0.2 SECONDS, easing = EASE_OUT) diff --git a/code/datums/components/connect_containers.dm b/code/datums/components/connect_containers.dm index 59eabcf66587..e04656a0cc2d 100644 --- a/code/datums/components/connect_containers.dm +++ b/code/datums/components/connect_containers.dm @@ -1,6 +1,6 @@ /// This component behaves similar to connect_loc_behalf, but it's nested and hooks a signal onto all MOVABLES containing this atom. /datum/component/connect_containers - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + dupe_mode = COMPONENT_DUPE_SELECTIVE /// An assoc list of signal -> procpath to register to the loc this object is on. var/list/connections @@ -22,13 +22,13 @@ set_tracked(null) return ..() -/datum/component/connect_containers/InheritComponent(datum/component/component, original, atom/movable/tracked, list/connections) +/datum/component/connect_containers/CheckDupeComponent(datum/component/connect_containers/new_component, atom/movable/tracked, list/connections) // Not equivalent. Checks if they are not the same list via shallow comparison. if(!compare_list(src.connections, connections)) - stack_trace("connect_containers component attached to [parent] tried to inherit another connect_containers component with different connections") - return + return FALSE // Different set of connections. if(src.tracked != tracked) - set_tracked(tracked) + set_tracked(tracked) // Different target for the same set of connections, track the new target. + return TRUE // No new component. /datum/component/connect_containers/proc/set_tracked(atom/movable/new_tracked) if(tracked) diff --git a/code/datums/components/connect_range.dm b/code/datums/components/connect_range.dm index 2a9225523d30..e001261ab128 100644 --- a/code/datums/components/connect_range.dm +++ b/code/datums/components/connect_range.dm @@ -26,8 +26,8 @@ return COMPONENT_INCOMPATIBLE src.connections = connections src.range = range - set_tracked(tracked) src.works_in_containers = works_in_containers + set_tracked(tracked) /datum/component/connect_range/Destroy() set_tracked(null) diff --git a/code/datums/components/crafting/containers.dm b/code/datums/components/crafting/containers.dm index fb241c4d0d99..45e4d0e94fe2 100644 --- a/code/datums/components/crafting/containers.dm +++ b/code/datums/components/crafting/containers.dm @@ -28,15 +28,14 @@ ) result = /obj/item/storage/basket category = CAT_CONTAINERS + crafting_flags = parent_type::crafting_flags | CRAFT_MUST_BE_LEARNED steps = list( - "master the art of underwater basketweaving", + "master the art of underwater basketweaving", "be underwater" ) /datum/crafting_recipe/underwater_basket/check_requirements(mob/user, list/collected_requirements) . = ..() - if(!HAS_TRAIT(user,TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE)) - return FALSE var/turf/T = get_turf(user) if(istype(T, /turf/open/water)) return TRUE diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index d8382257d806..5841b7a69fb7 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -244,7 +244,7 @@ var/found_behaviors = contents[CONTENTS_TOOL_BEHAVIOUR] for(var/behavior in recipe.tool_behaviors) - recipe_time += found_behaviors[behavior] + recipe_time += dynamic_recipe_time * found_behaviors[behavior] if(!do_after(crafter, round(recipe_time, 0.1 SECONDS), target = crafter)) return "." diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm index 486551f1e302..16054766d3cb 100644 --- a/code/datums/components/crafting/entertainment.dm +++ b/code/datums/components/crafting/entertainment.dm @@ -257,3 +257,15 @@ time = 30 SECONDS category = CAT_ENTERTAINMENT crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED + +/datum/crafting_recipe/crackpipe + name = "Glass Pipe" + result = /obj/item/cigarette/pipe/crackpipe + time = 5 SECONDS + reqs = list( + /obj/item/stack/sheet/glass = 3, + ) + tool_paths = list( + /obj/item/screwdriver, + ) + category = CAT_ENTERTAINMENT diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index 84c031afe114..bbc13b09ccc6 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -156,6 +156,9 @@ /obj/item/flashlight = 2, /obj/item/restraints/handcuffs/cable = 1 ) + blacklist = list( + /obj/item/flashlight/lamp/space_bubble, + ) category = CAT_EQUIPMENT /datum/crafting_recipe/flashlight_eyes/New() @@ -276,7 +279,7 @@ time = 1 SECONDS reqs = list( /obj/item/stack/sheet/leather = 4, - /obj/item/stack/sheet/cardboard = 4 + /obj/item/stack/sheet/mineral/wood = 1, ) category = CAT_EQUIPMENT tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER) diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 42d21ba12bfc..8762fc38abc5 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -1,6 +1,8 @@ //Gun crafting parts til they can be moved elsewhere // PARTS // +/obj/item/weaponcrafting + abstract_type = /obj/item/weaponcrafting /obj/item/weaponcrafting/Initialize(mapload) . = ..() diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index 24c391a32aab..2a95cf32ce27 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -21,7 +21,7 @@ /datum/crafting_recipe/receiver name = "Modular Rifle Receiver" - tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER, TOOL_SAW) + tool_behaviors = list(TOOL_WRENCH, TOOL_WELDER) result = /obj/item/weaponcrafting/receiver reqs = list( /obj/item/stack/sheet/iron = 5, @@ -418,6 +418,17 @@ category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED +/datum/crafting_recipe/ashenbow + name = "Ashen Bow" + result = /obj/item/gun/ballistic/bow/ashenbow + reqs = list( + /obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/sinew = 3, + /obj/item/stack/sheet/leather = 1, + ) + time = 30 SECONDS + category = CAT_WEAPON_RANGED + /datum/crafting_recipe/photoncannon name = "Photon Cannon" result = /obj/item/gun/energy/photon diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 9a3448bc803a..1caba7a44a48 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -176,3 +176,13 @@ time = 5 SECONDS category = CAT_WEAPON_AMMO crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED + +/datum/crafting_recipe/ashen_arrow + name = "Ashen Arrow" + result = /obj/item/ammo_casing/arrow/ashen + reqs = list( + /obj/item/stack/sheet/bone = 1, + /obj/item/stack/sheet/sinew = 1, + ) + time = 5 SECONDS + category = CAT_WEAPON_AMMO diff --git a/code/datums/components/cuff_n_stun.dm b/code/datums/components/cuff_n_stun.dm index fda9618e93c1..6f9355cb6f15 100644 --- a/code/datums/components/cuff_n_stun.dm +++ b/code/datums/components/cuff_n_stun.dm @@ -82,7 +82,6 @@ if(!do_after(parent, handcuff_timer, human_target)) return human_target.set_handcuffed(new handcuff_type(human_target)) - human_target.update_handcuffed() post_arrest_callback?.Invoke(human_target) /datum/component/stun_n_cuff/proc/stun_target(mob/living/carbon/human_target) diff --git a/code/datums/components/food/decomposition.dm b/code/datums/components/food/decomposition.dm index c883f82f658f..35b3aac4f65a 100644 --- a/code/datums/components/food/decomposition.dm +++ b/code/datums/components/food/decomposition.dm @@ -117,7 +117,12 @@ if(produce_ants) new /obj/effect/decal/cleanable/ants(decomp.loc) if(decomp_result) - new decomp_result(decomp.loc) + var/atom/movable/result = new decomp_result(decomp.loc) + //make space and tranfer reagents if it has any, also let any bad result handle removing or converting the transferred reagents on its own terms + if(result.reagents && decomp.reagents) + result.reagents.clear_reagents() + decomp.reagents.trans_to(result, decomp.reagents.total_volume) + SEND_SIGNAL(result, COMSIG_OBJ_DECOMPOSITION_RESULT, decomp) decomp.visible_message(span_warning("[decomp] gets overtaken by mold[produce_ants ? " and ants":""]! Gross!")) qdel(decomp) return diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 8a9255d3a188..ca14db4c8cda 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -329,8 +329,12 @@ Behavior that's still missing from this component that original food items had t this_food.create_reagents(volume, this_food.reagents?.flags) original_atom.reagents.trans_to(this_food, original_atom.reagents.total_volume / chosen_processing_option[TOOL_PROCESSING_AMOUNT], copy_only = TRUE) - if(original_atom.name != initial(original_atom.name)) + if(!HAS_TRAIT(this_food, TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED) && original_atom.name != initial(original_atom.name)) this_food.name = "slice of [original_atom.name]" + //It inherits the name of the original, which may already have a prefix + //So we need to make sure we don't double up on prefixes + //This is called before set_custom_materials() anyway + this_food.material_flags &= ~MATERIAL_ADD_PREFIX if(original_atom.desc != initial(original_atom.desc)) this_food.desc = "[original_atom.desc]" diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm index 53042e2e3881..34a6675edd6a 100644 --- a/code/datums/components/grillable.dm +++ b/code/datums/components/grillable.dm @@ -147,7 +147,6 @@ if(isstack(parent)) //Check if its a sheet, for grilling multiple things in a stack var/obj/item/stack/stack_parent = original_object grilled_result = new cook_result(original_object.loc, stack_parent.amount) - else grilled_result = new cook_result(original_object.loc) if(istype(original_object, /obj/item/food) && istype(grilled_result, /obj/item/food)) @@ -158,7 +157,9 @@ if(IsEdible(grilled_result) && positive_result) BLACKBOX_LOG_FOOD_MADE(grilled_result.type) - grilled_result.reagents.clear_reagents() + //make space and tranfer reagents if it has any, also let any bad result handle removing or converting the transferred reagents on its own terms + if(grilled_result.reagents && original_object.reagents) + grilled_result.reagents?.clear_reagents() original_object.reagents?.trans_to(grilled_result, original_object.reagents.total_volume) if(added_reagents) // Add any new reagents that should be added grilled_result.reagents.add_reagent_list(added_reagents) diff --git a/code/datums/components/lockable_storage.dm b/code/datums/components/lockable_storage.dm index b6bf81cef9d7..456bac0c45dc 100644 --- a/code/datums/components/lockable_storage.dm +++ b/code/datums/components/lockable_storage.dm @@ -88,7 +88,10 @@ /datum/component/lockable_storage/proc/on_requesting_context_from_item(datum/source, list/context, obj/item/held_item, mob/user) SIGNAL_HANDLER if(isnull(held_item)) - context[SCREENTIP_CONTEXT_LMB] = "Open storage" + if(source in user.held_items) + context[SCREENTIP_CONTEXT_LMB] = "Open storage" + return CONTEXTUAL_SCREENTIP_SET + context[SCREENTIP_CONTEXT_RMB] = "Open storage" return CONTEXTUAL_SCREENTIP_SET if(can_hack_open) diff --git a/code/datums/components/material/remote_materials.dm b/code/datums/components/material/remote_materials.dm index 6e37ea327e32..f122bfb908b0 100644 --- a/code/datums/components/material/remote_materials.dm +++ b/code/datums/components/material/remote_materials.dm @@ -23,6 +23,8 @@ handles linking back and forth. var/mat_container_flags = NONE ///List of signals to hook onto the local container var/list/mat_container_signals + ///Callback for round start silo connections. Have to cancel this if the parent gets destroyed before round start + VAR_PRIVATE/datum/callback/connection /datum/component/remote_materials/Initialize( mapload, @@ -46,7 +48,8 @@ handles linking back and forth. connect_to_silo = TRUE if(mapload) // wait for silo to initialize during mapload - SSticker.OnRoundstart(CALLBACK(src, PROC_REF(_PrepareStorage), connect_to_silo)) + connection = CALLBACK(src, PROC_REF(_PrepareStorage), connect_to_silo) + SSticker.OnRoundstart(connection) else //directly register in round _PrepareStorage(connect_to_silo) @@ -60,6 +63,7 @@ handles linking back and forth. /datum/component/remote_materials/proc/_PrepareStorage(connect_to_silo) PRIVATE_PROC(TRUE) + connection = null if (connect_to_silo) silo = GLOB.ore_silo_default if (silo) @@ -72,6 +76,9 @@ handles linking back and forth. _MakeLocal() /datum/component/remote_materials/Destroy() + if(connection) + LAZYREMOVE(SSticker.round_start_events, connection) + connection = null if(silo) allow_standalone = FALSE disconnect() @@ -233,7 +240,7 @@ handles linking back and forth. * name- For logging only. the design you are trying to build e.g. matter bin, etc. * user_data - in the form rendered by ID_DATA(user), for material logging and (if this component is connected to a silo), permission checking */ -/datum/component/remote_materials/proc/use_materials(list/mats, coefficient = 1, multiplier = 1, action = "build", name = "design", alist/user_data) +/datum/component/remote_materials/proc/use_materials(list/mats, coefficient = 1, multiplier = 1, action = "processed", name = "design", alist/user_data) if(!can_use_resource(user_data = user_data)) return 0 diff --git a/code/datums/components/payment.dm b/code/datums/components/payment.dm index 37839f1599c7..97cb86e08fb2 100644 --- a/code/datums/components/payment.dm +++ b/code/datums/components/payment.dm @@ -102,7 +102,7 @@ return FALSE if(physical_cash_total < total_cost) - to_chat(user, span_notice("Insufficient funds. Aborting.")) + to_chat(user, span_warning("Insufficient funds. Aborting.")) return FALSE for(var/obj/cash_object in counted_money) qdel(cash_object) @@ -168,7 +168,7 @@ log_econ("[total_cost] credits were spent on [parent] by [user] via [idcard.registered_account.account_holder]'s card.") idcard.registered_account.bank_card_talk("[total_cost] credits deducted from your account.") playsound(src, 'sound/effects/cashregister.ogg', 20, TRUE) - SSeconomy.track_purchase(idcard.registered_account, total_cost, parent) + SSeconomy.add_audit_entry(idcard.registered_account, total_cost, parent) return TRUE /** diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm index b50c63d590f4..71a8fb66b709 100644 --- a/code/datums/components/pet_commands/obeys_commands.dm +++ b/code/datums/components/pet_commands/obeys_commands.dm @@ -59,6 +59,7 @@ /datum/component/obeys_commands/proc/on_key_unpressed(mob/living/source) SIGNAL_HANDLER UnregisterSignal(source, COMSIG_ATOM_MOUSE_ENTERED) + remove_from_viewers(source) /datum/component/obeys_commands/proc/remove_from_viewers(mob/living/source) radial_viewers -= REF(source) @@ -93,7 +94,9 @@ if(mouse_hovered == parent) display_menu(friend) return - if(isliving(mouse_hovered)) + + var/mob/living/owner = parent + if(isliving(mouse_hovered) && mouse_hovered.loc != owner.loc) remove_from_viewers(friend) /// Displays a radial menu of commands diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index d3fd5f5ad875..d2414cc5af0f 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -46,9 +46,7 @@ set_recipient_reagents_holder(custom_receiver ? custom_receiver : parent_movable.reagents) if(start) - //We're registering here because I need to check whether we start active or not, and this is just easier - //Should be called after we finished. Done this way because other networks need to finish setting up aswell - RegisterSignal(parent, COMSIG_COMPONENT_ADDED, PROC_REF(enable)) + enable() /datum/component/plumbing/RegisterWithParent() RegisterSignals(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING), PROC_REF(disable)) @@ -60,7 +58,7 @@ /datum/component/plumbing/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING, COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH, COMSIG_OBJ_HIDE, \ - COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ATOM_DIR_CHANGE, COMSIG_MOVABLE_CHANGE_DUCT_LAYER, COMSIG_COMPONENT_ADDED)) + COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_ATOM_DIR_CHANGE, COMSIG_MOVABLE_CHANGE_DUCT_LAYER)) REMOVE_TRAIT(parent, TRAIT_UNDERFLOOR, REF(src)) /datum/component/plumbing/Destroy() @@ -233,10 +231,8 @@ duct.update_appearance() ///settle wherever we are, and start behaving like a piece of plumbing -/datum/component/plumbing/proc/enable(obj/object, datum/component/component) - SIGNAL_HANDLER - if(active || (component && component != src)) - UnregisterSignal(parent, list(COMSIG_COMPONENT_ADDED)) +/datum/component/plumbing/proc/enable() + if(active) return update_dir() diff --git a/code/datums/components/shuttle_move_deferred_checks.dm b/code/datums/components/shuttle_move_deferred_checks.dm new file mode 100644 index 000000000000..e7268fe98c05 --- /dev/null +++ b/code/datums/components/shuttle_move_deferred_checks.dm @@ -0,0 +1,72 @@ +// This component allows for certain movement checks, particularly those involving linked atoms existing on the same z-level, to be deferred when a shuttle moves. +/datum/component/shuttle_move_deferred_checks + dupe_mode = COMPONENT_DUPE_SOURCES + /// An list of targets to listen for the movements of + var/list/targets = list() + + /// The check to call on the parent when a target moves. Can be the name of a proc on the parent, or a `/datum/callback`. + var/check + + /// A list of each target currently being moved by a shuttle - if this list is not empty, checks will not be run. + var/list/moving_targets = list() + +/datum/component/shuttle_move_deferred_checks/Initialize(check) + . = ..() + if(!check) + return COMPONENT_INCOMPATIBLE + src.check = check + +/datum/component/shuttle_move_deferred_checks/Destroy(force) + targets = null + check = null + moving_targets = null + return ..() + +/datum/component/shuttle_move_deferred_checks/on_source_add(source, check) + . = ..() + var/atom/movable/movable = locate(source) + if(!istype(movable) || (check != src.check)) + return COMPONENT_INCOMPATIBLE + targets += movable + RegisterSignal(movable, COMSIG_MOVABLE_MOVED, PROC_REF(on_target_moved)) + RegisterSignal(movable, COMSIG_ATOM_BEFORE_SHUTTLE_MOVE, PROC_REF(before_target_shuttle_move)) + RegisterSignal(movable, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, PROC_REF(after_target_shuttle_move)) + RegisterSignal(movable, COMSIG_QDELETING, PROC_REF(on_target_deleted)) + +/datum/component/shuttle_move_deferred_checks/on_source_remove(source) + var/atom/movable/movable = locate(source) + if(!istype(movable)) + return + targets -= movable + moving_targets -= movable + UnregisterSignal(movable, list(COMSIG_MOVABLE_MOVED, COMSIG_ATOM_BEFORE_SHUTTLE_MOVE, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, COMSIG_QDELETING)) + if(!length(moving_targets) && length(targets)) + call_check() + return ..() + +/datum/component/shuttle_move_deferred_checks/proc/call_check() + if(istype(check, /datum/callback)) + var/datum/callback/callback_check = check + callback_check.Invoke() + else + call(parent, check)() + +/datum/component/shuttle_move_deferred_checks/proc/on_target_moved(atom/movable/source, atom/old_loc, dir, forced, list/old_locs) + SIGNAL_HANDLER + if(length(moving_targets)) + return + call_check() + +/datum/component/shuttle_move_deferred_checks/proc/before_target_shuttle_move(atom/source) + SIGNAL_HANDLER + moving_targets |= source + +/datum/component/shuttle_move_deferred_checks/proc/after_target_shuttle_move(atom/source) + SIGNAL_HANDLER + moving_targets -= source + if(!length(moving_targets)) + call_check() + +/datum/component/shuttle_move_deferred_checks/proc/on_target_deleted(datum/source) + SIGNAL_HANDLER + on_source_remove(REF(source)) diff --git a/code/datums/components/splattercasting.dm b/code/datums/components/splattercasting.dm index eafc9629a838..cc11afbf789e 100644 --- a/code/datums/components/splattercasting.dm +++ b/code/datums/components/splattercasting.dm @@ -75,7 +75,7 @@ return //normal cooldown spell has - var/cooldown_remaining = spell.next_use_time - world.time + var/cooldown_remaining = max(spell.next_use_time - world.time,0) //how much we discount, we make the spell cost 1/10th of its actual cooldown var/new_cooldown = cooldown_remaining / 10 //convert how much cooldown that spell saved into blood cost diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 8b59717da70b..ce83014323c9 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -6,6 +6,7 @@ var/disallow_soul_imbue = TRUE /// If FALSE, prevents parent from being qdel'd unless it's a force = TRUE qdel. var/allow_item_destruction = FALSE + var/datum/weakref/connect_ref /datum/component/stationloving/Initialize(inform_admins = FALSE, allow_item_destruction = FALSE) if(!ismovable(parent)) @@ -28,7 +29,7 @@ COMSIG_MOVABLE_MOVED = PROC_REF(on_parent_moved), SIGNAL_ADDTRAIT(TRAIT_SECLUDED_LOCATION) = PROC_REF(on_loc_secluded), ) - AddComponent(/datum/component/connect_containers, parent, loc_connections) + connect_ref = WEAKREF(AddComponent(/datum/component/connect_containers, parent, loc_connections)) /datum/component/stationloving/UnregisterFromParent() UnregisterSignal(parent, list( @@ -39,7 +40,7 @@ COMSIG_MOVABLE_MOVED, )) - qdel(GetComponent(/datum/component/connect_containers)) + qdel(connect_ref) /datum/component/stationloving/InheritComponent(datum/component/stationloving/newc, original, inform_admins, allow_death) if (original) diff --git a/code/datums/components/strong_pull.dm b/code/datums/components/strong_pull.dm index afb46b7252d5..f2725939f798 100644 --- a/code/datums/components/strong_pull.dm +++ b/code/datums/components/strong_pull.dm @@ -29,7 +29,7 @@ Basically, the items they pull cannot be pulled (except by the puller) RegisterSignal(strongpulling, COMSIG_ATOM_NO_LONGER_PULLED, PROC_REF(on_no_longer_pulled)) if(istype(strongpulling, /obj/structure/closet) && !istype(strongpulling, /obj/structure/closet/body_bag)) var/obj/structure/closet/grabbed_closet = strongpulling - grabbed_closet.strong_grab = TRUE + ADD_TRAIT(grabbed_closet, TRAIT_STRONGPULL, REF(src)) /** * Signal for rejecting further grabs @@ -47,7 +47,7 @@ Basically, the items they pull cannot be pulled (except by the puller) UnregisterSignal(strongpulling, list(COMSIG_ATOM_CAN_BE_PULLED, COMSIG_ATOM_NO_LONGER_PULLED)) if(istype(strongpulling, /obj/structure/closet)) var/obj/structure/closet/ungrabbed_closet = strongpulling - ungrabbed_closet.strong_grab = FALSE + REMOVE_TRAIT(ungrabbed_closet, TRAIT_STRONGPULL, REF(src)) strongpulling = null /** diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm index 80ea33f24451..732e43ee7661 100644 --- a/code/datums/components/tactical.dm +++ b/code/datums/components/tactical.dm @@ -45,7 +45,7 @@ RegisterSignal(user, COMSIG_HUMAN_GET_VISIBLE_NAME, PROC_REF(on_name_inquiry)) RegisterSignal(user, COMSIG_HUMAN_GET_FORCED_NAME, PROC_REF(on_name_inquiry)) // This forces a name update on the user, so we don't need to call name update ourselves - ADD_TRAIT(user, TRAIT_UNKNOWN, REF(src)) + ADD_TRAIT(user, TRAIT_UNKNOWN_APPEARANCE, REF(src)) current_slot = slot @@ -106,7 +106,7 @@ )) current_slot = null user.remove_alt_appearance("sneaking_mission[REF(src)]") - REMOVE_TRAIT(user, TRAIT_UNKNOWN, REF(src)) + REMOVE_TRAIT(user, TRAIT_UNKNOWN_APPEARANCE, REF(src)) ///Checks if a mob is holding us, and if so we will modify our appearance to properly match w/ the mob. /datum/component/tactical/proc/tactical_update(obj/item/source) diff --git a/code/datums/components/tether.dm b/code/datums/components/tether.dm index cbbd2b1c18f7..b2aedaeb9ff4 100644 --- a/code/datums/components/tether.dm +++ b/code/datums/components/tether.dm @@ -19,6 +19,8 @@ var/tether_trait_source /// If TRUE, only add TRAIT_TETHER_ATTACHED to our parent var/no_target_trait + /// Are we currently attempting to forcefully shorten the tether? + var/force_moving_target = FALSE /datum/component/tether/Initialize(atom/tether_target, max_dist = 7, tether_name, atom/embed_target = null, start_distance = null, \ parent_module = null, tether_trait_source = null, no_target_trait = FALSE) @@ -71,22 +73,22 @@ UnregisterSignal(parent, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED)) if (!isnull(tether_trait_source)) REMOVE_TRAIT(parent, TRAIT_TETHER_ATTACHED, tether_trait_source) - if (!QDELETED(tether_target)) - UnregisterSignal(tether_target, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) - if (!isnull(tether_trait_source) && !no_target_trait) - REMOVE_TRAIT(tether_target, TRAIT_TETHER_ATTACHED, tether_trait_source) - SEND_SIGNAL(tether_target, COMSIG_ATOM_TETHER_SNAPPED, tether_trait_source) if (!QDELETED(tether_beam)) UnregisterSignal(tether_beam.visuals, list(COMSIG_CLICK, COMSIG_QDELETING)) qdel(tether_beam) if (!QDELETED(embed_target)) UnregisterSignal(embed_target, list(COMSIG_ITEM_UNEMBEDDED, COMSIG_QDELETING)) + if (!QDELETED(tether_target)) + UnregisterSignal(tether_target, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) + if (!isnull(tether_trait_source) && !no_target_trait) + REMOVE_TRAIT(tether_target, TRAIT_TETHER_ATTACHED, tether_trait_source) + SEND_SIGNAL(tether_target, COMSIG_ATOM_TETHER_SNAPPED, tether_trait_source) SEND_SIGNAL(parent, COMSIG_ATOM_TETHER_SNAPPED, tether_trait_source) /datum/component/tether/proc/check_tether(atom/source, new_loc) SIGNAL_HANDLER - if (check_snap()) + if (check_snap(is_moving = TRUE)) return if (!isturf(new_loc)) @@ -96,50 +98,162 @@ // If this was called, we know its a movable var/atom/movable/movable_source = source var/atom/movable/anchor = (source == tether_target ? parent : tether_target) - if (get_dist(anchor, new_loc) > cur_dist) - if (!istype(anchor) || anchor.anchored || !(!anchor.anchored && anchor.move_resist <= movable_source.move_force && anchor.Move(get_step_towards(anchor, new_loc)))) + + // Ignore distance limitations if we're attempting to move the other part of the tether + if (get_dist(anchor, new_loc) > cur_dist && !force_moving_target) + if (!istype(anchor) || anchor.anchored || anchor.move_resist > movable_source.move_force) to_chat(source, span_warning("[tether_name] runs out of slack and prevents you from moving!")) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - var/atom/blocker - var/anchor_dir = get_dir(source, anchor) - for (var/turf/line_turf in get_line(anchor, new_loc)) - if (line_turf.density && line_turf != anchor.loc && line_turf != source.loc) - blocker = line_turf - break - if (line_turf == anchor.loc || line_turf == source.loc) - for (var/atom/in_turf in line_turf) - if ((in_turf.flags_1 & ON_BORDER_1) && (in_turf.dir & anchor_dir)) - blocker = in_turf - break - else - for (var/atom/in_turf in line_turf) - if (in_turf.density && in_turf != source && in_turf != tether_target) - blocker = in_turf - break + force_moving_target = TRUE + if (!try_adjust_position(anchor, new_loc, source)) + force_moving_target = FALSE + to_chat(source, span_warning("[tether_name] runs out of slack and prevents you from moving!")) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - if (!isnull(blocker)) - break + force_moving_target = FALSE + var/atom/blocker = check_line(anchor, new_loc, list(source)) if (blocker) - to_chat(source, span_warning("[tether_name] catches on [blocker] and prevents you from moving!")) - return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + if (!istype(anchor) || anchor.anchored || anchor.move_resist > movable_source.move_force) + to_chat(source, span_warning("[tether_name] runs out of slack and prevents you from moving!")) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + + // If the tether would snag on something when we move, see if we could move to the side to get LOS back + if (!try_adjust_position(anchor, new_loc, source)) + to_chat(source, span_warning("[tether_name] catches on [blocker] and prevents you from moving!")) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - if (get_dist(anchor, new_loc) != cur_dist || !ismovable(source)) + if (get_dist(anchor, new_loc) != cur_dist || !ismovable(source) || force_moving_target) return var/datum/drift_handler/handler = movable_source.drift_handler - if (isnull(handler)) - return - handler.remove_angle_force(get_angle(anchor, source)) + if (handler) + handler.remove_angle_force(get_angle(anchor, source)) + +/// Try adjust the anchor's position to move closer to the target or regain LOS +/// true_source is an optional argument in case we're looking for a LOS/closer turf to a new location rather than the actual owner, and need to ignore them +/datum/component/tether/proc/try_adjust_position(atom/movable/anchor, atom/target, atom/true_source) + if (!istype(anchor) || anchor.anchored) + return FALSE + + if (anchor.x == target.x && anchor.y == target.y) + return TRUE + + var/datum/can_pass_info/pass_info = new(no_id = TRUE) + pass_info.pass_flags = anchor.pass_flags + pass_info.movement_type = anchor.movement_type + if (isliving(anchor)) + var/mob/living/living_anchor = anchor + pass_info.is_living = TRUE + pass_info.mob_size = living_anchor.mob_size + pass_info.incorporeal_move = living_anchor.incorporeal_move + pass_info.is_bot = isbot(living_anchor) + + var/list/pass_turfs = list() + var/turf/anchor_turf = get_turf(anchor) + + var/primary_cardinal = null + if (abs(anchor.x - target.x) > abs(anchor.y - target.y)) + primary_cardinal = anchor.x > target.x ? WEST : EAST + else + primary_cardinal = anchor.y > target.y ? SOUTH : NORTH + + var/anchor_dir = get_dir(anchor, target) + if (primary_cardinal == anchor_dir) + pass_turfs += get_step(anchor, primary_cardinal) + else if (get_dist(anchor, get_step(target, REVERSE_DIR(primary_cardinal))) >= get_dist(anchor, get_step(target, REVERSE_DIR(anchor_dir)))) + pass_turfs += get_step(anchor, anchor_dir) + pass_turfs += get_step(anchor, primary_cardinal) + else + pass_turfs += get_step(anchor, primary_cardinal) + pass_turfs += get_step(anchor, anchor_dir) -/datum/component/tether/proc/check_snap() + // Make a list of secondary dirs to try and sidestep into if we cannot go in our main direction + var/list/match_dirs = null + if (primary_cardinal == NORTH || primary_cardinal == SOUTH) + match_dirs = list(EAST, WEST) + else + match_dirs = list(NORTH, SOUTH) + + for (var/match_dir in match_dirs) + if ((match_dir & primary_cardinal) != anchor_dir) + pass_turfs += get_step(anchor, match_dir | primary_cardinal) + + for (var/match_dir in match_dirs) + pass_turfs += get_step(anchor, match_dir) + + // The final list is something like (direct path, main cardinal, diagonals to main cardinal, 90* dirs to the main cardinal) + // Whichever one we manage to move onto first is our pick + + var/list/turf_cache = list() + for (var/turf/pass_turf in pass_turfs) // keep the typecheck in case we accidentally go out of map bounds + if (pass_turf.density || get_dist(pass_turf, target) > cur_dist) + continue + if (anchor_turf.LinkBlockedWithAccess(pass_turf, pass_info)) + continue + if (check_line(pass_turf, target, list(anchor, true_source), turf_cache)) + continue + if (anchor.Move(pass_turf)) + return TRUE + return FALSE + +/// Check LOS availibility of a tile, returns a blocking atom, if any +/// turf_cache could be used to reduce the amount of calculations if multiple lines are cast and expected to have multiple shared turfs +/// by sharing located results +/datum/component/tether/proc/check_line(atom/start, atom/end, list/to_ignore, list/turf_cache = list()) + var/turf/start_loc = get_turf(start) + var/turf/end_loc = get_turf(end) + var/start_dir = get_dir(start_loc, end_loc) + var/end_dir = REVERSE_DIR(start_dir) + var/list/turf/turf_line = get_line(start_loc, end_loc) + for (var/turf/line_turf in turf_line) + if (turf_cache[line_turf]) + return turf_cache[line_turf] + + if (line_turf.density && line_turf != start_loc && line_turf != end_loc) + turf_cache[line_turf] = line_turf + return line_turf + + if (line_turf == start_loc) + for (var/atom/in_turf in line_turf) + if (in_turf.density && (in_turf.flags_1 & ON_BORDER_1) && (in_turf.dir & start_dir) && in_turf != start && !(in_turf in to_ignore)) + turf_cache[line_turf] = in_turf + return in_turf + continue + + if (line_turf == end_loc) + for (var/atom/in_turf in line_turf) + if (in_turf.density && (in_turf.flags_1 & ON_BORDER_1) && (in_turf.dir & end_dir) && in_turf != end && !(in_turf in to_ignore)) + turf_cache[line_turf] = in_turf + return in_turf + continue + + for (var/atom/in_turf in line_turf) + if (!in_turf.density || (in_turf in to_ignore)) + continue + if ((in_turf.flags_1 & ON_BORDER_1)) + // If the tether is in a straight line, we can ignore border objects parallel to us + if (!(in_turf.dir & start_dir) && !(in_turf.dir & end_dir)) + continue + // Also ignore objects that we don't intersect with + if (!(get_step(in_turf, in_turf.dir) in turf_line)) + continue + + turf_cache[line_turf] = in_turf + return in_turf + + turf_cache[line_turf] = null + +/datum/component/tether/proc/check_snap(atom/movable/source, atom/old_loc, dir, forced, list/old_locs, is_moving = FALSE) SIGNAL_HANDLER var/atom/atom_target = parent // Something broke us out, snap the tether if (get_dist(atom_target, tether_target) > cur_dist + 1 || !isturf(atom_target.loc) || !isturf(tether_target.loc) || atom_target.z != tether_target.z) snap() + else if (!is_moving && check_line(atom_target, tether_target) && !(try_adjust_position(atom_target, tether_target) || try_adjust_position(tether_target, atom_target))) + snap() /datum/component/tether/proc/snap() SIGNAL_HANDLER diff --git a/code/datums/components/toggle_attached_clothing.dm b/code/datums/components/toggle_attached_clothing.dm index 87af014396e9..a251fd0e38af 100644 --- a/code/datums/components/toggle_attached_clothing.dm +++ b/code/datums/components/toggle_attached_clothing.dm @@ -140,7 +140,6 @@ parent_gear.icon_state = "[initial(parent_gear.post_init_icon_state) || initial(parent_gear.icon_state)][parent_icon_state_suffix]" parent_gear.worn_icon_state = parent_gear.icon_state parent_gear.update_slot_icon() - wearer.update_obscured_slots(deployable.flags_inv) wearer.update_mob_action_buttons() /// Undeploy gear if it moves slots somehow diff --git a/code/datums/components/usb_port.dm b/code/datums/components/usb_port.dm index b5a370d12c65..a6ec5ffcf784 100644 --- a/code/datums/components/usb_port.dm +++ b/code/datums/components/usb_port.dm @@ -1,8 +1,3 @@ -/// Range checking is being deferred because the component's parent is being moved by a shuttle -#define PARENT_DEFERRED (1<<0) -/// Range checking is being deferred because the circuit shell being tracked is being moved by a shuttle -#define PHYSICAL_OBJECT_DEFERRED (1<<1) - /// Opens up a USB port that can be connected to by circuits, creating registerable circuit components /datum/component/usb_port dupe_mode = COMPONENT_DUPE_UNIQUE @@ -24,9 +19,6 @@ /// The current physical object that the beam is connected to and listens to. var/atom/movable/physical_object - /// Used to prevent range checking during shuttle movement, which moves atoms en-masse. - var/defer_range_checks = 0 - /// An extra callback to invoke when registering this component with its parent. Can be a proc name or a callback datum. var/extra_registration_callback @@ -64,11 +56,9 @@ /datum/component/usb_port/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_USB_CABLE_TRY_ATTACH, PROC_REF(on_atom_usb_cable_try_attach)) - RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(parent, COMSIG_ATOM_BEFORE_SHUTTLE_MOVE, PROC_REF(before_parent_shuttle_move)) - RegisterSignal(parent, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, PROC_REF(after_parent_shuttle_move)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(parent, COMSIG_MOVABLE_CIRCUIT_LOADED, PROC_REF(on_load)) + AddComponentFrom(REF(parent), /datum/component/shuttle_move_deferred_checks, PROC_REF(on_moved)) for(var/obj/item/circuit_component/component as anything in circuit_components) component.register_usb_parent(parent) @@ -83,12 +73,10 @@ /datum/component/usb_port/UnregisterFromParent() UnregisterSignal(parent, list( COMSIG_ATOM_USB_CABLE_TRY_ATTACH, - COMSIG_MOVABLE_MOVED, - COMSIG_ATOM_BEFORE_SHUTTLE_MOVE, - COMSIG_ATOM_AFTER_SHUTTLE_MOVE, COMSIG_ATOM_EXAMINE, COMSIG_MOVABLE_CIRCUIT_LOADED, )) + RemoveComponentSource(REF(parent), /datum/component/shuttle_move_deferred_checks) for(var/obj/item/circuit_component/component as anything in circuit_components) component.unregister_usb_parent(parent) @@ -148,12 +136,8 @@ return SEND_SIGNAL(src, COMSIG_USB_PORT_UNREGISTER_PHYSICAL_OBJECT, physical_object) - UnregisterSignal(physical_object, list( - COMSIG_MOVABLE_MOVED, - COMSIG_ATOM_BEFORE_SHUTTLE_MOVE, - COMSIG_ATOM_AFTER_SHUTTLE_MOVE, - COMSIG_ATOM_EXAMINE, - )) + UnregisterSignal(physical_object, COMSIG_ATOM_EXAMINE) + RemoveComponentSource(REF(physical_object), /datum/component/shuttle_move_deferred_checks) /datum/component/usb_port/proc/attach_circuit_components(obj/item/integrated_circuit/circuitboard) for(var/obj/item/circuit_component/component as anything in circuit_components) @@ -228,9 +212,7 @@ var/atom/atom_parent = parent usb_cable_beam = atom_parent.Beam(new_physical_object, "usb_cable_beam", 'icons/obj/science/circuits.dmi') - RegisterSignal(new_physical_object, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(new_physical_object, COMSIG_ATOM_BEFORE_SHUTTLE_MOVE, PROC_REF(before_physical_object_shuttle_move)) - RegisterSignal(new_physical_object, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, PROC_REF(after_physical_object_shuttle_move)) + AddComponentFrom(REF(new_physical_object), /datum/component/shuttle_move_deferred_checks, PROC_REF(on_moved)) RegisterSignal(new_physical_object, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine_shell)) SEND_SIGNAL(src, COMSIG_USB_PORT_REGISTER_PHYSICAL_OBJECT, new_physical_object) physical_object = new_physical_object @@ -246,9 +228,6 @@ if (isnull(attached_circuit)) return - if (defer_range_checks) - return - if (IN_GIVEN_RANGE(attached_circuit, parent, USB_CABLE_MAX_RANGE)) return @@ -289,28 +268,3 @@ usb_cable_ref = null QDEL_NULL(usb_cable_beam) - -/datum/component/usb_port/proc/before_parent_shuttle_move() - SIGNAL_HANDLER - - defer_range_checks |= PARENT_DEFERRED - -/datum/component/usb_port/proc/before_physical_object_shuttle_move() - SIGNAL_HANDLER - - defer_range_checks |= PHYSICAL_OBJECT_DEFERRED - -/datum/component/usb_port/proc/after_parent_shuttle_move() - SIGNAL_HANDLER - - defer_range_checks &= ~PARENT_DEFERRED - on_moved() - -/datum/component/usb_port/proc/after_physical_object_shuttle_move() - SIGNAL_HANDLER - - defer_range_checks &= ~PHYSICAL_OBJECT_DEFERRED - on_moved() - -#undef PARENT_DEFERRED -#undef PHYSICAL_OBJECT_DEFERRED diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 87b515849676..dcf1772f54fd 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -82,6 +82,14 @@ ///The layout pref we take from the player looking at this datum's UI to know what layout to give. var/datum/preference/choiced/layout_prefs_used = /datum/preference/choiced/tgui_layout + /** + * Parent types. + * + * Use path Ex:(abstract_type = /obj/item). Generally for abstract code objects, atoms with a set abstract_type can never be selected by spawner. + * These should be things that should never show up in a round, this does not include things that require init behavoir to function. + */ + var/abstract_type = /datum + /** * Called when a href for this datum is clicked * diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index e19c19151e32..d3c8c0f7dc04 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -117,11 +117,13 @@ update_stage(1) to_chat(affected_mob, span_notice("Your chronic illness is alleviated a little, though it can't be cured!")) return - if(SPT_PROB(cure_mod, seconds_per_tick)) - update_stage(max(stage - 1, 1)) if(disease_flags & CURABLE && SPT_PROB(cure_mod, seconds_per_tick)) - cure() - return FALSE + if(disease_flags & INCREMENTAL_CURE) + if (!update_stage(stage - 1)) + return FALSE + else + cure() + return FALSE if(stage == max_stages && stage_peaked != TRUE) //mostly a sanity check in case we manually set a virus to max stages stage_peaked = TRUE @@ -233,6 +235,10 @@ stage = new_stage if(new_stage == max_stages && !(stage_peaked)) //once a virus has hit its peak, set it to have done so stage_peaked = TRUE + if (stage <= 0) + cure() + return FALSE + return TRUE /datum/disease/proc/has_cure() if(!(disease_flags & (CURABLE | CHRONIC))) diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/advance/symptoms/headache.dm index 6ae76d1aa0cb..f6e2be2aba0d 100644 --- a/code/datums/diseases/advance/symptoms/headache.dm +++ b/code/datums/diseases/advance/symptoms/headache.dm @@ -43,6 +43,8 @@ if(!.) return var/mob/living/M = A.affected_mob + if(HAS_TRAIT(M, TRAIT_SOOTHED_HEADACHE)) + return if(power < 2) if(prob(base_message_chance) || A.stage >= 4) to_chat(M, span_warning("[pick("Your head hurts.", "Your head pounds.")]")) diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index 92583e1fca7d..ec2241479741 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -54,7 +54,7 @@ else if(ishuman(M)) var/mob/living/carbon/human/H = M - H.SetSpecialVoice(H.generate_random_mob_name()) + H.override_voice = H.generate_random_mob_name() if(scramble_language && !current_language) // Last part prevents rerolling language with small amounts of cure. current_language = pick(subtypesof(/datum/language) - /datum/language/common) H.add_blocked_language(subtypesof(/datum/language) - current_language, source = LANGUAGE_VOICECHANGE) @@ -64,7 +64,7 @@ ..() if(ishuman(A.affected_mob)) var/mob/living/carbon/human/H = A.affected_mob - H.UnsetSpecialVoice() + H.override_voice = "" if(scramble_language) A.affected_mob.remove_blocked_language(subtypesof(/datum/language), source = LANGUAGE_VOICECHANGE) A.affected_mob.remove_all_languages(LANGUAGE_VOICECHANGE) // In case someone managed to get more than one anyway. diff --git a/code/datums/diseases/asthma_attack.dm b/code/datums/diseases/asthma_attack.dm new file mode 100644 index 000000000000..7adefd2f7464 --- /dev/null +++ b/code/datums/diseases/asthma_attack.dm @@ -0,0 +1,262 @@ +/datum/disease/asthma_attack + form = "Bronchitis" + name = "Asthma attack" + desc = "Subject is undergoing a autoimmune response which threatens to close the esophagus and halt all respiration, leading to death. \ + Minor asthma attacks may disappear on their own, but all are dangerous." + cure_text = "Albuterol/Surgical intervention" + cures = list(/datum/reagent/medicine/albuterol) + agent = "Inflammatory" + viable_mobtypes = list(/mob/living/carbon/human) + disease_flags = CURABLE + spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS + spread_text = "Inflammatory" + visibility_flags = HIDDEN_PANDEMIC + bypasses_immunity = TRUE + disease_flags = CURABLE|INCREMENTAL_CURE + required_organ = ORGAN_SLOT_LUNGS + infectable_biotypes = MOB_ROBOTIC|MOB_ORGANIC|MOB_MINERAL|MOB_UNDEAD + + /// The world.time after which we will begin remission. + var/time_to_start_remission + + /// The max time, after initial infection, it will take for us to begin remission + var/max_time_til_remission + /// The min time, after initial infection, it will take for us to begin remission + var/min_time_til_remission + + /// Are we in remission, where we stop progressing and instead slowly degrade in intensity until we remove ourselves? + var/in_remission = FALSE + + /// The current progress to stage demotion. Resets to 0 and reduces our stage by 1 when it exceeds [progress_needed_to_demote]. Only increases when in remission. + var/progress_to_stage_demotion = 0 + /// The amount of demotion progress we receive per second while in remission. + var/progress_to_demotion_per_second = 1 + /// Once [progress_to_stage_demotion] exceeds or meets this, we reduce our stage. + var/progress_needed_to_demote = 10 + + /// Do we alert ghosts when we are applied? + var/alert_ghosts = FALSE + + /// A assoc list of (severity -> string), where string will be suffixed to our name in (suffix) format. + var/static/list/severity_to_suffix = list( + DISEASE_SEVERITY_MEDIUM = "Minor", + DISEASE_SEVERITY_HARMFUL = "Moderate", + DISEASE_SEVERITY_DANGEROUS = "Severe", + DISEASE_SEVERITY_BIOHAZARD = "EXTREME", + ) + /// A assoc list of (stringified number -> number), where the key is the stage and the number is how much inflammation we will cause the asthmatic per second. + var/list/stage_to_inflammation_per_second + +/datum/disease/asthma_attack/New() + . = ..() + + suffix_name() + + time_to_start_remission = world.time + rand(min_time_til_remission, max_time_til_remission) + +/datum/disease/asthma_attack/try_infect(mob/living/infectee, make_copy) + if (!get_asthma_quirk()) + return FALSE + if (HAS_TRAIT(infectee, TRAIT_NOBREATH)) + return FALSE + + return ..() + +/// Adds our suffix via [severity_to_suffix] in the format of (suffix) to our name. +/datum/disease/asthma_attack/proc/suffix_name() + name += " ([severity_to_suffix[severity]])" + +/// Returns the asthma quirk of our victim. As we can only be applied to asthmatics, this should never return null. +/datum/disease/asthma_attack/proc/get_asthma_quirk(mob/living/target = affected_mob) + RETURN_TYPE(/datum/quirk/item_quirk/asthma) + + return (locate(/datum/quirk/item_quirk/asthma) in target.quirks) + +/datum/disease/asthma_attack/stage_act(seconds_per_tick, times_fired) + . = ..() + if (!.) + return + + if (HAS_TRAIT(affected_mob, TRAIT_NOBREATH)) + cure() + return FALSE + + var/datum/quirk/item_quirk/asthma/asthma_quirk = get_asthma_quirk() + var/inflammation = stage_to_inflammation_per_second["[stage]"] + if (inflammation) + asthma_quirk.adjust_inflammation(inflammation * seconds_per_tick) + + if (!(world.time >= time_to_start_remission)) + return + + if (!in_remission) + in_remission = TRUE + stage_prob = 0 + name += " (Remission)" + desc += " The attack has entered remission. It will slowly decrease in intensity before vanishing." + progress_to_stage_demotion += (progress_to_demotion_per_second * seconds_per_tick) + if (progress_to_stage_demotion >= progress_needed_to_demote) + progress_to_stage_demotion = 0 + update_stage(stage - 1) + +// TYPES OF ASTHMA ATTACK + +/datum/disease/asthma_attack/minor + severity = DISEASE_SEVERITY_MEDIUM + stage_prob = 4 + + max_time_til_remission = 120 SECONDS + min_time_til_remission = 80 SECONDS + max_stages = 3 + + cure_chance = 20 + + stage_to_inflammation_per_second = list( + "2" = 0.3, + "3" = 0.6, + ) + +/datum/disease/asthma_attack/minor/stage_act(seconds_per_tick, times_fired) + . = ..() + if (!.) + return FALSE + + if (SPT_PROB(5, seconds_per_tick)) + to_chat(affected_mob, span_warning(pick("Mucous runs down the back of your throat.", "You swallow excess mucus."))) + +/datum/disease/asthma_attack/moderate + severity = DISEASE_SEVERITY_HARMFUL + stage_prob = 5 + + max_time_til_remission = 120 SECONDS + min_time_til_remission = 80 SECONDS + max_stages = 4 + + cure_chance = 20 + + stage_to_inflammation_per_second = list( + "2" = 1, + "3" = 2, + "4" = 4, + ) + +/datum/disease/asthma_attack/moderate/stage_act(seconds_per_tick, times_fired) + . = ..() + if (!.) + return FALSE + + if (SPT_PROB(15, seconds_per_tick)) + to_chat(affected_mob, span_warning(pick("Mucous runs down the back of your throat.", "You swallow excess mucus."))) + + if (stage < 4 || !SPT_PROB(10, seconds_per_tick)) + return + to_chat(affected_mob, span_warning("You briefly choke on the mucus piling in your throat!")) + affected_mob.losebreath++ + + +/datum/disease/asthma_attack/severe + severity = DISEASE_SEVERITY_DANGEROUS + stage_prob = 6 + + max_time_til_remission = 80 SECONDS + min_time_til_remission = 60 SECONDS + max_stages = 5 + + cure_chance = 20 + + stage_to_inflammation_per_second = list( + "2" = 1, + "3" = 3, + "4" = 6, + "5" = 8, + ) + + visibility_flags = HIDDEN_SCANNER + alert_ghosts = TRUE + +/datum/disease/asthma_attack/severe/stage_act(seconds_per_tick, times_fired) + . = ..() + if (!.) + return FALSE + + if (stage > 1) + visibility_flags &= ~HIDDEN_SCANNER // revealed + + if (SPT_PROB(15, seconds_per_tick)) + to_chat(affected_mob, span_warning(pick("Mucous runs down the back of your throat.", "You swallow excess mucus."))) + else if (SPT_PROB(20, seconds_per_tick)) + affected_mob.emote("cough") + + if (stage < 4 || !SPT_PROB(15, seconds_per_tick)) + return + to_chat(affected_mob, span_warning("You briefly choke on the mucus piling in your throat!")) + affected_mob.losebreath++ + +/datum/disease/asthma_attack/critical + severity = DISEASE_SEVERITY_BIOHAZARD + stage_prob = 85 + + max_time_til_remission = 60 SECONDS // this kills you extremely quickly, so its fair + min_time_til_remission = 40 SECONDS + max_stages = 6 + + cure_chance = 30 + + stage_to_inflammation_per_second = list( + "1" = 5, + "2" = 6, + "3" = 7, + "4" = 10, + "5" = 20, + "6" = 500, // youre fucked frankly + ) + + /// Have we warned our user of the fact they are at stage 5? If no, and are at or above stage five, we send a warning and set this to true. + var/warned_user = FALSE + /// Have we ever reached our max stage? If no, and we are at our max stage, we send a ominous message warning them of their imminent demise. + var/max_stage_reached = FALSE + +/datum/disease/asthma_attack/critical/stage_act(seconds_per_tick, times_fired) + . = ..() + if (!.) + return FALSE + + if (stage < 5) + if (SPT_PROB(75, seconds_per_tick)) + to_chat(affected_mob, span_warning(pick("Mucous runs down the back of your throat.", "You swallow excess mucus."))) + + var/wheeze_chance + if (!warned_user && stage >= 5) + to_chat(affected_mob, span_userdanger("You feel like your lungs are filling with fluid! It's getting incredibly hard to breathe!")) + warned_user = TRUE + + switch (stage) + if (1) + wheeze_chance = 0 + if (2) + wheeze_chance = 20 + if (3) + wheeze_chance = 40 + if (4) + wheeze_chance = 60 + if (5) + wheeze_chance = 80 + if (!in_remission) + stage_prob = 10 // slow it down significantly + if (6) + if (!max_stage_reached) + max_stage_reached = TRUE + to_chat(affected_mob, span_userdanger("You feel your windpipe squeeze shut!")) + wheeze_chance = 0 + if (SPT_PROB(10, seconds_per_tick)) + affected_mob.emote("gag") + var/datum/quirk/item_quirk/asthma/asthma_quirk = get_asthma_quirk() + asthma_quirk.adjust_inflammation(INFINITY) + + if (SPT_PROB(wheeze_chance, seconds_per_tick)) + affected_mob.emote("wheeze") + + if (stage < 4 || !SPT_PROB(15, seconds_per_tick)) + return + to_chat(affected_mob, span_warning("You briefly choke on the mucus piling in your throat!")) + affected_mob.losebreath++ diff --git a/code/datums/elements/crusher_loot.dm b/code/datums/elements/crusher_loot.dm index 16b5253dca26..28cd12f82a0d 100644 --- a/code/datums/elements/crusher_loot.dm +++ b/code/datums/elements/crusher_loot.dm @@ -46,5 +46,8 @@ /datum/element/crusher_loot/proc/make_path(mob/living/target, path) if(drop_immediately) new path(get_turf(target)) - else - target.guaranteed_butcher_results[path] = 1 + return + + if (!target.guaranteed_butcher_results) + target.guaranteed_butcher_results = list() + target.guaranteed_butcher_results[path] = 1 diff --git a/code/datums/elements/decals/_decal.dm b/code/datums/elements/decals/_decal.dm index b9adaca0b419..d5616c5b5cb2 100644 --- a/code/datums/elements/decals/_decal.dm +++ b/code/datums/elements/decals/_decal.dm @@ -45,6 +45,11 @@ if(directional) //Even when the dirs are the same rotation is coming out as not 0 for some reason rotation = SIMPLIFY_DEGREES(dir2angle(new_dir)-dir2angle(old_dir)) new_dir = turn(pic.dir,-rotation) + + var/pic_color = pic.color + if(islist(pic_color)) + pic_color = string_list(pic_color) + return list( "icon" = pic.icon, "icon_state" = base_icon_state, @@ -52,7 +57,7 @@ "plane" = pic.plane, "layer" = pic.layer, "alpha" = pic.alpha, - "color" = pic.color, + "color" = pic_color, "smoothing" = smoothing, "cleanable" = cleanable, "desc" = description @@ -64,6 +69,9 @@ . = ..() if(!isatom(target)) return ELEMENT_INCOMPATIBLE + // Color matrixes should be stringlisted as to avoid dupes + if (islist(_color)) + _color = string_list(_color) if(_pic) pic = _pic else if(!generate_appearance(_icon, _icon_state, _dir, _plane, _layer, _color, _alpha, _smoothing, target)) @@ -104,6 +112,11 @@ /datum/element/decal/proc/generate_appearance(_icon, _icon_state, _dir, _plane, _layer, _color, _alpha, _smoothing, source) if(!_icon || !_icon_state) return FALSE + + if(_plane == EMISSIVE_PLANE) + pic = emissive_appearance(_icon, isnull(_smoothing) ? _icon_state : "[_icon_state]-[_smoothing]", source, _layer, _alpha) + return TRUE + var/temp_image = image(_icon, null, isnull(_smoothing) ? _icon_state : "[_icon_state]-[_smoothing]", _layer, _dir) pic = new(temp_image) var/atom/atom_source = source @@ -153,7 +166,10 @@ if(new_turf == source) return Detach(source) - new_turf.AddElement(type, pic.icon, base_icon_state, directional, pic.plane, pic.layer, pic.alpha, pic.color, smoothing, cleanable, description) + var/pic_color = pic.color + if(islist(pic_color)) + pic_color = string_list(pic_color) + new_turf.AddElement(type, pic.icon, base_icon_state, directional, pic.plane, pic.layer, pic.alpha, pic_color, smoothing, cleanable, description) /datum/element/decal/proc/shuttle_rotate(datum/source, list/datum/element/decal/rotating) SIGNAL_HANDLER @@ -172,5 +188,8 @@ return NONE Detach(source) - source.AddElement(type, pic.icon, base_icon_state, directional, PLANE_TO_TRUE(pic.plane), pic.layer, pic.alpha, pic.color, smoothing_junction, cleanable, description) + var/pic_color = pic.color + if(islist(pic_color)) + pic_color = string_list(pic_color) + source.AddElement(type, pic.icon, base_icon_state, directional, PLANE_TO_TRUE(pic.plane), pic.layer, pic.alpha, pic_color, smoothing_junction, cleanable, description) return NONE diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm index 80a9bbe323c3..304d79ad1608 100644 --- a/code/datums/elements/elevation.dm +++ b/code/datums/elements/elevation.dm @@ -17,16 +17,16 @@ src.pixel_shift = pixel_shift - RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(target, COMSIG_ATOM_ENTERING, PROC_REF(on_source_entering)) + RegisterSignal(target, COMSIG_ATOM_EXITING, PROC_REF(on_source_exiting)) var/atom/atom_target = target register_turf(atom_target, atom_target.loc) /datum/element/elevation/Detach(atom/movable/source) - UnregisterSignal(source, COMSIG_MOVABLE_MOVED) + UnregisterSignal(source, list(COMSIG_ATOM_ENTERING, COMSIG_ATOM_EXITING)) unregister_turf(source, source.loc) REMOVE_TRAIT(source, TRAIT_ELEVATING_OBJECT, ref(src)) - UnregisterSignal(source, COMSIG_MOVABLE_MOVED) return ..() /datum/element/elevation/proc/reset_elevation(turf/target) @@ -45,10 +45,13 @@ SIGNAL_HANDLER current_values[ELEVATION_MAX_PIXEL_SHIFT] = max(current_values[ELEVATION_MAX_PIXEL_SHIFT], pixel_shift) -/datum/element/elevation/proc/on_moved(atom/movable/source, atom/oldloc) +/datum/element/elevation/proc/on_source_entering(atom/movable/source, atom/entering, atom/old_loc) SIGNAL_HANDLER - unregister_turf(source, oldloc) - register_turf(source, source.loc) + register_turf(source, entering) + +/datum/element/elevation/proc/on_source_exiting(atom/movable/source, atom/exiting) + SIGNAL_HANDLER + unregister_turf(source, exiting) /datum/element/elevation/proc/register_turf(atom/movable/source, atom/location) if(!isturf(location)) @@ -67,17 +70,15 @@ UnregisterSignal(location, list(COMSIG_TURF_RESET_ELEVATION, COMSIG_TURF_CHANGE)) reset_elevation(location) -///Changing or destroying the turf detaches the element, also we need to reapply the traits since they don't get passed down. +/// When a turf with elevated objects changes, we need to unregister all the elevating objects on it. When a turf Initializes(), +/// it calls Entered() on all of its moveable contents, which will invoke on_source_entering(), which will register each elevating +/// object with the new turf. We need to do this because turfs do not keep their traits when changed, and so the check for +/// TRAIT_TURF_HAS_ELEVATED_OBJ above will fail and cause override runtimes when we attempt to register the signals again. /datum/element/elevation/proc/pre_change_turf(turf/changed, path, list/new_baseturfs, flags, list/post_change_callbacks) SIGNAL_HANDLER - var/list/trait_sources = GET_TRAIT_SOURCES(changed, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift)) - trait_sources = trait_sources.Copy() - post_change_callbacks += CALLBACK(src, PROC_REF(post_change_turf), trait_sources) - -/datum/element/elevation/proc/post_change_turf(list/trait_sources, turf/changed) - for(var/source in trait_sources) - ADD_TRAIT(changed, TRAIT_TURF_HAS_ELEVATED_OBJ(pixel_shift), source) - reset_elevation(changed) + for (var/atom/movable/content as anything in changed) + if(HAS_TRAIT_FROM(content, TRAIT_ELEVATING_OBJECT, ref(src))) + unregister_turf(content, changed) #define ELEVATE_TIME 0.2 SECONDS #define ELEVATION_SOURCE(datum) "elevation_[REF(datum)]" diff --git a/code/datums/elements/food/microwavable.dm b/code/datums/elements/food/microwavable.dm index 325f7fe865d0..e7efeae4501c 100644 --- a/code/datums/elements/food/microwavable.dm +++ b/code/datums/elements/food/microwavable.dm @@ -2,28 +2,30 @@ /datum/element/microwavable element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 - /// The typepath we default to if we were passed no microwave result - var/atom/default_typepath /// Resulting atom typepath on a completed microwave. var/atom/result_typepath /// Reagents that should be added to the result var/list/added_reagents + /// Whether this is a bad recipe or not. It affects some checks. + var/bad_recipe -/datum/element/microwavable/Attach(obj/item/target, microwave_type, list/reagents, skip_matcheck = FALSE) +/datum/element/microwavable/Attach(obj/item/target, microwave_type, list/reagents, bad_recipe = FALSE) . = ..() if(!istype(target)) return ELEMENT_INCOMPATIBLE + if(!microwave_type) + CRASH("microwavable element attached without a microwave_type arg") - result_typepath = microwave_type || default_typepath - + result_typepath = microwave_type added_reagents = reagents + src.bad_recipe = bad_recipe RegisterSignal(target, COMSIG_ITEM_MICROWAVE_ACT, PROC_REF(on_microwaved)) - if(!ispath(result_typepath, default_typepath)) + if(!bad_recipe) RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - if(!PERFORM_ALL_TESTS(focus_only/check_materials_when_processed) || skip_matcheck || !target.custom_materials || isstack(target)) + if(!PERFORM_ALL_TESTS(focus_only/check_materials_when_processed) || bad_recipe || !target.custom_materials || isstack(target)) return var/atom/result = new result_typepath @@ -55,12 +57,8 @@ var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1 - if(IS_EDIBLE(result) && (result_typepath != default_typepath)) + if(IS_EDIBLE(result) && !bad_recipe) BLACKBOX_LOG_FOOD_MADE(result.type) - result.reagents.clear_reagents() - source.reagents?.trans_to(result, source.reagents.total_volume) - if(added_reagents) // Add any new reagents that should be added - result.reagents.add_reagent_list(added_reagents) if(istype(source, /obj/item/food) && istype(result, /obj/item/food)) var/obj/item/food/original_food = source @@ -70,6 +68,12 @@ if(microwaver && microwaver.mind) ADD_TRAIT(result, TRAIT_FOOD_CHEF_MADE, REF(microwaver.mind)) + //make space and tranfer reagents if it has any, also let any bad result handle removing or converting the transferred reagents on its own terms + if(result.reagents && source.reagents) + result.reagents.clear_reagents() + source.reagents.trans_to(result, source.reagents.total_volume) + if(added_reagents) // Add any new reagents that should be added + result.reagents.add_reagent_list(added_reagents) SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, source, efficiency) SEND_SIGNAL(source, COMSIG_ITEM_MICROWAVE_COOKED_FROM, result, efficiency) @@ -77,7 +81,7 @@ qdel(source) var/recipe_result = COMPONENT_MICROWAVE_SUCCESS - if(istype(result, default_typepath)) + if(bad_recipe) recipe_result |= COMPONENT_MICROWAVE_BAD_RECIPE if(randomize_pixel_offset && isitem(result)) diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm index 70b7e2968abd..b041aa47c3df 100644 --- a/code/datums/elements/strippable.dm +++ b/code/datums/elements/strippable.dm @@ -262,10 +262,10 @@ return STRIPPABLE_OBSCURING_NONE var/mob/living/carbon/carbon_source = source - if (carbon_source.check_obscured_slots() & item_slot) + if (hidden_slots_to_inventory_slots(carbon_source.obscured_slots) & item_slot) return STRIPPABLE_OBSCURING_COMPLETELY - if (carbon_source.check_covered_slots() & item_slot) + if (hidden_slots_to_inventory_slots(carbon_source.covered_slots) & item_slot) return STRIPPABLE_OBSCURING_INACCESSIBLE return STRIPPABLE_OBSCURING_NONE diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 86fb2259a37f..65b74962fd9d 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -101,7 +101,8 @@ if(!msg) return - user.log_message(msg, LOG_EMOTE) + if(user.client) + user.log_message(msg, LOG_EMOTE) var/tmp_sound = get_sound(user) if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, "general_emote_audio_cooldown") && TIMER_COOLDOWN_FINISHED(user, type)) @@ -388,18 +389,21 @@ * * Returns TRUE if it was able to run the emote, FALSE otherwise. */ -/atom/proc/manual_emote(text) - if(!text) +/atom/proc/manual_emote(text, log_emote = TRUE) + if (!text) CRASH("Someone passed nothing to manual_emote(), fix it") - log_message(text, LOG_EMOTE) + if (log_emote) + log_message(text, LOG_EMOTE) visible_message(text, visible_message_flags = EMOTE_MESSAGE) return TRUE -/mob/manual_emote(text) +/mob/manual_emote(text, log_emote = null) if (stat != CONSCIOUS) return FALSE - . = ..() + if (isnull(log_emote)) + log_emote = !isnull(client) + . = ..(text, log_emote) if (!.) return FALSE if (!client) diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm index 8eddea6a9316..83eb1fb6351b 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm @@ -89,6 +89,15 @@ name = "Santa Hat (Worn)" icon_file = 'icons/mob/clothing/head/costume.dmi' +/datum/greyscale_config/ushanka + name = "Ushanka" + icon_file = 'icons/obj/clothing/head/costume.dmi' + json_config = 'code/datums/greyscale/json_configs/ushanka.json' + +/datum/greyscale_config/ushanka/worn + name = "Ushanka (Worn)" + icon_file = 'icons/mob/clothing/head/costume.dmi' + // // MASKS // diff --git a/code/datums/greyscale/json_configs/ushanka.json b/code/datums/greyscale/json_configs/ushanka.json new file mode 100644 index 000000000000..3099b13278b2 --- /dev/null +++ b/code/datums/greyscale/json_configs/ushanka.json @@ -0,0 +1,30 @@ +{ + "ushanka_gagup": [ + { + "type": "icon_state", + "icon_state": "ushanka_fur", + "blend_mode": "overlay", + "color_ids": [1] + }, + { + "type": "icon_state", + "icon_state": "ushanka_base_up", + "blend_mode": "overlay", + "color_ids": [2] + } + ], + "ushanka_gagdown": [ + { + "type": "icon_state", + "icon_state": "ushanka_fur", + "blend_mode": "overlay", + "color_ids": [1] + }, + { + "type": "icon_state", + "icon_state": "ushanka_base", + "blend_mode": "overlay", + "color_ids": [2] + } + ] +} diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index e0b6a79aea26..1669dd94a415 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -831,25 +831,26 @@ subdepartment_color = COLOR_MEDICAL_BLUE sechud_icon_state = SECHUD_PARAMEDIC minimal_access = list( + ACCESS_EXTERNAL_AIRLOCKS, + ACCESS_MEDICAL, + ACCESS_MAINT_TUNNELS, + ACCESS_MORGUE, + ACCESS_MECH_MEDICAL, + ) + extra_access = list( ACCESS_BIT_DEN, ACCESS_CARGO, ACCESS_CONSTRUCTION, ACCESS_HYDROPONICS, - ACCESS_MAINT_TUNNELS, - ACCESS_MECH_MEDICAL, - ACCESS_MEDICAL, + ACCESS_SURGERY, + ACCESS_VIROLOGY, + ACCESS_PHARMACY, ACCESS_MINERAL_STOREROOM, ACCESS_MINING, ACCESS_MINING_STATION, - ACCESS_MORGUE, ACCESS_SCIENCE, ACCESS_SERVICE, ) - extra_access = list( - ACCESS_SURGERY, - ACCESS_VIROLOGY, - ACCESS_PHARMACY, - ) template_access = list( ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, diff --git a/code/datums/instability_meltdown.dm b/code/datums/instability_meltdown.dm index 4e3a82fd376b..508f74885c7b 100644 --- a/code/datums/instability_meltdown.dm +++ b/code/datums/instability_meltdown.dm @@ -1,11 +1,11 @@ /// A possible genetic meltdown that occurs when someone exceeds 100 genetic instability /datum/instability_meltdown + /// Used to ensure that abstract subtypes do not get picked + abstract_type = /datum/instability_meltdown /// How likely a meltdown is to be picked var/meltdown_weight = 1 /// If this meltdown is considered "fatal" or not var/fatal = FALSE - /// Used to ensure that abstract subtypes do not get picked - var/abstract_type = /datum/instability_meltdown /// Code that runs when this meltdown is picked /datum/instability_meltdown/proc/meltdown(mob/living/carbon/human/victim) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index f7a951567845..1df05ac15ad8 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -214,6 +214,7 @@ //Krav Maga Gloves /obj/item/clothing/gloves/krav_maga + abstract_type = /obj/item/clothing/gloves/krav_maga clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/krav_maga/Initialize(mapload) diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index c1ea1cf239ed..86e1d6d88b55 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -741,7 +741,7 @@ Unless you know what you're doing, only use the first three numbers. They're in MAT_CATEGORY_ITEM_MATERIAL = TRUE, MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE, ) - sheet_type = /obj/item/stack/sheet/sandblock + ore_type = /obj/item/stack/ore/glass value_per_unit = 2 / SHEET_MATERIAL_AMOUNT strength_modifier = 0.5 integrity_modifier = 0.1 diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 91f57f46fa86..6f9225cfdd1c 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -123,7 +123,7 @@ if(ishuman(possible_throwable)) var/mob/living/carbon/human/human_throwable = possible_throwable - if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDEJUMPSUIT)) + if(human_throwable.obscured_slots & HIDEJUMPSUIT) to_chat(user, span_warning("You can't reach [human_throwable]'s tail through [human_throwable.p_their()] [human_throwable.wear_suit.name]!")) return diff --git a/code/datums/proximity_monitor/fields/bubble.dm b/code/datums/proximity_monitor/fields/bubble.dm new file mode 100644 index 000000000000..d62abfa1ce2a --- /dev/null +++ b/code/datums/proximity_monitor/fields/bubble.dm @@ -0,0 +1,150 @@ +#define CHANGING_OFFSET "changing_offset" +#define OVERLAY_DATA "overlay_data" +#define STARTING_POSITION "starting_position" +#define ANIMATE_DAMPENER_TIME 1.5 SECONDS + +//Only use square radius for this! +/datum/proximity_monitor/advanced/bubble + edge_is_a_field = TRUE + + ///Assoc list of every direction and the image it'll take, so we can form a large radius. + var/list/effect_direction_images + ///list of all the visual effects we keep track of + var/list/edgeturf_effects = list() + ///atom that contains all the fields in its vis_contents + var/atom/movable/field_effect_holder/my_movable + +/datum/proximity_monitor/advanced/bubble/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, atom/projector) + . = ..() + setup_effect_directions() + if(_host != projector) + RegisterSignal(projector, COMSIG_QDELETING, PROC_REF(on_projector_del)) + var/atom/movable/movable_host = _host + my_movable = new(get_turf(movable_host)) + my_movable.transform = my_movable.transform.Scale(current_range, current_range) + my_movable.set_glide_size(movable_host.glide_size) + draw_effect() + +/datum/proximity_monitor/advanced/bubble/Destroy() + for(var/coordinates in edgeturf_effects) + var/obj/effect/overlay/vis/field/effect_to_remove = edgeturf_effects[coordinates] + edgeturf_effects -= coordinates + effect_to_remove.set_wobbly(wobble_duration = ANIMATE_DAMPENER_TIME) + animate(effect_to_remove, alpha = 0, time = ANIMATE_DAMPENER_TIME, flags = ANIMATION_PARALLEL) + QDEL_IN(my_movable, ANIMATE_DAMPENER_TIME) + my_movable = null + return ..() + +/datum/proximity_monitor/advanced/bubble/proc/setup_effect_directions() + effect_direction_images = list( + "[SOUTH]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_south"), + "[NORTH]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_north"), + "[WEST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_west"), + "[EAST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_east"), + "[NORTHWEST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northwest"), + "[SOUTHWEST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southwest"), + "[NORTHEAST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northeast"), + "[SOUTHEAST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southeast"), + ) + +/datum/proximity_monitor/advanced/bubble/on_moved(atom/movable/source, atom/old_loc) + . = ..() + my_movable.forceMove(get_turf(source)) + +/datum/proximity_monitor/advanced/bubble/on_z_change(datum/source) + recalculate_field(full_recalc = TRUE) + +///rendering all the field visuals. first we render the corners, then we connect them +/datum/proximity_monitor/advanced/bubble/proc/draw_effect() + var/max_pixel_offset = current_range * ICON_SIZE_ALL + var/top_right_corner = list(effect_direction_images["[NORTHEAST]"], max_pixel_offset, max_pixel_offset) + var/top_left_corner = list(effect_direction_images["[NORTHWEST]"], -max_pixel_offset, max_pixel_offset) + var/bottom_left_corner = list(effect_direction_images["[SOUTHWEST]"], -max_pixel_offset, -max_pixel_offset) + var/bottom_right_corner = list(effect_direction_images["[SOUTHEAST]"], max_pixel_offset, -max_pixel_offset) + + var/list/corners = list(top_right_corner, top_left_corner, bottom_left_corner, bottom_right_corner) + for(var/corner in corners) + draw_corner(corner) + + var/list/corners_to_connect = list( + list(OVERLAY_DATA = effect_direction_images["[NORTH]"], CHANGING_OFFSET = "x_offset", STARTING_POSITION = max_pixel_offset), + list(OVERLAY_DATA = effect_direction_images["[SOUTH]"], CHANGING_OFFSET = "x_offset", STARTING_POSITION = -max_pixel_offset), + list(OVERLAY_DATA = effect_direction_images["[WEST]"], CHANGING_OFFSET = "y_offset", STARTING_POSITION = -max_pixel_offset), + list(OVERLAY_DATA = effect_direction_images["[EAST]"], CHANGING_OFFSET = "y_offset", STARTING_POSITION = max_pixel_offset), + ) + for(var/direction in corners_to_connect) + draw_edge(direction, max_pixel_offset) + +///rendering the corners +/datum/proximity_monitor/advanced/bubble/proc/draw_corner(list/corner_data) + var/obj/effect/overlay/vis/field/corner_effect = new() + var/image/image_overlay = corner_data[1] + corner_effect.icon = image_overlay.icon + corner_effect.icon_state = image_overlay.icon_state + corner_effect.alpha = 0 + corner_effect.pixel_x = corner_data[2] + corner_effect.pixel_y = corner_data[3] + add_effect_to_host(corner_effect) + +///connecting the corners to one another +/datum/proximity_monitor/advanced/bubble/proc/draw_edge(list/edge_data, target_offset) + var/starting_offset = edge_data[STARTING_POSITION] + var/current_offset = (-1 * target_offset) + ICON_SIZE_ALL + var/image/overlay = edge_data[OVERLAY_DATA] + while(current_offset != target_offset) + var/obj/effect/overlay/vis/field/edge_effect = new() + edge_effect.alpha = 0 + edge_effect.icon = overlay.icon + edge_effect.icon_state = overlay.icon_state + + if(edge_data[CHANGING_OFFSET] == "x_offset") + edge_effect.pixel_y = starting_offset + edge_effect.pixel_x = current_offset + else + edge_effect.pixel_x = starting_offset + edge_effect.pixel_y = current_offset + add_effect_to_host(edge_effect) + current_offset += ICON_SIZE_ALL + +///handles adding the visual effect's data +/datum/proximity_monitor/advanced/bubble/proc/add_effect_to_host(obj/effect/overlay/vis/field/effect_to_add) + my_movable.vis_contents += effect_to_add + var/coordinate_x = effect_to_add.pixel_x / ICON_SIZE_ALL + var/coordinate_y = effect_to_add.pixel_y / ICON_SIZE_ALL + effect_to_add.transform = effect_to_add.transform.Scale(1 / current_range, 1 / current_range) + edgeturf_effects["[coordinate_x],[coordinate_y]"] = effect_to_add + effect_to_add.set_wobbly(wobble_duration = ANIMATE_DAMPENER_TIME) + animate(effect_to_add, alpha = 255, time = ANIMATE_DAMPENER_TIME, flags = ANIMATION_PARALLEL) + +/datum/proximity_monitor/advanced/bubble/proc/on_projector_del(datum/source) + SIGNAL_HANDLER + qdel(src) + +/obj/effect/overlay/vis/field + appearance_flags = PIXEL_SCALE|LONG_GLIDE + vis_flags = parent_type::vis_flags | VIS_INHERIT_PLANE + ///are we currently WOBBLING + var/wobbling_effect = FALSE + +/obj/effect/overlay/vis/field/proc/set_wobbly(wobble_duration) + if(wobbling_effect) + return + wobbling_effect = TRUE + apply_wibbly_filters(src) + addtimer(CALLBACK(src, PROC_REF(remove_wobbly)), wobble_duration) + +/obj/effect/overlay/vis/field/proc/remove_wobbly() + if(QDELETED(src)) + return + remove_wibbly_filters(src, remove_duration = 0.25 SECONDS) + addtimer(VARSET_CALLBACK(src, wobbling_effect, FALSE), 0.25 SECONDS) + +/atom/movable/field_effect_holder + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + appearance_flags = PIXEL_SCALE|LONG_GLIDE + plane = ABOVE_GAME_PLANE + +#undef CHANGING_OFFSET +#undef OVERLAY_DATA +#undef STARTING_POSITION +#undef ANIMATE_DAMPENER_TIME diff --git a/code/datums/proximity_monitor/fields/projectile_dampener/projectile_dampener.dm b/code/datums/proximity_monitor/fields/projectile_dampener/projectile_dampener.dm index 3185872efad4..e863e99edbf0 100644 --- a/code/datums/proximity_monitor/fields/projectile_dampener/projectile_dampener.dm +++ b/code/datums/proximity_monitor/fields/projectile_dampener/projectile_dampener.dm @@ -1,96 +1,65 @@ -#define CHANGING_OFFSET "changing_offset" -#define OVERLAY_DATA "overlay_data" -#define STARTING_POSITION "starting_position" -#define ANIMATE_DAMPENER_TIME 1.5 SECONDS - //Projectile dampening field that slows projectiles and lowers their damage for an energy cost deducted every 1/5 second. -//Only use square radius for this! -/datum/proximity_monitor/advanced/projectile_dampener - edge_is_a_field = TRUE - var/static/list/effect_direction_images = list( - "[SOUTH]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_south"), - "[NORTH]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_north"), - "[WEST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_west"), - "[EAST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_east"), - "[NORTHWEST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northwest"), - "[SOUTHWEST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southwest"), - "[NORTHEAST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northeast"), - "[SOUTHEAST]" = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southeast"), - ) - var/static/image/generic_edge = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_generic") +/datum/proximity_monitor/advanced/bubble/projectile_dampener ///overlay we apply to caught bullets var/static/image/new_bullet_overlay= image('icons/effects/fields.dmi', "projectile_dampen_effect") - ///list of all the visual effects we keep track of - var/list/edgeturf_effects = list() - ///atom that contains all the fields in its vis_contents - var/atom/movable/field_effect_holder/my_movable /// datum that holds the effects we apply on caught bullets var/datum/dampener_projectile_effects/bullet_effects -/datum/proximity_monitor/advanced/projectile_dampener/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, atom/projector, datum/dampener_projectile_effects/effects_typepath) - ..() - RegisterSignal(projector, COMSIG_QDELETING, PROC_REF(on_projector_del)) - var/atom/movable/movable_host = _host - my_movable = new(get_turf(_host)) - my_movable.transform = my_movable.transform.Scale(current_range, current_range) - my_movable.set_glide_size(movable_host.glide_size) - bullet_effects = effects_typepath ? new effects_typepath() : new - draw_effect() - -/datum/proximity_monitor/advanced/projectile_dampener/on_moved(atom/movable/source, atom/old_loc) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, atom/projector, datum/dampener_projectile_effects/effects_typepath) . = ..() - my_movable.Move(source.loc, get_dir(my_movable.loc, source.loc), source.glide_size) + bullet_effects = effects_typepath ? new effects_typepath() : new -/datum/proximity_monitor/advanced/projectile_dampener/on_z_change(datum/source) - recalculate_field(full_recalc = TRUE) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/Destroy() + bullet_effects = null + return ..() -/datum/proximity_monitor/advanced/projectile_dampener/field_edge_crossed(atom/movable/movable, turf/location, turf/old_location) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/field_edge_crossed(atom/movable/movable, turf/location, turf/old_location) . = ..() if(!isprojectile(movable)) return determine_wobble(location) -/datum/proximity_monitor/advanced/projectile_dampener/field_edge_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/field_edge_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) . = ..() if(!isprojectile(movable)) return determine_wobble(old_location) -/datum/proximity_monitor/advanced/projectile_dampener/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) if(!isprojectile(movable) || HAS_TRAIT_FROM(movable, TRAIT_GOT_DAMPENED, REF(src))) return catch_bullet_effect(movable) -/datum/proximity_monitor/advanced/projectile_dampener/field_turf_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) - if(!isprojectile(movable) || get_dist(new_location, host) <= current_range) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/field_turf_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) + if(!isprojectile(movable) || get_dist(new_location, host) <= (edge_is_a_field ? current_range : current_range - 1)) return release_bullet_effect(movable) -/datum/proximity_monitor/advanced/projectile_dampener/setup_field_turf(turf/target) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/setup_field_turf(turf/target) for(var/atom/possible_projectile in target) if(isprojectile(possible_projectile)) catch_bullet_effect(possible_projectile) -/datum/proximity_monitor/advanced/projectile_dampener/cleanup_field_turf(turf/target) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/cleanup_field_turf(turf/target) for(var/atom/possible_projectile in target) if(isprojectile(possible_projectile) && HAS_TRAIT_FROM(possible_projectile, TRAIT_GOT_DAMPENED, REF(src))) release_bullet_effect(possible_projectile) ///proc that applies the wobbly effect on point of bullet entry -/datum/proximity_monitor/advanced/projectile_dampener/proc/determine_wobble(turf/location) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/proc/determine_wobble(turf/location) var/coord_x = location.x - host.x var/coord_y = location.y - host.y var/obj/effect/overlay/vis/field/my_field = edgeturf_effects["[coord_x],[coord_y]"] my_field?.set_wobbly(0.15 SECONDS) -/datum/proximity_monitor/advanced/projectile_dampener/proc/projectile_overlay_updated(atom/source, list/overlays) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/proc/projectile_overlay_updated(atom/source, list/overlays) SIGNAL_HANDLER if(!isnull(new_bullet_overlay) && HAS_TRAIT_FROM(source, TRAIT_GOT_DAMPENED, REF(src))) overlays += new_bullet_overlay ///a bullet has entered our field, apply the dampening effects to it -/datum/proximity_monitor/advanced/projectile_dampener/proc/catch_bullet_effect(obj/projectile/bullet) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/proc/catch_bullet_effect(obj/projectile/bullet) ADD_TRAIT(bullet,TRAIT_GOT_DAMPENED, REF(src)) RegisterSignal(bullet, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(projectile_overlay_updated)) SEND_SIGNAL(src, COMSIG_DAMPENER_CAPTURE, bullet) @@ -98,141 +67,35 @@ bullet.update_appearance() ///removing the effects after it has exited our field -/datum/proximity_monitor/advanced/projectile_dampener/proc/release_bullet_effect(obj/projectile/bullet) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/proc/release_bullet_effect(obj/projectile/bullet) REMOVE_TRAIT(bullet, TRAIT_GOT_DAMPENED, REF(src)) SEND_SIGNAL(src, COMSIG_DAMPENER_RELEASE, bullet) bullet_effects.remove_effects(bullet) bullet.update_appearance() UnregisterSignal(bullet, COMSIG_ATOM_UPDATE_OVERLAYS) -///rendering all the field visuals. first we render the corners, then we connect them -/datum/proximity_monitor/advanced/projectile_dampener/proc/draw_effect() - var/max_pixel_offset = current_range * ICON_SIZE_ALL - var/top_right_corner = list(effect_direction_images["[NORTHEAST]"], max_pixel_offset, max_pixel_offset) - var/top_left_corner = list(effect_direction_images["[NORTHWEST]"], -max_pixel_offset, max_pixel_offset) - var/bottom_left_corner = list(effect_direction_images["[SOUTHWEST]"], -max_pixel_offset, -max_pixel_offset) - var/bottom_right_corner = list(effect_direction_images["[SOUTHEAST]"], max_pixel_offset, -max_pixel_offset) - - var/list/corners = list(top_right_corner, top_left_corner, bottom_left_corner, bottom_right_corner) - for(var/corner in corners) - draw_corner(corner) - - var/list/corners_to_connect = list( - list(OVERLAY_DATA = effect_direction_images["[NORTH]"], CHANGING_OFFSET = "x_offset", STARTING_POSITION = max_pixel_offset), - list(OVERLAY_DATA = effect_direction_images["[SOUTH]"], CHANGING_OFFSET = "x_offset", STARTING_POSITION = -max_pixel_offset), - list(OVERLAY_DATA = effect_direction_images["[WEST]"], CHANGING_OFFSET = "y_offset", STARTING_POSITION = -max_pixel_offset), - list(OVERLAY_DATA = effect_direction_images["[EAST]"], CHANGING_OFFSET = "y_offset", STARTING_POSITION = max_pixel_offset), - ) - for(var/direction in corners_to_connect) - draw_edge(direction, max_pixel_offset) - -///rendering the corners -/datum/proximity_monitor/advanced/projectile_dampener/proc/draw_corner(list/corner_data) - var/obj/effect/overlay/vis/field/corner_effect = new() - var/image/image_overlay = corner_data[1] - corner_effect.icon = image_overlay.icon - corner_effect.icon_state = image_overlay.icon_state - corner_effect.alpha = 0 - corner_effect.pixel_x = corner_data[2] - corner_effect.pixel_y = corner_data[3] - add_effect_to_host(corner_effect) - -///connecting the corners to one another -/datum/proximity_monitor/advanced/projectile_dampener/proc/draw_edge(list/edge_data, target_offset) - var/starting_offset = edge_data[STARTING_POSITION] - var/current_offset = (-1 * target_offset) + ICON_SIZE_ALL - var/image/overlay = edge_data[OVERLAY_DATA] - while(current_offset != target_offset) - var/obj/effect/overlay/vis/field/edge_effect = new() - edge_effect.alpha = 0 - edge_effect.icon = overlay.icon - edge_effect.icon_state = overlay.icon_state - - if(edge_data[CHANGING_OFFSET] == "x_offset") - edge_effect.pixel_y = starting_offset - edge_effect.pixel_x = current_offset - else - edge_effect.pixel_x = starting_offset - edge_effect.pixel_y = current_offset - add_effect_to_host(edge_effect) - current_offset += ICON_SIZE_ALL - -///handles adding the visual effect's data -/datum/proximity_monitor/advanced/projectile_dampener/proc/add_effect_to_host(obj/effect/overlay/vis/field/effect_to_add) - my_movable.vis_contents += effect_to_add - var/coordinate_x = effect_to_add.pixel_x / ICON_SIZE_ALL - var/coordinate_y = effect_to_add.pixel_y / ICON_SIZE_ALL - effect_to_add.transform = effect_to_add.transform.Scale(1 / current_range, 1 / current_range) - edgeturf_effects["[coordinate_x],[coordinate_y]"] = effect_to_add - effect_to_add.set_wobbly(wobble_duration = ANIMATE_DAMPENER_TIME) - animate(effect_to_add, alpha = 255, time = ANIMATE_DAMPENER_TIME, flags = ANIMATION_PARALLEL) - -/datum/proximity_monitor/advanced/projectile_dampener/proc/on_projector_del(datum/source) - SIGNAL_HANDLER - qdel(src) - -/datum/proximity_monitor/advanced/projectile_dampener/Destroy() - for(var/coordinates in edgeturf_effects) - var/obj/effect/overlay/vis/field/effect_to_remove = edgeturf_effects[coordinates] - edgeturf_effects -= coordinates - effect_to_remove.set_wobbly(wobble_duration = ANIMATE_DAMPENER_TIME) - animate(effect_to_remove, alpha = 0, time = ANIMATE_DAMPENER_TIME, flags = ANIMATION_PARALLEL) - QDEL_IN(my_movable, ANIMATE_DAMPENER_TIME) - my_movable = null - bullet_effects = null - return ..() - -/datum/proximity_monitor/advanced/projectile_dampener/peaceborg +/datum/proximity_monitor/advanced/bubble/projectile_dampener/peaceborg -/datum/proximity_monitor/advanced/projectile_dampener/peaceborg/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/peaceborg/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) . = ..() if(!iscyborg(movable) || !HAS_TRAIT_FROM(movable, TRAIT_GOT_DAMPENED, REF(src))) ADD_TRAIT(movable, TRAIT_GOT_DAMPENED, REF(src)) -/datum/proximity_monitor/advanced/projectile_dampener/peaceborg/field_turf_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) - if(!iscyborg(movable) || get_dist(new_location, host) <= current_range) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/peaceborg/field_turf_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) + if(!iscyborg(movable) || get_dist(new_location, host) <= (edge_is_a_field ? current_range : current_range - 1)) return REMOVE_TRAIT(movable, TRAIT_GOT_DAMPENED, REF(src)) -/datum/proximity_monitor/advanced/projectile_dampener/peaceborg/setup_field_turf(turf/target) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/peaceborg/setup_field_turf(turf/target) for(var/atom/interesting_atom as anything in target) if(iscyborg(interesting_atom)) ADD_TRAIT(interesting_atom, TRAIT_GOT_DAMPENED, REF(src)) if(isprojectile(interesting_atom)) catch_bullet_effect(interesting_atom) -/datum/proximity_monitor/advanced/projectile_dampener/peaceborg/cleanup_field_turf(turf/target) +/datum/proximity_monitor/advanced/bubble/projectile_dampener/peaceborg/cleanup_field_turf(turf/target) for(var/atom/interesting_atom as anything in target) if(iscyborg(interesting_atom)) REMOVE_TRAIT(interesting_atom, TRAIT_GOT_DAMPENED, REF(src)) if(isprojectile(interesting_atom)) release_bullet_effect(interesting_atom) - -/obj/effect/overlay/vis/field - appearance_flags = PIXEL_SCALE|LONG_GLIDE - vis_flags = parent_type::vis_flags | VIS_INHERIT_PLANE - ///are we currently WOBBLING - var/wobbling_effect = FALSE - -/obj/effect/overlay/vis/field/proc/set_wobbly(wobble_duration) - if(wobbling_effect) - return - wobbling_effect = TRUE - apply_wibbly_filters(src) - addtimer(CALLBACK(src, PROC_REF(remove_wobbly)), wobble_duration) - -/obj/effect/overlay/vis/field/proc/remove_wobbly() - if(QDELETED(src)) - return - remove_wibbly_filters(src, remove_duration = 0.25 SECONDS) - addtimer(VARSET_CALLBACK(src, wobbling_effect, FALSE), 0.25 SECONDS) - -/atom/movable/field_effect_holder - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - appearance_flags = PIXEL_SCALE|LONG_GLIDE - plane = ABOVE_GAME_PLANE - -#undef CHANGING_OFFSET -#undef OVERLAY_DATA -#undef STARTING_POSITION -#undef ANIMATE_DAMPENER_TIME diff --git a/code/datums/proximity_monitor/fields/space_protection.dm b/code/datums/proximity_monitor/fields/space_protection.dm new file mode 100644 index 000000000000..005b4fa86d8a --- /dev/null +++ b/code/datums/proximity_monitor/fields/space_protection.dm @@ -0,0 +1,48 @@ +//Bubble that grants space protection to those inside of it. +/datum/proximity_monitor/advanced/bubble/space_protection + edge_is_a_field = FALSE + ///List of all traits that's given to mobs in the field, which is our "space proof" we grant. + var/static/list/traits_to_give = list( + TRAIT_RESISTCOLD, + TRAIT_RESISTLOWPRESSURE, + TRAIT_NOBREATH, + ) + +/datum/proximity_monitor/advanced/bubble/space_protection/setup_effect_directions() + effect_direction_images = list( + "[SOUTH]" = image('icons/effects/fields.dmi', icon_state = "space_protection_south"), + "[NORTH]" = image('icons/effects/fields.dmi', icon_state = "space_protection_north"), + "[WEST]" = image('icons/effects/fields.dmi', icon_state = "space_protection_west"), + "[EAST]" = image('icons/effects/fields.dmi', icon_state = "space_protection_east"), + "[NORTHWEST]" = image('icons/effects/fields.dmi', icon_state = "space_protection_northwest"), + "[SOUTHWEST]" = image('icons/effects/fields.dmi', icon_state = "space_protection_southwest"), + "[NORTHEAST]" = image('icons/effects/fields.dmi', icon_state = "space_protection_northeast"), + "[SOUTHEAST]" = image('icons/effects/fields.dmi', icon_state = "space_protection_southeast"), + ) + +/datum/proximity_monitor/advanced/bubble/space_protection/field_turf_crossed(atom/movable/movable, turf/old_location, turf/new_location) + if(!isliving(movable) || HAS_TRAIT_FROM(movable, traits_to_give[1], REF(src))) + return + give_space_immunity(movable) + +/datum/proximity_monitor/advanced/bubble/space_protection/field_turf_uncrossed(atom/movable/movable, turf/old_location, turf/new_location) + if(!isliving(movable) || get_dist(new_location, host) <= (edge_is_a_field ? current_range : current_range - 1)) + return + remove_space_immunity(movable) + +/datum/proximity_monitor/advanced/bubble/space_protection/setup_field_turf(turf/target) + for(var/mob/possible_mob in target) + give_space_immunity(possible_mob) + +/datum/proximity_monitor/advanced/bubble/space_protection/cleanup_field_turf(turf/target) + for(var/mob/possible_mob in target) + if(HAS_TRAIT_FROM(possible_mob, traits_to_give[1], REF(src))) + remove_space_immunity(possible_mob) + +///a mob has entered our field, apply the space protection to them. +/datum/proximity_monitor/advanced/bubble/space_protection/proc/give_space_immunity(mob/living/new_immunne) + new_immunne.add_traits(traits_to_give, REF(src)) + +///removing the effects after the mob has exited our field. +/datum/proximity_monitor/advanced/bubble/space_protection/proc/remove_space_immunity(mob/living/no_longer_immune) + no_longer_immune.remove_traits(traits_to_give, REF(src)) diff --git a/code/datums/quirks/_quirk_constant_data.dm b/code/datums/quirks/_quirk_constant_data.dm index 34bde6d9883f..18386f6a13e5 100644 --- a/code/datums/quirks/_quirk_constant_data.dm +++ b/code/datums/quirks/_quirk_constant_data.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, gene /// A singleton datum representing constant data and procs used by quirks. /datum/quirk_constant_data /// Abstract in OOP terms. If this is our type, we will not be instantiated. - var/abstract_type = /datum/quirk_constant_data + abstract_type = /datum/quirk_constant_data /// The typepath of the quirk we will be associated with in the global list. This is what we represent. var/datum/quirk/associated_typepath diff --git a/code/datums/quirks/negative_quirks/allergic.dm b/code/datums/quirks/negative_quirks/allergic.dm index a2442adab10e..25621f7970e1 100644 --- a/code/datums/quirks/negative_quirks/allergic.dm +++ b/code/datums/quirks/negative_quirks/allergic.dm @@ -22,6 +22,7 @@ /datum/reagent/medicine/diphenhydramine, /datum/reagent/medicine/sansufentanyl, /datum/reagent/medicine/salglu_solution, + /datum/reagent/medicine/albuterol, ) var/allergy_string diff --git a/code/datums/quirks/negative_quirks/asthma.dm b/code/datums/quirks/negative_quirks/asthma.dm new file mode 100644 index 000000000000..6683869a6467 --- /dev/null +++ b/code/datums/quirks/negative_quirks/asthma.dm @@ -0,0 +1,249 @@ +/datum/quirk/item_quirk/asthma + name = "Asthma" + desc = "You suffer from asthma, a inflammatory disorder that causes your airpipe to squeeze shut! Be careful around smoke!" + icon = FA_ICON_LUNGS_VIRUS + value = -4 // trivialized by NOBREATH but still quite dangerous + gain_text = span_danger("You have a harder time breathing.") + lose_text = span_notice("You suddenly feel like your lungs just got a lot better at breathing!") + medical_record_text = "Patient suffers from asthma." + hardcore_value = 2 + quirk_flags = QUIRK_HUMAN_ONLY + mail_goodies = list(/obj/item/reagent_containers/inhaler_canister/albuterol) + + /// At this percentage of inflammation, our lung pressure mult reaches 0. From 0-1. + var/hit_max_mult_at_inflammation_percent = 0.9 + + /// Current inflammation of the lungs. + var/inflammation = 0 + /// Highest possible inflammation. Interacts with [hit_max_mult_at_inflammation_percent] + var/max_inflammation = 500 + + /// The amount [inflammation] reduces every second while our owner is off stasis and alive. + var/passive_inflammation_reduction = 0.15 + + /// The amount of inflammation we will receive when our owner breathes smoke. + var/inflammation_on_smoke = 7.5 + + /// If our owner is metabolizing histamine, inflammation will increase by this per tick. + var/histamine_inflammation = 2 + /// If our owner is ODing on histamine, inflammation will increase by this per tick. + var/histamine_OD_inflammation = 10 // allergic reactions tend to fuck people up + + /// A tracker variable for how much albuterol has been inhaled. + var/inhaled_albuterol = 0 + /// If [inhaled_albuterol] is above 0, we will reduce inflammation by this much per tick. + var/albuterol_inflammation_reduction = 3 + /// When albuterol is inhaled, inflammation will be reduced via (inhaled_albuterol * albuterol_inflammation_reduction * albuterol_immediate_reduction_mult) + var/albuterol_immediate_reduction_mult = 4 + + /// The current asthma attack trying to kill our owner. + var/datum/disease/asthma_attack/current_attack + /// Can we cause an asthma attack? + COOLDOWN_DECLARE(next_attack_cooldown) + + /// world.time + this is the time the first attack can happen. Used on spawn. + var/time_first_attack_can_happen = 10 MINUTES + + /// After an attack ends, this is the minimum time we must wait before we attack again. + var/min_time_between_attacks = 15 MINUTES + /// After an attack ends, this is the maximum time we must wait before we attack again. + var/max_time_between_attacks = 25 MINUTES + + /// Every second, an asthma attack can happen via this probability. 0-1. + var/chance_for_attack_to_happen_per_second = 0.05 + + /// Assoc list of (/datum/disease/asthma_attack typepath -> number). Used in pickweight for when we pick a random asthma attack to apply. + var/static/list/asthma_attack_rarities = list( + /datum/disease/asthma_attack/minor = 300, + /datum/disease/asthma_attack/moderate = 400, + /datum/disease/asthma_attack/severe = 100, + /datum/disease/asthma_attack/critical = 1, // this can quickly kill you, so its rarity is justified + ) + +/datum/quirk/item_quirk/asthma/add_unique(client/client_source) + . = ..() + + var/obj/item/inhaler/albuterol/asthma/rescue_inhaler = new(get_turf(quirk_holder)) + give_item_to_holder(rescue_inhaler, list(LOCATION_BACKPACK, LOCATION_HANDS), flavour_text = "You can use this to quickly relieve the symptoms of your asthma.") + + RegisterSignal(quirk_holder, COMSIG_CARBON_EXPOSED_TO_SMOKE, PROC_REF(holder_exposed_to_smoke)) + RegisterSignal(quirk_holder, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(organ_removed)) + RegisterSignal(quirk_holder, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(exposed_to_reagents)) + RegisterSignal(quirk_holder, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(on_full_heal)) + RegisterSignal(quirk_holder, COMSIG_LIVING_LIFE, PROC_REF(on_life)) + + COOLDOWN_START(src, next_attack_cooldown, time_first_attack_can_happen) + +/datum/quirk/item_quirk/asthma/remove() + . = ..() + + current_attack?.cure() + UnregisterSignal(quirk_holder, COMSIG_CARBON_EXPOSED_TO_SMOKE, COMSIG_CARBON_LOSE_ORGAN, COMSIG_ATOM_EXPOSE_REAGENTS, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_LIVING_LIFE) + +/datum/quirk/item_quirk/asthma/proc/on_life(mob/living/source, seconds_per_tick, times_fired) + SIGNAL_HANDLER + + if (quirk_holder.stat == DEAD) + return + + if (HAS_TRAIT(quirk_holder, TRAIT_STASIS) || HAS_TRAIT(quirk_holder, TRAIT_NO_TRANSFORM)) + return + + var/obj/item/organ/lungs/holder_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + if (isnull(holder_lungs)) + return + + adjust_inflammation(-passive_inflammation_reduction * seconds_per_tick) + + var/datum/reagent/toxin/histamine/holder_histamine = quirk_holder.reagents.has_reagent(/datum/reagent/toxin/histamine) + if (holder_histamine) + if (holder_histamine.overdosed) // uh oh! + if (SPT_PROB(15, seconds_per_tick)) + to_chat(quirk_holder, span_boldwarning("You feel your neck swelling, squeezing on your windpipe more and more!")) + adjust_inflammation(histamine_OD_inflammation * seconds_per_tick) + else + if (SPT_PROB(5, seconds_per_tick)) + to_chat(quirk_holder, span_warning("You find yourself wheezing a little harder as your neck swells...")) + adjust_inflammation(histamine_inflammation * seconds_per_tick) + + var/datum/reagent/medicine/albuterol/albuterol = quirk_holder.reagents.has_reagent(/datum/reagent/medicine/albuterol) + if (!albuterol) // sanity - couldve been purged. can be 0 or null which is why we just use a ! + inhaled_albuterol = 0 + else + inhaled_albuterol = min(albuterol.volume, inhaled_albuterol) + + if (inhaled_albuterol > 0) + adjust_inflammation(-(albuterol_inflammation_reduction * seconds_per_tick)) + + // asthma attacks dont happen if theres no client, because they can just kill you and some need immediate response + else if (quirk_holder.client && isnull(current_attack) && COOLDOWN_FINISHED(src, next_attack_cooldown) && SPT_PROB(chance_for_attack_to_happen_per_second, seconds_per_tick)) + do_asthma_attack() + +/// Causes an asthma attack via infecting our owner with the attack disease. Notifies ghosts. +/datum/quirk/item_quirk/asthma/proc/do_asthma_attack() + var/datum/disease/asthma_attack/typepath = pick_weight(asthma_attack_rarities) + + current_attack = new typepath + current_attack.infect(quirk_holder, make_copy = FALSE) // dont leave make_copy on TRUE. worst mistake ive ever made + RegisterSignal(current_attack, COMSIG_QDELETING, PROC_REF(attack_deleting)) + + if (current_attack.alert_ghosts) + notify_ghosts("[quirk_holder] is having an asthma attack: [current_attack.name]!", source = quirk_holder, notify_flags = NOTIFY_CATEGORY_NOFLASH, header = "Asthma attack!") + +/// Setter proc for [inflammation]. Adjusts the amount by lung health, adjusts pressure mult, gives feedback messages if silent is FALSE. +/datum/quirk/item_quirk/asthma/proc/adjust_inflammation(amount, silent = FALSE) + var/old_inflammation = inflammation + + var/obj/item/organ/lungs/holder_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + var/health_mult = get_lung_health_mult(holder_lungs) + if (amount > 0) // make it worse + amount *= (2 - health_mult) + else // reduce the reduction + amount *= health_mult + + var/old_pressure_mult = get_pressure_mult() + inflammation = (clamp(inflammation + amount, 0, max_inflammation)) + var/difference = (old_inflammation - inflammation) + if (difference != 0) + var/new_pressure_mult = get_pressure_mult() + var/pressure_difference = new_pressure_mult - old_pressure_mult + + holder_lungs?.adjust_received_pressure_mult(pressure_difference) + + if (!silent) + INVOKE_ASYNC(src, PROC_REF(do_inflammation_change_feedback), difference) + +/// Setter proc for [inhaled_albuterol]. Adjusts inflammation immediately. +/datum/quirk/item_quirk/asthma/proc/adjust_albuterol_levels(adjustment) + if (adjustment > 0) + var/obj/item/organ/lungs/holder_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + + if (isnull(holder_lungs) || holder_lungs.received_pressure_mult <= 0) // it didnt go into the lungs get fucked + return + + adjust_inflammation(-(albuterol_inflammation_reduction * albuterol_immediate_reduction_mult)) + + inhaled_albuterol += adjustment + +/// Returns the pressure mult to be applied to our lungs. +/datum/quirk/item_quirk/asthma/proc/get_pressure_mult() + var/virtual_max = (max_inflammation * hit_max_mult_at_inflammation_percent) + + return (1 - (min(inflammation/virtual_max, 1))) + +/// Sends feedback to our owner of which direction our asthma is intensifying/recovering. +/datum/quirk/item_quirk/asthma/proc/do_inflammation_change_feedback(difference) + var/change_mult = 1 + (difference / 300) // 300 is arbitrary + if (difference > 0) // it decreased + if (prob(1 * change_mult)) + // in my experience with asthma an inhaler causes a bunch of mucous and you tend to cough it up + to_chat(quirk_holder, span_notice("The phlem in your throat forces you to cough!")) + quirk_holder.emote("cough") + + else if (difference < 0)// it increased + if (prob(1 * change_mult)) + quirk_holder.emote("wheeze") + if (prob(5 * change_mult)) + to_chat(quirk_holder, span_warning("You feel your windpipe tightening...")) + +/// Returns the % of health our lungs have, from 1-0. Used in reducing recovery and intensifying inflammation. +/datum/quirk/item_quirk/asthma/proc/get_lung_health_mult() + var/mob/living/carbon/carbon_quirk_holder = quirk_holder + var/obj/item/organ/lungs/holder_lungs = carbon_quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + if (isnull(holder_lungs)) + return 1 + if (holder_lungs.organ_flags & ORGAN_FAILING) + return 0 + return (1 - (holder_lungs.damage / holder_lungs.maxHealth)) + +/// Signal proc for when we are exposed to smoke. Increases inflammation. +/datum/quirk/item_quirk/asthma/proc/holder_exposed_to_smoke(datum/signal_source, seconds_per_tick) + SIGNAL_HANDLER + + adjust_inflammation(inflammation_on_smoke * seconds_per_tick) + +/// Signal proc for when our lungs are removed. Resets all our variables. +/datum/quirk/item_quirk/asthma/proc/organ_removed(datum/signal_source, obj/item/organ/removed) + SIGNAL_HANDLER + + if (istype(removed, /obj/item/organ/lungs)) + reset_asthma() + +/// Signal proc for when our owner receives reagents. If we receive albuterol via inhalation, we adjust inhaled albuterol by that amount. If we are smoking, we increase inflammation. +/datum/quirk/item_quirk/asthma/proc/exposed_to_reagents(atom/source, list/reagents, datum/reagents/source_reagents, methods, show_message) + SIGNAL_HANDLER + + var/final_total = 0 + + for (var/datum/reagent/reagent as anything in reagents) + var/amount = reagents[reagent] + if (istype(reagent, /datum/reagent/medicine/albuterol)) + adjust_albuterol_levels(amount) + final_total += amount + + if (!(methods & INHALE)) + return + if (istype(source_reagents.my_atom, /obj/item/cigarette)) // smoking is bad, kids + adjust_inflammation(inflammation_on_smoke * final_total * 5) + +/// Signal proc for when our asthma attack qdels. Unsets our refs to it and resets [next_attack_cooldown]. +/datum/quirk/item_quirk/asthma/proc/attack_deleting(datum/signal_source) + SIGNAL_HANDLER + + UnregisterSignal(current_attack, COMSIG_QDELETING) + current_attack = null + + COOLDOWN_START(src, next_attack_cooldown, rand(min_time_between_attacks, max_time_between_attacks)) + +/// Signal handler for COMSIG_LIVING_POST_FULLY_HEAL. Heals our asthma. +/datum/quirk/item_quirk/asthma/proc/on_full_heal(datum/signal_source, heal_flags) + SIGNAL_HANDLER + + if (heal_flags & HEAL_ORGANS) + reset_asthma() + +/// Resets our asthma to normal. No inflammation, no pressure mult. +/datum/quirk/item_quirk/asthma/proc/reset_asthma() + inflammation = 0 + var/obj/item/organ/lungs/holder_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + holder_lungs?.set_received_pressure_mult(holder_lungs::received_pressure_mult) diff --git a/code/datums/quirks/negative_quirks/prosopagnosia.dm b/code/datums/quirks/negative_quirks/prosopagnosia.dm index 3911cb45056a..bb70a41c1dd7 100644 --- a/code/datums/quirks/negative_quirks/prosopagnosia.dm +++ b/code/datums/quirks/negative_quirks/prosopagnosia.dm @@ -21,7 +21,7 @@ if(!ishuman(examined) || source == examined) return NONE - var/id_name = examined.get_id_name("") + var/id_name = examined.get_id_name("", honorifics = TRUE) name_override[1] = id_name ? "[id_name]?" : "Unknown" return COMPONENT_EXAMINE_NAME_OVERRIDEN @@ -31,6 +31,6 @@ if(!ishuman(hovered) || source == hovered) return NONE - var/id_name = hovered.get_id_name("") + var/id_name = hovered.get_id_name("", honorifics = TRUE) returned_name[1] = id_name ? "[id_name]?" : "Unknown" return SCREENTIP_NAME_SET diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 4d7b83e1ff07..b937aa3082c2 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -3,6 +3,8 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) ///Base class of station traits. These are used to influence rounds in one way or the other by influencing the levers of the station. /datum/station_trait + /// Trait should not be instantiated in a round if its type matches this type + abstract_type = /datum/station_trait ///Name of the trait var/name = "unnamed station trait" ///The type of this trait. Used to classify how this trait influences the station @@ -33,8 +35,6 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) var/list/lobby_buttons = list() /// The ID that we look for in dynamic.json. Not synced with 'name' because I can already see this go wrong var/dynamic_threat_id - /// Trait should not be instantiated in a round if its type matches this type - var/abstract_type = /datum/station_trait /datum/station_trait/New() . = ..() diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index beef6f2ba09a..6b15ee87de9b 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -476,6 +476,7 @@ alert_type = null ///What speed datum do we apply? var/move_datum = /datum/movespeed_modifier/status_speed_boost + var/action_datum = null /datum/status_effect/speed_boost/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) @@ -485,11 +486,17 @@ . = ..() /datum/status_effect/speed_boost/on_apply() - owner.add_movespeed_modifier(move_datum, update = TRUE) + if(move_datum) + owner.add_movespeed_modifier(move_datum, update = TRUE) + if(action_datum) + owner.add_actionspeed_modifier(action_datum, update = TRUE) return ..() /datum/status_effect/speed_boost/on_remove() - owner.remove_movespeed_modifier(move_datum, update = TRUE) + if(move_datum) + owner.remove_movespeed_modifier(move_datum, update = TRUE) + if(action_datum) + owner.remove_actionspeed_modifier(action_datum, update = TRUE) /datum/movespeed_modifier/status_speed_boost multiplicative_slowdown = -1 diff --git a/code/datums/status_effects/buffs/food/chilling.dm b/code/datums/status_effects/buffs/food/chilling.dm index 8b1d60fbcc15..0827ac5a4afd 100644 --- a/code/datums/status_effects/buffs/food/chilling.dm +++ b/code/datums/status_effects/buffs/food/chilling.dm @@ -8,6 +8,7 @@ owner.adjust_bodytemperature(-2.75 * strength * seconds_between_ticks, min_temp = minimum_temp) /atom/movable/screen/alert/status_effect/icecream_chilling + name = "Cooling Off" desc = "Nothing beats a cup of ice cream during hot, plasma-floody day..." icon_state = "food_icecream" diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm index fc5c74f46d5a..8202f526f26b 100644 --- a/code/datums/status_effects/debuffs/drunk.dm +++ b/code/datums/status_effects/debuffs/drunk.dm @@ -33,9 +33,7 @@ // Having your face covered conceals your drunkness if(iscarbon(owner)) var/mob/living/carbon/carbon_owner = owner - if(carbon_owner.wear_mask?.flags_inv & HIDEFACE) - return null - if(carbon_owner.head?.flags_inv & HIDEFACE) + if(carbon_owner.obscured_slots & HIDEFACE) return null // .01s are used in case the drunk value ends up to be a small decimal. diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index a10592c73116..b07ab1339ab4 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -107,6 +107,20 @@ . = ..() REMOVE_TRAIT(owner, TRAIT_SOOTHED_THROAT, TRAIT_STATUS_EFFECT(id)) +/datum/status_effect/headache_soothed + id = "headache_soothed" + duration = 60 SECONDS + status_type = STATUS_EFFECT_REFRESH + alert_type = null + +/datum/status_effect/headache_soothed/on_apply() + . = ..() + ADD_TRAIT(owner, TRAIT_SOOTHED_HEADACHE, TRAIT_STATUS_EFFECT(id)) + +/datum/status_effect/headache_soothed/on_remove() + . = ..() + REMOVE_TRAIT(owner, TRAIT_SOOTHED_HEADACHE, TRAIT_STATUS_EFFECT(id)) + /datum/status_effect/bounty id = "bounty" status_type = STATUS_EFFECT_UNIQUE diff --git a/code/datums/storage/subtypes/bags.dm b/code/datums/storage/subtypes/bags.dm index c706b12eab2e..186383ef7cd6 100644 --- a/code/datums/storage/subtypes/bags.dm +++ b/code/datums/storage/subtypes/bags.dm @@ -260,7 +260,8 @@ set_holdable(list( /obj/item/mail, /obj/item/delivery/small, - /obj/item/paper + /obj/item/paper, + /obj/item/bounty_cube, )) ///Garment bag diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index 6e40b719b72f..b53bb64183bb 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -257,12 +257,13 @@ /datum/wires/proc/interact(mob/user) if(!interactable(user)) - return + return FALSE ui_interact(user) for(var/A in assemblies) var/obj/item/I = assemblies[A] if(istype(I) && I.on_found(user)) - return + break + return TRUE /** * Checks whether wire assignments should be revealed. diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 584e862eb5d5..8c09520cab09 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -49,7 +49,7 @@ WIRE_BACKUP2, WIRE_BOLTS, WIRE_IDSCAN, - WIRE_BOLTLIGHT, + WIRE_FEEDBACK, WIRE_OPEN, WIRE_POWER1, WIRE_POWER2, @@ -146,8 +146,8 @@ A.close() if(WIRE_TIMING) A.normalspeed = !A.normalspeed - if(WIRE_BOLTLIGHT) - A.lights = !A.lights + if(WIRE_FEEDBACK) + A.feedback = !A.feedback A.update_appearance() if(WIRE_UNRESTRICTED_EXIT) // Pulse to switch the direction around by 180 degrees (North goes to South, East goes to West, vice-versa) if(!A.unres_sensor) //only works if the "sensor" is installed (a variable that we assign to the door either upon creation of a door with unrestricted directions or if an unrestricted helper is added to a door in mapping) @@ -210,8 +210,8 @@ A.autoclose = mend if(A.autoclose && !A.density) INVOKE_ASYNC(A, TYPE_PROC_REF(/obj/machinery/door/airlock, close)) - if(WIRE_BOLTLIGHT) // Cut to disable lights, mend to re-enable. - A.lights = mend + if(WIRE_FEEDBACK) // Cut to disable lights and sounds, mend to re-enable. + A.feedback = mend A.update_appearance() if(WIRE_ZAP1, WIRE_ZAP2) // Ouch. if(isliving(usr)) diff --git a/code/datums/wounds/scars/_scars.dm b/code/datums/wounds/scars/_scars.dm index 2fdd92b82d0d..d51255217871 100644 --- a/code/datums/wounds/scars/_scars.dm +++ b/code/datums/wounds/scars/_scars.dm @@ -178,7 +178,7 @@ var/mob/living/carbon/human/human_victim = victim if(istype(limb, /obj/item/bodypart/head)) - if((human_victim.wear_mask && (human_victim.wear_mask.flags_inv & HIDEFACE)) || (human_victim.head && (human_victim.head.flags_inv & HIDEFACE))) + if(human_victim.obscured_slots & HIDEFACE) return FALSE else if(limb.scars_covered_by_clothes) var/num_covers = LAZYLEN(human_victim.get_clothing_on_part(limb)) diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 10aa9c8345af..ff3093a0951a 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -5,6 +5,7 @@ * as much as possible to the components/elements system */ /atom + abstract_type = /atom layer = ABOVE_NORMAL_TURF_LAYER plane = GAME_PLANE appearance_flags = TILE_BOUND|LONG_GLIDE @@ -137,6 +138,9 @@ /// Flags to check for in can_perform_action for mouse drag & drop checks. To bypass checks see interaction_flags_atom mouse drop flags var/interaction_flags_mouse_drop = NONE + /// Generally for niche objects, atoms blacklisted can spawn if enabled by spawner. + var/spawn_blacklisted = FALSE + /** * Top level of the destroy chain for most atoms * @@ -615,6 +619,7 @@ */ /atom/Exited(atom/movable/gone, direction) SEND_SIGNAL(src, COMSIG_ATOM_EXITED, gone, direction) + SEND_SIGNAL(gone, COMSIG_ATOM_EXITING, src, direction) ///Return atom temperature /atom/proc/return_temperature() diff --git a/code/game/atom/alternate_appearance.dm b/code/game/atom/alternate_appearance.dm index 6df75d2508a2..1bc5ae0d6415 100644 --- a/code/game/atom/alternate_appearance.dm +++ b/code/game/atom/alternate_appearance.dm @@ -171,6 +171,11 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) return TRUE return FALSE +/datum/atom_hud/alternate_appearance/basic/ais + +/datum/atom_hud/alternate_appearance/basic/ais/mobShouldSee(mob/M) + return isAI(M) + /datum/atom_hud/alternate_appearance/basic/observers add_ghost_version = FALSE //just in case, to prevent infinite loops diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 8fda89b55509..f4bd109240a0 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -4,12 +4,6 @@ /// Text that appears preceding the name in [/atom/proc/examine_title] var/examine_thats = "That's" -/mob/living/carbon/human - examine_thats = "This is" - -/mob/living/silicon/robot - examine_thats = "This is" - /** * Called when a mob examines this atom: [/mob/verb/examinate] * @@ -80,6 +74,9 @@ */ /atom/proc/examine_tags(mob/user) . = list() + if(abstract_type == type) + .[span_hypnophrase("abstract")] = "This is an abstract concept, you should report this to a strange entity called GITHUB!" + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_TAGS, user, .) /// What this atom should be called in examine tags diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index e08e055fd7dd..3a984ee64f9f 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1,4 +1,5 @@ /atom/movable + abstract_type = /atom/movable layer = OBJ_LAYER glide_size = 8 appearance_flags = TILE_BOUND|PIXEL_SCALE|LONG_GLIDE @@ -456,7 +457,7 @@ return FALSE if((!(z_move_flags & ZMOVE_IGNORE_OBSTACLES) && !(start.zPassOut(direction) && destination.zPassIn(direction))) || (!(z_move_flags & ZMOVE_ALLOW_ANCHORED) && anchored)) if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(rider || src, span_warning("You couldn't move there!")) + to_chat(rider || src, span_warning("You can't move there!")) return FALSE return destination //used by some child types checks and zMove() diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 04ba0e524395..959716d230da 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -266,7 +266,7 @@ Security HUDs! Basic mode shows only the job. SIGNAL_HANDLER var/sechud_icon_state = wear_id?.get_sechud_job_icon_state() - if(!sechud_icon_state || HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(!sechud_icon_state || HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) sechud_icon_state = "hudno_id" set_hud_image_state(ID_HUD, sechud_icon_state) sec_hud_set_security_status() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index c6d3dda3f9dc..c5f0fe8bcc0f 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -88,6 +88,7 @@ name = "machinery" icon = 'icons/obj/machines/fax.dmi' desc = "Some kind of machine." + abstract_type = /obj/machinery verb_say = "beeps" verb_yell = "blares" pressure_resistance = 15 diff --git a/code/game/machinery/computer/accounting.dm b/code/game/machinery/computer/accounting.dm index d804b8efe5d9..75a890d382ac 100644 --- a/code/game/machinery/computer/accounting.dm +++ b/code/game/machinery/computer/accounting.dm @@ -1,3 +1,7 @@ +#define MAX_ADVANCES 3 +#define MIN_PAY_MOD 0.5 +#define MAX_PAY_MOD 1.5 + /obj/machinery/computer/accounting name = "account lookup console" desc = "Used to view crew member accounts and purchases." @@ -17,17 +21,60 @@ . = ..() var/list/data = list() var/list/player_accounts = list() - var/list/audit_list = SSeconomy.audit_log - for(var/current_account as anything in SSeconomy.bank_accounts_by_id) - var/datum/bank_account/current_bank_account = SSeconomy.bank_accounts_by_id[current_account] + for(var/id in SSeconomy.bank_accounts_by_id) + var/datum/bank_account/current_bank_account = SSeconomy.bank_accounts_by_id[id] + if(!(current_bank_account.account_job?.job_flags & JOB_CREW_MANIFEST)) + continue player_accounts += list(list( "name" = current_bank_account.account_holder, - "job" = current_bank_account.account_job?.title || "No job", // because this can be null + "job" = current_bank_account.account_job.title, "balance" = round(current_bank_account.account_balance), - "modifier" = round((current_bank_account.payday_modifier * 0.9), 0.1), + "modifier" = current_bank_account.payday_modifier, + "num_advances" = current_bank_account.paydays_to_skip, + "id" = id, )) - data["PlayerAccounts"] = player_accounts - data["AuditLog"] = audit_list - data["Crashing"] = HAS_TRAIT(SSeconomy, TRAIT_MARKET_CRASHING) + data["accounts"] = player_accounts + data["audit_log"] = SSeconomy.audit_log + data["crashing"] = HAS_TRAIT(SSeconomy, TRAIT_MARKET_CRASHING) + data["station_time"] = station_time_timestamp("hh:mm") return data + +/obj/machinery/computer/accounting/ui_static_data(mob/user) + var/list/data = list() + var/static/ian_format = pick("png", "jpg", "jpeg", "webp", "bmp") + data["pic_file_format"] = ian_format + data["young_ian"] = check_holidays(IAN_HOLIDAY) + data["max_advances"] = MAX_ADVANCES + data["max_pay_mod"] = MAX_PAY_MOD + data["min_pay_mod"] = MIN_PAY_MOD + return data + +/obj/machinery/computer/accounting/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + playsound(src, SFX_TERMINAL_TYPE, 50, FALSE) + var/datum/bank_account/bank_account = SSeconomy.bank_accounts_by_id[params["account_id"]] + if(isnull(bank_account) || !(bank_account.account_job?.job_flags & JOB_CREW_MANIFEST)) + return + + switch(action) + if("paycheck_advance") + if(bank_account.paydays_to_skip < MAX_ADVANCES) + bank_account.payday(1, event = "Paycheck advance") + bank_account.paydays_to_skip += 1 + return TRUE + if("change_pay_mod") + var/old_modifier = bank_account.payday_modifier + bank_account.payday_modifier = clamp(round(text2num(params["pay_mod"]), 0.05), MIN_PAY_MOD, MAX_PAY_MOD) + var/new_check_total = bank_account.payday_modifier * bank_account.account_job.paycheck + var/raise_or_cut = new_check_total > old_modifier * bank_account.account_job.paycheck ? "raised" : "cut" + bank_account.bank_card_talk("Paycheck [raise_or_cut] to [new_check_total]cr.") + SSeconomy.add_audit_entry(bank_account, new_check_total, "Paycheck [raise_or_cut]") + return TRUE + +#undef MAX_ADVANCES +#undef MIN_PAY_MOD +#undef MAX_PAY_MOD diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 0b28775a5b86..6c6b41da72c5 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -115,7 +115,7 @@ return AI.forceMove(src) occupier = AI - AI.control_disabled = TRUE + AI.set_control_disabled(TRUE) AI.radio_enabled = FALSE to_chat(AI, span_alert("You have been uploaded to a stationary terminal. Sadly, there is no remote access from here.")) to_chat(user, "[span_notice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") diff --git a/code/game/machinery/computer/arcade/_arcade.dm b/code/game/machinery/computer/arcade/_arcade.dm index 1627a3d0fe81..f0879eb1da92 100644 --- a/code/game/machinery/computer/arcade/_arcade.dm +++ b/code/game/machinery/computer/arcade/_arcade.dm @@ -77,7 +77,6 @@ ///Dispenses the proper prizes and gives them a positive mood event. If valid, has a small chance to give a pulse rifle. /obj/machinery/computer/arcade/proc/prizevend(mob/living/user, prizes = 1) - SEND_SIGNAL(src, COMSIG_ARCADE_PRIZEVEND, user, prizes) if(user.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && HAS_TRAIT(user, TRAIT_GAMERGOD)) visible_message(span_notice("[user] inputs an intense cheat code!"),\ span_notice("You hear a flurry of buttons being pressed.")) @@ -99,3 +98,10 @@ var/atom/movable/the_prize = new prizeselect(get_turf(src)) playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3) visible_message(span_notice("[src] dispenses [the_prize]!"), span_notice("You hear a chime and a clunk.")) + +/obj/machinery/computer/arcade/proc/victory_tickets(tickets, sound = TRUE) + SEND_SIGNAL(src, COMSIG_ARCADE_VICTORY) + visible_message(span_notice("[src] dispenses [tickets] ticket\s!")) + new /obj/item/stack/arcadeticket((get_turf(src)), tickets) + if(sound) + playsound(loc, 'sound/machines/arcade/win.ogg', 40) diff --git a/code/game/machinery/computer/arcade/amputation.dm b/code/game/machinery/computer/arcade/amputation.dm index b61c460398ec..d425cd5eba50 100644 --- a/code/game/machinery/computer/arcade/amputation.dm +++ b/code/game/machinery/computer/arcade/amputation.dm @@ -23,9 +23,7 @@ qdel(chopchop) user.mind?.adjust_experience(/datum/skill/gaming, 100) user.won_game() - playsound(src, 'sound/machines/arcade/win.ogg', 50, TRUE) - new /obj/item/stack/arcadeticket((get_turf(src)), rand(6,10)) - to_chat(user, span_notice("[src] dispenses a handful of tickets!")) + victory_tickets(rand(6,10)) return if(!do_they_still_have_that_hand(user, chopchop)) to_chat(user, span_warning("The guillotine drops, but your hand seems to be gone already!")) diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm index 142d85370c94..9cbec4430fb1 100644 --- a/code/game/machinery/computer/arcade/battle.dm +++ b/code/game/machinery/computer/arcade/battle.dm @@ -232,8 +232,7 @@ message_admins("[ADMIN_LOOKUPFLW(user)] has outbombed Cuban Pete and been awarded a bomb.") user.log_message("outbombed Cuban Pete and has been awarded a bomb.", LOG_GAME) else - visible_message(span_notice("[src] dispenses 2 tickets!")) - new /obj/item/stack/arcadeticket((get_turf(src)), 2) + victory_tickets(2,FALSE) player_gold += enemy_gold_reward if(user) var/exp_gained = DEFAULT_EXP_GAIN * all_worlds[player_current_world] diff --git a/code/game/machinery/computer/arcade/orion.dm b/code/game/machinery/computer/arcade/orion.dm index 72bf0cb1e51e..6c2945cb1260 100644 --- a/code/game/machinery/computer/arcade/orion.dm +++ b/code/game/machinery/computer/arcade/orion.dm @@ -470,8 +470,7 @@ message_admins("[ADMIN_LOOKUPFLW(user)] made it to Orion on an emagged machine and got an explosive toy ship.") user.log_message("made it to Orion on an emagged machine and got an explosive toy ship.", LOG_GAME) else - new /obj/item/stack/arcadeticket((get_turf(src)), 2) - to_chat(user, span_notice("[src] dispenses 2 tickets!")) + victory_tickets(2) obj_flags &= ~EMAGGED name = initial(name) desc = initial(desc) diff --git a/code/game/machinery/computer/atmos_computers/__identifiers.dm b/code/game/machinery/computer/atmos_computers/__identifiers.dm index be1f01aecb54..222f59ed1978 100644 --- a/code/game/machinery/computer/atmos_computers/__identifiers.dm +++ b/code/game/machinery/computer/atmos_computers/__identifiers.dm @@ -32,14 +32,6 @@ #define ATMOS_GAS_MONITOR_WASTE "waste" #define ATMOS_GAS_MONITOR_ENGINE "engine" -///maps an air sensor's chamber id to its input valve[ i.e. outlet_injector] id -#define CHAMBER_INPUT_FROM_ID(chamber_id) ((chamber_id) + "_in") -///maps an air sensor's chamber id to its output valve[i.e. vent pump] id -#define CHAMBER_OUTPUT_FROM_ID(chamber_id) ((chamber_id) + "_out") - -///list of all air sensor's created round start -GLOBAL_LIST_EMPTY(map_loaded_sensors) - // Human-readble names of these funny tags. GLOBAL_LIST_INIT(station_gas_chambers, list( ATMOS_GAS_MONITOR_O2 = "Oxygen Supply", diff --git a/code/game/machinery/computer/atmos_computers/_air_sensor.dm b/code/game/machinery/computer/atmos_computers/_air_sensor.dm index 3101d728b874..ad870c9520b7 100644 --- a/code/game/machinery/computer/atmos_computers/_air_sensor.dm +++ b/code/game/machinery/computer/atmos_computers/_air_sensor.dm @@ -1,3 +1,8 @@ +///Indicator for inlet port +#define INLET 1 +///Indicator for outlet port +#define OUTLET 2 + /// Gas tank air sensor. /// These always hook to monitors, be mindful of them /obj/machinery/air_sensor @@ -7,7 +12,6 @@ resistance_flags = FIRE_PROOF power_channel = AREA_USAGE_ENVIRON active_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 1.5 - var/on = TRUE /// The unique string that represents which atmos chamber to associate with. var/chamber_id @@ -17,16 +21,12 @@ var/outlet_id /// The air alarm connected to this sensor var/obj/machinery/airalarm/connected_airalarm + ///Is this sensor on + var/on = TRUE /obj/machinery/air_sensor/Initialize(mapload) id_tag = assign_random_name() - //this global list of air sensors is available to all station monitering consoles round start and to new consoles made during the round - if(mapload) - GLOB.map_loaded_sensors[chamber_id] = id_tag - inlet_id = CHAMBER_INPUT_FROM_ID(chamber_id) - outlet_id = CHAMBER_OUTPUT_FROM_ID(chamber_id) - var/static/list/multitool_tips = list( TOOL_MULTITOOL = list( SCREENTIP_CONTEXT_LMB = "Link logged injectors/vents", @@ -37,6 +37,56 @@ return ..() +/obj/machinery/air_sensor/post_machine_initialize() + . = ..() + + //auto connect to any inlet & outlet devices within a 4 diameter radius from this sensor + for(var/obj/machinery/atmospherics/components/unary/device in oview(4, src)) + if(inlet_id && outlet_id) + break + configure(device) + +/** + * Connects an injector or an vent pump to this air sensor. Must be on the same z level as sensor + * return what type of port was configured or NONE for no op + * + * Arguments + * * obj/machinery/atmospherics/components/unary/port - the device we are trying to connect to this sensor + * * reconfigure - if TRUE it will override existing ports if they are already registered +*/ +/obj/machinery/air_sensor/proc/configure(obj/machinery/atmospherics/components/unary/port, reconfigure = FALSE) + PRIVATE_PROC(TRUE) + if(!istype(port) || port.z != z) + return NONE + + if(istype(port, /obj/machinery/atmospherics/components/unary/outlet_injector)) + if(!reconfigure && inlet_id) + return INLET + var/obj/machinery/atmospherics/components/unary/outlet_injector/input = port + //only configure non maploaded injectors cause they already have a preset config + if(input.type == /obj/machinery/atmospherics/components/unary/outlet_injector) + input.volume_rate = MAX_TRANSFER_RATE + inlet_id = input.id_tag + return INLET + + else if(istype(port, /obj/machinery/atmospherics/components/unary/vent_pump)) + if(!reconfigure && outlet_id) + return OUTLET + var/obj/machinery/atmospherics/components/unary/vent_pump/output = port + //only configure non maploaded vent pumps cause they already have a preset config + if(output.type == /obj/machinery/atmospherics/components/unary/vent_pump) + //so its no longer controlled by air alarm + output.disconnect_from_area() + //configuration copied from /obj/machinery/atmospherics/components/unary/vent_pump/siphon but with max pressure + output.pump_direction = ATMOS_DIRECTION_SIPHONING + output.pressure_checks = ATMOS_INTERNAL_BOUND + output.internal_pressure_bound = MAX_OUTPUT_PRESSURE + output.external_pressure_bound = 0 + //finally assign it to this sensor + outlet_id = output.id_tag + return OUTLET + return NONE + /obj/machinery/air_sensor/Destroy() reset() return ..() @@ -66,7 +116,7 @@ . = ..() //switched off version of this air sensor but still anchored to the ground - var/obj/item/air_sensor/sensor = new(drop_location(), inlet_id, outlet_id) + var/obj/item/air_sensor/sensor = new(drop_location()) sensor.set_anchored(TRUE) sensor.balloon_alert(user, "sensor turned off") @@ -88,36 +138,21 @@ ///right click with multi tool to disconnect everything /obj/machinery/air_sensor/multitool_act_secondary(mob/living/user, obj/item/tool) - balloon_alert(user, "reset ports") reset() + balloon_alert(user, "ports reset") return TRUE /obj/machinery/air_sensor/multitool_act(mob/living/user, obj/item/multitool/multi_tool) . = ..() - if(istype(multi_tool.buffer, /obj/machinery/atmospherics/components/unary/outlet_injector)) - var/obj/machinery/atmospherics/components/unary/outlet_injector/input = multi_tool.buffer - inlet_id = input.id_tag - multi_tool.set_buffer(src) - balloon_alert(user, "connected to input") - - else if(istype(multi_tool.buffer, /obj/machinery/atmospherics/components/unary/vent_pump)) - var/obj/machinery/atmospherics/components/unary/vent_pump/output = multi_tool.buffer - //so its no longer controlled by air alarm - output.disconnect_from_area() - //configuration copied from /obj/machinery/atmospherics/components/unary/vent_pump/siphon but with max pressure - output.pump_direction = ATMOS_DIRECTION_SIPHONING - output.pressure_checks = ATMOS_INTERNAL_BOUND - output.internal_pressure_bound = MAX_OUTPUT_PRESSURE - output.external_pressure_bound = 0 - //finally assign it to this sensor - outlet_id = output.id_tag - multi_tool.set_buffer(src) - balloon_alert(user, "connected to output") - - else - multi_tool.set_buffer(src) - balloon_alert(user, "sensor added to buffer") + var/type = configure(multi_tool.buffer, TRUE) + switch(type) + if(INLET, OUTLET) + var/port = "[type == INLET ? "input" : "output"] port" + user.balloon_alert(user, "[port] configured") + to_chat(user, span_notice("[src] has connected [multi_tool.buffer] to its [port].")) + to_chat(user, span_notice("[src] has been added to multitool buffer.")) + multi_tool.set_buffer(src) return ITEM_INTERACT_SUCCESS @@ -133,16 +168,10 @@ icon = 'icons/obj/wallmounts.dmi' icon_state = "gsensor0" custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT) - /// The injector linked with this sensor - var/input_id - /// The vent pump linked with this sensor - var/output_id /obj/item/air_sensor/Initialize(mapload, inlet, outlet) . = ..() register_context() - input_id = inlet - output_id = outlet /obj/item/air_sensor/add_context(atom/source, list/context, obj/item/held_item, mob/user) if(isnull(held_item)) @@ -205,8 +234,6 @@ //make real air sensor in its place var/obj/machinery/air_sensor/new_sensor = new sensor(get_turf(src)) - new_sensor.inlet_id = input_id - new_sensor.outlet_id = output_id new_sensor.balloon_alert(user, "sensor turned on") qdel(src) @@ -231,3 +258,6 @@ /obj/item/air_sensor/atom_deconstruct(disassembled) new /obj/item/analyzer(loc) new /obj/item/stack/sheet/iron(loc) + +#undef INLET +#undef OUTLET diff --git a/code/game/machinery/computer/atmos_computers/_atmos_control.dm b/code/game/machinery/computer/atmos_computers/_atmos_control.dm index 25e51738611f..a785cd50456e 100644 --- a/code/game/machinery/computer/atmos_computers/_atmos_control.dm +++ b/code/game/machinery/computer/atmos_computers/_atmos_control.dm @@ -9,55 +9,67 @@ /// Which sensors do we want to listen to. /// Assoc of list[chamber_id] = readable_chamber_name - var/list/atmos_chambers - - /// Used when control = FALSE to store the original atmos chambers so they dont get lost when reconnecting - var/list/always_displayed_chambers - + var/list/atmos_chambers = list() + /// list of all sensors[key is chamber id, value is id of air sensor linked to this chamber] monitered by this computer + var/list/connected_sensors = list() /// Whether we can actually adjust the chambers or not. var/control = TRUE /// Whether we are allowed to reconnect. var/reconnecting = TRUE + ///OUur last reconnected chamber + VAR_PRIVATE/last_chamber_id = "" - /// Was this computer multitooled before. If so copy the list connected_sensors as it now maintain's its own sensors independent of the map loaded one's - var/was_multi_tooled = FALSE - - /// list of all sensors[key is chamber id, value is id of air sensor linked to this chamber] monitered by this computer - var/list/connected_sensors - -/obj/machinery/computer/atmos_control/Initialize(mapload, obj/item/circuitboard/C) +/obj/machinery/computer/atmos_control/post_machine_initialize() . = ..() - var/static/list/multitool_tips = list( - TOOL_MULTITOOL = list( - SCREENTIP_CONTEXT_LMB = "Link Sensor", - ) - ) - AddElement(/datum/element/contextual_screentip_tools, multitool_tips) + scan() - //all newly constructed/round start computers by default have access to this list - connected_sensors = GLOB.map_loaded_sensors +///Scans the z level for new air sensors & monitors +/obj/machinery/computer/atmos_control/proc/scan() + PRIVATE_PROC(TRUE) - //special case for the station monitering console. We dont want to loose these chambers during reconnecting - if(!control && !isnull(atmos_chambers)) - always_displayed_chambers = atmos_chambers.Copy() - -/obj/machinery/computer/atmos_control/examine(mob/user) - . = ..() - . += span_notice("Use a multitool to link a air sensor to this computer") + //collect all sensors that are the closest to this computer + var/list/closest_sensors = list() + var/turf/comp_turf = get_turf(src) + for(var/obj/machinery/sensor as anything in (SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/air_sensor) + SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/meter/monitored))) + //same z level + if(sensor.z != z) + continue + //infer chamber id + var/chamber_id = "" + if(istype(sensor, /obj/machinery/air_sensor)) + var/obj/machinery/air_sensor/air_sense = sensor + chamber_id = air_sense.chamber_id + else + var/obj/machinery/meter/monitored/meter = sensor + chamber_id = meter.chamber_id + //track & collect closest sensors + if(!closest_sensors[chamber_id]) + closest_sensors[chamber_id] = sensor + continue + var/obj/machinery/target = closest_sensors[chamber_id] + if(get_dist(comp_turf, get_turf(sensor)) < get_dist(comp_turf, get_turf(target))) + closest_sensors[chamber_id] = sensor + //convert sensor list to id tags + connected_sensors.Cut() + for(var/chamber_id in closest_sensors) + var/obj/machinery/target = closest_sensors[chamber_id] + connected_sensors[chamber_id] = target.id_tag /// Reconnect only works for station based chambers. /obj/machinery/computer/atmos_control/proc/reconnect(mob/user) if(!reconnecting) return FALSE + scan() + // We only prompt the user with the sensors that are actually available. var/available_devices = list() - for (var/chamber_identifier in connected_sensors) //this sensor was destroyed at the time of reconnecting var/obj/machinery/sensor = GLOB.objects_by_id_tag[connected_sensors[chamber_identifier]] if(QDELETED(sensor)) + connected_sensors -= chamber_identifier continue //non master computers don't have access to these station moniters. Only done to give master computer's special access to these chambers and make them feel special or something @@ -76,33 +88,14 @@ if(isnull(new_id)) return FALSE - atmos_chambers = list() - //these are chambers we always want to display even after reconnecting - if(always_displayed_chambers) - for(var/chamber_id in always_displayed_chambers) - atmos_chambers[chamber_id] = always_displayed_chambers[chamber_id] + atmos_chambers -= last_chamber_id atmos_chambers[new_id] = new_name + last_chamber_id = new_id name = new_name + (control ? " Control" : " Monitor") return TRUE -/obj/machinery/computer/atmos_control/multitool_act(mob/living/user, obj/item/multitool/multi_tool) - . = ..() - - if(istype(multi_tool.buffer, /obj/machinery/air_sensor)) - var/obj/machinery/air_sensor/sensor = multi_tool.buffer - //computers reference a global map loaded list of sensor's but as soon a user attempt's to edit it, make a copy of that list so other computers aren't affected - if(!was_multi_tooled) - connected_sensors = connected_sensors.Copy() - was_multi_tooled = TRUE - //register the sensor's unique ID with its assositated chamber - connected_sensors[sensor.chamber_id] = sensor.id_tag - user.balloon_alert(user, "sensor connected to [src]") - return ITEM_INTERACT_SUCCESS - - return - /obj/machinery/computer/atmos_control/ui_interact(mob/user, datum/tgui/ui) . = ..() ui = SStgui.try_update_ui(user, src, ui) @@ -158,7 +151,6 @@ return var/chamber = params["chamber"] - switch(action) if("toggle_input") if (!(chamber in atmos_chambers)) @@ -174,6 +166,8 @@ input.on = !input.on input.update_appearance(UPDATE_ICON) + return TRUE + if("toggle_output") if (!(chamber in atmos_chambers)) return TRUE @@ -188,6 +182,8 @@ output.on = !output.on output.update_appearance(UPDATE_ICON) + return TRUE + if("adjust_input") if (!(chamber in atmos_chambers)) return TRUE @@ -206,6 +202,8 @@ target = clamp(target, 0, MAX_TRANSFER_RATE) input.volume_rate = clamp(target, 0, min(input.airs[1].volume, MAX_TRANSFER_RATE)) + return TRUE + if("adjust_output") if (!(chamber in atmos_chambers)) return TRUE @@ -224,10 +222,11 @@ target = clamp(target, 0, ATMOS_PUMP_MAX_PRESSURE) output.internal_pressure_bound = target - if("reconnect") - reconnect(usr) + return TRUE - return TRUE + if("reconnect") + reconnect(ui.user) + return TRUE /obj/machinery/computer/atmos_control/nocontrol control = FALSE diff --git a/code/game/machinery/computer/atmos_computers/inlets.dm b/code/game/machinery/computer/atmos_computers/inlets.dm index 474ccae2c14e..06b4f8fdc99d 100644 --- a/code/game/machinery/computer/atmos_computers/inlets.dm +++ b/code/game/machinery/computer/atmos_computers/inlets.dm @@ -1,8 +1,6 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/monitored on = TRUE volume_rate = MAX_TRANSFER_RATE - /// The air sensor type this injector is linked to - var/chamber_id /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/layer2 piping_layer = 2 @@ -12,108 +10,79 @@ piping_layer = 4 icon_state = "inje_map-4" -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/Initialize(mapload) - id_tag = CHAMBER_INPUT_FROM_ID(chamber_id) - return ..() - /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input name = "plasma tank input injector" - chamber_id = ATMOS_GAS_MONITOR_PLAS /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input name = "oxygen tank input injector" - chamber_id = ATMOS_GAS_MONITOR_O2 /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input name = "nitrogen tank input injector" - chamber_id = ATMOS_GAS_MONITOR_N2 /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input name = "mix tank input injector" - chamber_id = ATMOS_GAS_MONITOR_MIX /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input name = "nitrous oxide tank input injector" - chamber_id = ATMOS_GAS_MONITOR_N2O /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input name = "air mix tank input injector" - chamber_id = ATMOS_GAS_MONITOR_AIR /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input name = "carbon dioxide tank input injector" - chamber_id = ATMOS_GAS_MONITOR_CO2 /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/bz_input name = "bz tank input injector" - chamber_id = ATMOS_GAS_MONITOR_BZ /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/freon_input name = "freon tank input injector" - chamber_id = ATMOS_GAS_MONITOR_FREON /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/halon_input name = "halon tank input injector" - chamber_id = ATMOS_GAS_MONITOR_HALON /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/healium_input name = "healium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_HEALIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/hydrogen_input name = "hydrogen tank input injector" - chamber_id = ATMOS_GAS_MONITOR_H2 /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/hypernoblium_input name = "hypernoblium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_HYPERNOBLIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/miasma_input name = "miasma tank input injector" - chamber_id = ATMOS_GAS_MONITOR_MIASMA /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrium_input name = "nitrium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_NITRIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/pluoxium_input name = "pluoxium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_PLUOXIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/proto_nitrate_input name = "proto-nitrate tank input injector" - chamber_id = ATMOS_GAS_MONITOR_PROTO_NITRATE /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/tritium_input name = "tritium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_TRITIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/water_vapor_input name = "water vapor tank input injector" - chamber_id = ATMOS_GAS_MONITOR_H2O /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/zauker_input name = "zauker tank input injector" - chamber_id = ATMOS_GAS_MONITOR_ZAUKER /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/helium_input name = "helium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_HELIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/antinoblium_input name = "antinoblium tank input injector" - chamber_id = ATMOS_GAS_MONITOR_ANTINOBLIUM /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input name = "incinerator chamber input injector" - chamber_id = ATMOS_GAS_MONITOR_INCINERATOR /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input on = FALSE name = "ordnance burn chamber input injector" - chamber_id = ATMOS_GAS_MONITOR_ORDNANCE_BURN /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_freezer_chamber_input on = FALSE name = "ordnance freezer chamber input injector" - chamber_id = ATMOS_GAS_MONITOR_ORDNANCE_FREEZER diff --git a/code/game/machinery/computer/atmos_computers/meters.dm b/code/game/machinery/computer/atmos_computers/meters.dm index e23164018209..9b0872b07c4b 100644 --- a/code/game/machinery/computer/atmos_computers/meters.dm +++ b/code/game/machinery/computer/atmos_computers/meters.dm @@ -1,12 +1,10 @@ /obj/machinery/meter/monitored + flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /// The unique string that represents which atmos chamber to associate with. var/chamber_id - flags_1 = parent_type::flags_1 | NO_NEW_GAGS_PREVIEW_1 /obj/machinery/meter/monitored/Initialize(mapload, new_piping_layer) id_tag = assign_random_name() - if(mapload) - GLOB.map_loaded_sensors[chamber_id] = id_tag return ..() /obj/machinery/meter/monitored/layer2 diff --git a/code/game/machinery/computer/atmos_computers/outlets.dm b/code/game/machinery/computer/atmos_computers/outlets.dm index 529a83d72192..a3d93d16a87d 100644 --- a/code/game/machinery/computer/atmos_computers/outlets.dm +++ b/code/game/machinery/computer/atmos_computers/outlets.dm @@ -3,106 +3,81 @@ icon_state = "vent_map_siphon_on-3" /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/Initialize(mapload) - id_tag = CHAMBER_OUTPUT_FROM_ID(chamber_id) . = ..() //we dont want people messing with these special vents using the air alarm interface disconnect_from_area() /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output name = "plasma tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_PLAS /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output name = "oxygen tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_O2 /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output name = "nitrogen tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_N2 /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output name = "mix tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_MIX /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output name = "nitrous oxide tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_N2O /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output name = "carbon dioxide tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_CO2 /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/bz_output name = "bz tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_BZ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/freon_output name = "freon tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_FREON /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/halon_output name = "halon tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_HALON /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/healium_output name = "healium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_HEALIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/hydrogen_output name = "hydrogen tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_H2 /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/hypernoblium_output name = "hypernoblium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_HYPERNOBLIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/miasma_output name = "miasma tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_MIASMA /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrium_output name = "nitrium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_NITRIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/pluoxium_output name = "pluoxium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_PLUOXIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/proto_nitrate_output name = "proto-nitrate tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_PROTO_NITRATE /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/tritium_output name = "tritium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_TRITIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/water_vapor_output name = "water vapor tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_H2O /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/zauker_output name = "zauker tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_ZAUKER /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/helium_output name = "helium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_HELIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/antinoblium_output name = "antinoblium tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_ANTINOBLIUM /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/incinerator_output name = "incinerator chamber output inlet" - chamber_id = ATMOS_GAS_MONITOR_INCINERATOR /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/ordnance_burn_chamber_output name = "ordnance burn chamber output inlet" - chamber_id = ATMOS_GAS_MONITOR_ORDNANCE_BURN /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/ordnance_freezer_chamber_output name = "ordnance freezer chamber output inlet" - chamber_id = ATMOS_GAS_MONITOR_ORDNANCE_FREEZER /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored on = TRUE @@ -110,11 +85,9 @@ // Same as the rest, but bigger volume. /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/Initialize(mapload) - id_tag = CHAMBER_OUTPUT_FROM_ID(chamber_id) . = ..() //we dont want people messing with these special vents using the air alarm interface disconnect_from_area() /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output name = "air mix tank output inlet" - chamber_id = ATMOS_GAS_MONITOR_AIR diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 8a8ab3f76cf7..bb034b1a3220 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -260,7 +260,7 @@ if(remote_eye.zMove(UP)) to_chat(owner, span_notice("You move upwards.")) else - to_chat(owner, span_notice("You couldn't move upwards!")) + to_chat(owner, span_notice("You can't move upwards!")) /datum/action/innate/camera_multiz_down name = "Move down a floor" @@ -274,7 +274,7 @@ if(remote_eye.zMove(DOWN)) to_chat(owner, span_notice("You move downwards.")) else - to_chat(owner, span_notice("You couldn't move downwards!")) + to_chat(owner, span_notice("You can't move downwards!")) /obj/machinery/computer/camera_advanced/human_ai/screwdriver_act(mob/living/user, obj/item/tool) balloon_alert(user, "repackaging...") diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index adac393d7bed..61965fe25aa0 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -254,7 +254,6 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) entry["burndam"] = rand(0,175) entry["brutedam"] = rand(0,175) entry["health"] = -50 - entry["can_track"] = tracked_living_mob.can_track() results[++results.len] = entry continue @@ -276,9 +275,6 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) if (sensor_mode >= SENSOR_COORDS) entry["area"] = get_area_name(tracked_living_mob, format_text = TRUE) - // Trackability - entry["can_track"] = tracked_living_mob.can_track() - results[++results.len] = entry // Cache result diff --git a/code/game/machinery/digital_clock.dm b/code/game/machinery/digital_clock.dm index 6cc298a8c146..edf6f480253e 100644 --- a/code/game/machinery/digital_clock.dm +++ b/code/game/machinery/digital_clock.dm @@ -81,6 +81,7 @@ /obj/machinery/digital_clock/Initialize(mapload) . = ..() find_and_hang_on_wall() + AddElement(/datum/element/beauty, 200) /obj/machinery/digital_clock/process(seconds_per_tick) if(machine_stat & NOPOWER) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index dc86f0fc6d94..5f67b791e906 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -106,8 +106,8 @@ var/backup_power_timer = 0 /// Paired with backup_power_timer. Records its remaining time when something happens to interrupt power regen var/backup_power_time - /// Bolt lights show by default - var/lights = TRUE + /// Lights and sounds enabled by default + var/feedback = TRUE var/aiDisabledIdScanner = FALSE var/aiHacking = FALSE /// Cyclelinking for airlocks that aren't on the same x or y coord as the target. @@ -503,6 +503,32 @@ /obj/machinery/door/airlock/proc/is_secure() return (security_level > 0) +/// Checks if this door would be affected by any currently active RETA grants +/obj/machinery/door/airlock/proc/has_active_reta_access() + if(!CONFIG_GET(flag/reta_enabled)) + return FALSE + + if(!length(req_access) && !length(req_one_access)) + return FALSE + + // Check if this door belongs to a department providing access via RETA + for(var/target_dept in GLOB.reta_active_grants) + var/list/active_origins = GLOB.reta_active_grants[target_dept] + for(var/origin_dept in active_origins) + var/list/origin_dept_access = GLOB.reta_dept_grants[origin_dept] + if(!origin_dept_access) + continue + + for(var/required_access in req_access) + if(required_access in origin_dept_access) + return TRUE + + for(var/required_access in req_one_access) + if(required_access in origin_dept_access) + return TRUE + + return FALSE + /** * Set the airlock state to a new value, change the icon state * and run the associated animation if required. @@ -547,6 +573,8 @@ light_state = AIRLOCK_LIGHT_BOLTS else if(emergency) light_state = AIRLOCK_LIGHT_EMERGENCY + else if(has_active_reta_access()) + light_state = AIRLOCK_LIGHT_RETA if(AIRLOCK_DENY) frame_state = AIRLOCK_FRAME_CLOSED light_state = AIRLOCK_LIGHT_DENIED @@ -565,7 +593,7 @@ else . += get_airlock_overlay("fill_[frame_state]", icon, src, em_block = TRUE) - if(lights && hasPower() && light_state) + if(feedback && hasPower() && light_state) . += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE) if(panel_open) @@ -635,7 +663,8 @@ use_energy(50 JOULES) playsound(src, soundin = doorClose, vol = 30, vary = TRUE) if(DOOR_DENY_ANIMATION) - playsound(src, soundin = doorDeni, vol = 50, vary = FALSE, extrarange = 3) + if(feedback) + playsound(src, soundin = doorDeni, vol = 50, vary = FALSE, extrarange = 3) addtimer(CALLBACK(src, PROC_REF(handle_deny_end)), AIRLOCK_DENY_ANIMATION_TIME) /obj/machinery/door/airlock/proc/handle_deny_end() @@ -1488,7 +1517,7 @@ if(!open()) set_airlock_state(AIRLOCK_CLOSED) obj_flags |= EMAGGED - lights = FALSE + feedback = FALSE locked = TRUE loseMainPower() loseBackupPower() @@ -1683,7 +1712,7 @@ data["id_scanner"] = !aiDisabledIdScanner data["emergency"] = emergency // access data["locked"] = locked // bolted - data["lights"] = lights // bolt lights + data["feedback"] = feedback // lights and sounds data["safe"] = safe // safeties data["speed"] = normalspeed // safe speed data["welded"] = welded // welded @@ -1697,7 +1726,7 @@ wire["shock"] = !wires.is_cut(WIRE_SHOCK) wire["id_scanner"] = !wires.is_cut(WIRE_IDSCAN) wire["bolts"] = !wires.is_cut(WIRE_BOLTS) - wire["lights"] = !wires.is_cut(WIRE_BOLTLIGHT) + wire["feedback"] = !wires.is_cut(WIRE_FEEDBACK) wire["safe"] = !wires.is_cut(WIRE_SAFETY) wire["timing"] = !wires.is_cut(WIRE_TIMING) @@ -1745,7 +1774,7 @@ toggle_bolt(usr) . = TRUE if("light-toggle") - lights = !lights + feedback = !feedback update_appearance() . = TRUE if("safe-toggle") diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm index d31198749b82..3f365ff3b1de 100644 --- a/code/game/machinery/medipen_refiller.dm +++ b/code/game/machinery/medipen_refiller.dm @@ -110,10 +110,12 @@ /obj/machinery/medipen_refiller/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced) user.balloon_alert_to_viewers("furiously plunging...", "plunging medipen refiller...") - if(do_after(user, 3 SECONDS, target = src)) - user.balloon_alert_to_viewers("finished plunging") - reagents.expose(get_turf(src), TOUCH) - reagents.clear_reagents() + if(!do_after(user, 3 SECONDS, target = src)) + return TRUE + user.balloon_alert_to_viewers("finished plunging") + reagents.expose(get_turf(src), TOUCH) + reagents.clear_reagents() + return TRUE /obj/machinery/medipen_refiller/wrench_act(mob/living/user, obj/item/tool) default_unfasten_wrench(user, tool) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 7734e98b9490..58123bc23232 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -324,55 +324,61 @@ DEFINE_BITFIELD(turret_flags, list( balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) - if(machine_stat & BROKEN) - if(I.tool_behaviour == TOOL_CROWBAR) - //If the turret is destroyed, you can remove it with a crowbar to - //try and salvage its components - to_chat(user, span_notice("You begin prying the metal coverings off...")) - if(I.use_tool(src, user, 20)) - if(prob(70)) - if(stored_gun) - stored_gun.forceMove(loc) - stored_gun = null - to_chat(user, span_notice("You remove the turret and salvage some components.")) - if(prob(50)) - new /obj/item/stack/sheet/iron(loc, rand(1,4)) - if(prob(50)) - new /obj/item/assembly/prox_sensor(loc) - else - to_chat(user, span_notice("You remove the turret but did not manage to salvage anything.")) - qdel(src) - - else if((I.tool_behaviour == TOOL_WRENCH) && (!on)) - if(raised) - return - - //This code handles moving the turret around. After all, it's a portable turret! - if(!anchored && !isinspace()) - set_anchored(TRUE) - RemoveInvisibility(id=type) - update_appearance() - to_chat(user, span_notice("You secure the exterior bolts on the turret.")) - if(has_cover) - cover = new /obj/machinery/porta_turret_cover(loc) //create a new turret. While this is handled in process(), this is to workaround a bug where the turret becomes invisible for a split second - cover.parent_turret = src //make the cover's parent src - else if(anchored) - set_anchored(FALSE) - to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) - power_change() - SetInvisibility(INVISIBILITY_NONE, id=type) - qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover. - - else if(I.GetID()) - //Behavior lock/unlock mangement - if(allowed(user)) - locked = !locked - to_chat(user, span_notice("Controls are now [locked ? "locked" : "unlocked"].")) - else - to_chat(user, span_alert("Access denied.")) +/obj/machinery/porta_turret/crowbar_act(mob/living/user, obj/item/tool) + if(!(machine_stat & BROKEN)) + return NONE + + //If the turret is destroyed, you can remove it with a crowbar to + //try and salvage its components + to_chat(user, span_notice("You begin prying the metal coverings off...")) + if(!tool.use_tool(src, user, 20)) + return ITEM_INTERACT_BLOCKING + if(prob(70)) + if(stored_gun) + stored_gun.forceMove(loc) + stored_gun = null + to_chat(user, span_notice("You remove the turret and salvage some components.")) + if(prob(50)) + new /obj/item/stack/sheet/iron(loc, rand(1,4)) + if(prob(50)) + new /obj/item/assembly/prox_sensor(loc) else - return ..() + to_chat(user, span_notice("You remove the turret but did not manage to salvage anything.")) + qdel(src) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/porta_turret/wrench_act(mob/living/user, obj/item/tool) + if(on || raised) + return NONE + + //This code handles moving the turret around. After all, it's a portable turret! + if(!anchored && !isinspace()) + set_anchored(TRUE) + RemoveInvisibility(id=type) + update_appearance() + to_chat(user, span_notice("You secure the exterior bolts on the turret.")) + if(has_cover) + cover = new /obj/machinery/porta_turret_cover(loc) //create a new turret. While this is handled in process(), this is to workaround a bug where the turret becomes invisible for a split second + cover.parent_turret = src //make the cover's parent src + else if(anchored) + set_anchored(FALSE) + to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) + power_change() + SetInvisibility(INVISIBILITY_NONE, id=type) + qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover. + return ITEM_INTERACT_SUCCESS + +/obj/machinery/porta_turret/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!tool.GetID()) + return NONE + + //Behavior lock/unlock mangement + if(!allowed(user)) + to_chat(user, span_alert("Access denied.")) + return ITEM_INTERACT_BLOCKING + locked = !locked + to_chat(user, span_notice("Controls are now [locked ? "locked" : "unlocked"].")) + return ITEM_INTERACT_SUCCESS /obj/machinery/porta_turret/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index 9ce769c1ddc4..268c9e36714b 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -37,40 +37,41 @@ return ..() || parent_turret.attack_ghost(user) /obj/machinery/porta_turret_cover/multitool_act(mob/living/user, obj/item/multitool/multi_tool) - . = NONE if(parent_turret.locked) - return + user.balloon_alert(user, "controls locked") + return ITEM_INTERACT_BLOCKING multi_tool.set_buffer(parent_turret) balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) - if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on) - if(parent_turret.raised) - return - if(!parent_turret.anchored) - parent_turret.set_anchored(TRUE) - to_chat(user, span_notice("You secure the exterior bolts on the turret.")) - parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) - parent_turret.update_appearance() - else - parent_turret.set_anchored(FALSE) - to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) - parent_turret.SetInvisibility(INVISIBILITY_NONE, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) - parent_turret.update_appearance() - qdel(src) - return - - if(I.GetID()) - if(parent_turret.allowed(user)) - parent_turret.locked = !parent_turret.locked - to_chat(user, span_notice("Controls are now [parent_turret.locked ? "locked" : "unlocked"].")) - else - to_chat(user, span_notice("Access denied.")) - return +/obj/machinery/porta_turret_cover/wrench_act(mob/living/user, obj/item/tool) + if(parent_turret.on || parent_turret.raised) + return NONE + + if(parent_turret.anchored) + parent_turret.set_anchored(FALSE) + to_chat(user, span_notice("You unsecure the exterior bolts on the turret.")) + parent_turret.SetInvisibility(INVISIBILITY_NONE, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) + parent_turret.update_appearance() + qdel(src) + return ITEM_INTERACT_SUCCESS + + parent_turret.set_anchored(TRUE) + to_chat(user, span_notice("You secure the exterior bolts on the turret.")) + parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER) + parent_turret.update_appearance() + return ITEM_INTERACT_SUCCESS - return ..() +/obj/machinery/porta_turret_cover/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!tool.GetID()) + return NONE + if(!parent_turret.allowed(user)) + to_chat(user, span_notice("Access denied.")) + return ITEM_INTERACT_BLOCKING + parent_turret.locked = !parent_turret.locked + to_chat(user, span_notice("Controls are now [parent_turret.locked ? "locked" : "unlocked"].")) + return ITEM_INTERACT_SUCCESS /obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) return parent_turret.attacked_by(I, user, modifiers) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 54cfdd4a61ab..a655972eb3be 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -6,12 +6,15 @@ desc = "A charging dock for energy based weaponry, PDAs, and other devices." circuit = /obj/item/circuitboard/machine/recharger pass_flags = PASSTABLE + /// The item currently inserted into the charger var/obj/item/charging = null + /// How good the capacitor is at charging the item var/recharge_coeff = 1 - var/using_power = FALSE //Did we put power into "charging" last process()? - ///Did we finish recharging the currently inserted item? + /// Did we put power into "charging" last process()? + var/using_power = FALSE + /// Did we finish recharging the currently inserted item? var/finished_recharging = FALSE - + /// List of items that can be recharged var/static/list/allowed_devices = typecacheof(list( /obj/item/gun/energy, /obj/item/melee/baton/security, @@ -83,28 +86,28 @@ update_appearance() return ..() -/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) - if(!is_type_in_typecache(attacking_item, allowed_devices)) - return ..() +/obj/machinery/recharger/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!is_type_in_typecache(tool, allowed_devices)) + return NONE if(!anchored) to_chat(user, span_notice("[src] isn't connected to anything!")) - return TRUE + return ITEM_INTERACT_BLOCKING if(charging || panel_open) - return TRUE + return ITEM_INTERACT_BLOCKING var/area/our_area = get_area(src) //Check to make sure user's not in space doing it, and that the area got proper power. if(!isarea(our_area) || our_area.power_equip == 0) - to_chat(user, span_notice("[src] blinks red as you try to insert [attacking_item].")) - return TRUE + to_chat(user, span_notice("[src] blinks red as you try to insert [tool].")) + return ITEM_INTERACT_BLOCKING - if (istype(attacking_item, /obj/item/gun/energy)) - var/obj/item/gun/energy/energy_gun = attacking_item + if(istype(tool, /obj/item/gun/energy)) + var/obj/item/gun/energy/energy_gun = tool if(!energy_gun.can_charge) to_chat(user, span_notice("Your gun has no external power connector.")) - return TRUE - user.transferItemToLoc(attacking_item, src) - return TRUE + return ITEM_INTERACT_BLOCKING + user.transferItemToLoc(tool, src) + return ITEM_INTERACT_SUCCESS /obj/machinery/recharger/wrench_act(mob/living/user, obj/item/tool) if(charging) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index af163f21a804..dcbc5aa0e410 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -178,6 +178,14 @@ not_eaten += 1 continue + // Prevent blindly deconstructing locked secure closets (head closets, important departmental orders, etc.) + // unless they have already been unlocked to prevent exploiting the recycler to bypass closet access. + if (iscloset(thing)) + var/obj/structure/closet/as_closet = thing + if (as_closet.secure && as_closet.locked) + not_eaten += 1 + continue + if (istype(thing, /obj/item/organ/brain) || istype(thing, /obj/item/dullahan_relay)) living_detected = TRUE @@ -215,7 +223,17 @@ for(var/i = length(nom); i >= 1; i--) if(!is_operational) //we ran out of power after recycling a large amount to items, time to stop break - use_energy(active_power_usage / (recycle_item(nom[i]) ? 1 : 2)) //recycling stuff that produces no material takes just half the power + var/full_power_usage = TRUE + var/obj/nom_obj = nom[i] + if (isitem(nom_obj)) + // Whether or not items consume full power depends on if they produced a material when recycled. + full_power_usage = recycle_item(nom_obj) + else + // When a non-item is eaten, we deconstruct it with dismantled = FALSE so that + // it and its contents aren't just deleted. These always consume full power. + nom_obj.deconstruct(FALSE) + use_energy(active_power_usage / (full_power_usage ? 1 : 2)) + if(nom.len && sound) playsound(src, item_recycle_sound, (50 + nom.len * 5), TRUE, nom.len, ignore_walls = (nom.len - 10)) // As a substitute for playing 50 sounds at once. if(not_eaten) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index e5aa4e3ab457..44d6ebbffde0 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -122,11 +122,23 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) GLOB.req_console_all += src GLOB.req_console_ckey_departments[ckey(department)] = department // and then we set ourselves a listed name + + // Register this console for RETA UI updates - code/modules/reta/reta_system.dm + var/dept_key = reta_get_user_department_by_name(department) + if(dept_key) + LAZYADD(GLOB.reta_consoles_by_origin[dept_key], src) + find_and_hang_on_wall() /obj/machinery/requests_console/Destroy() QDEL_LIST(messages) GLOB.req_console_all -= src + + // Remove from RETA console registry + var/dept_key = reta_get_user_department_by_name(department) + if(dept_key) + LAZYREMOVE(GLOB.reta_consoles_by_origin[dept_key], src) + return ..() /obj/machinery/requests_console/ui_interact(mob/user, datum/tgui/ui) @@ -162,14 +174,104 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) if("set_emergency") if(emergency) return - emergency = params["emergency"] - switch(params["emergency"]) - if(REQ_EMERGENCY_SECURITY) //Security - aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = department), null, list(RADIO_CHANNEL_SECURITY), REQ_EMERGENCY_SECURITY) - if(REQ_EMERGENCY_ENGINEERING) //Engineering - aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = department), null, list(RADIO_CHANNEL_ENGINEERING), REQ_EMERGENCY_ENGINEERING) - if(REQ_EMERGENCY_MEDICAL) //Medical - aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = department), null, list(RADIO_CHANNEL_MEDICAL), REQ_EMERGENCY_MEDICAL) + + // Check for RETA eligibility + var/emergency_type = params["emergency"] + var/origin_dept = reta_get_user_department_by_name(department) + var/target_dept = null + + switch(emergency_type) + if(REQ_EMERGENCY_SECURITY) + target_dept = "Security" + if(REQ_EMERGENCY_ENGINEERING) + target_dept = "Engineering" + if(REQ_EMERGENCY_MEDICAL) + target_dept = "Medical" + + // Check if user can call this emergency (prevent self-calls) RETA + var/user_dept = reta_get_user_department(usr) + if(user_dept == target_dept) + to_chat(usr, span_alert("You cannot call your own department for emergency assistance.")) + return + + // Check cooldown RETA + if(origin_dept && target_dept && reta_on_cooldown(origin_dept, target_dept)) + to_chat(usr, span_alert("Emergency calls to [target_dept] are on cooldown.")) + return + + emergency = emergency_type + + // Grant RETA if conditions are met + if(origin_dept && target_dept && CONFIG_GET(flag/reta_enabled)) + // Set cooldown + var/cooldown_ds = CONFIG_GET(number/reta_dept_cooldown_ds) || 150 + reta_set_cooldown(origin_dept, target_dept, cooldown_ds) + + // Find responders and grant access to their ID cards + var/duration_ds = CONFIG_GET(number/reta_duration_ds) || 3000 + var/granted_count = reta_find_and_grant_access(target_dept, origin_dept, duration_ds) + + // Track this call for multiple department analysis + reta_track_call(origin_dept, target_dept) + + // Enhanced announcement with caller info + var/caller_info = "" + if(usr) + var/caller_name = usr.real_name || "Unknown" + var/caller_title = "Unknown Position" + if(usr?.mind?.assigned_role) + caller_title = usr.mind.assigned_role.title + caller_info = " (Called by [caller_name], [caller_title])" + + var/enhanced_location = "[department][caller_info]" + + switch(emergency_type) + if(REQ_EMERGENCY_SECURITY) + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_SECURITY), REQ_EMERGENCY_SECURITY) + if(REQ_EMERGENCY_ENGINEERING) + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_ENGINEERING), REQ_EMERGENCY_ENGINEERING) + if(REQ_EMERGENCY_MEDICAL) + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_MEDICAL), REQ_EMERGENCY_MEDICAL) + + // Send confirmation to the calling department about the RETA activation + var/calling_message = "RETA activated[caller_info]. [target_dept] personnel now have temporary access to your areas." + + // Get an announcement system to send simple radio messages + var/obj/machinery/announcement_system/announcer = get_announcement_system(null, null, list(RADIO_CHANNEL_COMMON)) + if(announcer) + switch(origin_dept) + if("Security") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SECURITY) + if("Engineering") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_ENGINEERING) + if("Medical") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_MEDICAL) + if("Science") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SCIENCE) + if("Service") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SERVICE) + if("Command") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_COMMAND) + if("Cargo") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SUPPLY) + if("Mining") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SUPPLY) + + // Log RETA activity + log_game("RETA: [origin_dept] called [target_dept] emergency, granted access to [granted_count] responder IDs for [duration_ds/10] seconds") + + // Push UI updates to consoles in the same origin department + reta_push_ui_updates(origin_dept, target_dept) + else + // Normal emergency call without RETA + switch(emergency_type) + if(REQ_EMERGENCY_SECURITY) + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = department), null, list(RADIO_CHANNEL_SECURITY), REQ_EMERGENCY_SECURITY) + if(REQ_EMERGENCY_ENGINEERING) + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = department), null, list(RADIO_CHANNEL_ENGINEERING), REQ_EMERGENCY_ENGINEERING) + if(REQ_EMERGENCY_MEDICAL) + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = department), null, list(RADIO_CHANNEL_MEDICAL), REQ_EMERGENCY_MEDICAL) + update_appearance() addtimer(CALLBACK(src, PROC_REF(clear_emergency)), 5 MINUTES) return TRUE @@ -290,6 +392,20 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) data["messages"] = list() for (var/datum/request_message/message in messages) data["messages"] += list(message.message_ui_data()) + + // Add RETA data + data["reta_enabled"] = CONFIG_GET(flag/reta_enabled) + var/origin_dept = reta_get_user_department_by_name(department) + var/user_dept = reta_get_user_department(user) + + data["reta_cooldowns"] = list() + if(origin_dept) + data["reta_cooldowns"]["Security"] = reta_on_cooldown(origin_dept, "Security") + data["reta_cooldowns"]["Engineering"] = reta_on_cooldown(origin_dept, "Engineering") + data["reta_cooldowns"]["Medical"] = reta_on_cooldown(origin_dept, "Medical") + + data["reta_user_dept"] = user_dept + return data @@ -313,6 +429,10 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) emergency = null update_appearance() +/// Updates the UI for all viewers +/obj/machinery/requests_console/proc/ui_update() + SStgui.update_uis(src) + /// From message_server.dm: Console.create_message(data) /obj/machinery/requests_console/proc/create_message(data) @@ -418,12 +538,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/requests_console/auto_name, 30) /datum/aas_config_entry/rc_emergency name = "RC Alert: Emergency" announcement_lines_map = list( - "Security" = "Security emergency in %LOCATION!!!", - "Engineering" = "Engineering emergency in %LOCATION!!!", - "Medical" = "Medical emergency in %LOCATION!!!", + "Security" = "SECURITY EMERGENCY in %LOCATION - RETA door access granted to responders!", + "Engineering" = "ENGINEERING EMERGENCY in %LOCATION - RETA door access granted to responders!", + "Medical" = "MEDICAL EMERGENCY in %LOCATION - RETA door access granted to responders!", ) vars_and_tooltips_map = list( - "LOCATION" = "will be replaced with the department name", + "LOCATION" = "will be replaced with the department name and caller information (Name, Job Title)", ) /datum/aas_config_entry/rc_new_message diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 90fe826136b3..470d791080a7 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -8,8 +8,8 @@ #define SMALL_PRIZE 400 #define BIG_PRIZE 1000 #define JACKPOT 10000 -#define SPIN_TIME 65 //As always, deciseconds. -#define REEL_DEACTIVATE_DELAY 7 +#define SPIN_TIME 36 //As always, deciseconds. +#define REEL_DEACTIVATE_DELAY 4 #define JACKPOT_SEVENS FA_ICON_7 #define HOLOCHIP 1 #define COIN 2 diff --git a/code/game/machinery/wall_healer.dm b/code/game/machinery/wall_healer.dm new file mode 100644 index 000000000000..89de765ecbe1 --- /dev/null +++ b/code/game/machinery/wall_healer.dm @@ -0,0 +1,566 @@ +/// A wall mounted machine that heals chip damage for a price +/obj/machinery/wall_healer + name = "\improper Deforest First Aid Station" + desc = "A wall-mounted first aid station, designed to treat minor injuries - just stick your hand in and try to relax." + icon = 'icons/obj/machines/wall_healer.dmi' + icon_state = "wall_healer" + base_icon_state = "wall_healer" + density = FALSE + interaction_flags_atom = INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND // manually handled + payment_department = ACCOUNT_MED + max_integrity = 150 + armor_type = /datum/armor/obj_machinery/wall_healer + + /// Cost per bandage dispensed. Note, always disregarded on red alert. + var/per_bandage_cost = (/obj/item/stack/medical/gauze::custom_price) / (/obj/item/stack/medical/gauze::amount) + /// Number of bandages to dispense on rmb. Never recharges but can be restocked. + var/num_bandages = 5 + /// Lazylist of bandages that have been restocked into the wall healer. + VAR_PRIVATE/list/stocked_bandages + + /// Cost per unit of healing applied. + /// Note: disregarded on red alert. + var/per_heal_cost = 2.5 + /// Amount of brute healing pooled + VAR_PRIVATE/brute_healing = MAX_LIVING_HEALTH * 0.4 + /// Amount of burn healing pooled + VAR_PRIVATE/burn_healing = MAX_LIVING_HEALTH * 0.4 + /// Amount of toxin healing pooled + VAR_PRIVATE/tox_healing = MAX_LIVING_HEALTH * 0.3 + /// Amount of blood to restore + VAR_PRIVATE/blood_healing = BLOOD_VOLUME_NORMAL * 0.1 + + /// Current mob using the wall healer + VAR_PRIVATE/mob/living/current_user + /// Current hand of the mob using the wall healer, if any (can be unset if in use by a simplemob, for example) + VAR_PRIVATE/obj/item/bodypart/current_hand + /// Ref of the last user to touch the wall healer - only set when there is no active user + VAR_PRIVATE/last_user_ref + /// Bar that props above the healer to show time until next injection + VAR_PRIVATE/datum/progressbar/wall_healer/injection_bar + + /// How long it takes to recharge the wall healer + var/recharge_cd_length = 30 SECONDS + /// How long it takes between injections + var/injection_cd_length = 4 SECONDS + /// Cooldown between chem recharges + COOLDOWN_DECLARE(recharge_cooldown) + /// Cooldown between chem injections + COOLDOWN_DECLARE(injection_cooldown) + /// Only sends messages every X injections to the same user to avoid spam + VAR_PRIVATE/antispam_counter = 0 + +/datum/armor/obj_machinery/wall_healer + melee = 50 + bullet = 30 + laser = 30 + energy = 40 + bomb = 10 + fire = 80 + acid = 80 + +/obj/machinery/wall_healer/Initialize(mapload) + . = ..() + if(!mapload) + brute_healing = 0 + burn_healing = 0 + tox_healing = 0 + blood_healing = 0 + update_appearance() + init_payment() + register_context() + +/obj/machinery/wall_healer/Destroy() + clear_using_mob() + QDEL_LAZYLIST(stocked_bandages) + return ..() + +/obj/machinery/wall_healer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Heal self" + context[SCREENTIP_CONTEXT_RMB] = "Get gauze" + return CONTEXTUAL_SCREENTIP_SET + if(istype(held_item, /obj/item/stack/medical/gauze)) + context[SCREENTIP_CONTEXT_LMB] = "Restock" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/wall_healer/proc/refill_healing_pool(percent = 100) + var/amount_refilled = 0 + + var/pre_brute_healing = brute_healing + brute_healing = min(brute_healing + initial(brute_healing) * (percent / 100), initial(brute_healing)) + amount_refilled += brute_healing - pre_brute_healing + + var/pre_burn_healing = burn_healing + burn_healing = min(burn_healing + initial(burn_healing) * (percent / 100), initial(burn_healing)) + amount_refilled += burn_healing - pre_burn_healing + + var/pre_tox_healing = tox_healing + tox_healing = min(tox_healing + initial(tox_healing) * (percent / 100), initial(tox_healing)) + amount_refilled += tox_healing - pre_tox_healing + + var/pre_blood_healing = blood_healing + blood_healing = min(blood_healing + initial(blood_healing) * (percent / 100), initial(blood_healing)) + amount_refilled += blood_healing - pre_blood_healing + + if(amount_refilled > 0) + update_appearance() + + return amount_refilled + +/obj/machinery/wall_healer/proc/init_payment() + // Cost depends on service (so just use 0 here) + AddComponent(/datum/component/payment, 0, SSeconomy.get_dep_account(ACCOUNT_MED), PAYMENT_FRIENDLY) + desc += " Charges by the second, though all costs are waived on red alert." + +/obj/machinery/wall_healer/examine(mob/user) + . = ..() + var/total_bandages = num_bandages + LAZYLEN(stocked_bandages) + . += span_notice("It has [total_bandages] bandage\s stocked.\ + [total_bandages ? " [is_free(user) ? "Purchase" : "Retrieve"] a bandage with [EXAMINE_HINT("right-click")]." : ""]") + if(current_user) + . += span_notice("[current_user] currently [current_hand ? "has [current_user.p_their()] [current_hand.plaintext_zone] in" : "is using"] it.") + +/obj/machinery/wall_healer/update_overlays() + . = ..() + + var/brute_state = 7 - round(7 * (brute_healing / initial(brute_healing)), 1) + var/mutable_appearance/brute = mutable_appearance(icon, "bar[brute_state]", alpha = src.alpha, appearance_flags = RESET_COLOR) + brute.color = /datum/reagent/medicine/c2/libital::color + // no offset necessary + . += brute + + var/burn_state = 7 - round(7 * (burn_healing / initial(burn_healing)), 1) + var/mutable_appearance/burn = mutable_appearance(icon, "bar[burn_state]", alpha = src.alpha, appearance_flags = RESET_COLOR) + burn.color = /datum/reagent/medicine/c2/aiuri::color + burn.pixel_w += 4 + . += burn + + var/tox_state = 7 - round(7 * (tox_healing / initial(tox_healing)), 1) + var/mutable_appearance/tox = mutable_appearance(icon, "bar[tox_state]", alpha = src.alpha, appearance_flags = RESET_COLOR) + tox.color = /datum/reagent/medicine/c2/syriniver::color + tox.pixel_w += 8 + . += tox + + var/blood_state = 7 - round(7 * (blood_healing / initial(blood_healing)), 1) + var/mutable_appearance/blood = mutable_appearance(icon, "bar[blood_state]", alpha = src.alpha, appearance_flags = RESET_COLOR) + blood.color = /datum/reagent/blood::color + blood.pixel_w += 12 + . += blood + + if(is_operational) + . += emissive_appearance(icon, "bar_emissive", src, alpha = src.alpha) + . += mutable_appearance(icon, "bar_shadow", alpha = src.alpha, appearance_flags = RESET_COLOR) + +/obj/machinery/wall_healer/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + return FALSE + + playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + visible_message(span_warning("Sparks fly out of [src]!")) + balloon_alert(user, "safeties disabled") + obj_flags |= EMAGGED + return TRUE + +/// We want user to be right up to the wall mount to use it +/// However people may often map the machine over a table +/// In those contexts, they should be allowed to reach over the table +/obj/machinery/wall_healer/proc/loc_check(mob/checking) + var/turf/turf_loc = get_turf(src) + if(turf_loc.is_blocked_turf()) + return checking.Adjacent(turf_loc) + return checking.loc == turf_loc + +/obj/machinery/wall_healer/mouse_drop_receive(atom/dropped, mob/user, params) + . = ..() + if(.) + return . + if(!isliving(user) || !ishuman(dropped)) + balloon_alert(user, "incompatible!") + return FALSE + var/mob/living/who_put_user_in = user + var/mob/living/new_user = dropped + if(!loc_check(new_user)) + balloon_alert(who_put_user_in, "[new_user == who_put_user_in ? "get" : "bring [new_user.p_them()]"] closer!") + return FALSE + + if(do_after(user, 1 SECONDS, src)) + other_put_users_hand_in(new_user, who_put_user_in) + return TRUE + +/obj/machinery/wall_healer/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(.) + return . + if(!ishuman(user)) + balloon_alert(user, "incompatible!") + return FALSE + if(!loc_check(user)) + balloon_alert(user, "get closer!") + return FALSE + if(do_after(user, 0.5 SECONDS, src)) + user_put_in_own_hand(user) + return TRUE + +/obj/machinery/wall_healer/proc/user_put_in_own_hand(mob/living/user) + if(user == current_user) + clear_using_mob() + if(user.get_active_hand() == current_hand) + user.visible_message( + span_notice("[user] removes [user.p_their()] hand from [src]."), + span_notice("You remove your hand from [src]."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + else + add_fingerprint(user) + user.visible_message( + span_notice("[user] removes [user.p_their()] hand from [src] and puts it in [user.p_their()] other hand."), + span_notice("You remove your hand from [src] and put it in your other hand."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + set_using_mob(user) + return + else if(current_user) + user.visible_message( + span_notice("[user] tries to put [user.p_their()] hand in [src], but [current_user] is already using it."), + span_notice("You try to put your hand in [src], but [current_user] is already using it."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + return + + add_fingerprint(user) + if(is_operational) + user.visible_message( + span_notice("[user] puts [user.p_their()] hand in [src], and immediately some kind of sensor scans [user.p_their()] arm."), + span_notice("You put your hand in [src], and immediately some kind of sensor scans your arm."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + else + user.visible_message( + span_notice("[user] puts [user.p_their()] hand in [src], but it doesn't respond. Seems to be out of order."), + span_notice("You put your hand in [src], but it doesn't respond."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + set_using_mob(user) + +/obj/machinery/wall_healer/proc/other_put_users_hand_in(mob/living/user, mob/living/who_put_user_in) + if(who_put_user_in == user) + return user_put_in_own_hand(user) + + if(current_user == user) + clear_using_mob() + if(user.get_active_hand() == current_hand) + to_chat(who_put_user_in, span_notice("You remove [user]'s hand from [src].")) + user.visible_message( + span_notice("[who_put_user_in] removes [user]'s hand from [src]."), + span_notice("[who_put_user_in] remove your hand from [src]."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ignored_mobs = who_put_user_in, + ) + else + to_chat(who_put_user_in, span_notice("You remove [user]'s hand from [src] and put it in [user.p_their()] other hand.")) + user.visible_message( + span_notice("[who_put_user_in] removes [user.p_their()] hand from [src] and puts it in [user.p_their()] other hand."), + span_notice("[who_put_user_in] removes your hand from [src] and puts it in your other hand."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ignored_mobs = who_put_user_in, + ) + add_fingerprint(user) + set_using_mob(who_put_user_in) + return + + if(current_user) + to_chat(who_put_user_in, span_notice("You try to put [user]'s hand in [src], but [current_user] is already using it.")) + user.visible_message( + span_notice("[who_put_user_in] tries to put [user]'s hand in [src], but [current_user] is already using it."), + span_notice("[who_put_user_in] tries to put your hand in [src], but [current_user] is already using it."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ignored_mobs = who_put_user_in, + ) + return + + add_fingerprint(who_put_user_in) + if(is_operational) + to_chat(who_put_user_in, span_notice("You put [user]'s hand in [src], and immediately some kind of sensor scans [user.p_their()] arm.")) + user.visible_message( + span_notice("[who_put_user_in] puts [user.p_their()] hand in [src], and immediately some kind of sensor scans [user.p_their()] arm."), + span_notice("[who_put_user_in] puts your hand in [src], and immediately some kind of sensor scans your arm."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ignored_mobs = who_put_user_in, + ) + else + to_chat(who_put_user_in, span_notice("You put [user]'s hand in [src], but it doesn't respond. Seems to be out of order.")) + user.visible_message( + span_notice("[who_put_user_in] puts [user.p_their()] hand in [src], but it doesn't respond. Seems to be out of order."), + span_notice("[who_put_user_in] puts your hand in [src], but it doesn't respond."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ignored_mobs = who_put_user_in, + ) + set_using_mob(user) + +/obj/machinery/wall_healer/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. != SECONDARY_ATTACK_CALL_NORMAL || !isliving(user)) + return . + var/mob/living/living_user = user + if(!is_operational) + to_chat(user, span_warning("You try to retrieve some gauze, but [src] doesn't respond.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(num_bandages + LAZYLEN(stocked_bandages) <= 0) + to_chat(user, span_warning("You try to retrieve some gauze, but [src] seems to be out of stock.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(attempt_charge(src, user, extra_fees = floor(per_bandage_cost)) & COMPONENT_OBJ_CANCEL_CHARGE) + if(!living_user.get_idcard()) + to_chat(user, span_warning("No ID card found. Aborting.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if((obj_flags & EMAGGED) && prob(99)) + to_chat(user, span_warning("You try to retrieve some gauze, but it gets all jammed up in the access port.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + var/obj/item/stack/medical/gauze/bandage = LAZYACCESS(stocked_bandages, 1) + if(isnull(bandage)) + num_bandages-- + bandage = new(user.drop_location(), 1) + user.put_in_hands(bandage) + user.visible_message( + span_notice("[user] retrieves [bandage] from [src]."), + span_notice("You retrieve [bandage] from [src]."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/machinery/wall_healer/on_deconstruction(disassembled) + var/atom/drop_loc = drop_location() + for(var/obj/item/stack/medical/gauze/bandage as anything in stocked_bandages) + bandage.forceMove(drop_loc) + new /obj/item/stack/medical/gauze(drop_loc, num_bandages) + +/obj/machinery/wall_healer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/stack/medical/gauze)) + return NONE + if(!user.temporarilyRemoveItemFromInventory(tool)) + to_chat(user, span_warning("You try to restock [src] with [tool], but it seems stuck to your hand.")) + return ITEM_INTERACT_BLOCKING + user.visible_message( + span_notice("[user] restocks [src] with [tool]."), + span_notice("You restock [src] with [tool]."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + var/obj/item/stack/medical/gauze/bandage = tool + while(bandage.amount > 1) + var/obj/item/stack/medical/gauze/split_bandage = bandage.split_stack(1) + LAZYADD(stocked_bandages, split_bandage) + split_bandage.forceMove(src) + LAZYADD(stocked_bandages, bandage) + bandage.forceMove(src) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/wall_healer/proc/set_using_mob(mob/living/user) + if(last_user_ref != REF(user)) + COOLDOWN_RESET(src, injection_cooldown) + + antispam_counter = 0 + last_user_ref = null + + current_user = user + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(user_moved)) + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(clear_using_mob)) + + current_hand = user.get_active_hand() + if(current_hand) + RegisterSignals(current_hand, list(COMSIG_BODYPART_REMOVED, COMSIG_QDELETING), PROC_REF(clear_using_mob)) + + injection_bar = new(user, injection_cd_length, src, COOLDOWN_TIMELEFT(src, injection_cooldown)) + +/obj/machinery/wall_healer/proc/clear_using_mob(...) + SIGNAL_HANDLER + if(current_hand) + UnregisterSignal(current_hand, COMSIG_BODYPART_REMOVED) + UnregisterSignal(current_hand, COMSIG_QDELETING) + current_hand = null + if(current_user) + last_user_ref = REF(current_user) + UnregisterSignal(current_user, COMSIG_MOVABLE_MOVED) + UnregisterSignal(current_user, COMSIG_QDELETING) + UnregisterSignal(current_user, COMSIG_CARBON_REMOVE_LIMB) + current_user = null + QDEL_NULL(injection_bar) + +/obj/machinery/wall_healer/proc/user_moved(...) + SIGNAL_HANDLER + if(current_user.loc == loc) + return + if(!QDELING(current_user)) + current_user.visible_message( + span_notice("[current_user] removes [current_user.p_their()] hand from [src]."), + span_notice("You remove your hand from [src]."), + span_hear("You hear a click."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + vision_distance = 5, + ) + clear_using_mob() + +/obj/machinery/wall_healer/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if(current_user && current_user.loc != loc) + clear_using_mob() + +/obj/machinery/wall_healer/Exited(atom/movable/gone, direction) + . = ..() + LAZYREMOVE(stocked_bandages, gone) + +/// Checks if the machine is free for the given mob +/obj/machinery/wall_healer/proc/is_free(mob/living/for_who) + if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) + return TRUE // always free on red alert + if(!istype(for_who)) + return FALSE + var/obj/item/card/id/card = for_who.get_idcard(TRUE) + if(card?.registered_account?.account_job?.paycheck_department == payment_department) + return TRUE // free for doctors + return FALSE + +/obj/machinery/wall_healer/attempt_charge(atom/sender, atom/target, extra_fees) + if(is_free(target)) + return NONE + return ..() + +/obj/machinery/wall_healer/process() + if(!is_operational) + // puts off recharging until operational again + COOLDOWN_START(src, recharge_cooldown, recharge_cd_length * 0.5) + return + if(isnull(current_user)) + if(COOLDOWN_FINISHED(src, recharge_cooldown) && refill_healing_pool(10)) + COOLDOWN_START(src, recharge_cooldown, recharge_cd_length) + playsound(src, 'sound/machines/defib/defib_ready.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + return + + if(!COOLDOWN_FINISHED(src, injection_cooldown)) + return + + COOLDOWN_START(src, injection_cooldown, injection_cd_length) + antispam_counter++ + + var/arm_check = isnull(current_hand) ? (current_user.mob_biotypes & MOB_ORGANIC) : IS_ORGANIC_LIMB(current_hand) + if(!arm_check) + playsound(src, 'sound/machines/defib/defib_saftyOff.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + if(antispam_counter % 3 == 1) + to_chat(current_user, span_notice("Nothing happens. Seems [src] doesn't recognize non-organic [current_hand ? "limbs" : "beings"].")) + return + + if(!current_user.can_inject(null, current_hand)) + playsound(src, 'sound/machines/defib/defib_saftyOff.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + if(antispam_counter % 3 == 1) + to_chat(current_user, span_notice("Nothing happens. Seems [src] can't find any exposed flesh to work on.")) + return + + if(obj_flags & EMAGGED) + current_user.apply_damage(33, BRUTE, current_hand, sharpness = SHARP_POINTY) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + if(antispam_counter % 2 == 1) + to_chat(current_user, span_warning("You feel a sharp pain as the machine malfunctions, stabbing you with several instruments and needles!")) + use_energy(500 JOULES) + add_mob_blood(current_user) + return + + var/brute_healing_now = round(min(initial(brute_healing) * 0.1, brute_healing, current_user.getBruteLoss()), DAMAGE_PRECISION) + var/burn_healing_now = round(min(initial(burn_healing) * 0.1, burn_healing, current_user.getFireLoss()), DAMAGE_PRECISION) + var/tox_healing_now = round(min(initial(tox_healing) * 0.1, tox_healing, current_user.getToxLoss()), DAMAGE_PRECISION) + var/blood_healing_now = HAS_TRAIT(current_user, TRAIT_NOBLOOD) ? 0 : round(min(initial(blood_healing) * 0.1, blood_healing, max(BLOOD_VOLUME_OKAY - current_user.blood_volume, 0)), 0.1) + + var/cost = round(per_heal_cost * (brute_healing_now + burn_healing_now + tox_healing_now + blood_healing_now), 1) + if(attempt_charge(src, current_user, extra_fees = cost) & COMPONENT_OBJ_CANCEL_CHARGE) + playsound(src, 'sound/machines/defib/defib_saftyOff.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + // attempt charge sends a chat message on fail, except if the user has no ID card + if((antispam_counter % 3 == 1) && !current_user.get_idcard()) + to_chat(current_user, span_warning("No ID card found. Aborting.")) + return + + var/amount_healed = 0 + if(brute_healing_now) + amount_healed += current_user.adjustBruteLoss(-brute_healing_now, required_bodytype = BODYTYPE_ORGANIC) + brute_healing -= brute_healing_now + add_mob_blood(current_user) + if(burn_healing_now) + amount_healed += current_user.adjustFireLoss(-burn_healing_now, required_bodytype = BODYTYPE_ORGANIC) + burn_healing -= burn_healing_now + if(tox_healing_now) + amount_healed += current_user.adjustToxLoss(-tox_healing_now, required_biotype = MOB_ORGANIC) + tox_healing -= tox_healing_now + if(blood_healing_now) + current_user.blood_volume += blood_healing_now + amount_healed += blood_healing_now + blood_healing -= blood_healing_now + add_mob_blood(current_user) + + if(amount_healed) + playsound(src, 'sound/machines/defib/defib_SaftyOn.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + if(antispam_counter % 2 == 1) + to_chat(current_user, span_notice("Several instruments and syringes work on your [current_hand?.plaintext_zone || "body"]. You feel a bit better.")) + update_appearance() + use_energy(200 JOULES) // just some background power drain. we don't really care about whether this is actually successful + return + + playsound(src, 'sound/machines/defib/defib_saftyOff.ogg', 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + if(antispam_counter % 3 != 1) + return + var/missed_brute_healing = brute_healing_now > 0 && !current_user.getBruteLoss() + var/missed_burn_healing = burn_healing_now > 0 && !current_user.getFireLoss() + var/missed_tox_healing = tox_healing_now > 0 && !current_user.getToxLoss() + var/missed_blood_healing = blood_healing_now > 0 && current_user.blood_volume >= BLOOD_VOLUME_OKAY + if(missed_brute_healing || missed_burn_healing || missed_tox_healing || missed_blood_healing) + to_chat(current_user, span_notice("Nothing happens. Seems like [src] needs to recharge.")) + return + to_chat(current_user, span_notice("Nothing happens. Seems like you're in good enough shape.")) + +/// Subtype of progress bar used by the wall healer to show time until next injection +/// This subtype only exists so we can shove fastprocess processing off of the machine itself +/datum/progressbar/wall_healer + +/datum/progressbar/wall_healer/New(mob/User, goal_number, atom/target, starting_amount) + . = ..() + START_PROCESSING(SSfastprocess, src) + +/datum/progressbar/wall_healer/Destroy() + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/datum/progressbar/wall_healer/process(seconds_per_tick) + var/obj/machinery/wall_healer/healer = bar_loc + if(!istype(healer)) + stack_trace("[type] instantiated on a non-wall-healer target [bar_loc || "null"] ([bar_loc?.type || "null"])") + return PROCESS_KILL + + update(COOLDOWN_FINISHED(healer, injection_cooldown) ? 0 : COOLDOWN_TIMELEFT(healer, injection_cooldown)) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/wall_healer, 32) + +/obj/machinery/wall_healer/free + name = "\improper Deforest Emergency First Aid Station" + +/obj/machinery/wall_healer/free/init_payment() + return + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/wall_healer/free, 32) diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 0eebda1243c0..4e7ca61d0dd0 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,6 +1,7 @@ /obj/effect/decal/cleanable gender = PLURAL layer = CLEANABLE_FLOOR_OBJECT_LAYER + abstract_type = /obj/effect/decal/cleanable flags_1 = UNPAINTABLE_1 var/list/random_icon_states = null /// When two of these are on a same tile or do we need to merge them into just one? diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index e5fce2731fba..be3e03d5e6e6 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -2,6 +2,7 @@ name = "decal" layer = ABOVE_OPEN_TURF_LAYER plane = FLOOR_PLANE + abstract_type = /obj/effect/decal anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index 788740e9f323..f3394e21e191 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -151,7 +151,7 @@ info.pass_flags = PASSTABLE | PASSGRILLE | PASSMACHINE | PASSSTRUCTURE for(var/iter_dir in GLOB.cardinals) var/turf/spread_turf = get_step(src, iter_dir) - if(spread_turf?.density || spread_turf.LinkBlockedWithAccess(spread_turf, info)) + if(spread_turf?.density || location.LinkBlockedWithAccess(spread_turf, info)) continue var/obj/effect/particle_effect/fluid/foam/foundfoam = locate() in spread_turf //Don't spread foam where there's already foam! diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm index c9e68ce6ede2..6d71edad180b 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm @@ -124,6 +124,7 @@ smoker.smoke_delay = TRUE addtimer(VARSET_CALLBACK(smoker, smoke_delay, FALSE), 1 SECONDS) + SEND_SIGNAL(smoker, COMSIG_CARBON_EXPOSED_TO_SMOKE, seconds_per_tick) return TRUE /** diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index e1fbde7859d3..92ce77843d8d 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -3,6 +3,7 @@ //Effects are mostly temporary visual effects like sparks, smoke, as well as decals, etc... /obj/effect icon = 'icons/effects/effects.dmi' + abstract_type = /obj/effect resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF move_resist = INFINITY obj_flags = NONE diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 2e18aeb1b5c2..84b1e5ad1253 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -45,6 +45,14 @@ /// Override to define loot blacklist behavior /obj/effect/spawner/proc/can_spawn(atom/loot) + if(!ispath(loot)) + // Means its something evil like /obj/item/stack/sheet/mineral/diamond{amount = 15} + // (modified instances?) which is not a path and cannot be checked as one + return TRUE + if(loot.abstract_type == loot) + return FALSE + if(loot.spawn_blacklisted) + return FALSE return TRUE /obj/effect/list_container diff --git a/code/game/objects/effects/spawners/random/contraband.dm b/code/game/objects/effects/spawners/random/contraband.dm index d49591d368fb..1d56e1e1614f 100644 --- a/code/game/objects/effects/spawners/random/contraband.dm +++ b/code/game/objects/effects/spawners/random/contraband.dm @@ -18,6 +18,11 @@ /obj/item/storage/pill_bottle/lsd = 10, /obj/item/storage/pill_bottle/aranesp = 10, /obj/item/storage/pill_bottle/stimulant = 10, + /obj/item/food/drug/saturnx = 5, + /obj/item/food/drug/meth_crystal = 5, + /obj/item/food/drug/opium = 5, + /obj/item/reagent_containers/cup/blastoff_ampoule = 5, + /obj/item/food/drug/moon_rock = 5, /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 10, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims = 10, /obj/item/storage/box/donkpockets = 10, @@ -40,6 +45,8 @@ /obj/item/reagent_containers/cup/bottle/thermite = 20, /obj/item/restraints/legcuffs/beartrap = 10, /obj/item/food/drug/saturnx = 5, + /obj/item/food/drug/meth_crystal = 5, + /obj/item/food/drug/opium = 5, /obj/item/reagent_containers/cup/blastoff_ampoule = 5, /obj/item/food/drug/moon_rock = 5, /obj/item/grenade/empgrenade = 5, @@ -73,9 +80,12 @@ /obj/item/food/drug/saturnx, /obj/item/reagent_containers/cup/blastoff_ampoule, /obj/item/food/drug/moon_rock, + /obj/item/food/drug/meth_crystal, + /obj/item/food/drug/opium, /obj/item/storage/pill_bottle/happy, /obj/item/storage/pill_bottle/lsd, /obj/item/storage/pill_bottle/psicodine, + /obj/item/storage/box/flat/fentanylpatches, ) /obj/effect/spawner/random/contraband/permabrig_weapon diff --git a/code/game/objects/effects/spawners/random/decoration.dm b/code/game/objects/effects/spawners/random/decoration.dm index 6d2cf3021ef3..8392e03e39ec 100644 --- a/code/game/objects/effects/spawners/random/decoration.dm +++ b/code/game/objects/effects/spawners/random/decoration.dm @@ -7,7 +7,7 @@ name = "decoration material spawner" icon_state = "tile" loot = list( - /obj/item/stack/sheet/sandblock{amount = 30} = 25, + /obj/item/stack/ore/glass/thirty = 25, /obj/item/stack/sheet/mineral/wood{amount = 30} = 25, /obj/item/stack/sheet/bronze/thirty = 20, /obj/item/stack/tile/noslip{amount = 20} = 10, diff --git a/code/game/objects/effects/spawners/random/maintenance.dm b/code/game/objects/effects/spawners/random/maintenance.dm index e5bebdef672f..327085e71eb4 100644 --- a/code/game/objects/effects/spawners/random/maintenance.dm +++ b/code/game/objects/effects/spawners/random/maintenance.dm @@ -1,8 +1,13 @@ +#define MAINT_LOOT "maintenance_loot" +#define DUMPSTER_LOOT "dumpster_loot" + /obj/effect/spawner/random/maintenance name = "maintenance loot spawner" desc = "Come on Lady Luck, spawn me a pair of sunglasses." icon_state = "loot" remove_if_cant_spawn = FALSE //don't remove stuff from the global maint list, which other can use. + /// The global loot list we are going to use to spawn loot from + var/loot_table = MAINT_LOOT // see code/_globalvars/lists/maintenance_loot.dm for loot table /// A subtype of maintenance loot spawner that does not spawn any decals, for when you want to place them on chasm turfs and such @@ -19,14 +24,25 @@ . += span_info("This spawner has an effective loot count of [get_effective_lootcount()].") /obj/effect/spawner/random/maintenance/Initialize(mapload) - loot = GLOB.maintenance_loot + switch(loot_table) + if(MAINT_LOOT) + loot = GLOB.maintenance_loot + if(DUMPSTER_LOOT) + loot = GLOB.dumpster_loot return ..() /obj/effect/spawner/random/maintenance/skew_loot_weights(list/loot_list, exponent) ///We only need to skew the weights once, since it's a global list used by all maint spawners. var/static/already_done = FALSE - if(loot_list == GLOB.maintenance_loot && already_done) - return + if(already_done) + switch(loot_table) + if(MAINT_LOOT) + if(loot_list == GLOB.maintenance_loot) + return + if(DUMPSTER_LOOT) + if(loot_list == GLOB.dumpster_loot) + return + already_done = TRUE return ..() @@ -110,3 +126,11 @@ /obj/effect/spawner/random/maintenance/no_decals/eight name = "8 x maintenance loot spawner" spawn_loot_count = 8 + +/obj/effect/spawner/random/maintenance/dumpster + name = "dumpster loot spawner" + spawn_loot_count = 3 + loot_table = DUMPSTER_LOOT + +#undef MAINT_LOOT +#undef DUMPSTER_LOOT diff --git a/code/game/objects/effects/spawners/random/techstorage.dm b/code/game/objects/effects/spawners/random/techstorage.dm index 2fd7808847cb..d114e071901e 100644 --- a/code/game/objects/effects/spawners/random/techstorage.dm +++ b/code/game/objects/effects/spawners/random/techstorage.dm @@ -126,9 +126,10 @@ /obj/effect/spawner/random/techstorage/command_all name = "secure command circuit board spawner" loot = list( - /obj/item/circuitboard/computer/crew, - /obj/item/circuitboard/computer/communications, + /obj/item/circuitboard/computer/accounting, /obj/item/circuitboard/computer/bankmachine, + /obj/item/circuitboard/computer/communications, + /obj/item/circuitboard/computer/crew, ) /obj/effect/spawner/random/techstorage/rnd_secure_all diff --git a/code/game/objects/effects/spawners/random/weapon.dm b/code/game/objects/effects/spawners/random/weapon.dm new file mode 100644 index 000000000000..c08d53783473 --- /dev/null +++ b/code/game/objects/effects/spawners/random/weapon.dm @@ -0,0 +1,10 @@ +/obj/effect/spawner/random/weapon + icon_state = "laser_gun" + +/obj/effect/spawner/random/weapon/full_gun + loot_subtype_path = /obj/item/gun + +/obj/effect/spawner/random/weapon/full_gun/make_item(spawn_loc, type_path_to_make) + var/obj/item/gun/spawned_gun = new type_path_to_make(spawn_loc) + spawned_gun.unlock() + return spawned_gun diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cd3f17e16225..d4fc9743368d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -2,6 +2,7 @@ /obj/item name = "item" icon = 'icons/obj/anomaly.dmi' + abstract_type = /obj/item blocks_emissive = EMISSIVE_BLOCK_GENERIC burning_particles = /particles/smoke/burning/small pass_flags_self = PASSITEM @@ -755,7 +756,6 @@ SEND_SIGNAL(src, COMSIG_ITEM_DROPPED, user) if(!silent) play_drop_sound(DROP_SOUND_VOLUME) - user?.update_equipment(src) /// called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) @@ -792,7 +792,7 @@ * polling ghosts while it's just being equipped as a visual preview for a dummy. */ /obj/item/proc/visual_equipped(mob/user, slot, initial = FALSE) - return + return TRUE /** * Called by on_equipped. Don't call this directly, we want the ITEM_POST_EQUIPPED signal to be sent after everything else. @@ -818,8 +818,6 @@ item_flags |= IN_INVENTORY RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_NO_WORN_ICON), SIGNAL_REMOVETRAIT(TRAIT_NO_WORN_ICON)), PROC_REF(update_slot_icon), override = TRUE) - user.update_equipment(src) - if(!initial && (slot_flags & slot) && (play_equip_sound())) return diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 5d33a69af6f5..8288de30e165 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -43,6 +43,10 @@ . = ..() cached_flat_icon = null +/// Called to get what name this card represents +/obj/item/card/proc/get_displayed_name(honorifics = FALSE) + return null + /// If no cached_flat_icon exists, this proc creates it and crops it. This proc then returns the cached_flat_icon. Intended for use displaying ID card icons in chat. /obj/item/card/proc/get_cached_flat_icon() if(!cached_flat_icon) @@ -146,13 +150,16 @@ SSid_access.apply_trim_to_card(src, trim) else update_label() - update_icon() + update_appearance() + + // Apply any active RETA grants to this new ID card + // This will only do something if there are active grants, so it's safe to call always + apply_active_reta_grants_to_card(src) register_item_context() register_context() RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, PROC_REF(update_in_wallet)) - RegisterSignal(src, COMSIG_ID_GET_HONORIFIC, PROC_REF(return_message_name_part)) if(prob(1)) ADD_TRAIT(src, TRAIT_TASTEFULLY_THICK_ID_CARD, ROUNDSTART_TRAIT) @@ -184,19 +191,25 @@ UnregisterSignal(user, COMSIG_MOVABLE_POINTED) return ..() -/obj/item/card/id/proc/return_message_name_part(datum/source, list/stored_name, mob/living/carbon/carbon_human) - SIGNAL_HANDLER - var/voice_name = carbon_human.GetVoice() - var/end_string = "" - var/return_string = "" - if(carbon_human.name != voice_name) - end_string += " (as [registered_name])" - if(trim && honorific_position != HONORIFIC_POSITION_NONE && (carbon_human.name == voice_name)) //The voice and name are the same, so we display the title. - return_string += honorific_title - else - return_string += voice_name //Name on the ID ain't the same as the speaker, so we display their real name with no title. - return_string += end_string - stored_name[NAME_PART_INDEX] = return_string +/obj/item/card/id/equipped(mob/user, slot, initial = FALSE) + . = ..() + if(!(slot & ITEM_SLOT_ID)) + return + if(ishuman(user)) + var/mob/living/carbon/human/as_human = user + as_human.update_visible_name() + +/obj/item/card/id/dropped(mob/user, silent = FALSE) + . = ..() + if(ishuman(user)) + var/mob/living/carbon/human/as_human = user + as_human.update_visible_name() + +/// Getter for the registered name, with optional honorifics +/obj/item/card/id/get_displayed_name(honorifics = FALSE) + if(honorifics && honorific_position != HONORIFIC_POSITION_NONE && honorific_title) + return honorific_title + return registered_name /obj/item/card/id/proc/on_loc_equipped(datum/source, mob/equipper, slot) SIGNAL_HANDLER @@ -210,7 +223,7 @@ /obj/item/card/id/proc/on_pointed(mob/living/user, atom/pointed, obj/effect/temp_visual/point/point) SIGNAL_HANDLER - if ((!big_pointer && !pointer_color) || HAS_TRAIT(user, TRAIT_UNKNOWN)) + if ((!big_pointer && !pointer_color) || HAS_TRAIT(user, TRAIT_UNKNOWN_APPEARANCE)) return if (point.icon_state != /obj/effect/temp_visual/point::icon_state) //it differs from the original icon_state already. return @@ -646,7 +659,7 @@ switch(var_name) if(NAMEOF(src, assignment), NAMEOF(src, registered_name), NAMEOF(src, registered_age)) update_label() - update_icon() + update_appearance() if(NAMEOF(src, trim)) if(ispath(trim)) SSid_access.apply_trim_to_card(src, trim) @@ -893,7 +906,14 @@ return . /obj/item/card/id/GetAccess() - return access.Copy() + var/list/total_access = access.Copy() + + // Add all RETA temporary access from all departments - code/modules/reta/reta_system.dm + for(var/dept in reta_temp_access) + if(reta_temp_access[dept]) + total_access |= reta_temp_access[dept] + + return total_access /obj/item/card/id/GetID() return src @@ -934,6 +954,10 @@ name = "[name_string] ([assignment_string])" + if(ishuman(loc)) + var/mob/living/carbon/human/human = loc + human.update_visible_name() + /// Re-generates the honorific title. Returns the compiled honorific_title value /obj/item/card/id/proc/update_honorific() switch(honorific_position) @@ -1868,7 +1892,7 @@ REMOVE_TRAIT(src, TRAIT_MAGNETIC_ID_CARD, CHAMELEON_ITEM_TRAIT) user.log_message("reset \the [initial(name)] named \"[src]\" to default.", LOG_GAME) update_label() - update_icon() + update_appearance() forged = FALSE to_chat(user, span_notice("You successfully reset the ID card.")) return @@ -1928,7 +1952,7 @@ ADD_TRAIT(src, TRAIT_MAGNETIC_ID_CARD, CHAMELEON_ITEM_TRAIT) update_label() - update_icon() + update_appearance() forged = TRUE to_chat(user, span_notice("You successfully forge the ID card.")) user.log_message("forged \the [initial(name)] with name \"[registered_name]\", occupation \"[assignment]\" and trim \"[trim?.assignment]\".", LOG_GAME) @@ -2046,35 +2070,8 @@ . = ..() register_context() -/obj/item/card/cardboard/equipped(mob/user, slot, initial = FALSE) - . = ..() - if(slot != ITEM_SLOT_ID) - return - RegisterSignal(user, COMSIG_HUMAN_GET_VISIBLE_NAME, PROC_REF(return_visible_name)) - RegisterSignal(user, COMSIG_MOVABLE_MESSAGE_GET_NAME_PART, PROC_REF(return_message_name_part)) - if(ishuman(user)) - var/mob/living/carbon/human/as_human = user - as_human.update_visible_name() - -/obj/item/card/cardboard/dropped(mob/user, silent = FALSE) - . = ..() - UnregisterSignal(user, list(COMSIG_HUMAN_GET_VISIBLE_NAME, COMSIG_MOVABLE_MESSAGE_GET_NAME_PART)) - if(ishuman(user)) - var/mob/living/carbon/human/as_human = user - as_human.update_visible_name() - -/obj/item/card/cardboard/proc/return_visible_name(mob/living/carbon/human/source, list/identity) - SIGNAL_HANDLER - identity[VISIBLE_NAME_ID] = scribbled_name - -/obj/item/card/cardboard/proc/return_message_name_part(mob/living/carbon/human/source, list/stored_name, visible_name) - SIGNAL_HANDLER - if(visible_name) - return - var/voice_name = source.GetVoice() - if(source.name != voice_name) - voice_name += " (as [scribbled_name])" - stored_name[NAME_PART_INDEX] = voice_name +/obj/item/card/cardboard/get_displayed_name(honorifics = FALSE) + return scribbled_name /obj/item/card/cardboard/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(user.can_write(tool, TRUE)) diff --git a/code/game/objects/items/chromosome.dm b/code/game/objects/items/chromosome.dm index a16eea4aaaa4..de798f6a25ed 100644 --- a/code/game/objects/items/chromosome.dm +++ b/code/game/objects/items/chromosome.dm @@ -2,6 +2,7 @@ name = "blank chromosome" icon = 'icons/obj/science/chromosomes.dmi' icon_state = "" + abstract_type = /obj/item/chromosome desc = "A tube holding chromosomal data." force = 0 w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/cigarettes.dm b/code/game/objects/items/cigarettes.dm index 1fe1c5bea43d..068d82dfc662 100644 --- a/code/game/objects/items/cigarettes.dm +++ b/code/game/objects/items/cigarettes.dm @@ -421,6 +421,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM hitsound = 'sound/items/tools/welder.ogg' damtype = BURN force = 4 + + if(reagents && reagents.has_reagent(/datum/reagent/drug/methamphetamine)) + reagents.flags |= NO_REACT + if(reagents.get_reagent_amount(/datum/reagent/toxin/plasma)) // the plasma explodes when exposed to fire var/datum/effect_system/reagents_explosion/e = new() e.set_up(round(reagents.get_reagent_amount(/datum/reagent/toxin/plasma) / 2.5, 1), get_turf(src), 0, 0) @@ -434,8 +438,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM qdel(src) return // allowing reagents to react after being lit - reagents.flags &= ~(NO_REACT) - reagents.handle_reactions() update_appearance(UPDATE_ICON) if(flavor_text) var/turf/T = get_turf(src) @@ -939,14 +941,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM QDEL_NULL(cig_smoke) /obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, list/modifiers, list/attack_modifiers) - if(!istype(thing, /obj/item/food/grown)) + if(!(istype(thing, /obj/item/food/grown) || istype(thing, /obj/item/food/drug))) return ..() - var/obj/item/food/grown/to_smoke = thing if(packeditem) to_chat(user, span_warning("It is already packed!")) return - if(!HAS_TRAIT(to_smoke, TRAIT_DRIED)) + + var/obj/item/to_smoke = thing + if(istype(to_smoke, /obj/item/food/grown) && !HAS_TRAIT(to_smoke, TRAIT_DRIED)) to_chat(user, span_warning("It has to be dried first!")) return @@ -980,6 +983,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM inhand_icon_on = null inhand_icon_off = null +/obj/item/cigarette/pipe/crackpipe + name = "glass pipe" + desc = "An ergonomic, low-key delivery method for the combusted. This apparatus taught the ancients much wisdom." + icon_state = "crackpipe" + icon_on = "crackpipeon" + icon_off = "crackpipe" + inhand_icon_on = null + inhand_icon_off = null + lung_harm = 2 + custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT) + /////////// //ROLLING// /////////// diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index a556e42a6a5d..97b2a1441b9f 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -12,6 +12,7 @@ inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + abstract_type = /obj/item/circuitboard custom_materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) w_class = WEIGHT_CLASS_SMALL grind_results = list(/datum/reagent/silicon = 20) @@ -67,6 +68,7 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. */ /obj/item/circuitboard/machine + abstract_type = /obj/item/circuitboard/machine name_extension = "(Machine Board)" /// Whether this machine must be anchored to be constructed. var/needs_anchored = TRUE diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 2d3ba1ab58f7..aa1680b63d6e 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -1,5 +1,6 @@ /obj/item/circuitboard/computer name = "Generic" + abstract_type = /obj/item/circuitboard/computer name_extension = "(Computer Board)" /obj/item/circuitboard/computer/examine() @@ -676,9 +677,9 @@ machine.connect_to_shuttle(TRUE, shuttle) /obj/item/circuitboard/computer/shuttle/flight_control - name = "Shuttle Flight Control (Computer Board)" + name = "Shuttle Flight Control" build_path = /obj/machinery/computer/shuttle/custom_shuttle /obj/item/circuitboard/computer/shuttle/docker - name = "Shuttle Navigation Computer (Computer Board)" + name = "Shuttle Navigation Computer" build_path = /obj/machinery/computer/camera_advanced/shuttle_docker/custom diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 10eec06db9a6..8b418743f3dd 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -533,7 +533,7 @@ if(istagger) wait_time *= 0.5 - if(!instant && !do_after(user, wait_time, target = target, max_interact_count = 4)) + if(!instant && !do_after(user, wait_time, target = target, max_interact_count = 4, extra_checks = CALLBACK(src, PROC_REF(adjacency_check), user, target))) return ITEM_INTERACT_BLOCKING if(!use_charges(user, cost)) @@ -590,6 +590,13 @@ check_empty(user) return ITEM_INTERACT_SUCCESS +///Checks if the user is still adjacent to the target (used for do_after extra_checks) +/obj/item/toy/crayon/proc/adjacency_check(mob/user, atom/target) + if(!user.Adjacent(target)) + user.balloon_alert(user, "moved too far away!") + return FALSE + return TRUE + /obj/item/toy/crayon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if (!check_allowed_items(interacting_with)) return NONE diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index 6d44b1e00f10..354e628895d0 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -1,4 +1,6 @@ /* This file contains standalone items for debug purposes. */ +/obj/item/debug + abstract_type = /obj/item/debug /obj/item/debug/human_spawner name = "human spawner" diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index b68b11d9f635..205a47e9cb62 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -328,6 +328,7 @@ inhand_icon_state = "defibpaddles0" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + spawn_blacklisted = TRUE force = 0 throwforce = 6 diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 47875695bfb1..759790ab1558 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -141,7 +141,7 @@ wipe_ai() . = TRUE if("wireless") - AI.control_disabled = !AI.control_disabled + AI.set_control_disabled(!AI.control_disabled) to_chat(AI, span_warning("[src]'s wireless port has been [AI.control_disabled ? "disabled" : "enabled"]!")) . = TRUE if("radio") diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index d59df54073ae..b63ecf25870c 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -71,7 +71,7 @@ capture_ai(new_ai, user) var/obj/structure/ai_core/deactivated/detritus = locate() in get_turf(src) qdel(detritus) - AI.control_disabled = FALSE + AI.set_control_disabled(FALSE) AI.radio_enabled = TRUE do_sparks(4, TRUE, src) playsound(src, 'sound/machines/chime.ogg', 25, TRUE) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 136cfd755234..f395b4acbd6c 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -1064,6 +1064,7 @@ /obj/item/flashlight/eyelight name = "eyelight" desc = "This shouldn't exist outside of someone's head, how are you seeing this?" + spawn_blacklisted = TRUE obj_flags = CONDUCTS_ELECTRICITY item_flags = DROPDEL actions_types = list() @@ -1077,3 +1078,127 @@ #undef SUCCESS #undef NO_FUEL #undef ALREADY_LIT + +#define SLOWDOWN_ON 1 + +/obj/item/flashlight/lamp/space_bubble + name = "space furnace" + desc = "A heavy furnace capable of forming a temporary bubble that holds in breathable air." + icon_state = "space_lamp" + worn_icon_state = "space_lamp" + inhand_icon_state = "space_lamp" + w_class = WEIGHT_CLASS_HUGE + throw_range = 2 + slot_flags = ITEM_SLOT_BACK + item_flags = SLOWS_WHILE_IN_HAND + heat = 2500 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2.5, + ) + light_color = LIGHT_COLOR_ORANGE + start_on = FALSE + sound_on = 'sound/effects/fire_puff.ogg' + sound_off = 'sound/items/weapons/gun/bow/bow_fire.ogg' + + ///The timer we track until the bubble deletes itself. + var/bubble_timer + ///The amount of time that the bubble will survive for once turned on. This can't be changed normally but is a var for admins. + var/bubble_duration = (15 MINUTES) + ///Boolean on whether or not a pyroclastic anomaly core has been inserted, allowing the item to be used. + var/installed_pyro_core = FALSE + ///The proximity monitor & visual bubble that grants space protection to people nearby, while active. + var/datum/proximity_monitor/advanced/bubble/space_protection/space_bubble + +/obj/item/flashlight/lamp/space_bubble/Initialize(mapload) + AddElement(/datum/element/update_icon_updates_onmob) + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + update_appearance(UPDATE_DESC) + +/obj/item/flashlight/lamp/space_bubble/Destroy(force) + if(space_bubble) + QDEL_NULL(space_bubble) + return ..() + +/obj/item/flashlight/lamp/space_bubble/init_slapcrafting() + return + +/obj/item/flashlight/lamp/space_bubble/update_icon_state() + . = ..() + if(light_on) + worn_icon_state = "[initial(worn_icon_state)]-on" + else + worn_icon_state = initial(worn_icon_state) + +/obj/item/flashlight/lamp/space_bubble/update_desc(updates) + . = ..() + if(installed_pyro_core) + desc = initial(desc) + return + desc = initial(desc) + " Requires a pyroclastic anomaly core to function." + +/obj/item/flashlight/lamp/space_bubble/get_temperature() + return light_on * heat + +/obj/item/flashlight/lamp/space_bubble/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(light_on && istype(tool, /obj/item/cigarette)) + var/obj/item/cigarette/cig = tool + if(cig.lit) + return NONE + cig.light(flavor_text = "[user] lights up \the [cig] using the burning coming out of the [src]. Damn.") + return ITEM_INTERACT_SUCCESS + if(!istype(tool, /obj/item/assembly/signaler/anomaly/pyro) || installed_pyro_core) + return NONE + user.balloon_alert(user, "core inserted") + qdel(tool) + installed_pyro_core = TRUE + playsound(src, 'sound/machines/crate/crate_open.ogg', 50, FALSE) + update_appearance(UPDATE_DESC) + return ITEM_INTERACT_SUCCESS + +/obj/item/flashlight/lamp/space_bubble/toggle_light(mob/user) + if(!installed_pyro_core) + user.balloon_alert(user, "core missing!") + return FALSE + var/datum/gas_mixture/environment = loc?.return_air() + var/affected_pressure = environment.return_pressure() + if(!light_on && (affected_pressure < ONE_ATMOSPHERE)) + user.balloon_alert(user, "no pressure!") + return FALSE + . = ..() + if(light_on) + if(istype(space_bubble)) + QDEL_NULL(space_bubble) + bubble_timer = addtimer(CALLBACK(src, PROC_REF(start_bubble_close), "dies down..."), bubble_duration, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE|TIMER_DELETE_ME) + space_bubble = new(src, 4, FALSE, src) + slowdown = SLOWDOWN_ON + drag_slowdown = SLOWDOWN_ON + user.update_equipment_speed_mods() + return + close_bubble(user) + +///Uses an arg for special flavortext to be balloon alerted to everyone, then gives an extra 5 seconds before killing the bubble. +/obj/item/flashlight/lamp/space_bubble/proc/start_bubble_close(special_flavortext) + if(special_flavortext) + balloon_alert_to_viewers(special_flavortext) + var/mob/living/potential_mob = recursive_loc_check(src, /mob/living) || null + addtimer(CALLBACK(src, PROC_REF(toggle_light), potential_mob), 5 SECONDS, TIMER_UNIQUE|TIMER_DELETE_ME) + +///Closes the bubble and cleans up after itself. Optional 'user' arg for the mob turning us off. +/obj/item/flashlight/lamp/space_bubble/proc/close_bubble(mob/user) + QDEL_NULL(space_bubble) + if(bubble_timer) + deltimer(bubble_timer) + slowdown = initial(slowdown) + drag_slowdown = initial(drag_slowdown) + if(user) + user.update_equipment_speed_mods() + +#undef SLOWDOWN_ON + +///Pre-core activated one for admin spawning. +/obj/item/flashlight/lamp/space_bubble/preactivated + installed_pyro_core = TRUE diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index 46f32f3cf867..af0ff55abd19 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -20,9 +20,9 @@ if(!user.can_read(src) || user.is_blind()) return ITEM_INTERACT_BLOCKING - var/mob/living/M = interacting_with + var/mob/living/scanned = interacting_with - if(M.stat != DEAD && !HAS_TRAIT(M, TRAIT_FAKEDEATH)) // good job, you found a loophole + if(scanned.stat != DEAD && !HAS_TRAIT(scanned, TRAIT_FAKEDEATH)) // good job, you found a loophole to_chat(user, span_deadsay("[icon2html(src, user)] ERROR! CANNOT SCAN LIVE CADAVERS. PROCURE HEALTH ANALYZER OR TERMINATE PATIENT.")) return ITEM_INTERACT_BLOCKING @@ -38,10 +38,10 @@ \n[span_info("Body temperature: ???")]") return - user.visible_message(span_notice("[user] scans [M]'s cadaver.")) + user.visible_message(span_notice("[user] scans [scanned]'s cadaver.")) to_chat(user, span_deadsay("[icon2html(src, user)] ANALYZING CADAVER.")) - healthscan(user, M, advanced = TRUE) + healthscan(user, scanned, advanced = TRUE) add_fingerprint(user) @@ -49,40 +49,142 @@ if(scanned.stat != DEAD) return - var/list/autopsy_information = list() - autopsy_information += "[scanned.name] - Species: [scanned.dna.species.name]" - autopsy_information += "Time of Death - [scanned.station_timestamp_timeofdeath]" - autopsy_information += "Time of Autopsy - [station_time_timestamp()]" - autopsy_information += "Autopsy Coroner - [user.name]" - - autopsy_information += "Toxin damage: [CEILING(scanned.getToxLoss(), 1)]" - autopsy_information += "Oxygen damage: [CEILING(scanned.getOxyLoss(), 1)]" - - autopsy_information += "
Bodypart Data

" - for(var/obj/item/bodypart/bodyparts as anything in scanned.bodyparts) - autopsy_information += "[bodyparts.name]
" - autopsy_information += "BRUTE: [bodyparts.brute_dam] | BURN: [bodyparts.burn_dam]
" - if(!bodyparts.wounds) - continue - autopsy_information += "Wounds found:
" - for(var/datum/wound/wounds as anything in bodyparts.wounds) - if(wounds.wound_source) - autopsy_information += "[wounds.name] - Caused by [wounds.wound_source]
" - - autopsy_information += "
Organ Data
" - for(var/obj/item/organ/organs as anything in scanned.organs) - autopsy_information += "[organs.name]: [CEILING(organs.damage, 1)] damage
" + var/obj/item/paper/autopsy_report = new(get_turf(src)) + autopsy_report.color = "#99ccff" + autopsy_report.name = "autopsy report of [scanned] - [station_time_timestamp()])" + var/final_report_text = "
Autopsy report. Time of Autopsy: [station_time_timestamp()]
" - autopsy_information += "
Chemical Data
" - for(var/datum/reagent/scanned_reagents as anything in scanned.reagents.reagent_list) - if(scanned_reagents.chemical_flags & REAGENT_INVISIBLE) + //A lot of this is extremely similar to /proc/healthscan() - but with different formatting, no color, and some added/removed info + //Does not list quirks/exhaustion/how to repair wounds + //DOES list wound sources/ + var/list/autopsy_information = list() + autopsy_information += "Autopsy Coroner - [user.name]
" + + autopsy_information += "Analyzing results for [scanned.name]:

" + autopsy_information += "Time of Death - [scanned.station_timestamp_timeofdeath]
" + autopsy_information += "Subject has been dead for [DisplayTimeText(round(world.time - scanned.timeofdeath))].
" + + var/oxy_loss = scanned.getOxyLoss() + var/tox_loss = scanned.getToxLoss() + var/fire_loss = scanned.getFireLoss() + var/brute_loss = scanned.getBruteLoss() + /// "Body Data" portion of the autopsy - damage, wounds, and limbs + var/dmgreport = "Body Data:\ + \ + \ + \ + \ + \ + \ + \ + " + for(var/zone in scanned.get_all_limbs()) //Same order every time for consistency across all humans + var/obj/item/bodypart/limb = scanned.get_bodypart(zone) + if(isnull(limb)) + dmgreport += "" + dmgreport += "" + dmgreport += "" + dmgreport += "" + dmgreport += "" + dmgreport += "" continue - autopsy_information += "[round(scanned_reagents.volume, 0.1)] unit\s of [scanned_reagents.name]
" - autopsy_information += "Chemical Information: [scanned_reagents.description]
" - - autopsy_information += "
Blood Data
" + var/has_any_embeds = length(limb.embedded_objects) >= 1 + var/has_any_wounds = length(limb.wounds) >= 1 + dmgreport += "" + dmgreport += "" + dmgreport += "" + dmgreport += "" + if(zone == BODY_ZONE_CHEST) // tox/oxy is stored in the chest + dmgreport += "" + dmgreport += "" + dmgreport += "" + if(has_any_embeds) + var/list/embedded_names = list() + for(var/obj/item/embed as anything in limb.embedded_objects) + embedded_names[capitalize(embed.name)] += 1 + for(var/embedded_name in embedded_names) + var/displayed = embedded_name + var/embedded_amt = embedded_names[embedded_name] + if(embedded_amt > 1) + displayed = "[embedded_amt]x [embedded_name]" + dmgreport += "" + if(has_any_wounds) + for(var/datum/wound/wound as anything in limb.wounds) + dmgreport += "" + + dmgreport += "\ + \ + \ + \ + \ + \ + " + dmgreport += "
Damage:BruteBurnToxinSuffocation
[capitalize(parse_zone(zone))]:--
↳ Physical trauma: Dismembered
[capitalize(limb.name)]:[limb.brute_dam > 0 ? ceil(limb.brute_dam) : "0"][limb.burn_dam > 0 ? ceil(limb.burn_dam) : "0"][tox_loss > 0 ? ceil(tox_loss) : "0"][oxy_loss > 0 ? ceil(oxy_loss) : "0"]
↳ Foreign object(s): [displayed].
↳ Physical trauma: [wound.name] ([wound.severity_text()]) - Caused by [wound.wound_source].
Overall:[ceil(brute_loss)] Brute[ceil(fire_loss)] Burn[ceil(tox_loss)] Toxin[ceil(oxy_loss)] Suffocation

" + autopsy_information += dmgreport + + // Only humanoids list organs, implants, gene stability, species and core-temp + if(ishuman(scanned)) + var/mob/living/carbon/human/humantarget = scanned + /// "Organ Data" portion of the autopsy - damage, functional status (or if it's missing), and implants + var/organreport = "Organ Data:\ + \ + \ + \ + \ + \ + " + + var/list/missing_organs = humantarget.get_missing_organs() + for(var/sorted_slot in GLOB.organ_process_order) //Same order every time for consistency across all humans + var/obj/item/organ/organ = humantarget.get_organ_slot(sorted_slot) + if(isnull(organ)) + if(missing_organs[sorted_slot]) + organreport += "\ + \ + " + continue + var/status = organ.get_status_text(advanced = TRUE, add_tooltips = FALSE, colored = FALSE) + var/appendix = organ.get_status_appendix(advanced = TRUE, add_tooltips = FALSE) + if(!status) + status ||= "OK" // otherwise flawless organs have no status reported by default + organreport += "\ + \ + \ + \ + " + if(appendix) + organreport += "" + organreport += "
Organ:DmgStatus
[missing_organs[sorted_slot]]:-Missing
[capitalize(organ.name)]:[organ.damage > 0 ? ceil(organ.damage) : "0"][status]
↳ [appendix]
" //
comes after Cybernetics below + autopsy_information += organreport + + var/mutant = HAS_TRAIT(humantarget, TRAIT_HULK) //Also applied by genetics infusions + // Cybernetics + var/list/cyberimps + for(var/obj/item/organ/target_organ as anything in humantarget.organs) + if(IS_ROBOTIC_ORGAN(target_organ) && !(target_organ.organ_flags & ORGAN_HIDDEN)) + LAZYADD(cyberimps, target_organ.examine_title(user)) + if(target_organ.organ_flags & ORGAN_MUTANT) + mutant = TRUE + if(LAZYLEN(cyberimps)) + autopsy_information += "Detected cybernetic modifications:
" + autopsy_information += "[english_list(cyberimps, and_text = ", and ")]
" + + autopsy_information += "
" + + // Genetic Stability, Species, and Body Temperature + if(humantarget.has_dna() && humantarget.dna.stability != initial(humantarget.dna.stability)) + autopsy_information += "Genetic Stability: [humantarget.dna.stability]%.
" + var/datum/species/targetspecies = humantarget.dna.species + var/disguised = !ishumanbasic(humantarget) && istype(humantarget.head, /obj/item/clothing/head/hooded/human_head) && istype(humantarget.wear_suit, /obj/item/clothing/suit/hooded/bloated_human) + var/species_name = "[disguised ? "\"[/datum/species/human::name]\"" : targetspecies.name][mutant ? "-derived mutant" : ""]" + autopsy_information += "Species: [species_name]
" + autopsy_information += "Core temperature: [round(humantarget.coretemperature-T0C, 0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)
" + // (End of humanoid-only information) + autopsy_information += "Body temperature: [round(scanned.bodytemperature-T0C, 0.1)] °C ([round(scanned.bodytemperature*1.8-459.67,0.1)] °F)
" + + // Blood Info if(HAS_TRAIT(scanned, TRAIT_HUSK)) - autopsy_information += "Blood can't be found, victim is husked by: " + autopsy_information += "Blood can't be found, subject is husked by: " if(HAS_TRAIT_FROM(scanned, TRAIT_HUSK, BURN)) autopsy_information += "Severe burns.
" else if (HAS_TRAIT_FROM(scanned, TRAIT_HUSK, CHANGELING_DRAIN)) @@ -93,23 +195,46 @@ var/datum/blood_type/blood_type = scanned.get_bloodtype() if(blood_type) var/blood_percent = round((scanned.blood_volume / BLOOD_VOLUME_NORMAL) * 100) - if (blood_type.get_type()) - autopsy_information += "[blood_type.get_blood_name()] Type: [blood_type.get_type()]
" - autopsy_information += "[blood_type.get_blood_name()] Volume: [scanned.blood_volume] cl ([blood_percent]%)
" + var/blood_type_format + var/level_format + if(scanned.blood_volume <= BLOOD_VOLUME_SAFE && scanned.blood_volume > BLOOD_VOLUME_OKAY) + level_format = "LOW [blood_percent]%, [scanned.blood_volume] cl" + else if(scanned.blood_volume <= BLOOD_VOLUME_OKAY) + level_format = "CRITICAL [blood_percent]%, [scanned.blood_volume] cl" + else + level_format = "[blood_percent]%, [scanned.blood_volume] cl" + if(blood_type.get_type()) + blood_type_format = "type: [blood_type.get_type()]" + autopsy_information += "[blood_type.get_blood_name()] level: [level_format], [blood_type_format]
" + var/blood_alcohol_content = scanned.get_blood_alcohol_content() + if(blood_alcohol_content > 0) + autopsy_information += "↳ [blood_type?.get_blood_name() || "Blood"] alcohol content: [blood_alcohol_content]%
" + autopsy_information += "
" + + autopsy_information += "Chemical Data:
" + for(var/datum/reagent/scanned_reagents as anything in scanned.reagents.reagent_list) + if(scanned_reagents.chemical_flags & REAGENT_INVISIBLE) + continue + autopsy_information += "[scanned_reagents.name]: [round(scanned_reagents.volume, 0.1)] unit\s in bloodstream.
" + autopsy_information += "↳ [scanned_reagents.description]
" + autopsy_information += "
" + autopsy_information += "Disease Data:
" for(var/datum/disease/diseases as anything in scanned.diseases) - autopsy_information += "Name: [diseases.name] | Type: [diseases.spread_text]
" + autopsy_information += "Disease Name: \"[diseases.name]\"
" + autopsy_information += "Transmission Type: [diseases.spread_text]
" if(!istype(diseases, /datum/disease/advance)) continue - autopsy_information += "Symptoms:
" + autopsy_information += "Symptoms:
" var/datum/disease/advance/advanced_disease = diseases for(var/datum/symptom/symptom as anything in advanced_disease.symptoms) - autopsy_information += "[symptom.name] - [symptom.desc]
" + autopsy_information += "↳ [symptom.name] - [symptom.desc]
" + autopsy_information += "
" - var/obj/item/paper/autopsy_report = new(user.drop_location()) - autopsy_report.name = "autopsy report of [scanned] - [station_time_timestamp()])" - autopsy_report.add_raw_text(autopsy_information.Join("\n")) - autopsy_report.color = "#99ccff" + autopsy_information += "Coroner's Notes:" //Bottom of the page, anything past here is player-written + + final_report_text += jointext(autopsy_information, "") + autopsy_report.add_raw_text(final_report_text) autopsy_report.update_appearance() user.put_in_hands(autopsy_report) user.balloon_alert(user, "report printed") diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 0da89a89252f..b8e2918734b7 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -283,24 +283,7 @@ Status\ " - var/list/missing_organs = list() - if(!humantarget.get_organ_slot(ORGAN_SLOT_BRAIN)) - missing_organs[ORGAN_SLOT_BRAIN] = "Brain" - if(humantarget.needs_heart() && !humantarget.get_organ_slot(ORGAN_SLOT_HEART)) - missing_organs[ORGAN_SLOT_HEART] = "Heart" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOBREATH, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantlungs) && !humantarget.get_organ_slot(ORGAN_SLOT_LUNGS)) - missing_organs[ORGAN_SLOT_LUNGS] = "Lungs" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_LIVERLESS_METABOLISM, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantliver) && !humantarget.get_organ_slot(ORGAN_SLOT_LIVER)) - missing_organs[ORGAN_SLOT_LIVER] = "Liver" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOHUNGER, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantstomach) && !humantarget.get_organ_slot(ORGAN_SLOT_STOMACH)) - missing_organs[ORGAN_SLOT_STOMACH] ="Stomach" - if(!isnull(humantarget.dna.species.mutanttongue) && !humantarget.get_organ_slot(ORGAN_SLOT_TONGUE)) - missing_organs[ORGAN_SLOT_TONGUE] = "Tongue" - if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EARS)) - missing_organs[ORGAN_SLOT_EARS] = "Ears" - if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EYES)) - missing_organs[ORGAN_SLOT_EYES] = "Eyes" - + var/list/missing_organs = humantarget.get_missing_organs() // Follow same order as in the organ_process_order so it's consistent across all humans for(var/sorted_slot in GLOB.organ_process_order) var/obj/item/organ/organ = humantarget.get_organ_slot(sorted_slot) @@ -432,6 +415,31 @@ Possible Cure: [disease.cure_text]\ " + + // Lungs + var/obj/item/organ/lungs/lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS) + if (lungs) + var/initial_pressure_mult = lungs::received_pressure_mult + if (lungs.received_pressure_mult != initial_pressure_mult) + var/tooltip + var/dilation_text + var/beginning_text = "Lung Dilation: " + if (lungs.received_pressure_mult > initial_pressure_mult) // higher than usual + beginning_text = span_blue("[beginning_text]") + dilation_text = span_blue("[(lungs.received_pressure_mult * 100) - 100]%") + tooltip = "Subject's lungs are dilated and breathing more air than usual. Increases the effectiveness of healium and other gases." + else + beginning_text = span_danger("[beginning_text]") + if (lungs.received_pressure_mult <= 0) // lethal + dilation_text = span_bolddanger("[lungs.received_pressure_mult * 100]%") + tooltip = "Subject's lungs are completely shut. Subject is unable to breathe and requires emergency surgery. If asthmatic, perform asthmatic bypass surgery and adminster albuterol inhalant. Otherwise, replace lungs." + else + dilation_text = span_danger("[lungs.received_pressure_mult * 100]%") + tooltip = "Subject's lungs are partially shut. If unable to breathe, administer a high-pressure internals tank or replace lungs. If asthmatic, inhaled albuterol or bypass surgery will likely help." + + var/lung_message = beginning_text + conditional_tooltip(dilation_text, tooltip, TRUE) + render_list += lung_message + // Time of death if(target.station_timestamp_timeofdeath && !target.appears_alive()) render_list += "
" diff --git a/code/game/objects/items/devices/scanners/plant_analyzer.dm b/code/game/objects/items/devices/scanners/plant_analyzer.dm index 78bcd74ae6e3..fcce33141dfd 100644 --- a/code/game/objects/items/devices/scanners/plant_analyzer.dm +++ b/code/game/objects/items/devices/scanners/plant_analyzer.dm @@ -1,3 +1,6 @@ +#define PLANT_ANALYZER_STAT_TAB 1 +#define PLANT_ANALYZER_CHEM_TAB 2 + /obj/item/plant_analyzer name = "plant analyzer" desc = "A scanner used to evaluate a plant's various areas of growth, genetic traits and chemicals." @@ -12,13 +15,21 @@ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) /// Cached data from ui_interact var/list/last_scan_data + /// Weakref to the last thing we scanned + var/datum/weakref/last_tray_scanned /// Cached data for the product grinder results var/static/list/product_grinder_results = list() + /// If TRUE the UI opens to the second tab / the chem tab + var/shown_tab = PLANT_ANALYZER_STAT_TAB /obj/item/plant_analyzer/Initialize(mapload) . = ..() register_item_context() +/obj/item/plant_analyzer/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/item/plant_analyzer/add_item_context( obj/item/source, list/context, @@ -63,6 +74,7 @@ return ITEM_INTERACT_SUCCESS return ITEM_INTERACT_BLOCKING + shown_tab = PLANT_ANALYZER_STAT_TAB return analyze(user, interacting_with) /// Same as above, but with right click. Right-clicking scans for chemicals. @@ -86,6 +98,7 @@ return ITEM_INTERACT_SUCCESS return ITEM_INTERACT_BLOCKING + shown_tab = PLANT_ANALYZER_CHEM_TAB return analyze(user, scan_target) /* @@ -123,8 +136,22 @@ ui = new(user, src, "PlantAnalyzer", "Plant Analyzer") ui.open() +/obj/item/plant_analyzer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("setTab") + var/tab = params["tab"] + if(tab == PLANT_ANALYZER_STAT_TAB || tab == PLANT_ANALYZER_CHEM_TAB) + shown_tab = tab + return TRUE + /obj/item/plant_analyzer/ui_data(mob/user) - return last_scan_data + var/list/data = list() + data["active_tab"] = shown_tab + data += last_scan_data + return data /obj/item/plant_analyzer/ui_static_data(mob/user) var/list/data = list() @@ -140,13 +167,22 @@ data["trait_db"] += trait_data return data +/obj/item/plant_analyzer/process(seconds_per_tick) + var/atom/real_last_tray_scanned = last_tray_scanned?.resolve() + if(QDELETED(real_last_tray_scanned)) + return PROCESS_KILL + + if(loc.Adjacent(real_last_tray_scanned)) + analyze(null, real_last_tray_scanned) + /// Called when our analyzer is used on something /obj/item/plant_analyzer/proc/analyze(mob/user, atom/target) var/obj/item/graft/graft var/obj/item/seeds/seed var/obj/machinery/hydroponics/tray - playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE) + if(user) + playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE) if (istype(target, /obj/machinery/hydroponics)) tray = target @@ -166,12 +202,16 @@ if (!seed && !tray && !graft) return NONE - if(!user.can_read(src)) - return ITEM_INTERACT_BLOCKING + if(user) + if(!user.can_read(src)) + return ITEM_INTERACT_BLOCKING + START_PROCESSING(SSobj, src) + last_tray_scanned = WEAKREF(tray) // sets it to null if no tray last_scan_data = list( "tray_data" = null, "seed_data" = null, + "plant_data" = null, "graft_data" = null, ) @@ -179,6 +219,7 @@ last_scan_data["tray_data"] = list( "plant_health" = tray.plant_health, "plant_age" = tray.age, + "is_dead" = tray.plant_status == HYDROTRAY_PLANT_DEAD, "name" = tray.name, "icon" = tray.icon, "icon_state" = tray.icon_state, @@ -198,15 +239,27 @@ "toxins_max" = MAX_TRAY_TOXINS, "reagents" = list(), ) - for(var/datum/reagent/reagent in tray.reagents.reagent_list) + for(var/datum/reagent/reagent as anything in tray.reagents.reagent_list) last_scan_data["tray_data"]["reagents"] += list(list( "name" = reagent.name, - "volume" = reagent.volume + "volume" = round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL), + "color" = reagent.color, )) if(seed) last_scan_data["seed_data"] = make_seed_data(seed) + if(isitem(target) && target.reagents) + last_scan_data["plant_data"] = list( + "reagents" = list(), + ) + for(var/datum/reagent/reagent as anything in target.reagents.reagent_list) + last_scan_data["plant_data"]["reagents"] += list(list( + "name" = reagent.name, + "volume" = round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL), + "color" = reagent.color, + )) + if(graft) last_scan_data["graft_data"] = list( "name" = graft.parent_name, @@ -218,10 +271,11 @@ "endurance" = graft.endurance, "weed_rate" = graft.weed_rate, "weed_chance" = graft.weed_chance, - "graft_gene" = graft.stored_trait.type + "graft_gene" = graft.stored_trait.type, ) - ui_interact(user) + if(user) + ui_interact(user) return ITEM_INTERACT_SUCCESS @@ -280,4 +334,15 @@ seed_data["juice_name"] = product_grinder_results[seed.product]["juice_name"] seed_data["grind_results"] = product_grinder_results[seed.product]["grind_results"] + seed_data["unique_labels"] = list() + seed_data["unique_collapsibles"] = list() + var/list/unique_data = seed.get_unique_analyzer_data() + for(var/label in unique_data) + seed_data[islist(unique_data[label]) ? "unique_collapsibles" : "unique_labels"] += list(list( + "label" = label, + "data" = unique_data[label], + )) return seed_data + +#undef PLANT_ANALYZER_STAT_TAB +#undef PLANT_ANALYZER_CHEM_TAB diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm index 4f1c539f5731..0d8195363668 100644 --- a/code/game/objects/items/devices/table_clock.dm +++ b/code/game/objects/items/devices/table_clock.dm @@ -20,6 +20,7 @@ /obj/item/table_clock/Initialize(mapload) . = ..() soundloop = new(src, TRUE) + AddElement(/datum/element/beauty, 200) /obj/item/table_clock/Destroy(force) soundloop.stop() diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 5dfe8ebce47a..c5160b0d705e 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -159,7 +159,7 @@ return mytape.timestamp += mytape.used_capacity - mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss", NO_TIMEZONE)]\] [speaker.GetVoice()]: [raw_message]" + mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss", NO_TIMEZONE)]\] [speaker.get_voice()]: [raw_message]" /obj/item/taperecorder/verb/record() diff --git a/code/game/objects/items/drug_items.dm b/code/game/objects/items/drug_items.dm index df34963621be..68d6c6b546f1 100644 --- a/code/game/objects/items/drug_items.dm +++ b/code/game/objects/items/drug_items.dm @@ -2,6 +2,7 @@ name = "generic drug" desc = "I am error" icon = 'icons/obj/medical/drugs.dmi' + abstract_type = /obj/item/food/drug foodtypes = GROSS food_flags = FOOD_FINGER_FOOD max_volume = 50 @@ -81,3 +82,100 @@ /obj/item/reagent_containers/cup/blastoff_ampoule/Initialize(mapload, vol) . = ..() ADD_TRAIT(src, TRAIT_CONTRABAND, INNATE_TRAIT) + +/obj/item/food/drug/meth_crystal + name = "crystal meth" + desc = "A clear, sad, fake looking crystal substance." + icon_state = "meth_crystal1" + tastes = list("awfulness", "burning") + force = 3 + throwforce = 4 + embed_type = /datum/embedding/meth + +/datum/embedding/meth // lmao + embed_chance = 9 + rip_time = 2 SECONDS + COOLDOWN_DECLARE(reagent_message_cd) + ignore_throwspeed_threshold = TRUE + var/transfer_per_second = 0.5 + +/datum/embedding/meth/process_effect(seconds_per_tick) + var/obj/item/rock = parent + if(!istype(rock, /obj/item/food/drug/meth_crystal)) + return + + if(!IS_ORGANIC_LIMB(owner_limb)) + return + + if(!owner?.reagents || !rock.reagents?.total_volume) + return + + rock.reagents.trans_to( + owner, + transfer_per_second * seconds_per_tick, + methods = INJECT, + show_message = SPT_PROB(15, seconds_per_tick) + ) + +/obj/item/food/drug/meth_crystal/Initialize(mapload) + . = ..() + icon_state = pick("meth_crystal1", "meth_crystal2", "meth_crystal3", "meth_crystal4", "meth_crystal5") + ADD_TRAIT(src, TRAIT_CONTRABAND, INNATE_TRAIT) + reagents.add_reagent(/datum/reagent/drug/methamphetamine, 10) + +/obj/item/food/drug/opium + name = "opium" + desc = "A little of it, taken as much as a grain of ervum is a pain-easer, and a sleep-causer, and a digester... \ + but being drank too much it hurts, making spacemen lethargical, and it kills." + icon_state = "opium1" + tastes = list("amber", "a bitter vanilla") + food_reagents = list( + /datum/reagent/medicine/morphine = 10, + /datum/reagent/consumable/sugar = 1 + ) + +/obj/item/food/drug/opium/examine() + . = ..() + if(reagents.get_reagent_amount(/datum/reagent/medicine/morphine) >= 10) + . += span_notice("The opium is large and rich in fragrance; it needs no further refinement.") + else + . += span_notice("The opium is still small, and can be pressed together with more to increase its potency and richness.") + +/obj/item/food/drug/opium/Initialize(mapload) // For narcotics and black market purchases, pure and proper. + . = ..() + icon_state = pick("opium1", "opium2", "opium3", "opium4", "opium5") + ADD_TRAIT(src, TRAIT_CONTRABAND, INNATE_TRAIT) + +/obj/item/food/drug/opium/raw/Initialize(mapload, potency) // Randomizes amount depending upon potency. + . = ..() + reagents.clear_reagents() + var/mult = max(potency / 20, 1) // 20 = base, 100 = 5x, 200 = 10x + reagents.add_reagent(/datum/reagent/medicine/morphine, (rand(4, 25) / 10) * mult) + reagents.add_reagent(/datum/reagent/consumable/sugar, rand(1, 7) / 10) + +/obj/item/food/drug/opium/raw/interact_with_atom(obj/item/I, mob/user) // allows for combining opium up to 10u, refining it until rich and fragrant. + if(istype(I, /obj/item/food/drug/opium/raw)) + var/obj/item/food/drug/opium/raw/other = I + + var/current = reagents.get_reagent_amount(/datum/reagent/medicine/morphine) + if(current >= 10) + to_chat(user, span_notice("This chunk can't hold any more.")) + return TRUE + + var/capacity_left = 10 - current + var/transferred = other.reagents.trans_to(src, capacity_left) + + if(transferred > 0) + var/overflow = reagents.get_reagent_amount(/datum/reagent/medicine/morphine) - 10 + if(overflow > 0) + reagents.trans_to(other, overflow) + + to_chat(user, span_notice("You press the chunks of opium together, enriching them.")) + if(!other.reagents.total_volume) + qdel(other) + else + to_chat(user, span_notice("The opium cannot be pressed together further.")) + + return TRUE + + return ..() diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm index 9c0a95877aac..219e1a3e144d 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -17,6 +17,9 @@ var/prox_check = TRUE //If the emag requires you to be in range var/type_blacklist //List of types that require a specialized emag +/obj/item/card/emag/get_displayed_name(honorifics = FALSE) + return name // That's Grey Tider (as "cryptographic sequencer") + /obj/item/card/emag/attack_self(mob/user) //for traitors with balls of plastitanium if(Adjacent(user)) user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [name]."), span_notice("You show [src].")) @@ -99,6 +102,9 @@ /// Whether we are exploding var/exploding = FALSE +/obj/item/card/emagfake/get_displayed_name(honorifics = FALSE) + return name // That's Grey Tider (as "cryptographic sequencer") + /obj/item/card/emagfake/attack_self(mob/user) //for assistants with balls of plasteel if(Adjacent(user)) user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [name]."), span_notice("You show [src].")) diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm index d174480f8cfa..604b6c3c5abe 100644 --- a/code/game/objects/items/food/_food.dm +++ b/code/game/objects/items/food/_food.dm @@ -8,6 +8,7 @@ icon_state = null lefthand_file = 'icons/mob/inhands/items/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/food_righthand.dmi' + abstract_type = /obj/item/food obj_flags = UNIQUE_RENAME grind_results = list() material_flags = MATERIAL_NO_EDIBILITY @@ -152,7 +153,7 @@ /// This proc handles the microwave component. Overwrite if you want special microwave results. /// By default, all food is microwavable. However, they will be microwaved into a bad recipe (burnt mess). /obj/item/food/proc/make_microwaveable() - AddElement(/datum/element/microwavable, /obj/item/food/badrecipe, skip_matcheck = TRUE) + AddElement(/datum/element/microwavable, /obj/item/food/badrecipe, bad_recipe = TRUE) ///This proc handles trash components, overwrite this if you want the object to spawn trash /obj/item/food/proc/make_leave_trash() diff --git a/code/game/objects/items/food/bait.dm b/code/game/objects/items/food/bait.dm index 6d4df7fc7bc4..53a7cbe47ce6 100644 --- a/code/game/objects/items/food/bait.dm +++ b/code/game/objects/items/food/bait.dm @@ -2,6 +2,7 @@ name = "this is bait" desc = "you got baited." icon = 'icons/obj/fishing.dmi' + abstract_type = /obj/item/food/bait /// Quality trait of this bait var/bait_quality = TRAIT_BASIC_QUALITY_BAIT /// Icon state added to main fishing rod icon when this bait is equipped diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm index d16d90b5dcfb..3e62fb3d4851 100644 --- a/code/game/objects/items/food/bread.dm +++ b/code/game/objects/items/food/bread.dm @@ -4,6 +4,7 @@ name = "bread?" desc = "You shouldn't see this, call the coders." icon = 'icons/obj/food/burgerbread.dmi' + abstract_type = /obj/item/food/bread max_volume = 80 tastes = list("bread" = 10) foodtypes = GRAIN @@ -29,6 +30,7 @@ name = "breadslice?" desc = "You shouldn't see this, call the coders." icon = 'icons/obj/food/burgerbread.dmi' + abstract_type = /obj/item/food/breadslice foodtypes = GRAIN food_flags = FOOD_FINGER_FOOD eat_time = 0.5 SECONDS diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm index 9f45ac42b686..91340435ab63 100644 --- a/code/game/objects/items/food/cake.dm +++ b/code/game/objects/items/food/cake.dm @@ -1,5 +1,6 @@ /obj/item/food/cake icon = 'icons/obj/food/piecake.dmi' + abstract_type = /obj/item/food/cake bite_consumption = 3 max_volume = 80 food_reagents = list( @@ -24,6 +25,7 @@ /obj/item/food/cakeslice icon = 'icons/obj/food/piecake.dmi' + abstract_type = /obj/item/food/cakeslice food_reagents = list( /datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1, diff --git a/code/game/objects/items/food/cheese.dm b/code/game/objects/items/food/cheese.dm index 6604040af22a..74af37742e7c 100644 --- a/code/game/objects/items/food/cheese.dm +++ b/code/game/objects/items/food/cheese.dm @@ -6,6 +6,7 @@ /obj/item/food/cheese name = "the concept of cheese" desc = "This probably shouldn't exist." + abstract_type = /obj/item/food/cheese tastes = list("cheese" = 1) food_reagents = list(/datum/reagent/consumable/nutriment/fat = 3) foodtypes = DAIRY diff --git a/code/game/objects/items/food/donkpocket.dm b/code/game/objects/items/food/donkpocket.dm index a75f71a0647c..1372c8a399f5 100644 --- a/code/game/objects/items/food/donkpocket.dm +++ b/code/game/objects/items/food/donkpocket.dm @@ -29,7 +29,7 @@ AddComponent(/datum/component/bakeable, warm_type, rand(baking_time_short, baking_time_long), positive_result, TRUE, list(/datum/reagent/medicine/omnizine = omnizine_to_add)) /obj/item/food/donkpocket/make_microwaveable() - AddElement(/datum/element/microwavable, warm_type, string_assoc_list(list(/datum/reagent/medicine/omnizine = omnizine_to_add)), !positive_result) + AddElement(/datum/element/microwavable, warm_type, string_assoc_list(list(/datum/reagent/medicine/omnizine = omnizine_to_add)), bad_recipe = !positive_result) /obj/item/food/donkpocket/warm name = "warm Donk-pocket" diff --git a/code/game/objects/items/food/donuts.dm b/code/game/objects/items/food/donuts.dm index ce43431e2b66..3015ad05c51c 100644 --- a/code/game/objects/items/food/donuts.dm +++ b/code/game/objects/items/food/donuts.dm @@ -4,6 +4,7 @@ name = "donut" desc = "Goes great with robust coffee." icon = 'icons/obj/food/donuts.dmi' + abstract_type = /obj/item/food/donut inhand_icon_state = "donut1" bite_consumption = 5 food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/sugar = 3) @@ -377,6 +378,7 @@ /obj/item/food/donut/jelly/slimejelly name = "jelly donut" desc = "You jelly?" + abstract_type = /obj/item/food/donut/jelly/slimejelly extra_reagent = /datum/reagent/toxin/slimejelly foodtypes = GRAIN|DAIRY|JUNKFOOD|SUGAR|FRIED|BREAKFAST|TOXIC diff --git a/code/game/objects/items/food/lizard.dm b/code/game/objects/items/food/lizard.dm index ea614d0c7430..4b6230303a2a 100644 --- a/code/game/objects/items/food/lizard.dm +++ b/code/game/objects/items/food/lizard.dm @@ -578,6 +578,7 @@ /obj/item/food/pizza/flatbread icon = 'icons/obj/food/lizard.dmi' icon_state = null + abstract_type = /obj/item/food/pizza/flatbread slice_type = null /obj/item/food/pizza/flatbread/rustic diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 42d7b4dfb62c..d4230ecc9d52 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -35,6 +35,16 @@ eatverbs = list("bite", "chew", "gnaw", "swallow", "chomp") w_class = WEIGHT_CLASS_SMALL starting_reagent_purity = 1.0 + var/fillet_name = "%NAME fillet" + +/obj/item/food/fishmeat/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_FOOD_DONT_INHERIT_NAME_FROM_PROCESSED, INNATE_TRAIT) + +/obj/item/food/fishmeat/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom) + . = ..() + name = replacetext(fillet_name, "%NAME", original_atom.name) + material_flags &= ~MATERIAL_ADD_PREFIX //don't double down on material prefixes /obj/item/food/fishmeat/quality name = "quality fish fillet" @@ -105,7 +115,7 @@ AddComponent(/datum/component/grillable, /obj/item/food/grilled_moonfish, rand(40 SECONDS, 50 SECONDS), TRUE, TRUE) /obj/item/food/fishmeat/gunner_jellyfish - name = "filleted gunner jellyfish" + name = "gunner jellyfish fillet" desc = "A gunner jellyfish with the stingers removed. Mildly hallucinogenic when raw." icon = 'icons/obj/food/lizard.dmi' icon_state = "jellyfish_fillet" @@ -115,10 +125,7 @@ ///Premade gunner jellyfish fillets from supply orders. Contains the halluginogen that'd be normally from the fish trait. /obj/item/food/fishmeat/gunner_jellyfish/supply - -/obj/item/food/fishmeat/gunner_jellyfish/supply/Initialize(mapload) - food_reagents[/datum/reagent/toxin/mindbreaker/fish] = 2 - return ..() + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/toxin/mindbreaker/fish = 2) /obj/item/food/fishmeat/armorfish name = "cleaned armorfish" @@ -126,6 +133,7 @@ icon = 'icons/obj/food/lizard.dmi' icon_state = "armorfish_fillet" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 3) + fillet_name = "cleaned %NAME" ///donkfish fillets. The yuck reagent is now added by the fish trait of the same name. /obj/item/food/fishmeat/donkfish @@ -140,6 +148,7 @@ icon = 'icons/obj/food/martian.dmi' icon_state = "octopus_fillet" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 3) + fillet_name = "%NAME tentacle" /obj/item/food/fishmeat/octopus/make_grillable() AddComponent(/datum/component/grillable, /obj/item/food/grilled_octopus, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE) @@ -882,6 +891,7 @@ trash_type = /obj/item/stack/rods icon = 'icons/obj/food/meat.dmi' icon_state = "kebab" + abstract_type = /obj/item/food/kebab w_class = WEIGHT_CLASS_NORMAL food_reagents = list(/datum/reagent/consumable/nutriment/protein = 14) tastes = list("meat" = 3, "metal" = 1) diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm index e178ee467797..6e3f124cc8ea 100644 --- a/code/game/objects/items/food/meatslab.dm +++ b/code/game/objects/items/food/meatslab.dm @@ -2,6 +2,7 @@ custom_materials = list(/datum/material/meat = MEATSLAB_MATERIAL_AMOUNT) w_class = WEIGHT_CLASS_SMALL icon = 'icons/obj/food/meat.dmi' + abstract_type = /obj/item/food/meat var/subjectname = "" var/subjectjob = null var/blood_decal_type = /obj/effect/decal/cleanable/blood @@ -67,6 +68,9 @@ /obj/item/food/meat/slab/human/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/plain/human, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut") +/obj/item/food/meat/slab/human/mutant + abstract_type = /obj/item/food/meat/slab/human/mutant + /obj/item/food/meat/slab/human/mutant/slime icon_state = "slimemeat" desc = "Because jello wasn't offensive enough to vegans." @@ -153,6 +157,9 @@ /obj/item/food/meat/slab/human/mutant/skeleton/make_processable() return //skeletons don't have cutlets +/obj/item/food/meat/slab/human/mutant/skeleton/make_grillable() + return + /obj/item/food/meat/slab/human/mutant/zombie name = "meat (rotten)" icon_state = "rottenmeat" diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 6d957f4c5f2a..97b59fa0475a 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -194,7 +194,7 @@ /obj/item/food/badrecipe/Initialize(mapload) . = ..() RegisterSignal(src, COMSIG_ITEM_GRILL_PROCESS, PROC_REF(OnGrill)) - RegisterSignals(src, list(COMSIG_ITEM_GRILLED_RESULT, COMSIG_ITEM_BAKED_RESULT, COMSIG_ITEM_MICROWAVE_COOKED_FROM), PROC_REF(convert_to_bad_food)) + RegisterSignals(src, list(COMSIG_ITEM_GRILLED_RESULT, COMSIG_ITEM_BAKED_RESULT, COMSIG_ITEM_MICROWAVE_COOKED, COMSIG_OBJ_DECOMPOSITION_RESULT), PROC_REF(convert_to_bad_food)) if(stink_particles) add_shared_particles(stink_particles) diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm index 4f90b9d7aa10..411c76097d51 100644 --- a/code/game/objects/items/food/pizza.dm +++ b/code/game/objects/items/food/pizza.dm @@ -2,6 +2,7 @@ /obj/item/food/pizza name = "pizza" icon = 'icons/obj/food/pizza.dmi' + abstract_type = /obj/item/food/pizza w_class = WEIGHT_CLASS_NORMAL max_volume = 80 icon_state = "pizzamargherita" @@ -124,6 +125,7 @@ /obj/item/food/pizzaslice name = "pizza slice" icon = 'icons/obj/food/pizza.dmi' + abstract_type = /obj/item/food/pizzaslice food_reagents = list(/datum/reagent/consumable/nutriment = 5) icon_state = "pizzamargheritaslice" foodtypes = GRAIN diff --git a/code/game/objects/items/food/salad.dm b/code/game/objects/items/food/salad.dm index ccd00ce505e1..58e40439d150 100644 --- a/code/game/objects/items/food/salad.dm +++ b/code/game/objects/items/food/salad.dm @@ -2,6 +2,7 @@ ////////////////////////////////////////////SALAD//////////////////////////////////////////// /obj/item/food/salad icon = 'icons/obj/food/soupsalad.dmi' + abstract_type = /obj/item/food/salad trash_type = /obj/item/reagent_containers/cup/bowl bite_consumption = 3 w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/food/soup.dm b/code/game/objects/items/food/soup.dm index 939de3bd04f6..ae0d900f9a7a 100644 --- a/code/game/objects/items/food/soup.dm +++ b/code/game/objects/items/food/soup.dm @@ -1,6 +1,7 @@ /obj/item/food/bowled w_class = WEIGHT_CLASS_NORMAL icon = 'icons/obj/food/soupsalad.dmi' + abstract_type = /obj/item/food/bowled bite_consumption = 5 max_volume = 80 foodtypes = NONE @@ -24,7 +25,7 @@ desc = "A wish come true!" reagents.add_reagent(/datum/reagent/consumable/nutriment, 9) reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 1) - + /obj/item/food/bowled/mammi name = "Mammi" desc = "A bowl of mushy bread and milk. It reminds you, not too fondly, of a bowel movement." diff --git a/code/game/objects/items/food/spaghetti.dm b/code/game/objects/items/food/spaghetti.dm index 8a1e6e363c3a..00b5e833917d 100644 --- a/code/game/objects/items/food/spaghetti.dm +++ b/code/game/objects/items/food/spaghetti.dm @@ -1,6 +1,7 @@ ///spaghetti prototype used by all subtypes /obj/item/food/spaghetti icon = 'icons/obj/food/spaghetti.dmi' + abstract_type = /obj/item/food/spaghetti food_reagents = list( /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1, diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index 866945d9440f..1843431f3d2a 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -111,13 +111,7 @@ var/static/list/obj/item/possible_gifts = null if(isnull(possible_gifts)) - possible_gifts = list() - for(var/type in subtypesof(/obj/item)) - var/obj/item/thing = type - if(!initial(thing.icon_state) || !initial(thing.inhand_icon_state) || (initial(thing.item_flags) & ABSTRACT)) - continue - - possible_gifts += type + possible_gifts = get_sane_item_types(/obj/item) var/gift_type = pick(possible_gifts) return gift_type diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index f7cb31801e1d..0210ef078a07 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -9,6 +9,7 @@ */ /obj/item/restraints + abstract_type = /obj/item/restraints breakouttime = 1 MINUTES dye_color = DYE_PRISONER icon = 'icons/obj/weapons/restraints.dmi' diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index bea9ebc969ef..4c17f8c9f687 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -12,6 +12,7 @@ icon = 'icons/obj/service/kitchen.dmi' lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' + abstract_type = /obj/item/kitchen worn_icon_state = "kitchen_tool" /obj/item/kitchen/Initialize(mapload) diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index 904a9e21d876..9ad0c206bbca 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -39,6 +39,7 @@ w_class = WEIGHT_CLASS_NORMAL maxcharge = STANDARD_CELL_CHARGE * 60 // initial charge reduced on init chargerate = STANDARD_CELL_RATE * 0.3 //charging is about 70% less efficient than lithium batteries. + emp_damage_modifier = 4 // 15 shots. charge_light_type = null connector_type = "leadacid" grind_results = list(/datum/reagent/lead = 15, /datum/reagent/toxin/acid = 15, /datum/reagent/water = 20) diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index e89391f78872..f798fa66ad84 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -12,223 +12,178 @@ starting_author = "Farmer John" // Whoever wrote the paper or book, can be changed by pen or PC. It is not automatically assigned. starting_title = "The Human Harvest: From Seed to Market" //book contents below - starting_content = {" - - - - - -

Growing Humans

- - Why would you want to grow humans? Well, I'm expecting most readers to be in the slave trade, but a few might actually - want to revive fallen comrades. Growing pod people is actually quite simple: -

-

    -
  1. Find a dead person who is in need of revival.
  2. -
  3. Take a blood sample with a syringe (samples of their blood taken BEFORE they died will also work).
  4. -
  5. Inject a packet of replica pod seeds (which can be acquired by either mutating cabbages into replica pods (and then harvesting said replica pods) or by purchasing them from certain corporate entities) with the blood sample.
  6. -
  7. It is imperative to understand that injecting the replica pod plant with blood AFTER it has been planted WILL NOT WORK; you have to inject the SEED PACKET, NOT the TRAY.
  8. -
  9. Plant the seeds.
  10. -
  11. Tend to the replica pod's water and nutrition levels until it is time to harvest the podcloned humanoid.
  12. -
  13. Note that if the corpse's mind (or spirit, or soul, or whatever the hell your local chaplain calls it) is already in a new body or has left this plane of existence entirely, you will just receive seed packets upon harvesting the replica pod plant, not a podperson.
  14. -
-

- It really is that easy! Good luck! - - - - "} + starting_content = "\ +

Growing Humans

\ + \ + Why would you want to grow humans? Well, I'm expecting most readers to be in the slave trade, but a few might actually\ + want to revive fallen comrades. Growing pod people is actually quite simple:\ +

\ +

    \ +
  1. Find a dead person who is in need of revival.
  2. \ +
  3. Take a blood sample with a syringe (samples of their blood taken BEFORE they died will also work).
  4. \ +
  5. Inject a packet of replica pod seeds (which can be acquired by either mutating cabbages into replica pods (and then harvesting said replica pods) or by purchasing them from certain corporate entities) with the blood sample.
  6. \ +
  7. It is imperative to understand that injecting the replica pod plant with blood AFTER it has been planted WILL NOT WORK; you have to inject the SEED PACKET, NOT the TRAY.
  8. \ +
  9. Plant the seeds.
  10. \ +
  11. Tend to the replica pod's water and nutrition levels until it is time to harvest the podcloned humanoid.
  12. \ +
  13. Note that if the corpse's mind (or spirit, or soul, or whatever the hell your local chaplain calls it) is already in a new body or has left this plane of existence entirely, you will just receive seed packets upon harvesting the replica pod plant, not a podperson.
  14. \ +
\ + It really is that easy! Good luck!\ + \ + " /obj/item/book/manual/ripley_build_and_repair name = "APLU \"Ripley\" Construction and Operation Manual" icon_state ="book" starting_author = "Weyland-Yutani Corp" starting_title = "APLU \"Ripley\" Construction and Operation Manual" - starting_content = {" - - - - - -
- Weyland-Yutani - Building Better Worlds -

Autonomous Power Loader Unit \"Ripley\"

-
-

Specifications:

- - -

Construction:

-
    -
  1. Connect all exosuit parts to the chassis frame
  2. -
  3. Connect all hydraulic fittings and tighten them up with a wrench
  4. -
  5. Adjust the servohydraulics with a screwdriver
  6. -
  7. Wire the chassis. (Cable is not included.)
  8. -
  9. Use the wirecutters to remove the excess cable if needed.
  10. -
  11. Install the central control module (Not included. Use supplied datadisk to create one).
  12. -
  13. Secure the mainboard with a screwdriver.
  14. -
  15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
  16. -
  17. Secure the peripherals control module with a screwdriver
  18. -
  19. Install the internal armor plating (Not included due to Nanotrasen regulations. Can be made using 5 iron sheets.)
  20. -
  21. Secure the internal armor plating with a wrench
  22. -
  23. Weld the internal armor plating to the chassis
  24. -
  25. Install the external reinforced armor plating (Not included due to Nanotrasen regulations. Can be made using 5 reinforced iron sheets.)
  26. -
  27. Secure the external reinforced armor plating with a wrench
  28. -
  29. Weld the external reinforced armor plating to the chassis
  30. -
- - - -

Operation

- Please consult the Nanotrasen compendium "Robotics for Dummies". - "} + starting_content = "\ +
\ + Weyland-Yutani - Building Better Worlds\ +

Autonomous Power Loader Unit \"Ripley\"

\ +
\ +

Specifications:

\ + \ + \ +

Construction:

\ +
    \ +
  1. Connect all exosuit parts to the chassis frame
  2. \ +
  3. Connect all hydraulic fittings and tighten them up with a wrench
  4. \ +
  5. Adjust the servohydraulics with a screwdriver
  6. \ +
  7. Wire the chassis. (Cable is not included.)
  8. \ +
  9. Use the wirecutters to remove the excess cable if needed.
  10. \ +
  11. Install the central control module (Not included. Use supplied datadisk to create one).
  12. \ +
  13. Secure the mainboard with a screwdriver.
  14. \ +
  15. Install the peripherals control module (Not included. Use supplied datadisk to create one).
  16. \ +
  17. Secure the peripherals control module with a screwdriver
  18. \ +
  19. Install the internal armor plating (Not included due to Nanotrasen regulations. Can be made using 5 iron sheets.)
  20. \ +
  21. Secure the internal armor plating with a wrench
  22. \ +
  23. Weld the internal armor plating to the chassis
  24. \ +
  25. Install the external reinforced armor plating (Not included due to Nanotrasen regulations. Can be made using 5 reinforced iron sheets.)
  26. \ +
  27. Secure the external reinforced armor plating with a wrench
  28. \ +
  29. Weld the external reinforced armor plating to the chassis
  30. \ + \ +

    Operation

    \ + Please consult the Nanotrasen compendium \"Robotics for Dummies\".\ + " /obj/item/book/manual/chef_recipes name = "Chef Recipes" icon_state = "cooked_book" starting_author = "Lord Frenrir Cageth" starting_title = "Chef Recipes" - starting_content = {" - - - - - - -

    Food for Dummies

    - Here is a guide on basic food recipes and also how to not poison your customers accidentally. - - -

    Basic ingredients preparation:

    - - Dough: 10u water + 15u flour for simple dough.
    - 6u egg yolk + 12 egg white + 15u flour + 5u sugar for cake batter.
    - Doughs can be transformed by using a knife and rolling pin.
    - All doughs can be microwaved.
    - Bowl: Add water to it for soup preparation.
    - Meat: Microwave it, process it, slice it into microwavable cutlets with your knife, or use it raw.
    - Cheese: Add 5u universal enzyme (catalyst) to milk and soy milk to prepare cheese (sliceable) and tofu.
    - Rice: Mix 10u rice with 10u water in a bowl then microwave it. - -

    Custom food:

    - Add ingredients to a base item to prepare a custom meal.
    - The bases are:
    - - bun (burger)
    - - breadslices(sandwich)
    - - plain bread
    - - plain pie
    - - vanilla cake
    - - empty bowl (salad)
    - - bowl with 10u water (soup)
    - - boiled spaghetti
    - - pizza bread
    - - metal rod (kebab) - -

    Table Craft:

    - Put ingredients on table, then click and drag the table onto yourself to see what recipes you can prepare. - -

    Microwave:

    - Use it to cook or boil food ingredients (meats, doughs, egg, spaghetti, donkpocket, etc...). - It can cook multiple items at once. - -

    Processor:

    - Use it to process certain ingredients (meat into meatballs, doughslice into spaghetti, potato into fries,etc...) - -

    Gibber:

    - Stuff an animal in it to grind it into meat. - -

    Meat spike:

    - Stick an animal on it then begin collecting its meat. - - -

    Example recipes:

    - Vanilla Cake: Microwave cake batter.
    - Burger: 1 bun + 1 meat steak
    - Bread: Microwave dough.
    - Waffles: 2 pastry base
    - Popcorn: Microwave corn.
    - Meat Steak: Microwave meat.
    - Meat Pie: 1 plain pie + 1u black pepper + 1u salt + 2 meat cutlets
    - Boiled Spagetti: Microwave spaghetti.
    - Donuts: 1u sugar + 1 pastry base
    - Fries: Process potato. - -

    Sharing your food:

    - You can put your meals on your kitchen counter or load them in the snack vending machines. - - - "} + starting_content = "\ + \ +

    Food for Dummies

    \ + Here is a guide on basic food recipes and also how to not poison your customers accidentally.\ + \ + \ +

    Basic ingredients preparation:

    \ + \ + Dough: 10u water + 15u flour for simple dough.
    \ + 6u egg yolk + 12 egg white + 15u flour + 5u sugar for cake batter.
    \ + Doughs can be transformed by using a knife and rolling pin.
    \ + All doughs can be baked.
    \ + Bowl: Add recipe ingredients and liquid to make soups.
    \ + Meat: Grill it, process it, slice it into grillable cutlets with your knife, or use it raw.
    \ + Cheese: Add 5u universal enzyme (catalyst) to milk and soy milk to prepare cheese (sliceable) and tofu.
    \ + Rice: Mix 10u rice with 10u water then microwave it.\ + \ +

    Custom food:

    \ + Add ingredients to a base item to prepare a custom meal.
    \ + The bases are:
    \ + - bun (burger)
    \ + - breadslices(sandwich)
    \ + - plain bread
    \ + - vanilla cake
    \ + - empty bowl (salad)
    \ + - bowl with liquid (soup)
    \ + - boiled spaghetti
    \ + - pizza bread
    \ + - iron rod (kebab)
    \ + - plain pie
    \ + - seaweed sheet(sushi)
    \ + \ +

    Cooking menu:

    \ + Open the crafting menu and click the cooking tab to see the list of cookable food.\ + \ +

    Microwave:

    \ + Use it to cook or boil food ingredients (egg, spaghetti, donkpocket, etc...).\ + It can cook multiple items at once.\ + \ +

    Processor:

    \ + Use it to process certain ingredients (meat into meatballs, doughslice into spaghetti, etc...)\ + \ +

    Gibber:

    \ + Stuff an animal in it to grind it into meat.\ + \ +

    Meat spike:

    \ + Stick an animal on it then begin collecting its meat.\ + \ + \ +

    Example recipes:

    \ + Vanilla Cake: Bake cake base.
    \ + Burger: 1 bun + 1 patty
    \ + Bread: Bake dough.
    \ + Waffles: 2 pastry base
    \ + Popcorn: Microwave corn.
    \ + Meat Steak: Grill meat.
    \ + Meat Pie: 1 plain pie + 1u black pepper + 1u salt + 1 meat steak
    \ + Boiled Spagetti: Microwave spaghetti.
    \ + Donuts: 1u sugar + 1 pastry base
    \ + Fries: Cut and process potato.\ + \ +

    Sharing your food:

    \ + You can put your meals on your kitchen counter or load them in the snack vending machines.\ + " /obj/item/book/manual/nuclear name = "Fission Mailed: Nuclear Sabotage 101" icon_state ="bookNuclear" starting_author = "Syndicate" starting_title = "Fission Mailed: Nuclear Sabotage 101" - starting_content = {" - - - - - Nuclear Explosives 101:
    - Hello and thank you for choosing the Syndicate for your nuclear information needs.
    - Today's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.
    - First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.
    - Pressing any button on the compacted bomb will cause it to extend and bolt itself into place.
    - If this is done to unbolt it one must completely log in which at this time may not be possible.
    - To make the nuclear device functional:
    -
  31. Place the nuclear device in the designated detonation zone.
  32. -
  33. Extend and anchor the nuclear device from its interface.
  34. -
  35. Insert the nuclear authorisation disk into slot.
  36. -
  37. Type numeric authorisation code into the keypad. This should have been provided. Note: If you make a mistake press R to reset the device. -
  38. Press the E button to log onto the device.
  39. - You now have activated the device. To deactivate the buttons at anytime for example when you've already prepped the bomb for detonation remove the auth disk OR press the R on the keypad.
    - Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option.
    - Note: Nanotrasen is a pain in the neck.
    - Toggle off the SAFETY.
    - Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.
    - So use the - - and + + to set a det time between 5 seconds and 10 minutes.
    - Then press the timer toggle button to start the countdown.
    - Now remove the auth. disk so that the buttons deactivate.
    - Note: THE BOMB IS STILL SET AND WILL DETONATE
    - Now before you remove the disk if you need to move the bomb you can:
    - Toggle off the anchor, move it, and re-anchor.

    - Good luck. Remember the order:
    - Disk, Code, Safety, Timer, Disk, RUN!
    - Intelligence Analysts believe that normal Nanotrasen procedure is for the Captain to secure the nuclear authorisation disk.
    - Good luck! - - "} + starting_content = "\ + Nuclear Explosives 101:
    \ + Hello and thank you for choosing the Syndicate for your nuclear information needs.
    \ + Today's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.
    \ + First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.
    \ + Pressing any button on the compacted bomb will cause it to extend and bolt itself into place.
    \ + If this is done to unbolt it one must completely log in which at this time may not be possible.
    \ + To make the nuclear device functional:
    \ +
  40. Place the nuclear device in the designated detonation zone.
  41. \ +
  42. Extend and anchor the nuclear device from its interface.
  43. \ +
  44. Insert the nuclear authorisation disk into slot.
  45. \ +
  46. Type numeric authorisation code into the keypad. This should have been provided. Note: If you make a mistake press R to reset the device.\ +
  47. Press the E button to log onto the device.
  48. \ + You now have activated the device. To deactivate the buttons at anytime for example when you've already prepped the bomb for detonation remove the auth disk OR press the R on the keypad.
    \ + Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option.
    \ + Note: Nanotrasen is a pain in the neck.
    \ + Toggle off the SAFETY.
    \ + Note: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.
    \ + So use the - - and + + to set a det time between 5 seconds and 10 minutes.
    \ + Then press the timer toggle button to start the countdown.
    \ + Now remove the auth. disk so that the buttons deactivate.
    \ + Note: THE BOMB IS STILL SET AND WILL DETONATE
    \ + Now before you remove the disk if you need to move the bomb you can:
    \ + Toggle off the anchor, move it, and re-anchor.

    \ + Good luck. Remember the order:
    \ + Disk, Code, Safety, Timer, Disk, RUN!
    \ + Intelligence Analysts believe that normal Nanotrasen procedure is for the Captain to secure the nuclear authorisation disk.
    \ + Good luck!\ + " diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index 5e0e0cdaa752..5c883ddda084 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -784,7 +784,8 @@ if (!cell) return if (!(. & EMP_PROTECT_SELF)) - deductcharge(STANDARD_CELL_CHARGE / severity) + cell.emp_act(severity) + if (cell.charge >= cell_hit_cost) var/scramble_time scramble_mode() diff --git a/code/game/objects/items/melee/chainofcommand.dm b/code/game/objects/items/melee/chainofcommand.dm new file mode 100644 index 000000000000..8009b031df4c --- /dev/null +++ b/code/game/objects/items/melee/chainofcommand.dm @@ -0,0 +1,82 @@ +/obj/item/melee/chainofcommand + name = "chain of command" + desc = "A tool used by great men to placate the frothing masses. Can be used to hasten allies with right-click." + icon = 'icons/obj/weapons/whip.dmi' + icon_state = "chain" + inhand_icon_state = "chain" + worn_icon_state = "whip" + icon_angle = -90 + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + obj_flags = CONDUCTS_ELECTRICITY + slot_flags = ITEM_SLOT_BELT + force = 10 + throwforce = 7 + demolition_mod = 0.25 + wound_bonus = 15 + exposed_wound_bonus = 10 + w_class = WEIGHT_CLASS_NORMAL + attack_verb_continuous = list("flogs", "whips", "lashes", "disciplines") + attack_verb_simple = list("flog", "whip", "lash", "discipline") + hitsound = 'sound/items/weapons/chainhit.ogg' + custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + +/obj/item/melee/chainofcommand/Initialize(mapload) + . = ..() + register_item_context() + +/obj/item/melee/chainofcommand/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) + . = NONE + if(isliving(target)) + context[SCREENTIP_CONTEXT_RMB] = "Hasten" + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/melee/chainofcommand/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + return OXYLOSS + +/obj/item/melee/chainofcommand/attack_secondary(mob/living/victim, mob/living/user, list/modifiers, list/attack_modifiers) + . = ..() + + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + if(victim == user) + to_chat(user, span_warning("You consider lashing yourself, but hesitate at the thought of how much it would hurt.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + user.do_attack_animation(victim) + playsound(victim, 'sound/items/weapons/whip.ogg', 50, TRUE, -1) + victim.apply_status_effect(/datum/status_effect/speed_boost/commanded) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/datum/status_effect/speed_boost/commanded + id = "commanded" + status_type = STATUS_EFFECT_REFRESH + alert_type = /atom/movable/screen/alert/status_effect/commanded + move_datum = /datum/movespeed_modifier/status_speed_boost/commanded + duration = 7 SECONDS + +/datum/movespeed_modifier/status_speed_boost/commanded + multiplicative_slowdown = -0.20 + +/datum/actionspeed_modifier/commanded + multiplicative_slowdown = -0.65 + +/atom/movable/screen/alert/status_effect/commanded + name = "Commanded" + desc = "You are inspired to do things faster!" + icon_state = "commanded" + +/obj/item/melee/chainofcommand/tailwhip + name = "liz o' nine tails" + desc = "A whip fashioned from the severed tails of lizards." + icon_state = "tailwhip" + inhand_icon_state = "tailwhip" + item_flags = NONE + +/obj/item/melee/chainofcommand/tailwhip/kitty + name = "cat o' nine tails" + desc = "A whip fashioned from the severed tails of cats." + icon_state = "catwhip" + inhand_icon_state = "catwhip" diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 1e74d8b94b8d..f5005a23b613 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -1,5 +1,6 @@ /obj/item/melee/energy icon = 'icons/obj/weapons/transforming_energy.dmi' + abstract_type = /obj/item/melee/energy icon_angle = -45 max_integrity = 200 armor_type = /datum/armor/melee_energy diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 67cb04a614d5..feac13198ce6 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -1,65 +1,8 @@ // Deprecated, you do not need to use this type for melee weapons. /obj/item/melee + abstract_type = /obj/item/melee item_flags = NEEDS_PERMIT -/obj/item/melee/chainofcommand - name = "chain of command" - desc = "A tool used by great men to placate the frothing masses. Can be used to hasten allies with right-click." - icon = 'icons/obj/weapons/whip.dmi' - icon_state = "chain" - inhand_icon_state = "chain" - worn_icon_state = "whip" - icon_angle = -90 - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - obj_flags = CONDUCTS_ELECTRICITY - slot_flags = ITEM_SLOT_BELT - force = 10 - throwforce = 7 - demolition_mod = 0.25 - wound_bonus = 15 - exposed_wound_bonus = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb_continuous = list("flogs", "whips", "lashes", "disciplines") - attack_verb_simple = list("flog", "whip", "lash", "discipline") - hitsound = 'sound/items/weapons/chainhit.ogg' - custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) - ///Does this chain allow you to speed people up with right click? - var/can_hasten = TRUE - -/obj/item/melee/chainofcommand/suicide_act(mob/living/user) - user.visible_message(span_suicide("[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return OXYLOSS - -/obj/item/melee/chainofcommand/attack_secondary(mob/living/victim, mob/living/user, list/modifiers, list/attack_modifiers) - . = ..() - - if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - - if(victim == user) - to_chat(user, span_warning("You consider lashing yourself, but hesitate at the thought of how much it would hurt.")) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - - playsound(victim, 'sound/items/weapons/whip.ogg', 50, TRUE, -1) - victim.apply_status_effect(/datum/status_effect/speed_boost/commanded) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - -/datum/status_effect/speed_boost/commanded - id = "commanded" - status_type = STATUS_EFFECT_REFRESH - alert_type = /atom/movable/screen/alert/status_effect/commanded - move_datum = /datum/movespeed_modifier/status_speed_boost/minor - duration = 7 SECONDS - -/datum/movespeed_modifier/status_speed_boost/minor - multiplicative_slowdown = -0.20 - -/atom/movable/screen/alert/status_effect/commanded - name = "Commanded" - desc = "You are inspired to move faster!" - icon_state = "commanded" - /obj/item/melee/synthetic_arm_blade name = "synthetic arm blade" desc = "A grotesque blade that on closer inspection seems to be made out of synthetic flesh, it still feels like it would hurt very badly as a weapon." diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm index b303f300c6b4..53e5ba0cb7dd 100644 --- a/code/game/objects/items/rcd/RHD.dm +++ b/code/game/objects/items/rcd/RHD.dm @@ -5,6 +5,7 @@ /obj/item/construction name = "not for ingame use" desc = "A device used to rapidly build and deconstruct. Reload with iron, plasteel, glass or compressed matter cartridges." + abstract_type = /obj/item/construction opacity = FALSE density = FALSE anchored = FALSE @@ -199,7 +200,7 @@ if(user) balloon_alert(user, "not enough silo material!") return FALSE - silo_mats.use_materials(list(/datum/material/iron = SILO_USE_AMOUNT), multiplier = amount, action = "build", name = "consume", user_data = ID_DATA(user)) + silo_mats.use_materials(list(/datum/material/iron = SILO_USE_AMOUNT), multiplier = amount, action = "RESTOCKED", name = "x restocked an RCD", user_data = ID_DATA(user)) return TRUE /obj/item/construction/ui_static_data(mob/user) diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 25790cada0ab..0d84fda683f2 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -299,6 +299,7 @@ icon_state = null worn_icon = 'icons/mob/clothing/head/helmet.dmi' inhand_icon_state = null + abstract_type = /obj/item/clothing/head/helmet/plate/crusader/prophet flags_1 = 0 armor_type = /datum/armor/crusader_prophet worn_y_offset = 6 diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index 7d8c2cc9f7f6..d282ae01b7f6 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -11,6 +11,7 @@ /obj/item/borg icon = 'icons/mob/silicon/robot_items.dmi' + abstract_type = /obj/item/borg /// Cost to use the stun arm #define CYBORG_STUN_CHARGE_COST (0.2 * STANDARD_CELL_CHARGE) @@ -401,6 +402,37 @@ COOLDOWN_START(src, alarm_cooldown, HARM_ALARM_NO_SAFETY_COOLDOWN) user.log_message("used an emagged Cyborg Harm Alarm", LOG_ATTACK) +/obj/item/shield_module + name = "Shield Activator" + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "module_miner" + var/active = FALSE + var/mutable_appearance/shield_overlay + +/obj/item/shield_module/Initialize(mapload) + . = ..() + shield_overlay = mutable_appearance('icons/mob/effects/durand_shield.dmi', "borg_shield") + +/obj/item/shield_module/attack_self(mob/living/silicon/borg) + active = !active + if(active) + playsound(src, 'sound/vehicles/mecha/mech_shield_raise.ogg', 50, FALSE) + RegisterSignal(borg, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_shield_overlay_update), override = TRUE) + else + playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE) + UnregisterSignal(borg, COMSIG_ATOM_UPDATE_OVERLAYS) + borg.update_appearance() + +/obj/item/shield_module/cyborg_unequip(mob/living/silicon/robot/borg) + active = FALSE + playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE) + borg.cut_overlay(shield_overlay) + +/obj/item/shield_module/proc/on_shield_overlay_update(atom/source, list/overlays) + SIGNAL_HANDLER + if(active) + overlays += shield_overlay + #undef HUG_MODE_NICE #undef HUG_MODE_HUG #undef HUG_MODE_SHOCK diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm index e7975fac9f2b..88349a65f4d6 100644 --- a/code/game/objects/items/robot/items/storage.dm +++ b/code/game/objects/items/robot/items/storage.dm @@ -253,11 +253,11 @@ ///Apparatus to allow Engineering/Sabo borgs to manipulate any material sheets. /obj/item/borg/apparatus/sheet_manipulator name = "material manipulation apparatus" - desc = "An apparatus for carrying, deploying, and manipulating sheets of material. The device can also carry custom floor tiles and shuttle frame rods." + desc = "An apparatus for carrying, deploying, and manipulating sheets of material. The device can also carry custom floor tiles and various rods." icon_state = "borg_stack_apparatus" storable = list(/obj/item/stack/sheet, /obj/item/stack/tile, - /obj/item/stack/rods/shuttle) + /obj/item/stack/rods) /obj/item/borg/apparatus/sheet_manipulator/Initialize(mapload) update_appearance() @@ -285,21 +285,23 @@ . += "The apparatus currently has [stored] secured." . += span_notice(" Alt-click will drop the currently stored sheets. ") -///Apparatus allowing Engineer/Sabo borgs to manipulate Machine and Computer circuit boards -/obj/item/borg/apparatus/circuit - name = "circuit manipulation apparatus" - desc = "A special apparatus for carrying and manipulating circuit boards and power cells." +///Apparatus allowing Engineer/Sabo borgs to manipulate circuit boards and more +/obj/item/borg/apparatus/engineering + name = "engineering apparatus" + desc = "A special apparatus for carrying and manipulating circuit boards, lights and power cells." icon_state = "borg_hardware_apparatus" - storable = list(/obj/item/circuitboard, + storable = list( + /obj/item/circuitboard, /obj/item/electronics, /obj/item/stock_parts/power_store, + /obj/item/light, ) -/obj/item/borg/apparatus/circuit/Initialize(mapload) +/obj/item/borg/apparatus/engineering/Initialize(mapload) update_appearance() return ..() -/obj/item/borg/apparatus/circuit/update_overlays() +/obj/item/borg/apparatus/engineering/update_overlays() . = ..() var/mutable_appearance/arm = mutable_appearance(icon, "borg_hardware_apparatus_arm1") if(stored) @@ -317,19 +319,19 @@ . += stored_copy . += arm -/obj/item/borg/apparatus/circuit/examine() +/obj/item/borg/apparatus/engineering/examine() . = ..() if(stored) . += "The apparatus currently has [stored] secured." - . += span_notice(" Alt-click will drop the currently stored circuit. ") + . += span_notice(" Alt-click will drop the currently stored item. ") -/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers) +/obj/item/borg/apparatus/engineering/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(atom, /obj/item/ai_module) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails to_chat(user, span_warning("This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up.")) return ..() // stops them from cell interactions with other borgos -/obj/item/borg/apparatus/circuit/interact_with_atom(atom/movable/interacting_with, mob/living/user, list/modifiers) +/obj/item/borg/apparatus/engineering/interact_with_atom(atom/movable/interacting_with, mob/living/user, list/modifiers) if(iscyborg(user) && iscyborg(interacting_with)) balloon_alert(user, "your manipulator isn't dexterous enough to interact with this properly.") return ITEM_INTERACT_FAILURE @@ -347,7 +349,6 @@ /obj/item/reagent_containers/cup/soup_pot, /obj/item/seeds, /obj/item/graft, - /obj/item/fish, ) /obj/item/borg/apparatus/service/Initialize(mapload) diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index 40d044bd5eb3..b77582cb9bd2 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -30,7 +30,7 @@ /// The owner of the dampener var/mob/living/silicon/robot/host = null /// The field - var/datum/proximity_monitor/advanced/projectile_dampener/peaceborg/dampening_field + var/datum/proximity_monitor/advanced/bubble/projectile_dampener/peaceborg/dampening_field /// Energy cost per tracked projectile damage amount per second var/projectile_damage_tick_ecost_coefficient = 10 /// Energy cost per tracked projectile per second diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index db3d0c905889..a44bcd4e4870 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -631,8 +631,8 @@ borg.update_transform(0.5) /obj/item/borg/upgrade/rped - name = "engineering cyborg RPED" - desc = "A rapid part exchange device for the engineering cyborg." + name = "engineering cyborg RPED (expanded)" + desc = "An expanded rapid part exchange device for the engineering cyborg." icon_state = "module_engineer" require_model = TRUE model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) @@ -640,6 +640,27 @@ items_to_add = list(/obj/item/storage/part_replacer/cyborg) +/obj/item/borg/upgrade/smallrped + name = "engineering cyborg RPED" + desc = "A regular version of rapid part exchange device for the engineering cyborg." + icon_state = "module_engineer" + require_model = TRUE + model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) + model_flags = BORG_MODEL_ENGINEERING + items_to_add = list(/obj/item/storage/part_replacer/cyborg/small) + +/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/borg, mob/living/user = usr) + . = ..() + if(!.) + return . + var/obj/item/borg/upgrade/smallrped/upgrade = locate() in borg + var/obj/item/storage/part_replacer/cyborg/small/replacer = locate() in borg.model.modules + if(upgrade) + to_chat(user, span_notice("The old RPED module is now expanded and gets more space")) + replacer.emptyStorage() + replacer.forceMove(get_turf(borg)) + qdel(upgrade) + /obj/item/borg/upgrade/inducer name = "engineering integrated power inducer" desc = "An integrated inducer that can charge a device's internal cell from power provided by the cyborg." @@ -703,15 +724,15 @@ icon_state = "module_honk" new_model = /obj/item/robot_model/clown -/obj/item/borg/upgrade/circuit_app - name = "circuit manipulation apparatus" - desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards." +/obj/item/borg/upgrade/engineering_app + name = "engineering manipulation apparatus" + desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards and other engineering matter." icon_state = "module_engineer" require_model = TRUE model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING - items_to_add = list(/obj/item/borg/apparatus/circuit) + items_to_add = list(/obj/item/borg/apparatus/engineering) /obj/item/borg/upgrade/beaker_app name = "beaker storage apparatus" @@ -723,6 +744,17 @@ items_to_add = list(/obj/item/borg/apparatus/beaker/extra) +/obj/item/borg/upgrade/bs_syringe + name = "advanced syringe" + desc = "Bluespace technology that expands capacity of your standard cyborg syringe." + icon_state = "module_medical" + require_model = TRUE + model_type = list(/obj/item/robot_model/medical) + model_flags = BORG_MODEL_MEDICAL + + items_to_add = list(/obj/item/reagent_containers/syringe/bluespace) + items_to_remove = list(/obj/item/reagent_containers/syringe) + /obj/item/borg/upgrade/drink_app name = "glass storage apparatus" desc = "A supplementary drinking glass storage apparatus for service cyborgs." diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index a2b7642e8dd6..19727a38a23f 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/weapons/shields.dmi' lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' + abstract_type = /obj/item/shield block_chance = 50 slot_flags = ITEM_SLOT_BACK force = 10 @@ -343,7 +344,7 @@ var/effective_block_chance = final_block_chance if(attack_type == OVERWHELMING_ATTACK) effective_block_chance -= 25 - + if(attack_type == PROJECTILE_ATTACK) var/obj/projectile/our_projectile = hitby diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d63bef249caf..1a7f33fa3007 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -1005,26 +1005,6 @@ GLOBAL_LIST_INIT(pizza_sheet_recipes, list( /obj/item/stack/sheet/pizza/five amount = 5 -/obj/item/stack/sheet/sandblock - name = "blocks of sand" - desc = "You're too old to be playing with sandcastles. Now you build... sandstations." - singular_name = "sand block" - icon_state = "sheet-sandstone" - mats_per_unit = list(/datum/material/sand = SHEET_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/sandblock - material_type = /datum/material/sand - material_modifier = 1 - drop_sound = SFX_STONE_DROP - pickup_sound = SFX_STONE_PICKUP - -/obj/item/stack/sheet/sandblock/fifty - amount = 50 -/obj/item/stack/sheet/sandblock/twenty - amount = 20 -/obj/item/stack/sheet/sandblock/five - amount = 5 - - /obj/item/stack/sheet/hauntium name = "haunted sheets" desc = "These sheets seem cursed." diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 43c834ede735..35e8dd161f4d 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -3,6 +3,7 @@ lefthand_file = 'icons/mob/inhands/items/sheets_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/sheets_righthand.dmi' icon_state = "sheet-metal_3" + abstract_type = /obj/item/stack/sheet full_w_class = WEIGHT_CLASS_NORMAL force = 5 throwforce = 5 diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 87d1d7f8d65b..c970f41dab82 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -15,6 +15,7 @@ material_modifier = 0.05 //5%, so that a 50 sheet stack has the effect of 5k materials instead of 100k. max_integrity = 100 item_flags = SKIP_FANTASY_ON_SPAWN + abstract_type = /obj/item/stack /// A list to all recipies this stack item can create. var/list/datum/stack_recipe/recipes /// What's the name of just 1 of this stack. You have a stack of leather, but one piece of leather diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 761940107071..600c7b3e451b 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -165,6 +165,8 @@ return ITEM_INTERACT_BLOCKING if(use(3)) var/obj/item/delivery/big/parcel = new(get_turf(closet.loc)) + var/mob/being_pulled_by = closet.pulledby + being_pulled_by?.start_pulling(parcel) parcel.base_icon_state = closet.delivery_icon parcel.update_icon() parcel.drag_slowdown = closet.drag_slowdown diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 4560172066a7..1ce7b49e879c 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -19,6 +19,7 @@ // Generic non-item /obj/item/storage/bag + abstract_type = /obj/item/storage/bag slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_BULKY storage_type = /datum/storage/bag @@ -29,7 +30,7 @@ icon = 'icons/obj/service/janitor.dmi' icon_state = "trashbag" inhand_icon_state = "trashbag" - worn_icon_state = null + worn_icon_state = "trashbag" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' storage_type = /datum/storage/bag/trash @@ -83,6 +84,7 @@ name = "trash bag of holding" desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." icon_state = "bluetrashbag" + worn_icon_state = "bluetrashbag" inhand_icon_state = "bluetrashbag" item_flags = NO_MAT_REDEMPTION storage_type = /datum/storage/bag/trash/bluespace diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index c708962ca29c..90c990113767 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -7,6 +7,7 @@ worn_icon_state = "utility" lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi' + abstract_type = /obj/item/storage/belt slot_flags = ITEM_SLOT_BELT attack_verb_continuous = list("whips", "lashes", "disciplines") attack_verb_simple = list("whip", "lash", "discipline") @@ -54,24 +55,23 @@ preload = TRUE /obj/item/storage/belt/utility/chief/full/PopulateContents() - SSwardrobe.provide_type(/obj/item/screwdriver/power, src) - SSwardrobe.provide_type(/obj/item/crowbar/power, src) - SSwardrobe.provide_type(/obj/item/weldingtool/experimental, src) + SSwardrobe.provide_type(/obj/item/screwdriver, src) + SSwardrobe.provide_type(/obj/item/wrench, src) + SSwardrobe.provide_type(/obj/item/weldingtool/hugetank, src) + SSwardrobe.provide_type(/obj/item/crowbar, src) + SSwardrobe.provide_type(/obj/item/wirecutters, src) SSwardrobe.provide_type(/obj/item/multitool, src) SSwardrobe.provide_type(/obj/item/stack/cable_coil, src) - SSwardrobe.provide_type(/obj/item/extinguisher/mini, src) - SSwardrobe.provide_type(/obj/item/analyzer, src) - //much roomier now that we've managed to remove two tools /obj/item/storage/belt/utility/chief/full/get_types_to_preload() var/list/to_preload = list() //Yes this is a pain. Yes this is the point - to_preload += /obj/item/screwdriver/power - to_preload += /obj/item/crowbar/power - to_preload += /obj/item/weldingtool/experimental + to_preload += /obj/item/screwdriver + to_preload += /obj/item/wrench + to_preload += /obj/item/weldingtool/hugetank + to_preload += /obj/item/crowbar + to_preload += /obj/item/wirecutters to_preload += /obj/item/multitool to_preload += /obj/item/stack/cable_coil - to_preload += /obj/item/extinguisher/mini - to_preload += /obj/item/analyzer return to_preload /obj/item/storage/belt/utility/full/PopulateContents() diff --git a/code/game/objects/items/storage/boxes/engineering_boxes.dm b/code/game/objects/items/storage/boxes/engineering_boxes.dm index 9b8b7694b5d0..66e9887039e6 100644 --- a/code/game/objects/items/storage/boxes/engineering_boxes.dm +++ b/code/game/objects/items/storage/boxes/engineering_boxes.dm @@ -39,9 +39,10 @@ /obj/item/storage/bag/sheetsnatcher/debug=1, /obj/item/uplink/debug=1, /obj/item/uplink/nuclear/debug=1, - /obj/item/clothing/ears/earmuffs/debug = 1, + /obj/item/clothing/ears/earmuffs/debug=1, + /obj/item/gps/visible_debug=1, ) - generate_items_inside(items_inside,src) + generate_items_inside(items_inside, src) /obj/item/storage/box/plastic name = "plastic box" diff --git a/code/game/objects/items/storage/boxes/flat_boxes.dm b/code/game/objects/items/storage/boxes/flat_boxes.dm index 7320140d4c08..3ffb818f91a7 100644 --- a/code/game/objects/items/storage/boxes/flat_boxes.dm +++ b/code/game/objects/items/storage/boxes/flat_boxes.dm @@ -20,3 +20,13 @@ flat_box.pixel_y = pixel_y qdel(src) + +/obj/item/storage/box/flat/fentanylpatches + name = "discrete box" + desc = "A small box containing a set of unmarked transdermal patches." + icon_state = "flat" + +/obj/item/storage/box/flat/fentanylpatches/Initialize(mapload) + . = ..() + for(var/i = 1 to 3) + new /obj/item/reagent_containers/applicator/patch/fent(src) diff --git a/code/game/objects/items/storage/boxes/misc.dm b/code/game/objects/items/storage/boxes/misc.dm index bc9305f72bf4..41c958b1398e 100644 --- a/code/game/objects/items/storage/boxes/misc.dm +++ b/code/game/objects/items/storage/boxes/misc.dm @@ -56,3 +56,39 @@ new /obj/item/mecha_parts/mecha_tracking(src) new /obj/item/mecha_parts/mecha_tracking(src) new /obj/item/mecha_parts/mecha_tracking(src) + +/obj/item/storage/box/methdealer + name = "box" + desc = "A brown box." + icon_state = "blank_package" + +/obj/item/storage/box/methdealer/PopulateContents() + var/static/list/items_inside = list( + /obj/item/food/drug/meth_crystal = 4, + /obj/item/cigarette/pipe/crackpipe = 2, + ) + generate_items_inside(items_inside, src) + +/obj/item/storage/box/opiumdealer + name = "box" + desc = "A brown box." + icon_state = "blank_package" + +/obj/item/storage/box/opiumdealer/PopulateContents() + var/static/list/items_inside = list( + /obj/item/food/drug/opium = 4, + /obj/item/cigarette/pipe/cobpipe = 2, + ) + generate_items_inside(items_inside, src) + +/obj/item/storage/box/kronkdealer + name = "box" + desc = "A brown box." + icon_state = "blank_package" + +/obj/item/storage/box/kronkdealer/PopulateContents() + var/static/list/items_inside = list( + /obj/item/food/drug/moon_rock = 4, + /obj/item/cigarette/pipe/crackpipe = 2, + ) + generate_items_inside(items_inside, src) diff --git a/code/game/objects/items/storage/boxes/security_boxes.dm b/code/game/objects/items/storage/boxes/security_boxes.dm index 4742921ecced..230ad5eea226 100644 --- a/code/game/objects/items/storage/boxes/security_boxes.dm +++ b/code/game/objects/items/storage/boxes/security_boxes.dm @@ -219,7 +219,7 @@ /obj/item/storage/box/large_dart name = "box of XL shotgun darts" - name = "A box full of shotgun darts with increased chemical storage capacity." + desc = "A box full of shotgun darts with increased chemical storage capacity." icon_state = "shotdart_box" illustration = null diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 719688c5390c..8470c084136a 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -15,6 +15,7 @@ /obj/item/storage/fancy icon = 'icons/obj/food/containers.dmi' + abstract_type = /obj/item/storage/fancy resistance_flags = FLAMMABLE custom_materials = list(/datum/material/cardboard = SHEET_MATERIAL_AMOUNT) /// Used by examine to report what this thing is holding. diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 81d1f080bedc..02f89c0f351c 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -27,7 +27,7 @@ /obj/item/storage/lockbox/add_context(atom/source, list/context, obj/item/held_item, mob/user) if(!held_item) return NONE - if(src.broken) + if(broken) return NONE if(!held_item.GetID()) return NONE diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index 8ea02a9a4627..d9e2fe3ae67c 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -1,6 +1,7 @@ /obj/item/storage name = "storage" icon = 'icons/obj/storage/storage.dmi' + abstract_type = /obj/item/storage w_class = WEIGHT_CLASS_NORMAL interaction_flags_click = ALLOW_RESTING | FORBID_TELEKINESIS_REACH action_slots = ALL diff --git a/code/game/objects/items/syndie_spraycan.dm b/code/game/objects/items/syndie_spraycan.dm index 427cc87b6579..13ae3097ebfc 100644 --- a/code/game/objects/items/syndie_spraycan.dm +++ b/code/game/objects/items/syndie_spraycan.dm @@ -85,7 +85,7 @@ if(HAS_TRAIT(user, TRAIT_TAGGER)) wait_time *= 0.5 - if(!do_after(user, wait_time, target, hidden = TRUE)) + if(!do_after(user, wait_time, target, hidden = TRUE, extra_checks = CALLBACK(src, PROC_REF(adjacency_check), user, target))) user.balloon_alert(user, "interrupted!") drawing_rune = FALSE return FALSE @@ -146,6 +146,13 @@ suicider.AddComponent(/datum/component/face_decal, "spray", EXTERNAL_ADJACENT, paint_color) return OXYLOSS +///Checks if the user is still adjacent to the target (used for do_after extra_checks) +/obj/item/traitor_spraycan/proc/adjacency_check(mob/user, atom/target) + if(!user.Adjacent(target)) + user.balloon_alert(user, "moved too far away!") + return FALSE + return TRUE + /obj/effect/decal/cleanable/traitor_rune name = "syndicate graffiti" desc = "It looks like it's going to be... the Syndicate logo?" diff --git a/code/game/objects/items/tools/painter/decal_painter.dm b/code/game/objects/items/tools/painter/decal_painter.dm index fe547664702e..f1c934d028d3 100644 --- a/code/game/objects/items/tools/painter/decal_painter.dm +++ b/code/game/objects/items/tools/painter/decal_painter.dm @@ -141,3 +141,18 @@ name = "extreme decal painter" icon_state = "decal_sprayer_ex" initial_ink_type = /obj/item/toner/extreme + +/obj/item/airlock_painter/decal/cyborg + icon_state = "decal_sprayer_borg" + initial_ink_type = /obj/item/toner/infinite + +/obj/item/airlock_painter/decal/cyborg/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + var/mob/living/silicon/robot/cyborg = user + if(!iscyborg(user) || !cyborg.cell) + return + if(cyborg.cell && cyborg.cell.charge > 0) + cyborg.cell.use(0.025 * STANDARD_CELL_CHARGE) + else if(cyborg.cell.charge <= 0) + balloon_alert(user, "not enough energy!") + return diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index a980ce957182..4a39fb5f5d2f 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -27,6 +27,7 @@ * Intento */ /obj/item/toy + abstract_type = /obj/item/toy throwforce = 0 throw_speed = 3 throw_range = 7 @@ -296,6 +297,7 @@ inhand_icon_state = "balloon" lefthand_file = 'icons/mob/inhands/items/balloons_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/balloons_righthand.dmi' + abstract_type = /obj/item/toy/balloon_animal throwforce = 0 throw_speed = 2 throw_range = 5 @@ -549,6 +551,9 @@ span_hear("You hear a gunshot!")) return ITEM_INTERACT_SUCCESS +/obj/item/toy/ammo + abstract_type = /obj/item/toy/ammo + /obj/item/toy/ammo/gun name = "capgun ammo" desc = "Make sure to recycle the box in an autolathe when it gets empty." @@ -1448,7 +1453,7 @@ . = ..() AddElement(/datum/element/toy_talk) -/obj/item/toy/dummy/GetVoice() +/obj/item/toy/dummy/get_voice() return doll_name /obj/item/toy/seashell diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 1c8063885e39..9e513a939cff 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/service/janitor.dmi' lefthand_file = 'icons/mob/inhands/items/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/food_righthand.dmi' + abstract_type = /obj/item/trash desc = "This is rubbish." w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 802ea57f9140..3f48cad55fc9 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -416,6 +416,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throw_speed = 4 embed_type = /datum/embedding/throwing_star armour_penetration = 40 + mob_throw_hit_sound = 'sound/items/weapons/pierce.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' w_class = WEIGHT_CLASS_SMALL sharpness = SHARP_POINTY @@ -834,20 +836,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 attack_verb_continuous = list("clubs", "bludgeons") attack_verb_simple = list("club", "bludgeon") -/obj/item/melee/chainofcommand/tailwhip - name = "liz o' nine tails" - desc = "A whip fashioned from the severed tails of lizards." - icon_state = "tailwhip" - inhand_icon_state = "tailwhip" - item_flags = NONE - can_hasten = FALSE - -/obj/item/melee/chainofcommand/tailwhip/kitty - name = "cat o' nine tails" - desc = "A whip fashioned from the severed tails of cats." - icon_state = "catwhip" - inhand_icon_state = "catwhip" - /obj/item/melee/skateboard name = "skateboard" desc = "A skateboard. It can be placed on its wheels and ridden, or used as a radical weapon." diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 458c5e8ce4ae..84df412532eb 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,5 +1,6 @@ /obj + abstract_type = /obj animate_movement = SLIDE_STEPS speech_span = SPAN_ROBOT var/obj_flags = CAN_BE_HIT diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 2ffeb37c226a..3e7e13c1df2f 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,6 +1,7 @@ /// Inert structures, such as girders, machine frames, and crates/lockers. /obj/structure icon = 'icons/obj/structures.dmi' + abstract_type = /obj/structure pressure_resistance = 8 max_integrity = 300 interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 8fcfca6f6eab..6eee27ce24ee 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -460,7 +460,7 @@ That prevents a few funky behaviors. return //Transferring a carded AI to a core. if(interaction == AI_TRANS_FROM_CARD) - AI.control_disabled = FALSE + AI.set_control_disabled(FALSE) AI.radio_enabled = TRUE AI.forceMove(loc) // to replace the terminal. to_chat(AI, span_notice("You have been uploaded to a stationary terminal. Remote device connection restored.")) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 8a35511c6f46..50437e1936a0 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -70,8 +70,6 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) var/icon_broken = "sparking" /// Whether a skittish person can dive inside this closet. Disable if opening the closet causes "bad things" to happen or that it leads to a logical inconsistency. var/divable = TRUE - /// true whenever someone with the strong pull component (or magnet modsuit module) is dragging this, preventing opening - var/strong_grab = FALSE /// secure locker or not, also used if overriding a non-secure locker with a secure door overlay to add fancy lights var/secure = FALSE var/can_install_electronics = TRUE @@ -441,9 +439,8 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(isliving(user)) if(!(user.mobility_flags & MOBILITY_USE)) return FALSE - if(strong_grab) - if(user) - to_chat(user, span_danger("[pulledby] has an incredibly strong grip on [src], preventing it from opening.")) + if(pulledby && user && HAS_TRAIT(src, TRAIT_STRONGPULL) && user != pulledby) + to_chat(user, span_danger("[pulledby] has an incredibly strong grip on [src], preventing it from opening.")) return FALSE var/turf/T = get_turf(src) for(var/mob/living/L in T) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 779e8a54d206..7550e5da5b3e 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -58,36 +58,38 @@ ignite() return TRUE -/obj/structure/fireplace/attackby(obj/item/T, mob/user) - if(istype(T, /obj/item/stack/sheet/mineral/wood)) - var/obj/item/stack/sheet/mineral/wood/wood = T +/obj/structure/fireplace/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/stack/sheet/mineral/wood)) + var/obj/item/stack/sheet/mineral/wood/wood = tool var/space_remaining = MAXIMUM_BURN_TIMER - burn_time_remaining() var/space_for_logs = round(space_remaining / LOG_BURN_TIMER) if(space_for_logs < 1) - to_chat(user, span_warning("You can't fit any more of [T] in [src]!")) - return + to_chat(user, span_warning("You can't fit any more of [tool] in [src]!")) + return ITEM_INTERACT_BLOCKING + var/logs_used = min(space_for_logs, wood.amount) wood.use(logs_used) adjust_fuel_timer(LOG_BURN_TIMER * logs_used) user.visible_message(span_notice("[user] tosses some wood into [src]."), span_notice("You add some fuel to [src].")) - return + return ITEM_INTERACT_SUCCESS - if(istype(T, /obj/item/paper_bin)) - var/obj/item/paper_bin/paper_bin = T - user.visible_message(span_notice("[user] throws [T] into [src]."), span_notice("You add [T] to [src].")) + if(istype(tool, /obj/item/paper_bin)) + var/obj/item/paper_bin/paper_bin = tool + user.visible_message(span_notice("[user] throws [tool] into [src]."), span_notice("You add [tool] to [src].")) adjust_fuel_timer(PAPER_BURN_TIMER * paper_bin.total_paper) qdel(paper_bin) - return + return ITEM_INTERACT_SUCCESS - if(istype(T, /obj/item/paper)) - user.visible_message(span_notice("[user] throws [T] into [src]."), span_notice("You throw [T] into [src].")) + if(istype(tool, /obj/item/paper)) + user.visible_message(span_notice("[user] throws [tool] into [src]."), span_notice("You throw [tool] into [src].")) adjust_fuel_timer(PAPER_BURN_TIMER) - qdel(T) - return + qdel(tool) + return ITEM_INTERACT_SUCCESS - if(try_light(T,user)) - return - return ..() + if(tool.ignition_effect(src, user)) + try_light(tool, user) + return ITEM_INTERACT_SUCCESS + return NONE /obj/structure/fireplace/update_overlays() . = ..() diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index a98b9ac8f9fd..6b84fd108261 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -73,7 +73,8 @@ return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) /obj/structure/lattice/atom_deconstruct(disassembled = TRUE) - new build_material(get_turf(src), number_of_mats) + if(!isnull(build_material) && number_of_mats >= 1) + new build_material(get_turf(src), number_of_mats) /obj/structure/lattice/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(the_rcd.mode == RCD_TURF) @@ -189,3 +190,50 @@ turf_we_place_on.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) qdel(src) + +/obj/structure/lattice/catwalk/boulder + name = "boulder platform" + desc = "A boulder, floating on the molten hot deadly lava. More like a BOATlder." + icon = 'icons/obj/ore.dmi' + icon_state = "boulder_platform" + base_icon_state = "boulder_platform" + smoothing_flags = NONE + smoothing_groups = null + canSmoothWith = null + build_material = null + /// The type of particle to make before the platform collapses. + var/warning_particle = /particles/smoke/ash + +/obj/structure/lattice/catwalk/boulder/Initialize(mapload) + . = ..() + fast_emissive_blocker(src) + AddElement(/datum/element/elevation, pixel_shift = 8) + +/obj/structure/lattice/catwalk/boulder/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) + if(ismetaltile(attacking_item)) + balloon_alert(user, "too unstable!") + return FALSE + return ..() + +/obj/structure/lattice/catwalk/boulder/CanAllowThrough(atom/movable/mover, border_dir) + if(istype(mover, /obj/structure/ore_box)) + self_destruct() + return TRUE + . = ..() + +/obj/structure/lattice/catwalk/boulder/proc/pre_self_destruct() + if(istype(loc, /turf/open/lava/plasma)) + add_overlay("plasma_cracks") + else + add_overlay("lava_cracks") + animate(src, alpha = 0, time = 2 SECONDS, pixel_y = -16, easing = QUAD_EASING|EASE_IN) + addtimer(CALLBACK(src, PROC_REF(self_destruct)), 2 SECONDS) + +/** + * Handles platforms deleting themselves with a visual effect and message. + */ +/obj/structure/lattice/catwalk/boulder/proc/self_destruct() + visible_message(span_notice("\The [src] sinks and dissapears!")) + playsound(src, 'sound/effects/gas_hissing.ogg', 20) + remove_shared_particles(warning_particle) + deconstruct() diff --git a/code/game/objects/structures/lavaland/gulag_vent.dm b/code/game/objects/structures/lavaland/gulag_vent.dm index d6e30cf1fe3c..e0298fd3cc50 100644 --- a/code/game/objects/structures/lavaland/gulag_vent.dm +++ b/code/game/objects/structures/lavaland/gulag_vent.dm @@ -44,7 +44,10 @@ var/stamina_damage_to_inflict = HAS_TRAIT(user, TRAIT_STRENGTH) ? 60 : 120 //Decreases the amount of stamina damage inflicted by half if you're STRONG living_user.mind?.adjust_experience(/datum/skill/athletics, 10) living_user.apply_status_effect(/datum/status_effect/exercised) - new spawned_boulder(get_turf(living_user)) + + var/obj/item/boulder/gulag_boulder = new spawned_boulder(get_turf(living_user)) + gulag_boulder.platform_lifespan = PLATFORM_LIFE_GULAG + living_user.visible_message(span_notice("[living_user] hauls a boulder out of [src].")) living_user.apply_damage(stamina_damage_to_inflict, STAMINA) playsound(src, 'sound/items/weapons/genhit.ogg', vol = 50, vary = TRUE) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index ac8ffc2861dc..2e00a08a600c 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -3,6 +3,7 @@ #define OVERLAY_OFFSET_START 0 #define OVERLAY_OFFSET_EACH 5 #define MINERALS_PER_BOULDER 3 +#define MAX_MINERAL_PICK_ATTEMPTS 10 /obj/structure/ore_vent name = "ore vent" @@ -171,26 +172,37 @@ /obj/structure/ore_vent/proc/generate_mineral_breakdown(new_minerals = MINERAL_TYPE_OPTIONS_RANDOM, map_loading = FALSE) if(new_minerals < 1) CRASH("generate_mineral_breakdown called with new_minerals < 1.") - var/list/available_mats = difflist(first = SSore_generation.ore_vent_minerals, second = mineral_breakdown, skiprep = 1) - for(var/i in 1 to new_minerals) - if(!length(SSore_generation.ore_vent_minerals) && map_loading) - // We should prevent this from happening in SSore_generation, but if not then we crash here - CRASH("No minerals left to pick from! We may have spawned too many ore vents in init, or the map config in seedRuins may not have enough resources for the mineral budget.") - var/datum/material/new_material - if(map_loading) - if(length(available_mats)) - new_material = pick(GLOB.ore_vent_minerals_lavaland) - var/datum/material/surrogate_mat = pick(SSore_generation.ore_vent_minerals) - available_mats -= surrogate_mat - SSore_generation.ore_vent_minerals -= surrogate_mat + + //should have enough minerals for the vent during round start + var/list/available_minerals = SSore_generation.ore_vent_minerals + if(map_loading && available_minerals.len < new_minerals) + CRASH("No minerals left to pick from! We may have spawned too many ore vents in init, or the map config in seedRuins may not have enough resources for the mineral budget.") + + var/list/datum/material/picked_minerals = list() + for(var/_ in 1 to new_minerals) + var/datum/material/mineral + + //pick an unique mineral but try only MAX_MINERAL_PICK_ATTEMPTS times before giving up else we could be stuck here forever + var/attempts = 0 + do + mineral = length(mineral_breakdown) ? pick_weight(mineral_breakdown) : null + if(map_loading) + if(!mineral || !available_minerals.Find(mineral)) + mineral = pick(available_minerals) else - new_material = pick(available_mats) - available_mats -= new_material - SSore_generation.ore_vent_minerals -= new_material - else - new_material = pick(GLOB.ore_vent_minerals_lavaland) - mineral_breakdown[new_material] = rand(1, 4) + mineral = mineral || pick_weight(GLOB.ore_vent_minerals_lavaland) + attempts += 1 + while(attempts < MAX_MINERAL_PICK_ATTEMPTS && picked_minerals.Find(mineral)) + + //register the picked mineral, removing it from the round start available minerals if nessassary + if(map_loading) + available_minerals -= mineral + picked_minerals |= mineral + //assign random weights to picked minerals + mineral_breakdown.Cut() + for(var/datum/material/mineral as anything in picked_minerals) + mineral_breakdown[mineral] = rand(1, new_minerals) /** * Returns the quantity of mineral sheets in each ore vent's boulder contents roll. @@ -201,7 +213,7 @@ * @params ore_floor The number of minerals already rolled. Used to scale the logarithmic function. */ /obj/structure/ore_vent/proc/ore_quantity_function(ore_floor) - return SHEET_MATERIAL_AMOUNT * round(boulder_size * (log(rand(1 + ore_floor, 4 + ore_floor)) ** -1)) + return SHEET_MATERIAL_AMOUNT * max(round(boulder_size * (log(rand(1 + ore_floor, 4 + ore_floor)) ** -1)), 1) /** * This confirms that the user wants to start the wave defense event, and that they can start it. @@ -423,6 +435,15 @@ new_rock.boulder_size = boulder_size new_rock.durability = rand(2, boulder_size) //randomize durability a bit for some flavor. new_rock.boulder_string = boulder_icon_state + + switch(boulder_size) + if(BOULDER_SIZE_SMALL) + new_rock.platform_lifespan = PLATFORM_LIFE_SMALL + if(BOULDER_SIZE_MEDIUM) + new_rock.platform_lifespan = PLATFORM_LIFE_MEDIUM + if(BOULDER_SIZE_LARGE) + new_rock.platform_lifespan = PLATFORM_LIFE_LARGE + new_rock.update_appearance(UPDATE_ICON_STATE) //start the cooldown & return the boulder @@ -463,8 +484,8 @@ unique_vent = TRUE boulder_size = BOULDER_SIZE_SMALL mineral_breakdown = list( - /datum/material/iron = 50, - /datum/material/glass = 50, + /datum/material/iron = 1, + /datum/material/glass = 1, ) /obj/structure/ore_vent/random @@ -605,3 +626,4 @@ #undef OVERLAY_OFFSET_START #undef OVERLAY_OFFSET_EACH #undef MINERALS_PER_BOULDER +#undef MAX_MINERAL_PICK_ATTEMPTS diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm index 764e5b25f8ea..4f84c9f5d8a4 100644 --- a/code/game/objects/structures/mystery_box.dm +++ b/code/game/objects/structures/mystery_box.dm @@ -173,15 +173,7 @@ GLOBAL_LIST_INIT(mystery_fishing, list( /// This proc is used to define what item types valid_types is filled with /obj/structure/mystery_box/proc/generate_valid_types() - valid_types = list() - - for(var/iter_path in typesof(selectable_base_type)) - if(!ispath(iter_path, /obj/item)) - continue - var/obj/item/iter_item = iter_path - if((initial(iter_item.item_flags) & ABSTRACT) || !initial(iter_item.icon_state) || !initial(iter_item.inhand_icon_state)) - continue - valid_types += iter_path + valid_types = get_sane_item_types(selectable_base_type) /// The box has been activated, play the sound and spawn the prop item /obj/structure/mystery_box/proc/activate(mob/living/user) @@ -275,6 +267,12 @@ GLOBAL_LIST_INIT(mystery_fishing, list( /obj/structure/mystery_box/wands/generate_valid_types() valid_types = GLOB.mystery_magic +/obj/structure/mystery_box/wildcard + desc = "A wooden crate that seems equally magical and mysterious, capable of granting the user all kinds of different pieces of gear. This one has an EXTREAMLY extended array of weaponry." + +/obj/structure/mystery_box/wildcard/generate_valid_types() + valid_types = GLOB.summoned_all_guns + ///A fishing and pirate-themed mystery box, rarely found by fishing in the ocean, then another cannot be caught for the next 30 minutes. /obj/structure/mystery_box/fishing name = "treasure chest" diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 6485a375a1f2..43a13115824c 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -130,10 +130,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) /obj/machinery/shower/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced) user.balloon_alert_to_viewers("furiously plunging...", "plunging shower...") - if(do_after(user, 3 SECONDS, target = src)) - user.balloon_alert_to_viewers("finished plunging") - reagents.expose(get_turf(src), TOUCH) //splash on the floor - reagents.clear_reagents() + if(!do_after(user, 3 SECONDS, target = src)) + return TRUE + user.balloon_alert_to_viewers("finished plunging") + reagents.expose(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + begin_processing() + return TRUE /obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm index fdaa20af1048..7922f3326531 100644 --- a/code/game/objects/structures/water_structures/sink.dm +++ b/code/game/objects/structures/water_structures/sink.dm @@ -159,13 +159,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) O.play_tool_sound(src) has_water_reclaimer = FALSE new/obj/item/stock_parts/water_recycler(get_turf(loc)) - to_chat(user, span_notice("You remove the water reclaimer from [src]")) - return - - if(istype(O, /obj/item/stack/ore/glass)) - new /obj/item/stack/sheet/sandblock(loc) - to_chat(user, span_notice("You wet the sand in the sink and form it into a block.")) - O.use(1) + to_chat(user, span_notice("You remove the water reclaimer from [src].")) return if(istype(O, /obj/item/stock_parts/water_recycler)) diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm index c2f1ecb848fe..7738a0f6473a 100644 --- a/code/game/objects/structures/water_structures/toilet.dm +++ b/code/game/objects/structures/water_structures/toilet.dm @@ -7,45 +7,71 @@ density = FALSE anchored = TRUE - ///Boolean if whether the toilet is currently flushing. + /// Boolean if whether the toilet is currently flushing. var/flushing = FALSE - ///Boolean if the toilet seat is up. + /// Boolean if the toilet seat is up. var/cover_open = FALSE - ///Boolean if the cistern is up, allowing items to be put in/out. + /// Boolean if the cistern is up, allowing items to be put in/out. var/cistern_open = FALSE - ///The combined weight of all items in the cistern put together. + /// The combined weight of all items in the cistern put together. var/w_items = 0 - ///Reference to the mob being given a swirlie. + /// Reference to the mob being given a swirlie. var/mob/living/swirlie - ///The type of material used to build the toilet. + /// The type of material used to build the toilet. var/buildstacktype = /obj/item/stack/sheet/iron - ///How much of the buildstacktype is needed to construct the toilet. + /// How much of the buildstacktype is needed to construct the toilet. var/buildstackamount = 1 - ///Lazylist of items in the cistern. + /// Lazylist of items in the cistern. var/list/cistern_items - ///Lazylist of fish in the toilet, not to be mixed with the items in the cistern. Max of 3 + /// Lazylist of fish in the toilet, not to be mixed with the items in the cistern. Max of 3 var/list/fishes + /// Does the toilet have a water recycler to recollect its water supply? + var/has_water_reclaimer = TRUE + /// Units of water to reclaim per second + var/reclaim_rate = 0.5 + /// What reagent does the toilet flush with + var/reagent_id = /datum/reagent/water + /// How much reagent can the cistern contain + var/reagent_capacity = 200 + /// Item stuck in the basin of the toilet + var/obj/item/stuck_item = null -/obj/structure/toilet/Initialize(mapload) +/obj/structure/toilet/Initialize(mapload, has_water_reclaimer = null) . = ..() cover_open = round(rand(0, 1)) + if(!isnull(has_water_reclaimer)) + src.has_water_reclaimer = has_water_reclaimer update_appearance(UPDATE_ICON) if(mapload && SSmapping.level_trait(z, ZTRAIT_STATION)) AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/toilet]) AddElement(/datum/element/fish_safe_storage) register_context() + create_reagents(reagent_capacity) + if(src.has_water_reclaimer) + reagents.add_reagent(reagent_id, reagent_capacity) + AddComponent(/datum/component/plumbing/simple_demand, extend_pipe_to_edge = TRUE) /obj/structure/toilet/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() if(user.pulling && isliving(user.pulling)) context[SCREENTIP_CONTEXT_LMB] = "Give Swirlie" - else if(cover_open && istype(held_item, /obj/item/fish)) - context[SCREENTIP_CONTEXT_LMB] = "Insert Fish" - else if(cover_open && LAZYLEN(fishes)) - context[SCREENTIP_CONTEXT_LMB] = "Grab Fish" + if(cover_open) + if(isnull(held_item)) + if(LAZYLEN(fishes)) + context[SCREENTIP_CONTEXT_LMB] = "Grab Fish" + else if(istype(held_item, /obj/item/fish)) + context[SCREENTIP_CONTEXT_LMB] = "Insert Fish" + else if(istype(held_item, /obj/item/plunger)) + context[SCREENTIP_CONTEXT_LMB] = "Unclog" + else if(held_item.w_class <= WEIGHT_CLASS_SMALL) + context[SCREENTIP_CONTEXT_LMB] = "Insert Item" else if(cistern_open) if(isnull(held_item)) context[SCREENTIP_CONTEXT_LMB] = "Check Cistern" + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER && has_water_reclaimer) + context[SCREENTIP_CONTEXT_LMB] = "Remove Reclaimer" + else if(istype(held_item, /obj/item/stock_parts/water_recycler) && !has_water_reclaimer) + context[SCREENTIP_CONTEXT_LMB] = "Install Reclaimer" else context[SCREENTIP_CONTEXT_LMB] = "Insert Item" context[SCREENTIP_CONTEXT_RMB] = "Flush" @@ -54,8 +80,14 @@ /obj/structure/toilet/examine(mob/user) . = ..() - if(cover_open && LAZYLEN(fishes)) - . += span_notice("You can see fish in the toilet, you can probably take one out.") + if(cover_open) + if(LAZYLEN(fishes)) + . += span_notice("You can see fish in the toilet, you can probably take one out.") + if(stuck_item) + . += span_notice("There seems to be something small in [src]'s bowl...") + if(cistern_open && has_water_reclaimer) + . += span_notice("A water recycler is installed. Its attached by a pair of screws.") + . += span_notice("Its display states: [reagents.total_volume]/[reagents.maximum_volume] liquids remaining.") /obj/structure/toilet/examine_more(mob/user) . = ..() @@ -66,6 +98,7 @@ . = ..() QDEL_LAZYLIST(fishes) QDEL_LAZYLIST(cistern_items) + QDEL_NULL(stuck_item) /obj/structure/toilet/Exited(atom/movable/gone, direction) . = ..() @@ -101,12 +134,18 @@ if(swirlie) return if(cover_open) + if(!reagents.total_volume) + to_chat(user, span_notice("\The [src] is dry!")) + return grabbed_mob.visible_message(span_danger("[user] starts to give [grabbed_mob] a swirlie!"), span_userdanger("[user] starts to give you a swirlie...")) swirlie = grabbed_mob var/was_alive = (swirlie.stat != DEAD) if(!do_after(user, 3 SECONDS, target = src, timed_action_flags = IGNORE_HELD_ITEM)) swirlie = null return + if(!reagents.total_volume) + to_chat(user, span_notice("\The [src] is dry!")) + return grabbed_mob.visible_message(span_danger("[user] gives [grabbed_mob] a swirlie!"), span_userdanger("[user] gives you a swirlie!"), span_hear("You hear a toilet flushing.")) if(iscarbon(grabbed_mob)) var/mob/living/carbon/carbon_grabbed = grabbed_mob @@ -158,7 +197,25 @@ . = ..() if(flushing) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + if(reagents.total_volume <= 50) + to_chat(user, span_notice("You press the flush lever, but nothing happens.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + flushing = TRUE + var/something_stuck = !isnull(stuck_item) + if(!something_stuck && LAZYLEN(fishes)) + for(var/obj/item/fish/fish as anything in fishes) + if(fish.w_class >= WEIGHT_CLASS_NORMAL) + something_stuck = TRUE + break + + if(something_stuck) + reagents.create_foam(/datum/effect_system/fluid_spread/foam, 10, notification = span_danger("[src] overflows, spilling its cistern's contents everywhere!"), log = TRUE) + else + reagents.remove_all(50) + + begin_reclamation() playsound(src, 'sound/machines/toilet_flush.ogg', cover_open ? 40 : 20, TRUE) if(cover_open && (dir & SOUTH)) update_appearance(UPDATE_OVERLAYS) @@ -183,50 +240,97 @@ else for(var/datum/material/M as anything in custom_materials) new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) + if(has_water_reclaimer) + new /obj/item/stock_parts/water_recycler(drop_location()) + if(stuck_item) + stuck_item.forceMove(drop_location()) + +/obj/structure/toilet/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(user.combat_mode) + return NONE -/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) - if(cover_open && istype(attacking_item, /obj/item/fish)) + if(cover_open && istype(tool, /obj/item/fish)) if(fishes >= 3) to_chat(user, span_warning("There's too many fishes, flush them down first.")) - return - if(!user.transferItemToLoc(attacking_item, src)) - to_chat(user, span_warning("\The [attacking_item] is stuck to your hand!")) - return - var/obj/item/fish/the_fish = attacking_item + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + to_chat(user, span_warning("\The [tool] is stuck to your hand!")) + return ITEM_INTERACT_BLOCKING + var/obj/item/fish/the_fish = tool if(the_fish.status == FISH_DEAD) - to_chat(user, span_warning("You place [attacking_item] into [src], may it rest in peace.")) + to_chat(user, span_warning("You place [tool] into [src], may it rest in peace.")) else - to_chat(user, span_notice("You place [attacking_item] into [src], hopefully no one will miss it!")) - LAZYADD(fishes, attacking_item) - return + to_chat(user, span_notice("You place [tool] into [src], hopefully no one will miss it!")) + LAZYADD(fishes, tool) + return ITEM_INTERACT_SUCCESS - if(cistern_open && !user.combat_mode) - if(attacking_item.w_class > WEIGHT_CLASS_NORMAL) - to_chat(user, span_warning("[attacking_item] does not fit!")) - return - if(w_items + attacking_item.w_class > WEIGHT_CLASS_HUGE) + if(cistern_open) + if(istype(tool, /obj/item/stock_parts/water_recycler)) + if(has_water_reclaimer) + to_chat(user, span_warning("[src] already has a water recycler installed.")) + return ITEM_INTERACT_BLOCKING + + playsound(src, 'sound/machines/click.ogg', 20, TRUE) + qdel(tool) + has_water_reclaimer = TRUE + begin_reclamation() + return ITEM_INTERACT_SUCCESS + + if(tool.w_class > WEIGHT_CLASS_NORMAL) + to_chat(user, span_warning("[tool] does not fit!")) + return ITEM_INTERACT_BLOCKING + if(w_items + tool.w_class > WEIGHT_CLASS_HUGE) to_chat(user, span_warning("The cistern is full!")) - return - if(!user.transferItemToLoc(attacking_item, src)) - to_chat(user, span_warning("\The [attacking_item] is stuck to your hand, you cannot put it in the cistern!")) - return - LAZYADD(cistern_items, attacking_item) - w_items += attacking_item.w_class - to_chat(user, span_notice("You carefully place [attacking_item] into the cistern.")) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + to_chat(user, span_warning("\The [tool] is stuck to your hand, you cannot put it in the cistern!")) + return ITEM_INTERACT_BLOCKING + LAZYADD(cistern_items, tool) + w_items += tool.w_class + to_chat(user, span_notice("You carefully place [tool] into the cistern.")) + return ITEM_INTERACT_SUCCESS - if(is_reagent_container(attacking_item) && !user.combat_mode) - if (!cover_open) - return - if(istype(attacking_item, /obj/item/food/monkeycube)) - var/obj/item/food/monkeycube/cube = attacking_item - cube.Expand() - return - var/obj/item/reagent_containers/RG = attacking_item - RG.reagents.add_reagent(/datum/reagent/water, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - to_chat(user, span_notice("You fill [RG] from [src]. Gross.")) - return ..() + if(!cover_open) + return NONE + + if(!is_reagent_container(tool)) + if(tool.w_class > WEIGHT_CLASS_SMALL) + return NONE + + if(stuck_item) + to_chat(user, span_warning("There's already something blocking [src]'s drain pipe!")) + return ITEM_INTERACT_BLOCKING + + if(!user.transferItemToLoc(tool, src)) + to_chat(user, span_warning("\The [tool] is stuck to your hand!")) + return ITEM_INTERACT_BLOCKING + + stuck_item = tool + to_chat(user, span_notice("You drop [tool] into [src]'s bowl.")) + return ITEM_INTERACT_SUCCESS + + if(reagents.total_volume <= 0) + to_chat(user, span_notice("\The [src] is dry.")) + return ITEM_INTERACT_BLOCKING + + if(istype(tool, /obj/item/food/monkeycube)) + var/obj/item/food/monkeycube/cube = tool + cube.Expand() + return ITEM_INTERACT_SUCCESS + + var/obj/item/reagent_containers/container = tool + if(!container.is_refillable()) + return NONE + + if(container.reagents.holder_full()) + to_chat(user, span_notice("\The [container] is full.")) + return ITEM_INTERACT_BLOCKING + + reagents.trans_to(container, container.amount_per_transfer_from_this, transferred_by = user) + begin_reclamation() + to_chat(user, span_notice("You fill [container] from [src]. Gross.")) + return ITEM_INTERACT_SUCCESS /obj/structure/toilet/crowbar_act(mob/living/user, obj/item/tool) to_chat(user, span_notice("You start to [cistern_open ? "replace the lid on" : "lift the lid off"] the cistern...")) @@ -240,11 +344,39 @@ update_appearance(UPDATE_ICON_STATE) return ITEM_INTERACT_SUCCESS +/obj/structure/toilet/screwdriver_act(mob/living/user, obj/item/tool) + if(!cistern_open) + to_chat(user, span_warning("You need to open [src]'s cistern first!")) + return ITEM_INTERACT_BLOCKING + + if(!has_water_reclaimer) + to_chat(user, span_warning("\the [src] doesn't have a water reclaimer installed.")) + return ITEM_INTERACT_BLOCKING + + tool.play_tool_sound(src) + has_water_reclaimer = FALSE + new /obj/item/stock_parts/water_recycler(drop_location()) + to_chat(user, span_notice("You remove the water reclaimer from \the [src].")) + return ITEM_INTERACT_SUCCESS + /obj/structure/toilet/wrench_act(mob/living/user, obj/item/tool) tool.play_tool_sound(src) deconstruct() return ITEM_INTERACT_SUCCESS +/obj/structure/toilet/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced) + user.balloon_alert_to_viewers("furiously plunging...") + if(!do_after(user, 3 SECONDS, target = src)) + return TRUE + user.balloon_alert_to_viewers("finished plunging") + reagents.expose(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + begin_reclamation() + if(stuck_item) + stuck_item.forceMove(drop_location()) + stuck_item = null + return TRUE + ///Ends the flushing animation and updates overlays if necessary /obj/structure/toilet/proc/end_flushing() flushing = FALSE @@ -252,9 +384,19 @@ update_appearance(UPDATE_OVERLAYS) QDEL_LAZYLIST(fishes) +/obj/structure/toilet/proc/begin_reclamation() + START_PROCESSING(SSplumbing, src) + +/obj/structure/toilet/process(seconds_per_tick) + // Water reclamation complete? + if(!has_water_reclaimer || reagents.total_volume >= reagents.maximum_volume) + return PROCESS_KILL + reagents.add_reagent(reagent_id, reclaim_rate * seconds_per_tick) + /obj/structure/toilet/greyscale material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS buildstacktype = null + has_water_reclaimer = FALSE /obj/structure/toilet/secret var/secret_type = null diff --git a/code/game/objects/structures/water_structures/water_source.dm b/code/game/objects/structures/water_structures/water_source.dm index 0f2f771612d6..fc5411991fc3 100644 --- a/code/game/objects/structures/water_structures/water_source.dm +++ b/code/game/objects/structures/water_structures/water_source.dm @@ -94,12 +94,6 @@ playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) return - if(istype(attacking_item, /obj/item/stack/ore/glass)) - new /obj/item/stack/sheet/sandblock(loc) - to_chat(user, span_notice("You wet the sand and form it into a block.")) - attacking_item.use(1) - return - if(!user.combat_mode || (attacking_item.item_flags & NOBLUDGEON)) to_chat(user, span_notice("You start washing [attacking_item]...")) busy = TRUE diff --git a/code/game/say.dm b/code/game/say.dm index 85848ee0f489..423a39498f3a 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -149,21 +149,7 @@ GLOBAL_LIST_INIT(freqtospan, list( //Radio freq/name display var/freqpart = radio_freq ? "\[[get_radio_name(radio_freq, radio_freq_name)]\] " : "" //Speaker name - var/namepart - var/list/stored_name = list(null) - - if(iscarbon(speaker)) //First, try to pull the modified title from a carbon's ID. This will override both visual and audible names. - var/mob/living/carbon/carbon_human = speaker - var/obj/item/id_slot = carbon_human.get_item_by_slot(ITEM_SLOT_ID) - if(id_slot) - var/obj/item/card/id/id_card = id_slot?.GetID() - if(id_card) - SEND_SIGNAL(id_card, COMSIG_ID_GET_HONORIFIC, stored_name, carbon_human) - - if(!stored_name[NAME_PART_INDEX]) //Otherwise, we just use whatever the name signal gives us. - SEND_SIGNAL(speaker, COMSIG_MOVABLE_MESSAGE_GET_NAME_PART, stored_name, visible_name) - - namepart = stored_name[NAME_PART_INDEX] || "[speaker.GetVoice()]" + var/namepart = speaker.get_message_voice(visible_name) //End name span. var/endspanpart = "" @@ -333,9 +319,15 @@ GLOBAL_LIST_INIT(freqtospan, list( return "2" return "0" -/atom/proc/GetVoice() +/// Get what this atom sounds like when speaking +/atom/proc/get_voice() return "[src]" //Returns the atom's name, prepended with 'The' if it's not a proper noun +/// Get what this atom appears like in chat when speaking +/// visible_name - If TRUE, returns the visible name rather than the voice +/atom/proc/get_message_voice(visible_name) + return visible_name ? get_visible_name() : get_voice() + //HACKY VIRTUALSPEAKER STUFF BEYOND THIS POINT //these exist mostly to deal with the AIs hrefs and job stuff. @@ -357,7 +349,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) radio = _radio source = M if(istype(M)) - name = radio.anonymize ? "Unknown" : M.GetVoice() + name = radio.anonymize ? "Unknown" : M.get_voice() verb_say = M.get_default_say_verb() verb_ask = M.verb_ask verb_exclaim = M.verb_exclaim diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index cf287a6eb6d8..c29772afc5b4 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -1,6 +1,7 @@ /turf/closed layer = CLOSED_TURF_LAYER plane = WALL_PLANE + abstract_type = /turf/closed turf_flags = IS_SOLID opacity = TRUE density = TRUE diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 505371164bf6..9bcf1ef4a944 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -32,9 +32,11 @@ var/obj/item/boulder/spawned_boulder = null /// How much ore we spawn when we're mining a mineralType. var/mineralAmt = 3 - ///Holder for the image we display when we're pinged by a mining scanner + /// The icon of the image we display when we're pinged by a mining scanner, to be overridden if you want to use an alternate file for a subtype. + var/scan_icon = 'icons/effects/ore_visuals.dmi' + /// Placeholder for the icon_state of the image we display when we're pinged by a mining scanner var/scan_state = "" - ///If true, this turf will not call AfterChange during change_turf calls. + /// If true, this turf will not call AfterChange during change_turf calls. var/defer_change = FALSE /// If true you can mine the mineral turf without tools. var/weak_turf = FALSE @@ -215,7 +217,8 @@ new mineralType(src, mineralAmt) SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) if(spawned_boulder) - new spawned_boulder(src) + var/obj/item/boulder/wall_boulder = new spawned_boulder(src) + wall_boulder.platform_lifespan = PLATFORM_LIFE_GULAG if(ishuman(user)) var/mob/living/carbon/human/H = user if(exp_multiplier) diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 460da266758a..4b84200708e9 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -2,6 +2,7 @@ name = "mineral wall" desc = "This shouldn't exist" icon_state = "" + abstract_type = /turf/closed/wall/mineral smoothing_flags = SMOOTH_BITMASK canSmoothWith = null rcd_memory = null diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 2dd779a7f1f5..ee889a876115 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -1,4 +1,5 @@ /turf/open + abstract_type = /turf/open layer = LOW_FLOOR_LAYER plane = FLOOR_PLANE ///negative for faster, positive for slower @@ -137,6 +138,9 @@ if(!destination_z || !destination_x || !destination_y || arrived.pulledby || arrived.currently_z_moving) return + if(SSatoms.initialized == INITIALIZATION_INNEW_MAPLOAD) // we don't want to be transitioning atoms to another z-level while we are still in mapload + return + var/tx = destination_x var/ty = destination_y var/turf/DT = locate(tx, ty, destination_z) @@ -413,7 +417,7 @@ for(var/mob/living/basic/slime/M in src) M.apply_water() - wash(CLEAN_WASH, TRUE) + wash(CLEAN_WASH | CLEAN_RAD, TRUE) return TRUE /turf/open/handle_slip(mob/living/slipper, knockdown_amount, obj/slippable, lube, paralyze_amount, daze_amount, force_drop) diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index 97b5c50ecc13..eea5232aa062 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -508,7 +508,7 @@ /turf/open/floor/carpet/neon/Initialize(mapload) . = ..() AddElement(/datum/element/decal, neon_icon || icon, neon_icon_state || base_icon_state, dir, null, null, alpha, neon_color, smoothing_junction) - AddElement(/datum/element/decal, neon_icon || icon, neon_icon_state || base_icon_state, dir, EMISSIVE_PLANE, null, emissive_alpha, GLOB.emissive_color, smoothing_junction) + AddElement(/datum/element/decal, neon_icon || icon, neon_icon_state || base_icon_state, dir, EMISSIVE_PLANE, null, emissive_alpha, null, smoothing_junction) /turf/open/floor/carpet/neon/simple name = "simple neon carpet" diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 83781b92cbce..8aa5c2ed3935 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -156,19 +156,22 @@ /turf/open/floor/plating/foam/break_tile() return //jetfuel can't break steel foam... -/turf/open/floor/plating/foam/attackby(obj/item/attacking_item, mob/user, list/modifiers) - if(ismetaltile(attacking_item)) - var/obj/item/stack/tile/tiles = attacking_item - if(!tiles.use(1)) - return - var/obj/lattice = locate(/obj/structure/lattice) in src - if(lattice) - qdel(lattice) - to_chat(user, span_notice("You reinforce the foamed plating with tiling.")) - playsound(src, 'sound/items/weapons/Genhit.ogg', 50, TRUE) - ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return +/turf/open/floor/plating/foam/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!ismetaltile(tool)) + return NONE + + var/obj/item/stack/tile/tiles = tool + if(!tiles.use(1)) + return ITEM_INTERACT_BLOCKING + var/obj/lattice = locate(/obj/structure/lattice) in src + if(lattice) + qdel(lattice) + to_chat(user, span_notice("You reinforce the foamed plating with tiling.")) + playsound(src, 'sound/items/weapons/Genhit.ogg', 50, TRUE) + ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + return ITEM_INTERACT_SUCCESS +/turf/open/floor/plating/foam/attackby(obj/item/attacking_item, mob/user, list/modifiers) playsound(src, 'sound/items/weapons/tap.ogg', 100, TRUE) //The attack sound is muffled by the foam itself user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 2f09fbe2e9f4..8de10a7ea060 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -58,6 +58,7 @@ if(!smoothing_flags) update_appearance() RegisterSignal(src, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(on_atom_inited)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_LAVA_STOPPED), PROC_REF(drop_contents_into_lava)) /turf/open/lava/Destroy() checked_atoms = null @@ -348,6 +349,17 @@ return FALSE +/** + * Called when a lava stopper (Catwalks/boulder platforms) is removed and it's contents need to be subjected to the lava underneath. + */ +/turf/open/lava/proc/drop_contents_into_lava() + SIGNAL_HANDLER + balloon_alert_to_viewers("[pick("splash","pshhhh","hiss","blorble")]!") + playsound(src, 'sound/items/match_strike.ogg', 15, TRUE) + for(var/atom/movable/each_content as anything in contents) + on_atom_inited(src, each_content) + return TRUE + /turf/open/lava/can_cross_safely(atom/movable/crossing) return HAS_TRAIT(src, TRAIT_LAVA_STOPPED) || HAS_TRAIT(crossing, immunity_trait ) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 39bd54253b89..28439ffc9a50 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /// Any floor or wall. What makes up the station and the rest of the map. /turf icon = 'icons/turf/floors.dmi' + abstract_type = /turf datum_flags = DF_STATIC_OBJECT vis_flags = VIS_INHERIT_ID // Important for interaction with and visualization of openspace. luminosity = 1 diff --git a/code/game/world.dm b/code/game/world.dm index a118f587a0a5..581d2fc00b7e 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -167,6 +167,9 @@ GLOBAL_VAR(restart_counter) load_poll_data() + // Initialize RETA system - code/modules/reta/reta_system.dm + reta_init_config() + LoadVerbs(/datum/verbs/menu) if(fexists(RESTART_COUNTER_PATH)) diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 4574956d268b..71b2c866f0dd 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -326,7 +326,7 @@ var/department_name = department.department_name output += "
    " - for(var/datum/job/job_datum as anything in department.department_jobs) + for(var/datum/job/job_datum as anything in department.get_jobban_jobs()) if(break_counter > 0 && (break_counter % 3 == 0)) output += "
    " break_counter++ diff --git a/code/modules/admin/verbs/map_export.dm b/code/modules/admin/verbs/map_export.dm index 0546eb3723c3..398f85170fe4 100644 --- a/code/modules/admin/verbs/map_export.dm +++ b/code/modules/admin/verbs/map_export.dm @@ -177,7 +177,7 @@ GLOBAL_LIST_INIT(save_file_chars, list( if(istext(value)) //Prevent symbols from being because otherwise you can name something // [";},/obj/item/gun/energy/laser/instakill{name="da epic gun] and spawn yourself an instakill gun. - return "\"[hashtag_newlines_and_tabs("[value]", list("{"="", "}"="", "\""="", ";"="", ","=""))]\"" + return "\"[hashtag_newlines_and_tabs("[value]", list("{"="", "}"="", "\""="", ","=""))]\"" if(isnum(value) || ispath(value)) return "[value]" if(islist(value)) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index f5958a127f43..f708ec696e0a 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -1,4 +1,5 @@ /obj/item/antag_spawner + abstract_type = /obj/item/antag_spawner throw_speed = 1 throw_range = 5 w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index 90d2d5a90538..febfa8758a4d 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -2,6 +2,7 @@ icon = 'icons/obj/antags/abductor.dmi' lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi' + abstract_type = /obj/item/abductor /obj/item/proc/AbductorCheck(mob/user) if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING)) @@ -445,7 +446,6 @@ Return to step 11 of normal process."} if(do_after(user, time_to_cuff, carbon_victim) && carbon_victim.canBeHandcuffed()) if(!carbon_victim.handcuffed) carbon_victim.set_handcuffed(new /obj/item/restraints/handcuffs/energy/used(carbon_victim)) - carbon_victim.update_handcuffed() to_chat(user, span_notice("You restrain [carbon_victim].")) log_combat(user, carbon_victim, "handcuffed") else diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 85fa4b537806..82b0120a7b6f 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -3,6 +3,7 @@ */ /datum/action/changeling + abstract_type = /datum/action/changeling name = "Prototype Sting - Debug button, ahelp this" background_icon_state = "bg_changeling" overlay_icon_state = "bg_changeling_border" diff --git a/code/modules/antagonists/changeling/powers/mimic_voice.dm b/code/modules/antagonists/changeling/powers/mimic_voice.dm index 99f543045804..e1d895d2b14e 100644 --- a/code/modules/antagonists/changeling/powers/mimic_voice.dm +++ b/code/modules/antagonists/changeling/powers/mimic_voice.dm @@ -8,11 +8,11 @@ req_human = TRUE // Fake Voice -/datum/action/changeling/mimicvoice/sting_action(mob/user) +/datum/action/changeling/mimicvoice/sting_action(mob/living/carbon/human/user) var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) - if(changeling.mimicing) - changeling.mimicing = "" + if(user.override_voice) changeling.chem_recharge_slowdown -= 0.25 + user.override_voice = "" to_chat(user, span_notice("We return our vocal glands to their original position.")) return @@ -20,16 +20,16 @@ if(!mimic_voice) return ..() - changeling.mimicing = mimic_voice changeling.chem_recharge_slowdown += 0.25 + user.override_voice = mimic_voice to_chat(user, span_notice("We shape our glands to take the voice of [mimic_voice], this will slow down regenerating chemicals while active.")) to_chat(user, span_notice("Use this power again to return to our original voice and return chemical production to normal levels.")) return TRUE -/datum/action/changeling/mimicvoice/Remove(mob/user) +/datum/action/changeling/mimicvoice/Remove(mob/living/carbon/human/user) var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) - if(changeling?.mimicing) - changeling.chem_recharge_slowdown = max(0, changeling.chem_recharge_slowdown - 0.25) - changeling.mimicing = "" + if(user.override_voice) + changeling?.chem_recharge_slowdown = max(0, changeling.chem_recharge_slowdown - 0.25) + user.override_voice = "" to_chat(user, span_notice("Our vocal glands return to their original position.")) . = ..() diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 028ba5aaa96d..dbf97c2f6f44 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -11,6 +11,7 @@ //Parent to shields and blades because muh copypasted code. /datum/action/changeling/weapon + abstract_type = /datum/action/changeling/weapon name = "Organic Weapon" desc = "Go tell a coder if you see this" helptext = "Yell at Miauw and/or Perakp" @@ -87,6 +88,7 @@ //Parent to space suits and armor. /datum/action/changeling/suit + abstract_type = /datum/action/changeling/suit name = "Organic Suit" desc = "Go tell a coder if you see this" helptext = "Yell at Miauw and/or Perakp" diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 20519d2d8b73..81b62be3df74 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -9,6 +9,7 @@ /obj/item/clothing/glasses/changeling name = "flesh" + spawn_blacklisted = TRUE item_flags = DROPDEL //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -24,6 +25,7 @@ /obj/item/clothing/under/changeling name = "flesh" + spawn_blacklisted = TRUE item_flags = DROPDEL //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -39,6 +41,7 @@ /obj/item/clothing/suit/changeling name = "flesh" + spawn_blacklisted = TRUE allowed = list(/obj/item/changeling) item_flags = DROPDEL @@ -56,6 +59,7 @@ /obj/item/clothing/head/changeling name = "flesh" icon_state = null + spawn_blacklisted = TRUE item_flags = DROPDEL //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -71,6 +75,7 @@ /obj/item/clothing/shoes/changeling name = "flesh" + spawn_blacklisted = TRUE item_flags = DROPDEL //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -86,6 +91,7 @@ /obj/item/clothing/gloves/changeling name = "flesh" + spawn_blacklisted = TRUE item_flags = DROPDEL //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -101,6 +107,7 @@ /obj/item/clothing/mask/changeling name = "flesh" + spawn_blacklisted = TRUE item_flags = DROPDEL //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -116,6 +123,7 @@ /obj/item/changeling name = "flesh" + spawn_blacklisted = TRUE slot_flags = ALL item_flags = DROPDEL diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index db66083062a3..1bafdb7a3ef8 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -573,7 +573,6 @@ if(do_after(user, 3 SECONDS, C)) if(!C.handcuffed) C.set_handcuffed(new /obj/item/restraints/handcuffs/energy/cult/used(C)) - C.update_handcuffed() C.adjust_silence(10 SECONDS) to_chat(user, span_notice("You shackle [C].")) log_combat(user, C, "shackled") diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 9e9cc36c948f..210baad0dda1 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -334,13 +334,7 @@ sac_target.visible_message(span_danger("[sac_target] begins to shudder violenty as dark tendrils begin to drag them into thin air!")) sac_target.set_handcuffed(new /obj/item/restraints/handcuffs/energy/cult(sac_target)) - sac_target.update_handcuffed() - - if(sac_target.legcuffed) - sac_target.legcuffed.forceMove(sac_target.drop_location()) - sac_target.legcuffed.dropped(sac_target) - sac_target.legcuffed = null - sac_target.update_worn_legcuffs() + sac_target.dropItemToGround(sac_target.legcuffed, TRUE) sac_target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 85, 150) sac_target.do_jitter_animation() diff --git a/code/modules/antagonists/heretic/magic/shadow_cloak.dm b/code/modules/antagonists/heretic/magic/shadow_cloak.dm index 0012495867ae..825e1874c786 100644 --- a/code/modules/antagonists/heretic/magic/shadow_cloak.dm +++ b/code/modules/antagonists/heretic/magic/shadow_cloak.dm @@ -141,7 +141,7 @@ animate(cloak_image, alpha = 255, 0.2 SECONDS) owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, id, cloak_image) // Add the relevant traits and modifiers - owner.add_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) + owner.add_traits(list(TRAIT_UNKNOWN_APPEARANCE, TRAIT_UNKNOWN_VOICE, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) owner.add_movespeed_modifier(/datum/movespeed_modifier/shadow_cloak) owner.add_actionspeed_modifier(/datum/actionspeed_modifier/shadow_cloak) // Register signals to cause effects @@ -157,7 +157,7 @@ owner.remove_alt_appearance(id) QDEL_NULL(cloak_image) // Remove traits and modifiers - owner.remove_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) + owner.remove_traits(list(TRAIT_UNKNOWN_APPEARANCE, TRAIT_UNKNOWN_VOICE, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) owner.remove_movespeed_modifier(/datum/movespeed_modifier/shadow_cloak) owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/shadow_cloak) // Clear signals diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index ab327817735a..3da3c43e1ebd 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -345,11 +345,11 @@ alert_type = /atom/movable/screen/alert/status_effect/moon_grasp_hide /datum/status_effect/moon_grasp_hide/on_apply() - owner.add_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) + owner.add_traits(list(TRAIT_UNKNOWN_APPEARANCE, TRAIT_UNKNOWN_VOICE, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) return TRUE /datum/status_effect/moon_grasp_hide/on_remove() - owner.remove_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) + owner.remove_traits(list(TRAIT_UNKNOWN_APPEARANCE, TRAIT_UNKNOWN_VOICE, TRAIT_SILENT_FOOTSTEPS), TRAIT_STATUS_EFFECT(id)) /atom/movable/screen/alert/status_effect/moon_grasp_hide name = "Blessing of The Moon" diff --git a/code/modules/antagonists/ninja/ninja_stars.dm b/code/modules/antagonists/ninja/ninja_stars.dm index 2e5817f05df5..079289075924 100644 --- a/code/modules/antagonists/ninja/ninja_stars.dm +++ b/code/modules/antagonists/ninja/ninja_stars.dm @@ -1,18 +1,48 @@ -/** - * # Ninja Throwing Star - * - * a throwing star which specifically makes sure you know it came from a real ninja. - * - * The most important item in the entire codebase, as without it we would all cease to exist. - * Inherits everything that makes it interesting the stamina throwing star, but the most - * important change made is that its name specifically has the prefix, 'ninja' in it. - * This provides the detective role with information to play off of by ensuring that his - * assumption that a space ninja is aboard the ship to be true when he find 20 of these in - * the captain's back. Along with this, its throwforce is 10 instead of the 5 of the stamina - * throwing star, meaning it'll do a little more damage than the stamina throwing star does as well. - * Changes to this item need to be approved by all maintainers, so if you do change it, make sure - * you go through the proper channels, lest you get permabanned. Do I make myself clear? - */ /obj/item/throwing_star/stamina/ninja - name = "ninja throwing star" - throwforce = 10 + name = "energy throwing star" + desc = "An evolution of the traditional steel shuriken, commonly used by Spider Clan initiates. \ + When thrown or embedded, its internal energy emitter releases an electromagnetic pulse." + icon_state = "eshuriken" + force = 8 + throwforce = 12 + armour_penetration = 75 + item_flags = DROPDEL + embed_type = /datum/embedding/throwing_star/stamina/energy + custom_materials = null + resistance_flags = FIRE_PROOF | ACID_PROOF | UNACIDABLE + +/obj/item/throwing_star/stamina/ninja/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_UNCATCHABLE, INNATE_TRAIT) + +/obj/item/throwing_star/stamina/ninja/on_thrown(mob/living/carbon/user, atom/target) + item_flags &= ~DROPDEL // Throwing = dropping = dropdel, not ideal. Remove it before that happens + return ..() + +/obj/item/throwing_star/stamina/ninja/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + item_flags |= DROPDEL // Just in case, re-apply drop del now + hit_atom.emp_act(EMP_HEAVY) + new /obj/effect/temp_visual/emp/pulse(get_turf(src)) + new /obj/effect/temp_visual/emp(get_turf(hit_atom)) + playsound(src, 'sound/effects/empulse.ogg', 60, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE) + visible_message("[src] emits an electromagnetic pulse upon impact!") + if(isturf(loc)) // if we didn't embed in anything, go away + qdel(src) + +/datum/embedding/throwing_star/stamina/energy + COOLDOWN_DECLARE(emp_cd) + +/datum/embedding/throwing_star/stamina/energy/on_successful_embed(mob/living/carbon/victim, obj/item/bodypart/target_limb) + COOLDOWN_START(src, emp_cd, 6 SECONDS) + parent.item_flags |= DROPDEL // Just in case again, re-apply drop del now + +/datum/embedding/throwing_star/stamina/energy/process_effect(seconds_per_tick) + if(!COOLDOWN_FINISHED(src, emp_cd)) + return + + owner.emp_act(EMP_LIGHT) + COOLDOWN_START(src, emp_cd, 6 SECONDS) + playsound(owner, 'sound/effects/empulse.ogg', 30, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + owner.show_message("[parent] flares brightly, releasing an electromagnetic pulse!", MSG_VISUAL) + new /obj/effect/temp_visual/emp(get_turf(owner)) diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm index c5100bed01b2..d009d9b5d481 100644 --- a/code/modules/antagonists/paradox_clone/paradox_clone.dm +++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm @@ -8,9 +8,6 @@ suicide_cry = "THERE CAN BE ONLY ONE!!" preview_outfit = /datum/outfit/paradox_clone - ///Weakref to the mind of the original, the clone's target. - var/datum/weakref/original_ref - /datum/antagonist/paradox_clone/get_preview_icon() var/icon/final_icon = render_preview_outfit(preview_outfit) @@ -28,27 +25,27 @@ return clone_icon -/datum/antagonist/paradox_clone/Destroy() - original_ref = null - return ..() - -/datum/antagonist/paradox_clone/proc/setup_clone() - var/datum/mind/original_mind = original_ref?.resolve() +/datum/antagonist/paradox_clone/proc/setup_clone(datum/mind/original_mind) + if(isnull(original_mind)) + CRASH("Tried to set up a paradox clone without an original mind!") - var/datum/objective/assassinate/paradox_clone/kill = new + var/datum/objective/accept_no_substitutes/kill = new() kill.owner = owner - kill.target = original_mind - kill.update_explanation_text() + kill.set_target_name(original_mind.name || "Unknown") objectives += kill + var/datum/objective/paradox_clone_replace/replace = new() + replace.owner = owner + replace.name_and_job = "[original_mind.name], the [original_mind.assigned_role.title]" + replace.update_explanation_text() + objectives += replace + owner.set_assigned_role(SSjob.get_job_type(/datum/job/paradox_clone)) //clone doesnt show up on message lists var/obj/item/modular_computer/pda/messenger = locate() in owner.current - if(messenger) - var/datum/computer_file/program/messenger/message_app = locate() in messenger.stored_files - if(message_app) - message_app.invisible = TRUE + var/datum/computer_file/program/messenger/message_app = locate() in messenger?.stored_files + message_app?.invisible = TRUE //dont want anyone noticing there's two now var/mob/living/carbon/human/clone_human = owner.current @@ -64,6 +61,17 @@ /datum/antagonist/paradox_clone/roundend_report_header() return span_header("A paradox clone appeared on the station!
    ") +/datum/objective/paradox_clone_replace + name = "clone replace" + /// Name and job of the original to replace + var/name_and_job + +/datum/objective/paradox_clone_replace/update_explanation_text() + explanation_text = "Take [name_and_job || "someone's"]'s place. Avoid collateral damage - remember, your mission is to blend in!" + +/datum/objective/paradox_clone_replace/check_completion() + return completed || considered_alive(owner) + /datum/outfit/paradox_clone name = "Paradox Clone (Preview only)" @@ -71,20 +79,6 @@ gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/soft/purple -/** - * Paradox clone assassinate objective - * Similar to the original, but with a different flavortext. - */ -/datum/objective/assassinate/paradox_clone - name = "clone assassinate" - -/datum/objective/assassinate/paradox_clone/update_explanation_text() - . = ..() - if(!target?.current) - explanation_text = "Free Objective" - CRASH("WARNING! [ADMIN_LOOKUPFLW(owner)] paradox clone objectives forged without an original!") - explanation_text = "Murder and replace [target.name], the [!target_role_type ? target.assigned_role.title : english_list(target.get_special_roles())]. Remember, your mission is to blend in, do not kill anyone else unless you have to!" - ///Static bluespace stream used in its ghost poll icon. /obj/effect/bluespace_stream name = "bluespace stream" diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index 105448189678..51a7a5d055a0 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -367,7 +367,7 @@ ///there are still licing mobs inside that item. Stop, don't sell it ffs. if(locate(/mob/living) in item_on_pad.get_all_contents()) continue - export_item_and_contents(item_on_pad, apply_elastic = FALSE, dry_run = dry_run, delete_unsold = FALSE, external_report = report, ignore_typecache = nosell_typecache, export_market = EXPORT_MARKET_PIRACY) + export_item_and_contents(item_on_pad, apply_elastic = FALSE, dry_run = dry_run, delete_unsold = FALSE, external_report = report, ignore_typecache = nosell_typecache, export_markets = list(EXPORT_MARKET_STATION, EXPORT_MARKET_PIRACY)) return report /// Prepares to sell the items on the pad diff --git a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm index 5f3e2387a351..229b0dc7ae1d 100644 --- a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm +++ b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm @@ -168,7 +168,7 @@ GLOBAL_DATUM_INIT(objective_machine_handler, /datum/objective_target_machine_han return TRUE target.AddComponent(\ /datum/component/interaction_booby_trap,\ - additional_triggers = list(COMSIG_ORM_COLLECTED_ORE),\ + /*additional_triggers = list(COMSIG_ORM_COLLECTED_ORE), (tgcoderes decided to do some refactoring, of course that broke this line of code, too lazy to readd it once again*/\ on_triggered_callback = CALLBACK(src, PROC_REF(on_triggered)),\ on_defused_callback = CALLBACK(src, PROC_REF(on_defused)),\ ) diff --git a/code/modules/antagonists/traitor/traitor_objective.dm b/code/modules/antagonists/traitor/traitor_objective.dm index ecfebaddeadc..c1be5b1873dc 100644 --- a/code/modules/antagonists/traitor/traitor_objective.dm +++ b/code/modules/antagonists/traitor/traitor_objective.dm @@ -42,8 +42,6 @@ var/progression_cost_coeff = 0 /// The percentage that this objective has been increased or decreased by as a result of progression. Used by the UI var/original_progression = 0 - /// Abstract type that won't be included as a possible objective - var/abstract_type = /datum/traitor_objective /// The duplicate type that will be used to check for duplicates. /// If undefined, this will either take from the abstract type or the type of the objective itself var/duplicate_type = null diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index 7f467a411b42..7a2fc5a8f5aa 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -7,6 +7,8 @@ desc = "Placeholder. Yell at Firecage if you SOMEHOW see this." icon = 'icons/obj/art/statue.dmi' icon_state = "" + /// Abstract root type + abstract_type = /obj/structure/statue density = TRUE anchored = FALSE max_integrity = 100 @@ -18,8 +20,6 @@ var/impressiveness = 15 /// Art component subtype added to this statue var/art_type = /datum/element/art - /// Abstract root type - var/abstract_type = /obj/structure/statue /obj/structure/statue/Initialize(mapload) . = ..() diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 2e6037ff53d0..72a2395641d9 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -37,14 +37,13 @@ suicide_mob = REF(user) return MANUAL_SUICIDE_NONLETHAL -/obj/item/assembly/signaler/proc/manual_suicide(datum/mind/suicidee) - var/mob/living/user = suicidee.current +/obj/item/assembly/signaler/proc/manual_suicide() + var/mob/living/user = suicider.current if(!istype(user)) return - if(suicide_mob == REF(user)) - user.visible_message(span_suicide("[user]'s [src] receives a signal, killing [user.p_them()] instantly!")) - else - user.visible_message(span_suicide("[user]'s [src] receives a signal and [user.p_they()] die[user.p_s()] like a gamer!")) + if(suicide_mob != REF(user)) + return + user.visible_message(span_suicide("[user]'s [src] receives a signal, killing [user.p_them()] instantly!")) user.set_suicide(TRUE) user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something. user.death(FALSE) @@ -164,7 +163,7 @@ if(signal.data["code"] != code) return if(suicider) - manual_suicide(suicider) + manual_suicide() return // If the holder is a TTV, we want to store the last received signal to incorporate it into TTV logging, else wipe it. diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index ffe5eab54cef..62375dc06434 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -62,7 +62,7 @@ listening = FALSE say("Activation message is '[recorded]'.", sanitize = FALSE, language = message_language) if(RECOGNIZER_MODE) - recorded = speaker.GetVoice() + recorded = speaker.get_voice() listening = FALSE say("Your voice pattern is saved.", language = message_language) if(VOICE_SENSOR_MODE) @@ -81,7 +81,7 @@ if(raw_message == recorded) return TRUE if(RECOGNIZER_MODE) - if(speaker.GetVoice() == recorded) + if(speaker.get_voice() == recorded) return TRUE if(VOICE_SENSOR_MODE) if(length(raw_message)) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index a50cefb34dc5..b9f59c3208df 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -87,16 +87,14 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) /datum/gas_mixture/proc/heat_capacity(data = MOLES) var/list/cached_gases = gases . = 0 - for(var/id in cached_gases) - var/gas_data = cached_gases[id] + for(var/_id, gas_data in cached_gases) . += gas_data[data] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT] /// Same as above except vacuums return HEAT_CAPACITY_VACUUM /datum/gas_mixture/turf/heat_capacity(data = MOLES) var/list/cached_gases = gases . = 0 - for(var/id in cached_gases) - var/gas_data = cached_gases[id] + for(var/_id, gas_data in cached_gases) . += gas_data[data] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT] if(!.) . += HEAT_CAPACITY_VACUUM //we want vacuums in turfs to have the same heat capacity as space diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index c040e30db3fc..ae81c16def10 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -121,7 +121,7 @@ rarity = 500 purchaseable = TRUE base_value = 0.5 - desc = "Water, in gas form. Makes things slippery." + desc = "Water, in gas form. Makes floors slippery and washes items on them." primary_color = "#b0c4de" /datum/gas/hypernoblium diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 7a76dc6ec4ea..8e1e4ad1f5e9 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -111,6 +111,9 @@ if(-INFINITY to WATER_VAPOR_DEPOSITION_POINT) if(location?.freeze_turf()) consumed = MOLES_GAS_VISIBLE + var/datum/component/wet_floor/wet_floor = location?.GetComponent(/datum/component/wet_floor) + if(wet_floor && wet_floor.highest_strength == TURF_WET_PERMAFROST) + . |= VOLATILE_REACTION if(WATER_VAPOR_DEPOSITION_POINT to WATER_VAPOR_CONDENSATION_POINT) if(!isgroundlessturf(location) && !isnoslipturf(location)) location.water_vapor_gas_act() @@ -119,7 +122,7 @@ if(consumed) air.gases[/datum/gas/water_vapor][MOLES] -= consumed SET_REACTION_RESULTS(consumed) - . = REACTING + . |= REACTING /** @@ -141,13 +144,15 @@ /datum/gas_reaction/miaster/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases + var/list/water_vapor = cached_gases[/datum/gas/water_vapor] + var/list/miasma = cached_gases[/datum/gas/miasma] // As the name says it, it needs to be dry - if(cached_gases[/datum/gas/water_vapor] && cached_gases[/datum/gas/water_vapor][MOLES] / air.total_moles() > MIASTER_STERILIZATION_MAX_HUMIDITY) + if(water_vapor && water_vapor[MOLES] / air.total_moles() > MIASTER_STERILIZATION_MAX_HUMIDITY) return NO_REACTION //Replace miasma with oxygen - var/cleaned_air = min(cached_gases[/datum/gas/miasma][MOLES], MIASTER_STERILIZATION_RATE_BASE + (air.temperature - MIASTER_STERILIZATION_TEMP) / MIASTER_STERILIZATION_RATE_SCALE) - cached_gases[/datum/gas/miasma][MOLES] -= cleaned_air + var/cleaned_air = min(miasma[MOLES], MIASTER_STERILIZATION_RATE_BASE + (air.temperature - MIASTER_STERILIZATION_TEMP) / MIASTER_STERILIZATION_RATE_SCALE) + miasma[MOLES] -= cleaned_air ASSERT_GAS(/datum/gas/oxygen, air) cached_gases[/datum/gas/oxygen][MOLES] += cleaned_air @@ -182,6 +187,7 @@ ) /datum/gas_reaction/plasmafire/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION // This reaction should proceed faster at higher temperatures. var/temperature = air.temperature var/temperature_scale = 0 @@ -190,28 +196,30 @@ else temperature_scale = (temperature - PLASMA_MINIMUM_BURN_TEMPERATURE) / (PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) if(temperature_scale <= 0) - return NO_REACTION + return var/oxygen_burn_ratio = OXYGEN_BURN_RATIO_BASE - temperature_scale var/plasma_burn_rate = 0 var/super_saturation = FALSE // Whether we should make tritium. var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow - switch(cached_gases[/datum/gas/oxygen][MOLES] / cached_gases[/datum/gas/plasma][MOLES]) + var/list/oxygen = cached_gases[/datum/gas/oxygen] + var/list/plasma = cached_gases[/datum/gas/plasma] + switch(oxygen[MOLES] / plasma[MOLES]) if(SUPER_SATURATION_THRESHOLD to INFINITY) - plasma_burn_rate = (cached_gases[/datum/gas/plasma][MOLES] / PLASMA_BURN_RATE_DELTA) * temperature_scale + plasma_burn_rate = (plasma[MOLES] / PLASMA_BURN_RATE_DELTA) * temperature_scale super_saturation = TRUE // Begin to form tritium if(PLASMA_OXYGEN_FULLBURN to SUPER_SATURATION_THRESHOLD) - plasma_burn_rate = (cached_gases[/datum/gas/plasma][MOLES] / PLASMA_BURN_RATE_DELTA) * temperature_scale + plasma_burn_rate = (plasma[MOLES] / PLASMA_BURN_RATE_DELTA) * temperature_scale else - plasma_burn_rate = ((cached_gases[/datum/gas/oxygen][MOLES] / PLASMA_OXYGEN_FULLBURN) / PLASMA_BURN_RATE_DELTA) * temperature_scale + plasma_burn_rate = ((oxygen[MOLES] / PLASMA_OXYGEN_FULLBURN) / PLASMA_BURN_RATE_DELTA) * temperature_scale if(plasma_burn_rate < MINIMUM_HEAT_CAPACITY) - return NO_REACTION + return var/old_heat_capacity = air.heat_capacity() - plasma_burn_rate = min(plasma_burn_rate, cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly - cached_gases[/datum/gas/plasma][MOLES] = QUANTIZE(cached_gases[/datum/gas/plasma][MOLES] - plasma_burn_rate) - cached_gases[/datum/gas/oxygen][MOLES] = QUANTIZE(cached_gases[/datum/gas/oxygen][MOLES] - (plasma_burn_rate * oxygen_burn_ratio)) + plasma_burn_rate = min(plasma_burn_rate, plasma[MOLES], oxygen[MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly + plasma[MOLES] = QUANTIZE(plasma[MOLES] - plasma_burn_rate) + oxygen[MOLES] = QUANTIZE(oxygen[MOLES] - (plasma_burn_rate * oxygen_burn_ratio)) if (super_saturation) ASSERT_GAS(/datum/gas/tritium, air) cached_gases[/datum/gas/tritium][MOLES] += plasma_burn_rate @@ -234,7 +242,7 @@ if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) location.hotspot_expose(temperature, CELL_VOLUME) - return REACTING + . |= REACTING | VOLATILE_REACTION /** @@ -259,16 +267,19 @@ ) /datum/gas_reaction/h2fire/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow + var/hydrogen = cached_gases[/datum/gas/hydrogen] + var/oxygen = cached_gases[/datum/gas/oxygen] var/old_heat_capacity = air.heat_capacity() var/temperature = air.temperature - var/burned_fuel = min(cached_gases[/datum/gas/hydrogen][MOLES] / FIRE_HYDROGEN_BURN_RATE_DELTA, cached_gases[/datum/gas/oxygen][MOLES] / (FIRE_HYDROGEN_BURN_RATE_DELTA * HYDROGEN_OXYGEN_FULLBURN), cached_gases[/datum/gas/hydrogen][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5)) - if(burned_fuel <= 0 || cached_gases[/datum/gas/hydrogen][MOLES] - burned_fuel < 0 || cached_gases[/datum/gas/oxygen][MOLES] - burned_fuel * 0.5 < 0) //Shouldn't produce gas from nothing. - return NO_REACTION + var/burned_fuel = min(hydrogen[MOLES] / FIRE_HYDROGEN_BURN_RATE_DELTA, oxygen[MOLES] / (FIRE_HYDROGEN_BURN_RATE_DELTA * HYDROGEN_OXYGEN_FULLBURN), hydrogen[MOLES], oxygen[MOLES] * INVERSE(0.5)) + if(burned_fuel <= 0 || hydrogen[MOLES] - burned_fuel < 0 || oxygen[MOLES] - burned_fuel * 0.5 < 0) //Shouldn't produce gas from nothing. + return - cached_gases[/datum/gas/hydrogen][MOLES] -= burned_fuel - cached_gases[/datum/gas/oxygen][MOLES] -= burned_fuel * 0.5 + hydrogen[MOLES] -= burned_fuel + oxygen[MOLES] -= burned_fuel * 0.5 ASSERT_GAS(/datum/gas/water_vapor, air) cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel @@ -287,7 +298,7 @@ if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) location.hotspot_expose(temperature, CELL_VOLUME) - return burned_fuel ? REACTING : NO_REACTION + . |= REACTING | VOLATILE_REACTION /** @@ -313,16 +324,19 @@ ) /datum/gas_reaction/tritfire/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow + var/tritium = cached_gases[/datum/gas/tritium] + var/oxygen = cached_gases[/datum/gas/oxygen] var/old_heat_capacity = air.heat_capacity() var/temperature = air.temperature - var/burned_fuel = min(cached_gases[/datum/gas/tritium][MOLES] / FIRE_TRITIUM_BURN_RATE_DELTA, cached_gases[/datum/gas/oxygen][MOLES] / (FIRE_TRITIUM_BURN_RATE_DELTA * TRITIUM_OXYGEN_FULLBURN), cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5)) - if(burned_fuel <= 0 || cached_gases[/datum/gas/tritium][MOLES] - burned_fuel < 0 || cached_gases[/datum/gas/oxygen][MOLES] - burned_fuel * 0.5 < 0) //Shouldn't produce gas from nothing. - return NO_REACTION + var/burned_fuel = min(tritium[MOLES] / FIRE_TRITIUM_BURN_RATE_DELTA, oxygen[MOLES] / (FIRE_TRITIUM_BURN_RATE_DELTA * TRITIUM_OXYGEN_FULLBURN), tritium[MOLES], oxygen[MOLES] * INVERSE(0.5)) + if(burned_fuel <= 0 || tritium[MOLES] - burned_fuel < 0 || oxygen[MOLES] - burned_fuel * 0.5 < 0) //Shouldn't produce gas from nothing. + return - cached_gases[/datum/gas/tritium][MOLES] -= burned_fuel - cached_gases[/datum/gas/oxygen][MOLES] -= burned_fuel * 0.5 + tritium[MOLES] -= burned_fuel + oxygen[MOLES] -= burned_fuel * 0.5 ASSERT_GAS(/datum/gas/water_vapor, air) cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel @@ -350,7 +364,7 @@ if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) location.hotspot_expose(temperature, CELL_VOLUME) - return burned_fuel ? REACTING : NO_REACTION + . |= REACTING | VOLATILE_REACTION @@ -376,6 +390,7 @@ ) /datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION var/temperature = air.temperature var/temperature_scale if(temperature < FREON_TERMINAL_TEMPERATURE) //stop the reaction when too cold @@ -385,23 +400,25 @@ else temperature_scale = (FREON_MAXIMUM_BURN_TEMPERATURE - temperature) / (FREON_MAXIMUM_BURN_TEMPERATURE - FREON_TERMINAL_TEMPERATURE) //calculate the scale based on the temperature if (temperature_scale <= 0) - return NO_REACTION + return var/oxygen_burn_ratio = OXYGEN_BURN_RATIO_BASE - temperature_scale var/freon_burn_rate var/list/cached_gases = air.gases - if(cached_gases[/datum/gas/oxygen][MOLES] < cached_gases[/datum/gas/freon][MOLES] * FREON_OXYGEN_FULLBURN) - freon_burn_rate = ((cached_gases[/datum/gas/oxygen][MOLES] / FREON_OXYGEN_FULLBURN) / FREON_BURN_RATE_DELTA) * temperature_scale + var/freon = cached_gases[/datum/gas/freon] + var/oxygen = cached_gases[/datum/gas/oxygen] + if(oxygen[MOLES] < freon[MOLES] * FREON_OXYGEN_FULLBURN) + freon_burn_rate = ((oxygen[MOLES] / FREON_OXYGEN_FULLBURN) / FREON_BURN_RATE_DELTA) * temperature_scale else freon_burn_rate = (cached_gases[/datum/gas/freon][MOLES] / FREON_BURN_RATE_DELTA) * temperature_scale if (freon_burn_rate < MINIMUM_HEAT_CAPACITY) - return NO_REACTION + return var/old_heat_capacity = air.heat_capacity() - freon_burn_rate = min(freon_burn_rate, cached_gases[/datum/gas/freon][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly - cached_gases[/datum/gas/freon][MOLES] = QUANTIZE(cached_gases[/datum/gas/freon][MOLES] - freon_burn_rate) - cached_gases[/datum/gas/oxygen][MOLES] = QUANTIZE(cached_gases[/datum/gas/oxygen][MOLES] - (freon_burn_rate * oxygen_burn_ratio)) + freon_burn_rate = min(freon_burn_rate, freon[MOLES], oxygen[MOLES] * INVERSE(oxygen_burn_ratio)) //Ensures matter is conserved properly + freon[MOLES] = QUANTIZE(freon[MOLES] - freon_burn_rate) + oxygen[MOLES] = QUANTIZE(oxygen[MOLES] - (freon_burn_rate * oxygen_burn_ratio)) ASSERT_GAS(/datum/gas/carbon_dioxide, air) cached_gases[/datum/gas/carbon_dioxide][MOLES] += freon_burn_rate @@ -420,7 +437,7 @@ if(temperature < FREON_MAXIMUM_BURN_TEMPERATURE) location.hotspot_expose(temperature, CELL_VOLUME) - return REACTING + . |= REACTING | VOLATILE_REACTION // N2O @@ -449,13 +466,15 @@ /datum/gas_reaction/nitrousformation/react(datum/gas_mixture/air) var/list/cached_gases = air.gases - var/heat_efficiency = min(cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5), cached_gases[/datum/gas/nitrogen][MOLES]) - if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficiency * 0.5 < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficiency < 0)) + var/oxygen = cached_gases[/datum/gas/oxygen] + var/nitrogen = cached_gases[/datum/gas/nitrogen] + var/heat_efficiency = min(oxygen[MOLES] * INVERSE(0.5), nitrogen[MOLES]) + if ((oxygen[MOLES] - heat_efficiency * 0.5 < 0 ) || (nitrogen[MOLES] - heat_efficiency < 0)) return NO_REACTION // Shouldn't produce gas from nothing. var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficiency * 0.5 - cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficiency + oxygen[MOLES] -= heat_efficiency * 0.5 + nitrogen[MOLES] -= heat_efficiency ASSERT_GAS(/datum/gas/nitrous_oxide, air) cached_gases[/datum/gas/nitrous_oxide][MOLES] += heat_efficiency @@ -488,15 +507,14 @@ /datum/gas_reaction/nitrous_decomp/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow + var/nitrous_oxide = cached_gases[/datum/gas/nitrous_oxide] var/temperature = air.temperature - var/burned_fuel = (cached_gases[/datum/gas/nitrous_oxide][MOLES] / N2O_DECOMPOSITION_RATE_DIVISOR) * ((temperature - N2O_DECOMPOSITION_MIN_SCALE_TEMP) * (temperature - N2O_DECOMPOSITION_MAX_SCALE_TEMP) / (N2O_DECOMPOSITION_SCALE_DIVISOR)) - if(burned_fuel <= 0) - return NO_REACTION - if(cached_gases[/datum/gas/nitrous_oxide][MOLES] - burned_fuel < 0) + var/burned_fuel = (nitrous_oxide[MOLES] / N2O_DECOMPOSITION_RATE_DIVISOR) * ((temperature - N2O_DECOMPOSITION_MIN_SCALE_TEMP) * (temperature - N2O_DECOMPOSITION_MAX_SCALE_TEMP) / (N2O_DECOMPOSITION_SCALE_DIVISOR)) + if(burned_fuel <= 0 || nitrous_oxide[MOLES] - burned_fuel < 0) return NO_REACTION var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/nitrous_oxide][MOLES] -= burned_fuel + nitrous_oxide[MOLES] -= burned_fuel ASSERT_GAS(/datum/gas/nitrogen, air) cached_gases[/datum/gas/nitrogen][MOLES] += burned_fuel ASSERT_GAS(/datum/gas/oxygen, air) @@ -507,7 +525,7 @@ var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity - return REACTING + . |= REACTING // BZ @@ -533,14 +551,16 @@ /datum/gas_reaction/bzformation/react(datum/gas_mixture/air) var/list/cached_gases = air.gases + var/nitrous_oxide = cached_gases[/datum/gas/nitrous_oxide] + var/plasma = cached_gases[/datum/gas/plasma] var/pressure = air.return_pressure() var/volume = air.return_volume() var/environment_effciency = volume/pressure //More volume and less pressure gives better rates - var/ratio_efficency = min(cached_gases[/datum/gas/nitrous_oxide][MOLES]/cached_gases[/datum/gas/plasma][MOLES], 1) //Less n2o than plasma give lower rates - var/nitrous_oxide_decomposed_factor = max(4 * (cached_gases[/datum/gas/plasma][MOLES] / (cached_gases[/datum/gas/nitrous_oxide][MOLES] + cached_gases[/datum/gas/plasma][MOLES]) - 0.75), 0) // Nitrous oxide decomposes when there are more than 3 parts plasma per n2o. - var/bz_formed = min(0.01 * ratio_efficency * environment_effciency, cached_gases[/datum/gas/nitrous_oxide][MOLES] * INVERSE(0.4), cached_gases[/datum/gas/plasma][MOLES] * INVERSE(0.8 * (1 - nitrous_oxide_decomposed_factor))) + var/ratio_efficency = min(nitrous_oxide[MOLES]/plasma[MOLES], 1) //Less n2o than plasma give lower rates + var/nitrous_oxide_decomposed_factor = max(4 * (plasma[MOLES] / (nitrous_oxide[MOLES] + plasma[MOLES]) - 0.75), 0) // Nitrous oxide decomposes when there are more than 3 parts plasma per n2o. + var/bz_formed = min(0.01 * ratio_efficency * environment_effciency, nitrous_oxide[MOLES] * INVERSE(0.4), plasma[MOLES] * INVERSE(0.8 * (1 - nitrous_oxide_decomposed_factor))) - if (cached_gases[/datum/gas/nitrous_oxide][MOLES] - bz_formed * 0.4 < 0 || cached_gases[/datum/gas/plasma][MOLES] - 0.8 * bz_formed * (1 - nitrous_oxide_decomposed_factor) < 0 || bz_formed <= 0) + if (nitrous_oxide[MOLES] - bz_formed * 0.4 < 0 || plasma[MOLES] - 0.8 * bz_formed * (1 - nitrous_oxide_decomposed_factor) < 0 || bz_formed <= 0) return NO_REACTION var/old_heat_capacity = air.heat_capacity() @@ -560,8 +580,8 @@ ASSERT_GAS(/datum/gas/bz, air) cached_gases[/datum/gas/bz][MOLES] += bz_formed * (1-nitrous_oxide_decomposed_factor) - cached_gases[/datum/gas/nitrous_oxide][MOLES] -= 0.4 * bz_formed - cached_gases[/datum/gas/plasma][MOLES] -= 0.8 * bz_formed * (1-nitrous_oxide_decomposed_factor) + nitrous_oxide[MOLES] -= 0.4 * bz_formed + plasma[MOLES] -= 0.8 * bz_formed * (1-nitrous_oxide_decomposed_factor) SET_REACTION_RESULTS(bz_formed) var/energy_released = bz_formed * (BZ_FORMATION_ENERGY + nitrous_oxide_decomposed_factor * (N2O_DECOMPOSITION_ENERGY - BZ_FORMATION_ENERGY)) @@ -596,14 +616,17 @@ /datum/gas_reaction/pluox_formation/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases - var/produced_amount = min(PLUOXIUM_FORMATION_MAX_RATE, cached_gases[/datum/gas/carbon_dioxide][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(0.5), cached_gases[/datum/gas/tritium][MOLES] * INVERSE(0.01)) - if (produced_amount <= 0 || cached_gases[/datum/gas/carbon_dioxide][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/oxygen][MOLES] - produced_amount * 0.5 < 0 || cached_gases[/datum/gas/tritium][MOLES] - produced_amount * 0.01 < 0) + var/list/carbon_dioxide = cached_gases[/datum/gas/carbon_dioxide] + var/list/oxygen = cached_gases[/datum/gas/oxygen] + var/list/tritium = cached_gases[/datum/gas/tritium] + var/produced_amount = min(PLUOXIUM_FORMATION_MAX_RATE, carbon_dioxide[MOLES], oxygen[MOLES] * INVERSE(0.5), tritium[MOLES] * INVERSE(0.01)) + if (produced_amount <= 0 || carbon_dioxide[MOLES] - produced_amount < 0 || oxygen[MOLES] - produced_amount * 0.5 < 0 || tritium[MOLES] - produced_amount * 0.01 < 0) return NO_REACTION var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/carbon_dioxide][MOLES] -= produced_amount - cached_gases[/datum/gas/oxygen][MOLES] -= produced_amount * 0.5 - cached_gases[/datum/gas/tritium][MOLES] -= produced_amount * 0.01 + carbon_dioxide[MOLES] -= produced_amount + oxygen[MOLES] -= produced_amount * 0.5 + tritium[MOLES] -= produced_amount * 0.01 ASSERT_GAS(/datum/gas/pluoxium, air) cached_gases[/datum/gas/pluoxium][MOLES] += produced_amount ASSERT_GAS(/datum/gas/hydrogen, air) @@ -642,17 +665,20 @@ /datum/gas_reaction/nitrium_formation/react(datum/gas_mixture/air) var/list/cached_gases = air.gases + var/list/tritium = cached_gases[/datum/gas/tritium] + var/list/nitrogen = cached_gases[/datum/gas/nitrogen] + var/list/bz = cached_gases[/datum/gas/bz] var/temperature = air.temperature - var/heat_efficiency = min(temperature / NITRIUM_FORMATION_TEMP_DIVISOR, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.05)) + var/heat_efficiency = min(temperature / NITRIUM_FORMATION_TEMP_DIVISOR, tritium[MOLES], nitrogen[MOLES], bz[MOLES] * INVERSE(0.05)) - if( heat_efficiency <= 0 || (cached_gases[/datum/gas/tritium][MOLES] - heat_efficiency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficiency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficiency * 0.05 < 0)) //Shouldn't produce gas from nothing. + if( heat_efficiency <= 0 || (tritium[MOLES] - heat_efficiency < 0 ) || (nitrogen[MOLES] - heat_efficiency < 0) || (bz[MOLES] - heat_efficiency * 0.05 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION var/old_heat_capacity = air.heat_capacity() ASSERT_GAS(/datum/gas/nitrium, air) - cached_gases[/datum/gas/tritium][MOLES] -= heat_efficiency - cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficiency - cached_gases[/datum/gas/bz][MOLES] -= heat_efficiency * 0.05 //bz gets consumed to balance the nitrium production and not make it too common and/or easy + tritium[MOLES] -= heat_efficiency + nitrogen[MOLES] -= heat_efficiency + bz[MOLES] -= heat_efficiency * 0.05 //bz gets consumed to balance the nitrium production and not make it too common and/or easy cached_gases[/datum/gas/nitrium][MOLES] += heat_efficiency SET_REACTION_RESULTS(heat_efficiency) @@ -685,17 +711,18 @@ /datum/gas_reaction/nitrium_decomposition/react(datum/gas_mixture/air) var/list/cached_gases = air.gases + var/list/nitrium = cached_gases[/datum/gas/nitrium] var/temperature = air.temperature //This reaction is aggressively slow. like, a tenth of a mole per fire slow. Keep that in mind - var/heat_efficiency = min(temperature / NITRIUM_DECOMPOSITION_TEMP_DIVISOR, cached_gases[/datum/gas/nitrium][MOLES]) + var/heat_efficiency = min(temperature / NITRIUM_DECOMPOSITION_TEMP_DIVISOR, nitrium[MOLES]) - if (heat_efficiency <= 0 || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficiency < 0)) //Shouldn't produce gas from nothing. + if (heat_efficiency <= 0 || (nitrium[MOLES] - heat_efficiency < 0)) //Shouldn't produce gas from nothing. return NO_REACTION var/old_heat_capacity = air.heat_capacity() air.assert_gases(/datum/gas/nitrogen, /datum/gas/hydrogen) - cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficiency + nitrium[MOLES] -= heat_efficiency cached_gases[/datum/gas/hydrogen][MOLES] += heat_efficiency cached_gases[/datum/gas/nitrogen][MOLES] += heat_efficiency @@ -729,22 +756,25 @@ /datum/gas_reaction/freonformation/react(datum/gas_mixture/air) var/list/cached_gases = air.gases + var/list/plasma = cached_gases[/datum/gas/plasma] + var/list/carbon_dioxide = cached_gases[/datum/gas/carbon_dioxide] + var/list/bz = cached_gases[/datum/gas/bz] var/temperature = air.temperature - var/minimal_mole_factor = min(cached_gases[/datum/gas/plasma][MOLES] * INVERSE(0.6), cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.1), cached_gases[/datum/gas/carbon_dioxide][MOLES] * INVERSE(0.3)) + var/minimal_mole_factor = min(plasma[MOLES] * INVERSE(0.6), bz[MOLES] * INVERSE(0.1), carbon_dioxide[MOLES] * INVERSE(0.3)) var/equation_first_part = NUM_E ** (-(((temperature - 800) / 200) ** 2)) var/equation_second_part = 3 / (1 + NUM_E ** (-0.001 * (temperature - 6000))) var/heat_factor = equation_first_part + equation_second_part - var/freon_formed = min(heat_factor * minimal_mole_factor * 0.05, cached_gases[/datum/gas/plasma][MOLES] * INVERSE(0.6), cached_gases[/datum/gas/carbon_dioxide][MOLES] * INVERSE(0.3), cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.1)) - if (freon_formed <= 0 || (cached_gases[/datum/gas/plasma][MOLES] - freon_formed * 0.6 < 0 ) || (cached_gases[/datum/gas/carbon_dioxide][MOLES] - freon_formed * 0.3 < 0) || (cached_gases[/datum/gas/bz][MOLES] - freon_formed * 0.1 < 0)) //Shouldn't produce gas from nothing. + var/freon_formed = min(heat_factor * minimal_mole_factor * 0.05, plasma[MOLES] * INVERSE(0.6), carbon_dioxide[MOLES] * INVERSE(0.3), bz[MOLES] * INVERSE(0.1)) + if (freon_formed <= 0 || (plasma[MOLES] - freon_formed * 0.6 < 0 ) || (carbon_dioxide[MOLES] - freon_formed * 0.3 < 0) || (bz[MOLES] - freon_formed * 0.1 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION var/old_heat_capacity = air.heat_capacity() ASSERT_GAS(/datum/gas/freon, air) - cached_gases[/datum/gas/plasma][MOLES] -= freon_formed * 0.6 - cached_gases[/datum/gas/carbon_dioxide][MOLES] -= freon_formed * 0.3 - cached_gases[/datum/gas/bz][MOLES] -= freon_formed * 0.1 + plasma[MOLES] -= freon_formed * 0.6 + carbon_dioxide[MOLES] -= freon_formed * 0.3 + bz[MOLES] -= freon_formed * 0.1 cached_gases[/datum/gas/freon][MOLES] += freon_formed SET_REACTION_RESULTS(freon_formed) @@ -779,28 +809,32 @@ ) /datum/gas_reaction/nobliumformation/react(datum/gas_mixture/air) + . = NO_REACTION var/list/cached_gases = air.gases + var/list/nitrogen = cached_gases[/datum/gas/nitrogen] + var/list/tritium = cached_gases[/datum/gas/tritium] /// List of gases we will assert, and possibly garbage collect. var/list/asserted_gases = list(/datum/gas/hypernoblium, /datum/gas/bz) + var/list/bz = cached_gases[/datum/gas/bz] air.assert_gases(arglist(asserted_gases)) - var/reduction_factor = clamp(cached_gases[/datum/gas/tritium][MOLES] / (cached_gases[/datum/gas/tritium][MOLES] + cached_gases[/datum/gas/bz][MOLES]), 0.001 , 1) //reduces trit consumption in presence of bz upward to 0.1% reduction - var/nob_formed = min((cached_gases[/datum/gas/nitrogen][MOLES] + cached_gases[/datum/gas/tritium][MOLES]) * 0.01, cached_gases[/datum/gas/tritium][MOLES] * INVERSE(5 * reduction_factor), cached_gases[/datum/gas/nitrogen][MOLES] * INVERSE(10)) + var/reduction_factor = clamp(tritium[MOLES] / (tritium[MOLES] + bz[MOLES]), 0.001 , 1) //reduces trit consumption in presence of bz upward to 0.1% reduction + var/nob_formed = min((nitrogen[MOLES] + tritium[MOLES]) * 0.01, tritium[MOLES] * INVERSE(5 * reduction_factor), nitrogen[MOLES] * INVERSE(10)) //calling QUANTIZE on results to round very small floating point values. - if (QUANTIZE(nob_formed) <= 0 || (QUANTIZE(cached_gases[/datum/gas/tritium][MOLES] - 5 * nob_formed * reduction_factor) < 0) || (QUANTIZE(cached_gases[/datum/gas/nitrogen][MOLES] - 10 * nob_formed) < 0)) + if (QUANTIZE(nob_formed) <= 0 || (QUANTIZE(tritium[MOLES] - 5 * nob_formed * reduction_factor) < 0) || (QUANTIZE(nitrogen[MOLES] - 10 * nob_formed) < 0)) air.garbage_collect(arglist(asserted_gases)) - return NO_REACTION + return var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/tritium][MOLES] -= 5 * nob_formed * reduction_factor - cached_gases[/datum/gas/nitrogen][MOLES] -= 10 * nob_formed + tritium[MOLES] -= 5 * nob_formed * reduction_factor + nitrogen[MOLES] -= 10 * nob_formed cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed // I'm not going to nitpick, but N20H10 feels like it should be an explosive more than anything. SET_REACTION_RESULTS(nob_formed) - var/energy_released = nob_formed * (NOBLIUM_FORMATION_ENERGY / (max(cached_gases[/datum/gas/bz][MOLES], 1))) + var/energy_released = nob_formed * NOBLIUM_FORMATION_ENERGY / max(bz[MOLES], 1) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((air.temperature * old_heat_capacity + energy_released) / new_heat_capacity), TCMB) - return REACTING + . |= REACTING | VOLATILE_REACTION // Halon @@ -826,17 +860,20 @@ ) /datum/gas_reaction/halon_o2removal/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION var/list/cached_gases = air.gases + var/list/halon = cached_gases[/datum/gas/halon] + var/list/oxygen = cached_gases[/datum/gas/oxygen] var/temperature = air.temperature - var/heat_efficiency = min(temperature / HALON_COMBUSTION_TEMPERATURE_SCALE, cached_gases[/datum/gas/halon][MOLES], cached_gases[/datum/gas/oxygen][MOLES] * INVERSE(20)) - if (heat_efficiency <= 0 || (cached_gases[/datum/gas/halon][MOLES] - heat_efficiency < 0 ) || (cached_gases[/datum/gas/oxygen][MOLES] - heat_efficiency * 20 < 0)) //Shouldn't produce gas from nothing. - return NO_REACTION + var/heat_efficiency = min(temperature / HALON_COMBUSTION_TEMPERATURE_SCALE, halon[MOLES], oxygen[MOLES] * INVERSE(20)) + if (heat_efficiency <= 0 || (halon[MOLES] - heat_efficiency < 0 ) || (oxygen[MOLES] - heat_efficiency * 20 < 0)) //Shouldn't produce gas from nothing. + return var/old_heat_capacity = air.heat_capacity() ASSERT_GAS(/datum/gas/pluoxium, air) - cached_gases[/datum/gas/halon][MOLES] -= heat_efficiency - cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficiency * 20 + halon[MOLES] -= heat_efficiency + oxygen[MOLES] -= heat_efficiency * 20 cached_gases[/datum/gas/pluoxium][MOLES] += heat_efficiency * 2.5 SET_REACTION_RESULTS(heat_efficiency * 5) @@ -853,8 +890,9 @@ var/datum/effect_system/fluid_spread/foam/metal/resin/halon/foaming = new foaming.set_up(amount = HALON_COMBUSTION_RESIN_VOLUME, holder = holder, location = location) foaming.start() + . |= VOLATILE_REACTION - return REACTING + . |= REACTING // Healium @@ -880,15 +918,17 @@ /datum/gas_reaction/healium_formation/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases + var/list/bz = cached_gases[/datum/gas/bz] + var/list/freon = cached_gases[/datum/gas/freon] var/temperature = air.temperature - var/heat_efficiency = min(temperature * 0.3, cached_gases[/datum/gas/freon][MOLES] * INVERSE(2.75), cached_gases[/datum/gas/bz][MOLES] * INVERSE(0.25)) - if (heat_efficiency <= 0 || (cached_gases[/datum/gas/freon][MOLES] - heat_efficiency * 2.75 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficiency * 0.25 < 0)) //Shouldn't produce gas from nothing. + var/heat_efficiency = min(temperature * 0.3, freon[MOLES] * INVERSE(2.75), bz[MOLES] * INVERSE(0.25)) + if (heat_efficiency <= 0 || (freon[MOLES] - heat_efficiency * 2.75 < 0 ) || (bz[MOLES] - heat_efficiency * 0.25 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION var/old_heat_capacity = air.heat_capacity() ASSERT_GAS(/datum/gas/healium, air) - cached_gases[/datum/gas/freon][MOLES] -= heat_efficiency * 2.75 - cached_gases[/datum/gas/bz][MOLES] -= heat_efficiency * 0.25 + freon[MOLES] -= heat_efficiency * 2.75 + bz[MOLES] -= heat_efficiency * 0.25 cached_gases[/datum/gas/healium][MOLES] += heat_efficiency * 3 SET_REACTION_RESULTS(heat_efficiency * 3) @@ -920,16 +960,18 @@ /datum/gas_reaction/zauker_formation/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases + var/list/hypernoblium = cached_gases[/datum/gas/hypernoblium] + var/list/nitrium = cached_gases[/datum/gas/nitrium] var/temperature = air.temperature - var/heat_efficiency = min(temperature * ZAUKER_FORMATION_TEMPERATURE_SCALE, cached_gases[/datum/gas/hypernoblium][MOLES] * INVERSE(0.01), cached_gases[/datum/gas/nitrium][MOLES] * INVERSE(0.5)) - if (heat_efficiency <= 0 || (cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficiency * 0.01 < 0 ) || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficiency * 0.5 < 0)) //Shouldn't produce gas from nothing. + var/heat_efficiency = min(temperature * ZAUKER_FORMATION_TEMPERATURE_SCALE, hypernoblium[MOLES] * INVERSE(0.01), nitrium[MOLES] * INVERSE(0.5)) + if (heat_efficiency <= 0 || (hypernoblium[MOLES] - heat_efficiency * 0.01 < 0 ) || (nitrium[MOLES] - heat_efficiency * 0.5 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION var/old_heat_capacity = air.heat_capacity() ASSERT_GAS(/datum/gas/zauker, air) - cached_gases[/datum/gas/hypernoblium][MOLES] -= heat_efficiency * 0.01 - cached_gases[/datum/gas/nitrium][MOLES] -= heat_efficiency * 0.5 + hypernoblium[MOLES] -= heat_efficiency * 0.01 + nitrium[MOLES] -= heat_efficiency * 0.5 cached_gases[/datum/gas/zauker][MOLES] += heat_efficiency * 0.5 SET_REACTION_RESULTS(heat_efficiency * 0.5) @@ -960,16 +1002,17 @@ /datum/gas_reaction/zauker_decomp/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow - var/burned_fuel = min(ZAUKER_DECOMPOSITION_MAX_RATE, cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/zauker][MOLES]) - if (burned_fuel <= 0 || cached_gases[/datum/gas/zauker][MOLES] - burned_fuel < 0) + var/list/nitrogen = cached_gases[/datum/gas/nitrogen] + var/list/zauker = cached_gases[/datum/gas/zauker] + var/burned_fuel = min(ZAUKER_DECOMPOSITION_MAX_RATE, nitrogen[MOLES], zauker[MOLES]) + if (burned_fuel <= 0 || zauker[MOLES] - burned_fuel < 0) return NO_REACTION var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/zauker][MOLES] -= burned_fuel + zauker[MOLES] -= burned_fuel ASSERT_GAS(/datum/gas/oxygen, air) cached_gases[/datum/gas/oxygen][MOLES] += burned_fuel * 0.3 - ASSERT_GAS(/datum/gas/nitrogen, air) - cached_gases[/datum/gas/nitrogen][MOLES] += burned_fuel * 0.7 + nitrogen[MOLES] += burned_fuel * 0.7 SET_REACTION_RESULTS(burned_fuel) var/energy_released = ZAUKER_DECOMPOSITION_ENERGY * burned_fuel @@ -1002,16 +1045,18 @@ /datum/gas_reaction/proto_nitrate_formation/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases + var/list/pluoxium = cached_gases[/datum/gas/pluoxium] + var/list/hydrogen = cached_gases[/datum/gas/hydrogen] var/temperature = air.temperature - var/heat_efficiency = min(temperature * 0.005, cached_gases[/datum/gas/pluoxium][MOLES] * INVERSE(0.2), cached_gases[/datum/gas/hydrogen][MOLES] * INVERSE(2)) - if (heat_efficiency <= 0 || (cached_gases[/datum/gas/pluoxium][MOLES] - heat_efficiency * 0.2 < 0 ) || (cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficiency * 2 < 0)) //Shouldn't produce gas from nothing. + var/heat_efficiency = min(temperature * 0.005, pluoxium[MOLES] * INVERSE(0.2), hydrogen[MOLES] * INVERSE(2)) + if (heat_efficiency <= 0 || (pluoxium[MOLES] - heat_efficiency * 0.2 < 0 ) || (hydrogen[MOLES] - heat_efficiency * 2 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION var/old_heat_capacity = air.heat_capacity() ASSERT_GAS(/datum/gas/proto_nitrate, air) - cached_gases[/datum/gas/hydrogen][MOLES] -= heat_efficiency * 2 - cached_gases[/datum/gas/pluoxium][MOLES] -= heat_efficiency * 0.2 + hydrogen[MOLES] -= heat_efficiency * 2 + pluoxium[MOLES] -= heat_efficiency * 0.2 cached_gases[/datum/gas/proto_nitrate][MOLES] += heat_efficiency * 2.2 SET_REACTION_RESULTS(heat_efficiency * 2.2) @@ -1041,13 +1086,15 @@ /datum/gas_reaction/proto_nitrate_hydrogen_response/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases - var/produced_amount = min(PN_HYDROGEN_CONVERSION_MAX_RATE, cached_gases[/datum/gas/hydrogen][MOLES], cached_gases[/datum/gas/proto_nitrate][MOLES]) - if (produced_amount <= 0 || cached_gases[/datum/gas/hydrogen][MOLES] - produced_amount < 0) + var/list/proto_nitrate = cached_gases[/datum/gas/proto_nitrate] + var/list/hydrogen = cached_gases[/datum/gas/hydrogen] + var/produced_amount = min(PN_HYDROGEN_CONVERSION_MAX_RATE, hydrogen[MOLES], proto_nitrate[MOLES]) + if (produced_amount <= 0 || hydrogen[MOLES] - produced_amount < 0) return NO_REACTION var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/hydrogen][MOLES] -= produced_amount - cached_gases[/datum/gas/proto_nitrate][MOLES] += produced_amount * 0.5 + hydrogen[MOLES] -= produced_amount + proto_nitrate[MOLES] += produced_amount * 0.5 SET_REACTION_RESULTS(produced_amount * 0.5) var/energy_used = produced_amount * PN_HYDROGEN_CONVERSION_ENERGY @@ -1078,15 +1125,18 @@ ) /datum/gas_reaction/proto_nitrate_tritium_response/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION var/list/cached_gases = air.gases + var/list/proto_nitrate = cached_gases[/datum/gas/proto_nitrate] + var/list/tritium = cached_gases[/datum/gas/tritium] var/temperature = air.temperature - var/produced_amount = min(air.temperature / 34 * (cached_gases[/datum/gas/tritium][MOLES] * cached_gases[/datum/gas/proto_nitrate][MOLES]) / (cached_gases[/datum/gas/tritium][MOLES] + 10 * cached_gases[/datum/gas/proto_nitrate][MOLES]), cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/proto_nitrate][MOLES] * INVERSE(0.01)) - if(cached_gases[/datum/gas/tritium][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/proto_nitrate][MOLES] - produced_amount * 0.01 < 0) - return NO_REACTION + var/produced_amount = min(air.temperature / 34 * (tritium[MOLES] * proto_nitrate[MOLES]) / (tritium[MOLES] + 10 * proto_nitrate[MOLES]), tritium[MOLES], proto_nitrate[MOLES] * INVERSE(0.01)) + if(tritium[MOLES] - produced_amount < 0 || proto_nitrate[MOLES] - produced_amount * 0.01 < 0) + return var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/proto_nitrate][MOLES] -= produced_amount * 0.01 - cached_gases[/datum/gas/tritium][MOLES] -= produced_amount + proto_nitrate[MOLES] -= produced_amount * 0.01 + tritium[MOLES] -= produced_amount ASSERT_GAS(/datum/gas/hydrogen, air) cached_gases[/datum/gas/hydrogen][MOLES] += produced_amount @@ -1099,13 +1149,15 @@ else if(isatom(holder)) location = holder if (location && energy_released > PN_TRITIUM_CONVERSION_RAD_RELEASE_THRESHOLD * (air.volume / CELL_VOLUME) ** ATMOS_RADIATION_VOLUME_EXP) + . |= VOLATILE_REACTION radiation_pulse(location, max_range = min(sqrt(produced_amount) / PN_TRITIUM_RAD_RANGE_DIVISOR, GAS_REACTION_MAXIMUM_RADIATION_PULSE_RANGE), threshold = PN_TRITIUM_RAD_THRESHOLD) if(energy_released) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB) - return REACTING + + . |= REACTING /** * Proto-Nitrate BZase Action @@ -1127,14 +1179,17 @@ ) /datum/gas_reaction/proto_nitrate_bz_response/react(datum/gas_mixture/air, datum/holder) + . = NO_REACTION var/list/cached_gases = air.gases + var/list/proto_nitrate = cached_gases[/datum/gas/proto_nitrate] + var/list/bz = cached_gases[/datum/gas/bz] var/temperature = air.temperature - var/consumed_amount = min(air.temperature / 2240 * cached_gases[/datum/gas/bz][MOLES] * cached_gases[/datum/gas/proto_nitrate][MOLES] / (cached_gases[/datum/gas/bz][MOLES] + cached_gases[/datum/gas/proto_nitrate][MOLES]), cached_gases[/datum/gas/bz][MOLES], cached_gases[/datum/gas/proto_nitrate][MOLES]) - if (consumed_amount <= 0 || cached_gases[/datum/gas/bz][MOLES] - consumed_amount < 0) - return NO_REACTION + var/consumed_amount = min(air.temperature / 2240 * bz[MOLES] * proto_nitrate[MOLES] / (bz[MOLES] + proto_nitrate[MOLES]), bz[MOLES], proto_nitrate[MOLES]) + if (consumed_amount <= 0 || bz[MOLES] - consumed_amount < 0) + return var/old_heat_capacity = air.heat_capacity() - cached_gases[/datum/gas/bz][MOLES] -= consumed_amount + bz[MOLES] -= consumed_amount ASSERT_GAS(/datum/gas/nitrogen, air) cached_gases[/datum/gas/nitrogen][MOLES] += consumed_amount * 0.4 ASSERT_GAS(/datum/gas/helium, air) @@ -1151,6 +1206,7 @@ else if(isatom(holder)) location = holder if (location && energy_released > PN_BZASE_RAD_RELEASE_THRESHOLD * (air.volume / CELL_VOLUME) ** ATMOS_RADIATION_VOLUME_EXP) + . |= VOLATILE_REACTION ///How many nuclear particles will fire in this reaction. var/nuclear_particle_amount = min(round(consumed_amount / PN_BZASE_NUCLEAR_PARTICLE_DIVISOR), PN_BZASE_NUCLEAR_PARTICLE_MAXIMUM) for(var/i in 1 to nuclear_particle_amount) @@ -1161,7 +1217,7 @@ var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max((temperature * old_heat_capacity + energy_released) / new_heat_capacity, TCMB) - return REACTING + . |= REACTING /datum/gas_reaction/antinoblium_replication priority_group = PRIORITY_FORMATION @@ -1181,7 +1237,7 @@ * Converts all gases into antinoblium. */ /datum/gas_reaction/antinoblium_replication/react(datum/gas_mixture/air, datum/holder) - . = REACTING + . = REACTING | VOLATILE_REACTION var/list/cached_gases = air.gases var/heat_capacity = air.heat_capacity() var/total_moles = air.total_moles() @@ -1192,10 +1248,9 @@ if(total_not_antinoblium_moles < MINIMUM_MOLE_COUNT) // Clear up the remaining gases if this condition is met. . = NO_REACTION reaction_rate = total_not_antinoblium_moles - for(var/id in cached_gases) + for(var/id,gas in cached_gases) if(id == /datum/gas/antinoblium) continue - var/list/gas = cached_gases[id] if(. == NO_REACTION) // Let the gases get properly cleared while avoiding potential division by 0. gas[MOLES] = 0 continue diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index ea9e4e82b5a1..9013e31b632f 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -714,7 +714,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) ///Used for air alarm link helper, which connects air alarm to a sensor with corresponding chamber_id /obj/machinery/airalarm/proc/setup_chamber_link() - var/obj/machinery/air_sensor/sensor = GLOB.objects_by_id_tag[GLOB.map_loaded_sensors[air_sensor_chamber_id]] + var/obj/machinery/air_sensor/sensor = null + for(var/obj/machinery/air_sensor/target as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/air_sensor)) + if(target.z == z && target.chamber_id == air_sensor_chamber_id) + sensor = target + break if(isnull(sensor)) log_mapping("[src] at [AREACOORD(src)] tried to connect to a sensor, but no sensor with chamber_id:[air_sensor_chamber_id] found!") return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index c1837bbf5093..f281fee74f26 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -128,6 +128,10 @@ piping_layer = 4 icon_state= "pump_on_map-4" +/obj/machinery/atmospherics/components/binary/pump/on/layer5 + piping_layer = 5 + icon_state = "pump_on_map-5" + /obj/item/circuit_component/atmos_pump display_name = "Atmospheric Binary Pump" desc = "The interface for communicating with a pump." diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 5528b838ff05..8cc0eb7b2469 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -32,9 +32,6 @@ // ATMOS_INTERNAL_BOUND: Do not pass internal_pressure_bound // NO_BOUND: Do not pass either - /// id of air sensor its connected to - var/chamber_id - ///area this vent is assigned to var/area/assigned_area diff --git a/code/modules/bitrunning/components/avatar_gear.dm b/code/modules/bitrunning/components/avatar_gear.dm index be7ede816feb..09a336f4bd0d 100644 --- a/code/modules/bitrunning/components/avatar_gear.dm +++ b/code/modules/bitrunning/components/avatar_gear.dm @@ -5,6 +5,8 @@ var/datum/callback/load_callback /// Weakref to the human we are currently carried by var/datum/weakref/tracked_human_ref + /// Weakref to the connect_containers component that tracks the human + var/datum/weakref/connect_ref /datum/component/loads_avatar_gear/Initialize(datum/callback/load_callback) if(!isitem(parent)) @@ -18,14 +20,14 @@ var/static/list/loc_connections = list( COMSIG_ATOM_ENTERING = PROC_REF(on_entered_loc), ) - AddComponent(/datum/component/connect_containers, parent, loc_connections) + connect_ref = WEAKREF(AddComponent(/datum/component/connect_containers, parent, loc_connections)) /datum/component/loads_avatar_gear/UnregisterFromParent() UnregisterSignal(parent, list( COMSIG_ATOM_ENTERING, )) - qdel(GetComponent(/datum/component/connect_containers)) + qdel(connect_ref) /datum/component/loads_avatar_gear/Destroy(force) load_callback = null diff --git a/code/modules/cards/cards.dm b/code/modules/cards/cards.dm index 3a18b36f86db..fbfa2a396587 100644 --- a/code/modules/cards/cards.dm +++ b/code/modules/cards/cards.dm @@ -102,7 +102,10 @@ card_atoms += card if(istype(card_item, /obj/item/toy/cards/cardhand)) - qdel(card_item) + var/obj/item/toy/cards/cardhand/recycled_cardhand = card_item + recycled_cardhand.card_atoms -= cards_to_add + if (!length(recycled_cardhand.fetch_card_atoms())) + qdel(card_item) update_appearance() return cards_to_add diff --git a/code/modules/cargo/bounties/reagent.dm b/code/modules/cargo/bounties/reagent.dm index b12ee087494d..7d1d61064301 100644 --- a/code/modules/cargo/bounties/reagent.dm +++ b/code/modules/cargo/bounties/reagent.dm @@ -71,7 +71,16 @@ /datum/reagent/consumable/ethanol/demonsblood,\ /datum/reagent/consumable/ethanol/crevice_spike,\ /datum/reagent/consumable/ethanol/singulo,\ - /datum/reagent/consumable/ethanol/whiskey_sour) + /datum/reagent/consumable/ethanol/whiskey_sour,\ + /datum/reagent/consumable/ethanol/boston_sour,\ + /datum/reagent/consumable/ethanol/old_fashioned,\ + /datum/reagent/consumable/ethanol/sazerac,\ + /datum/reagent/consumable/ethanol/hot_toddy,\ + /datum/reagent/consumable/ethanol/daiquiri,\ + /datum/reagent/consumable/ethanol/blue_blazer,\ + /datum/reagent/consumable/ethanol/flip_cocktail,\ + /datum/reagent/consumable/ethanol/bitters_soda,\ + /datum/chemical_reaction/drink/star) var/reagent_type = pick(possible_reagents) wanted_reagent = new reagent_type @@ -104,7 +113,11 @@ /datum/reagent/consumable/ethanol/silencer,\ /datum/reagent/consumable/ethanol/peppermint_patty,\ /datum/reagent/consumable/ethanol/aloe,\ - /datum/reagent/consumable/pumpkin_latte) + /datum/reagent/consumable/pumpkin_latte,\ + /datum/reagent/consumable/ethanol/ramos_gin_fizz,\ + /datum/reagent/consumable/ethanol/sangria,\ + /datum/reagent/consumable/ethanol/tizirian_sour,\ + /datum/chemical_reaction/drink/suffering_bastard) var/reagent_type = pick(possible_reagents) wanted_reagent = new reagent_type diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index f2de2cfa8fe8..1e140d646df2 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -46,9 +46,12 @@ Then the player gets the profit from selling his own wasted time. ** dry_run: if the item should be actually sold, or if it's just a pirce test ** external_report: works as "transaction" object, pass same one in if you're doing more than one export in single go ** ignore_typecache: typecache containing types that should be completely ignored - ** export_market: Defines the market that the items are being sold to. + ** export_markets: Defines the market that the items are being sold to. */ -/proc/export_item_and_contents(atom/movable/exported_atom, apply_elastic = TRUE, delete_unsold = TRUE, dry_run = FALSE, datum/export_report/external_report, list/ignore_typecache, export_market = EXPORT_MARKET_STATION) +/proc/export_item_and_contents(atom/movable/exported_atom, apply_elastic = TRUE, delete_unsold = TRUE, dry_run = FALSE, datum/export_report/external_report, list/ignore_typecache, export_markets = list(EXPORT_MARKET_STATION)) + if(!islist(export_markets)) + export_markets = list(export_markets) + external_report = init_export(external_report) var/list/contents = exported_atom.get_all_contents_ignoring(ignore_typecache) @@ -56,7 +59,7 @@ Then the player gets the profit from selling his own wasted time. // We go backwards, so it'll be innermost objects sold first. We also make sure nothing is accidentally delete before everything is sold. var/list/to_delete = list() for(var/atom/movable/thing as anything in reverse_range(contents)) - var/sold = _export_loop(thing, apply_elastic, dry_run, external_report, export_market) + var/sold = _export_loop(thing, apply_elastic, dry_run, external_report, export_markets) if(!dry_run && (sold || delete_unsold) && sold != EXPORT_SOLD_DONT_DELETE) if(ismob(thing)) thing.investigate_log("deleted through cargo export", INVESTIGATE_CARGO) @@ -69,10 +72,10 @@ Then the player gets the profit from selling his own wasted time. return external_report /// It works like export_item_and_contents(), however it ignores the contents. Meaning only `exported_atom` will be valued. -/proc/export_single_item(atom/movable/exported_atom, apply_elastic = TRUE, delete_unsold = TRUE, dry_run = FALSE, datum/export_report/external_report, export_market = EXPORT_MARKET_STATION) +/proc/export_single_item(atom/movable/exported_atom, apply_elastic = TRUE, delete_unsold = TRUE, dry_run = FALSE, datum/export_report/external_report, export_markets = list(EXPORT_MARKET_STATION)) external_report = init_export(external_report) - var/sold = _export_loop(exported_atom, apply_elastic, dry_run, external_report, export_market) + var/sold = _export_loop(exported_atom, apply_elastic, dry_run, external_report, export_markets) if(!dry_run && (sold || delete_unsold) && sold != EXPORT_SOLD_DONT_DELETE) if(ismob(exported_atom)) exported_atom.investigate_log("deleted through cargo export", INVESTIGATE_CARGO) @@ -81,10 +84,10 @@ Then the player gets the profit from selling his own wasted time. return external_report /// The main bit responsible for selling the item. Shared by export_single_item() and export_item_and_contents() -/proc/_export_loop(atom/movable/exported_atom, apply_elastic = TRUE, dry_run = FALSE, datum/export_report/external_report, export_market) +/proc/_export_loop(atom/movable/exported_atom, apply_elastic = TRUE, dry_run = FALSE, datum/export_report/external_report, export_markets) var/sold = EXPORT_NOT_SOLD for(var/datum/export/export as anything in GLOB.exports_list) - if(export.applies_to(exported_atom, apply_elastic, export_market)) + if(export.applies_to(exported_atom, apply_elastic, export_markets)) if(!dry_run && (SEND_SIGNAL(exported_atom, COMSIG_ITEM_PRE_EXPORT) & COMPONENT_STOP_EXPORT)) break //Don't add value of unscannable items for a dry run report @@ -163,18 +166,19 @@ Then the player gets the profit from selling his own wasted time. return 1 /// Checks if the item is fit for export datum. -/datum/export/proc/applies_to(obj/exported_item, apply_elastic = TRUE, export_market) - if(!is_type_in_typecache(exported_item, export_types)) - return FALSE - if(include_subtypes && is_type_in_typecache(exported_item, exclude_types)) - return FALSE - if(!get_cost(exported_item, apply_elastic)) - return FALSE - if(export_market != sales_market) - return FALSE - if(exported_item.flags_1 & HOLOGRAM_1) - return FALSE - return TRUE +/datum/export/proc/applies_to(obj/exported_item, apply_elastic = TRUE, export_markets) + for(var/found_market in export_markets) + if(!is_type_in_typecache(exported_item, export_types)) + continue + if(include_subtypes && is_type_in_typecache(exported_item, exclude_types)) + continue + if(!get_cost(exported_item, apply_elastic)) + continue + if(found_market != sales_market) + continue + if(exported_item.flags_1 & HOLOGRAM_1) + continue + return TRUE /** * Calculates the exact export value of the object, while factoring in all the relivant variables. diff --git a/code/modules/cargo/markets/market_items/consumables.dm b/code/modules/cargo/markets/market_items/consumables.dm index a8c7c72cd453..e06a9fc0fdb4 100644 --- a/code/modules/cargo/markets/market_items/consumables.dm +++ b/code/modules/cargo/markets/market_items/consumables.dm @@ -74,3 +74,69 @@ price_min = CARGO_CRATE_VALUE * 0.25 price_max = CARGO_CRATE_VALUE * 0.75 availability_prob = 90 + +/datum/market_item/consumable/methshipment + name = "Wholesale Methaphemtamine Shipment" + desc = "Dealer quantity! Don't get high on your own supply. Or do. You already bought it." + item = /obj/item/storage/box/methdealer + + stock_min = 1 + stock_max = 3 + price_min = CARGO_CRATE_VALUE * 0.5 + price_max = CARGO_CRATE_VALUE * 1.5 + availability_prob = 25 + +/datum/market_item/consumable/opiumshipment + name = "Wholesale Opium Shipment" + desc = "Are your coworkers stressed? We've got vice in bulk." + item = /obj/item/storage/box/opiumdealer + + stock_min = 1 + stock_max = 3 + price_min = CARGO_CRATE_VALUE * 0.5 + price_max = CARGO_CRATE_VALUE * 1.2 + availability_prob = 35 + +/datum/market_item/consumable/kronkshipment + name = "Wholesale Kronkaine Shipment" + desc = "Warning! Security might actually care about this one!" + item = /obj/item/storage/box/kronkdealer + + stock_min = 1 + stock_max = 3 + price_min = CARGO_CRATE_VALUE * 1 + price_max = CARGO_CRATE_VALUE * 2 + availability_prob = 15 + +/datum/market_item/consumable/methaphetamine + name = "Crystal Meth" + desc = "A big rock, for when you just need a hit." + item = /obj/item/food/drug/meth_crystal + + stock_min = 1 + stock_max = 5 + price_min = CARGO_CRATE_VALUE * 0.4 + price_max = CARGO_CRATE_VALUE * 0.5 + availability_prob = 35 + +/datum/market_item/consumable/heroin + name = "Heroin" + desc = "Chase the dragon." + item = /obj/item/food/drug/opium + + stock_min = 1 + stock_max = 5 + price_min = CARGO_CRATE_VALUE * 0.35 + price_max = CARGO_CRATE_VALUE * 0.5 + availability_prob = 45 + +/datum/market_item/consumable/kronkaine + name = "Kronkaine" + desc = "An 8⁸ ball, this is hardly ever on the market!" + item = /obj/item/food/drug/moon_rock + + stock_min = 1 + stock_max = 2 + price_min = CARGO_CRATE_VALUE * 0.5 + price_max = CARGO_CRATE_VALUE * 1 + availability_prob = 15 diff --git a/code/modules/cargo/markets/market_items/misc.dm b/code/modules/cargo/markets/market_items/misc.dm index 69bfef56fe01..7f1ede77d53f 100644 --- a/code/modules/cargo/markets/market_items/misc.dm +++ b/code/modules/cargo/markets/market_items/misc.dm @@ -72,7 +72,7 @@ /datum/market_item/misc/hat_stabilizer name = "MOD Hat Stabilizer Module" desc = "Don't sacrifice style for substance with this module! Hats not included." - item = /obj/item/mod/module/tanner + item = /obj/item/mod/module/hat_stabilizer price_min = CARGO_CRATE_VALUE * 2 price_max = CARGO_CRATE_VALUE * 3 stock_max = 2 diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 41f397439358..ccbca24f8188 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -99,7 +99,7 @@ desc = "I'm not sure why you bothered to buy this...and why does it cost so much?" cost = CARGO_CRATE_VALUE * 5 contains = list( - /obj/effect/spawner/random/maintenance/three, + /obj/effect/spawner/random/maintenance/dumpster, /obj/effect/spawner/random/trash/garbage = 5, ) crate_name = "putrid dumpster" diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index 1d06060d91fd..d1bac0a82f86 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -79,6 +79,9 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /// Represents an individual preference. /datum/preference + /// Do not instantiate if type matches this. + abstract_type = /datum/preference + /// The key inside the savefile to use. /// This is also sent to the UI. /// Once you pick this, don't change it. @@ -89,9 +92,6 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /// It is up to the PreferencesMenu UI itself to interpret it. var/category = "misc" - /// Do not instantiate if type matches this. - var/abstract_type = /datum/preference - /// What savefile should this preference be read from? /// Valid values are PREFERENCE_CHARACTER and PREFERENCE_PLAYER. /// See the documentation in [code/__DEFINES/preferences.dm]. diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 97801af313ad..af6d206ccd5e 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -200,7 +200,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/data_validity_integer = check_savedata_version(savefile.get_entry()) if(load_and_save && IS_DATA_OBSOLETE(data_validity_integer)) //fatal, can't load any data - var/bacpath = "[path].updatebac" //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup + var/bacpath = PREFS_BACKUP_PATH(path) //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup if (fexists(bacpath)) fdel(bacpath) //only keep 1 version of backup fcopy(savefile.path, bacpath) //byond helpfully lets you use a savefile for the first arg. @@ -235,7 +235,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //try to fix any outdated data if necessary if(SHOULD_UPDATE_DATA(data_validity_integer)) - var/bacpath = "[path].updatebac" //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup + var/bacpath = PREFS_BACKUP_PATH(path) //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup if (fexists(bacpath)) fdel(bacpath) //only keep 1 version of backup fcopy(savefile.path, bacpath) //byond helpfully lets you use a savefile for the first arg. diff --git a/code/modules/clothing/chameleon/_chameleon_action.dm b/code/modules/clothing/chameleon/_chameleon_action.dm index d0fdf8269914..4befe80fbe82 100644 --- a/code/modules/clothing/chameleon/_chameleon_action.dm +++ b/code/modules/clothing/chameleon/_chameleon_action.dm @@ -120,6 +120,7 @@ if(ismob(chameleon_item.loc)) var/mob/wearer = chameleon_item.loc wearer.update_clothing(chameleon_item.slot_flags | ITEM_SLOT_HANDS) + wearer.refresh_obscured() /datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) PROTECTED_PROC(TRUE) // Call update_look, not this! diff --git a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm index 3749f84d6700..a8f03b0b3f98 100644 --- a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm +++ b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm @@ -185,12 +185,15 @@ do { \ w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/chameleon/change/mask) action_slots = ALL - /// Is our voice changer enabled or disabled? - var/voice_change = TRUE + clothing_traits = list(TRAIT_VOICE_MATCHES_ID) /obj/item/clothing/mask/chameleon/attack_self(mob/user) - voice_change = !voice_change - to_chat(user, span_notice("The voice changer is now [voice_change ? "on" : "off"]!")) + var/was_on = (TRAIT_VOICE_MATCHES_ID in clothing_traits) + if(was_on) + attach_clothing_traits(TRAIT_VOICE_MATCHES_ID) + else + detach_clothing_traits(TRAIT_VOICE_MATCHES_ID) + to_chat(user, span_notice("The voice changer is now [was_on ? "off" : "on"]!")) /obj/item/clothing/mask/chameleon/broken @@ -203,7 +206,7 @@ do { \ item_flags = DROPDEL //Same as the drone chameleon hat, undroppable and no protection armor_type = /datum/armor/none - voice_change = FALSE + clothing_traits = null /obj/item/clothing/mask/chameleon/drone/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4fb5a44a6bc0..d648a551abfe 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,5 +1,6 @@ /obj/item/clothing name = "clothing" + abstract_type = /obj/item/clothing resistance_flags = FLAMMABLE max_integrity = 200 integrity_failure = 0.4 @@ -85,6 +86,7 @@ /obj/item/food/clothing name = "temporary moth clothing snack item" desc = "If you're reading this it means I messed up. This is related to moths eating clothes and I didn't know a better way to do it than making a new food object. <--- stinky idiot wrote this" + spawn_blacklisted = TRUE bite_consumption = 1 // sigh, ok, so it's not ACTUALLY infinite nutrition. this is so you can eat clothes more than...once. // bite_consumption limits how much you actually get, and the take_damage in after eat makes sure you can't abuse this. @@ -569,12 +571,12 @@ BLIND // can't see anything if(user.is_holding(src)) user.update_held_items() return TRUE - if(up) - user.update_obscured_slots(visor_flags_inv) user.update_clothing(slot_flags) if(!iscarbon(user)) return TRUE var/mob/living/carbon/carbon_user = user + if(up) + carbon_user.refresh_obscured() if(visor_vars_to_toggle & VISOR_TINT) carbon_user.update_tint() if((visor_flags & (MASKINTERNALS|HEADINTERNALS)) && carbon_user.invalid_internals()) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index e14fb8a13ddc..a5a654687c59 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -4,6 +4,7 @@ name = "ears" lefthand_file = 'icons/mob/inhands/clothing/ears_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/ears_righthand.dmi' + abstract_type = /obj/item/clothing/ears w_class = WEIGHT_CLASS_TINY throwforce = 0 slot_flags = ITEM_SLOT_EARS diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 9147a0e1e15b..69476431f6d7 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/clothing/glasses.dmi' lefthand_file = 'icons/mob/inhands/clothing/glasses_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/glasses_righthand.dmi' + abstract_type = /obj/item/clothing/glasses w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_EYES strip_delay = 2 SECONDS diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index f1c7785e323e..20b321592b70 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -6,6 +6,7 @@ inhand_icon_state = "greyscale_gloves" lefthand_file = 'icons/mob/inhands/clothing/gloves_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/gloves_righthand.dmi' + abstract_type = /obj/item/clothing/gloves greyscale_colors = null greyscale_config_inhand_left = /datum/greyscale_config/gloves_inhand_left greyscale_config_inhand_right = /datum/greyscale_config/gloves_inhand_right diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm index df1e00cf3a84..c3d44c9c760d 100644 --- a/code/modules/clothing/gloves/insulated.dm +++ b/code/modules/clothing/gloves/insulated.dm @@ -1,4 +1,5 @@ /obj/item/clothing/gloves/color + abstract_type = /obj/item/clothing/gloves/color dying_key = DYE_REGISTRY_GLOVES greyscale_colors = null diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index a732613edf73..71e3b789a6cf 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -4,6 +4,7 @@ worn_icon = 'icons/mob/clothing/head/default.dmi' lefthand_file = 'icons/mob/inhands/clothing/hats_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/hats_righthand.dmi' + abstract_type = /obj/item/clothing/head body_parts_covered = HEAD slot_flags = ITEM_SLOT_HEAD diff --git a/code/modules/clothing/head/animalears.dm b/code/modules/clothing/head/animalears.dm index 77ed57a9083c..bcb5ffb63edd 100644 --- a/code/modules/clothing/head/animalears.dm +++ b/code/modules/clothing/head/animalears.dm @@ -10,7 +10,7 @@ if(ishuman(user) && (slot & ITEM_SLOT_HEAD)) update_icon(ALL, user) user.update_worn_head() //Color might have been changed by update_appearance. - ..() + return ..() /obj/item/clothing/head/costume/kitty/update_icon(updates=ALL, mob/living/carbon/human/user) . = ..() diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index ef9385f40ef3..8c10a3126d5f 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -7,6 +7,7 @@ icon = 'icons/obj/clothing/head/costume.dmi' worn_icon = 'icons/mob/clothing/head/costume.dmi' icon_state = null + abstract_type = /obj/item/clothing/head/collectable /obj/item/clothing/head/collectable/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/head/costume.dm b/code/modules/clothing/head/costume.dm index 971470bdf1d8..7607dc8631ca 100644 --- a/code/modules/clothing/head/costume.dm +++ b/code/modules/clothing/head/costume.dm @@ -1,6 +1,7 @@ /obj/item/clothing/head/costume icon = 'icons/obj/clothing/head/costume.dmi' worn_icon = 'icons/mob/clothing/head/costume.dmi' + abstract_type = /obj/item/clothing/head/costume /obj/item/clothing/head/costume/powdered_wig name = "powdered wig" diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index 86476cceb215..a6402607781f 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -1,6 +1,7 @@ /obj/item/clothing/head/hats icon = 'icons/obj/clothing/head/hats.dmi' worn_icon = 'icons/mob/clothing/head/hats.dmi' + abstract_type = /obj/item/clothing/head/hats /obj/item/clothing/head/hats/centhat name = "\improper CentCom hat" @@ -326,7 +327,13 @@ /obj/item/clothing/head/costume/ushanka name = "ushanka" desc = "Perfect for winter in Siberia, da?" - icon_state = "ushankadown" + icon = 'icons/map_icons/clothing/head/_head.dmi' + icon_state = "/obj/item/clothing/head/costume/ushanka" + post_init_icon_state = "ushanka_gagdown" + greyscale_config = /datum/greyscale_config/ushanka + greyscale_config_worn = /datum/greyscale_config/ushanka/worn + greyscale_colors = "#C7B08B#5A4E44" + flags_1 = IS_PLAYER_COLORABLE_1 inhand_icon_state = null flags_inv = HIDEEARS|HIDEHAIR cold_protection = HEAD @@ -334,9 +341,9 @@ dog_fashion = /datum/dog_fashion/head/ushanka var/earflaps = TRUE ///Sprite visible when the ushanka flaps are folded up. - var/upsprite = "ushankaup" + var/upsprite = "ushanka_gagup" ///Sprite visible when the ushanka flaps are folded down. - var/downsprite = "ushankadown" + var/downsprite = "ushanka_gagdown" /obj/item/clothing/head/costume/ushanka/attack_self(mob/user) if(earflaps) @@ -352,9 +359,20 @@ /obj/item/clothing/head/costume/ushanka/polar name = "bear hunter's ushanka" desc = "Handcrafted in Siberia from real polar bears." - icon_state = "ushankadown_polar" - upsprite = "ushankaup_polar" - downsprite = "ushankadown_polar" + icon_state = "/obj/item/clothing/head/costume/ushanka/polar" + greyscale_colors = "#FCFCFD#CCCED1" + flags_1 = null + +/obj/item/clothing/head/costume/ushanka/sec + name = "security ushanka" + icon_state = "/obj/item/clothing/head/costume/ushanka/sec" + desc = "A warm and comfortable ushanka, dyed with 'all natural flavors' according to the tag." + greyscale_colors = "#C7B08B#A52F29" + armor_type = /datum/armor/cosmetic_sec + flags_1 = null + +/obj/item/clothing/head/costume/nightcap + abstract_type = /obj/item/clothing/head/costume/nightcap /obj/item/clothing/head/costume/nightcap/blue name = "blue nightcap" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index d593119dafe9..be5c86740c38 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -398,6 +398,7 @@ /obj/item/clothing/head/hats/hos name = "generic head of security hat" desc = "Please contact the Nanotrasen Costuming Department if found." + abstract_type = /obj/item/clothing/head/hats/hos armor_type = /datum/armor/hats_hos strip_delay = 8 SECONDS diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index bed6d8afab77..8682dc4a9276 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/clothing/masks.dmi' lefthand_file = 'icons/mob/inhands/clothing/masks_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/masks_righthand.dmi' + abstract_type = /obj/item/clothing/mask body_parts_covered = HEAD slot_flags = ITEM_SLOT_MASK strip_delay = 4 SECONDS diff --git a/code/modules/clothing/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm index fd900810e67c..2913ae101fff 100644 --- a/code/modules/clothing/masks/animal_masks.dm +++ b/code/modules/clothing/masks/animal_masks.dm @@ -14,6 +14,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( )) /obj/item/clothing/mask/animal + abstract_type = /obj/item/clothing/mask w_class = WEIGHT_CLASS_SMALL clothing_flags = VOICEBOX_TOGGLABLE var/modifies_speech = TRUE @@ -91,6 +92,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech)) to_chat(M, span_userdanger("[src] was cursed!")) M.update_worn_mask() + M.refresh_obscured() /obj/item/clothing/mask/animal/proc/clear_curse() REMOVE_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT) @@ -192,6 +194,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( /obj/item/clothing/mask/animal/small name = "A small animal mask" desc = "If you're seeing this, yell at a coder." + abstract_type = /obj/item/clothing/mask/animal/small flags_inv = HIDEFACE|HIDESNOUT /obj/item/clothing/mask/animal/small/make_cursed() diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm index 41e4e48dd6b2..8ddfcf5520fa 100644 --- a/code/modules/clothing/masks/costume.dm +++ b/code/modules/clothing/masks/costume.dm @@ -68,7 +68,9 @@ w_class = WEIGHT_CLASS_SMALL flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT custom_price = PAYCHECK_CREW + visor_flags = MASKINTERNALS greyscale_colors = COLOR_VERY_LIGHT_GRAY + alternate_worn_layer = BENEATH_HAIR_LAYER icon = 'icons/map_icons/clothing/mask.dmi' icon_state = "/obj/item/clothing/mask/rebellion" post_init_icon_state = "rebellion_mask" diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 3a5982712bd2..b70e7105bf4c 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -1,6 +1,7 @@ /obj/item/clothing/neck name = "necklace" icon = 'icons/obj/clothing/neck.dmi' + abstract_type = /obj/item/clothing/neck body_parts_covered = NECK slot_flags = ITEM_SLOT_NECK interaction_flags_click = NEED_DEXTERITY @@ -248,7 +249,7 @@ var/heart_strength var/pulse_pressure - + var/having_heart_attack = carbon_patient.has_status_effect(/datum/status_effect/heart_attack) var/heart_noises = TRUE var/obj/item/organ/heart/heart = carbon_patient.get_organ_slot(ORGAN_SLOT_HEART) @@ -292,6 +293,8 @@ if(isnull(heart) || !heart.is_beating() || carbon_patient.stat == DEAD) render_list += "You don't hear a heartbeat!\n"//they're dead or their heart isn't beating heart_noises = FALSE + else if(having_heart_attack) + render_list += "You hear a rapid, irregular heartbeat.\n" else if(heart.damage > 10 || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY) render_list += "You hear a weak heartbeat.\n"//their heart is damaged, or they have critical blood else @@ -304,28 +307,25 @@ user.visible_message(span_notice("[user] presses their hands against [carbon_patient]'s abdomen."), ignored_mobs = user) //assess abdominal organs - if(body_part == BODY_ZONE_PRECISE_GROIN) - var/appendix_okay = TRUE - var/liver_okay = TRUE - if(!liver)//sanity check, ensure the patient actually has a liver - render_list += "You can't feel anything where [target.p_their()] liver would be.\n" + var/appendix_okay = TRUE + var/liver_okay = TRUE + if(!liver)//sanity check, ensure the patient actually has a liver + render_list += "You can't feel anything where [target.p_their()] liver would be.\n" + liver_okay = FALSE + else + if(liver.damage > 10) + render_list += "[target.p_Their()] liver feels firm.\n"//their liver is damaged liver_okay = FALSE - else - if(liver.damage > 10) - render_list += "[target.p_Their()] liver feels firm.\n"//their liver is damaged - liver_okay = FALSE - - if(!appendix)//sanity check, ensure the patient actually has an appendix - render_list += "You can't feel anything where [target.p_their()] appendix would be.\n" + if(!appendix)//sanity check, ensure the patient actually has an appendix + render_list += "You can't feel anything where [target.p_their()] appendix would be.\n" + appendix_okay = FALSE + else + if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS) + render_list += "[target] screams when you lift your hand from [target.p_their()] appendix!\n"//scream if their appendix is damaged and they're awake + target.emote("scream") appendix_okay = FALSE - else - if(appendix.damage > 10 && carbon_patient.stat == CONSCIOUS) - render_list += "[target] screams when you lift your hand from [target.p_their()] appendix!\n"//scream if their appendix is damaged and they're awake - target.emote("scream") - appendix_okay = FALSE - - if(liver_okay && appendix_okay)//if they have all their organs and have no detectable damage - render_list += "You don't find anything abnormal.\n"//they're okay :D + if(liver_okay && appendix_okay)//if they have all their organs and have no detectable damage + render_list += "You don't find anything abnormal.\n"//they're okay :D if(BODY_ZONE_PRECISE_EYES) balloon_alert(user, "can't do that!") @@ -347,12 +347,14 @@ if(isnull(heart) || !heart.is_beating() || carbon_patient.blood_volume <= BLOOD_VOLUME_OKAY || carbon_patient.stat == DEAD) render_list += "You can't find a pulse!\n"//they're dead, their heart isn't beating, or they have critical blood else - if(heart.damage > 10) - heart_strength = span_danger("irregular")//their heart is damaged + if(having_heart_attack) + heart_strength = span_danger("irregular") + else if(heart.damage > 10) + heart_strength = span_danger("weak")//their heart is damaged else heart_strength = span_notice("regular")//they're okay :D - if(carbon_patient.blood_volume <= BLOOD_VOLUME_SAFE && carbon_patient.blood_volume > BLOOD_VOLUME_OKAY) + if((carbon_patient.blood_volume <= BLOOD_VOLUME_SAFE && carbon_patient.blood_volume > BLOOD_VOLUME_OKAY) || having_heart_attack) pulse_pressure = span_danger("thready")//low blood else pulse_pressure = span_notice("strong")//they're okay :D diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 1d57e38ac395..dc3dbe27cf91 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/clothing/shoes.dmi' lefthand_file = 'icons/mob/inhands/clothing/shoes_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/shoes_righthand.dmi' + abstract_type = /obj/item/clothing/shoes desc = "Comfortable-looking shoes." pickup_sound = 'sound/items/handling/shoes/sneakers_pickup1.ogg' drop_sound = 'sound/items/handling/shoes/sneakers_drop1.ogg' @@ -77,7 +78,7 @@ . += "The [fastening_type] are all knotted together." /obj/item/clothing/shoes/visual_equipped(mob/user, slot) - ..() + . = ..() if(offset && (slot_flags & slot)) user.pixel_z += offset worn_y_dimension -= (offset * 2) diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 6df25ca10bb1..74bb02622fcb 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -3,6 +3,7 @@ icon = 'icons/obj/clothing/suits/default.dmi' lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + abstract_type = /obj/item/clothing/suit var/fire_resist = T0C+100 allowed = list( /obj/item/tank/internals/emergency_oxygen, diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 939912dd95e7..3fc343810cb6 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -2,6 +2,7 @@ name = "armor" icon = 'icons/obj/clothing/suits/armor.dmi' worn_icon = 'icons/mob/clothing/suits/armor.dmi' + abstract_type = /obj/item/clothing/suit/armor allowed = null body_parts_covered = CHEST cold_protection = CHEST|GROIN @@ -755,6 +756,9 @@ acid = 50 wound = 30 +/obj/item/clothing/suit/armor/durability + abstract_type = /obj/item/clothing/suit/armor/durability + /obj/item/clothing/suit/armor/durability/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) take_damage(1, BRUTE, 0, 0) diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 77c3478abdb9..656cdd287bdf 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -1,6 +1,7 @@ /obj/item/clothing/suit/costume icon = 'icons/obj/clothing/suits/costume.dmi' worn_icon = 'icons/mob/clothing/suits/costume.dmi' + abstract_type = /obj/item/clothing/suit/costume /obj/item/clothing/suit/hooded/flashsuit name = "flashy costume" @@ -77,6 +78,10 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT armor_type = /datum/armor/costume_justice +/obj/item/clothing/suit/costume/justice/Initialize(mapload) + . = ..() + allowed = GLOB.security_vest_allowed + /datum/armor/costume_justice melee = 35 bullet = 30 @@ -122,7 +127,10 @@ inhand_icon_state = "imperium_monk" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDEBELT - allowed = list(/obj/item/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/cup/glass/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/flashlight/flare/candle, /obj/item/tank/internals/emergency_oxygen) + +/obj/item/clothing/suit/costume/imperium_monk/Initialize(mapload) + . = ..() + allowed = GLOB.chaplain_suit_allowed /obj/item/clothing/suit/costume/chickensuit name = "chicken suit" @@ -354,8 +362,6 @@ worn_icon = 'icons/mob/clothing/suits/costume.dmi' inhand_icon_state = "labcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET - //cold_protection = CHEST|GROIN|ARMS - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT allowed = list() hoodtype = /obj/item/clothing/head/hooded/ian_hood dog_fashion = /datum/dog_fashion/back @@ -367,8 +373,6 @@ worn_icon = 'icons/mob/clothing/head/costume.dmi' icon_state = "ian" body_parts_covered = HEAD - //cold_protection = HEAD - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS /obj/item/clothing/suit/hooded/bee_costume // It's Hip! @@ -619,6 +623,7 @@ /obj/item/clothing/suit/costume/hawaiian/Initialize(mapload) . = ..() AddComponent(/datum/component/adjust_fishing_difficulty, -5) + allowed += GLOB.personal_carry_allowed /obj/item/clothing/suit/costume/football_armor name = "football protective gear" @@ -637,6 +642,10 @@ desc = "I mean, don’t you have to be funny to be a comedian?" icon_state = "joker_coat" +/obj/item/clothing/suit/costume/joker/Initialize(mapload) + . = ..() + allowed += GLOB.personal_carry_allowed + /obj/item/clothing/suit/costume/deckers name = "decker hoodie" desc = "Based? Based on what?" diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm index 52c19be3bd16..d5d9c370ae95 100644 --- a/code/modules/clothing/suits/ghostsheet.dm +++ b/code/modules/clothing/suits/ghostsheet.dm @@ -28,8 +28,9 @@ desc = "This is obviously just a bedsheet, but maybe try it on?" icon = 'icons/obj/clothing/suits/costume.dmi' worn_icon = 'icons/mob/clothing/suits/costume.dmi' - user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) + icon_state = "ghost_sheet" inhand_icon_state = null + user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost", "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) throwforce = 0 throw_speed = 1 throw_range = 2 diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index ddd05bf5ab6d..820aeba2e14e 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -1,6 +1,7 @@ /obj/item/clothing/suit/jacket icon = 'icons/obj/clothing/suits/jacket.dmi' worn_icon = 'icons/mob/clothing/suits/jacket.dmi' + abstract_type = /obj/item/clothing/suit/jacket allowed = list( /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, @@ -9,31 +10,39 @@ /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio, - /obj/item/storage/belt/holster, ) body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT species_exception = list(/datum/species/golem) +/obj/item/clothing/suit/jacket/Initialize(mapload) + . = ..() + allowed += GLOB.personal_carry_allowed + /obj/item/clothing/suit/toggle/jacket icon = 'icons/obj/clothing/suits/jacket.dmi' worn_icon = 'icons/mob/clothing/suits/jacket.dmi' + abstract_type = /obj/item/clothing/suit/toggle/jacket allowed = list( /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, + /obj/item/tank/jetpack/oxygen/captain, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio, - /obj/item/storage/belt/holster, ) body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT species_exception = list(/datum/species/golem) +/obj/item/clothing/suit/toggle/jacket/Initialize(mapload) + . = ..() + allowed += GLOB.personal_carry_allowed + /obj/item/clothing/suit/toggle/jacket/sweater name = "sweater jacket" desc = "A sweater jacket." @@ -58,6 +67,10 @@ blood_overlay_type = "coat" flags_inv = HIDEBELT +/obj/item/clothing/suit/toggle/jacket/trenchcoat/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed + /obj/item/clothing/suit/jacket/blazer name = "blazer jacket" desc = "A blazer jacket." @@ -100,17 +113,10 @@ desc = "Aviators not included." icon_state = "bomberjacket" inhand_icon_state = "brownjsuit" - allowed = list( - /obj/item/flashlight, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy, - /obj/item/storage/fancy/cigarettes, - /obj/item/lighter, - /obj/item/gun/ballistic/rifle/boltaction/pipegun, - /obj/item/gun/energy/laser/musket, - /obj/item/radio, - ) + +/obj/item/clothing/suit/jacket/bomber/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed /obj/item/clothing/suit/jacket/leather name = "leather jacket" @@ -119,20 +125,10 @@ inhand_icon_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list( - /obj/item/flashlight, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy, - /obj/item/storage/fancy/cigarettes, - /obj/item/lighter, - /obj/item/gun/ballistic/automatic/pistol, - /obj/item/gun/ballistic/revolver, - /obj/item/gun/ballistic/revolver/c38/detective, - /obj/item/gun/ballistic/rifle/boltaction/pipegun, - /obj/item/gun/energy/laser/musket, - /obj/item/radio, - ) + +/obj/item/clothing/suit/jacket/leather/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed /obj/item/clothing/suit/jacket/leather/biker name = "biker jacket" @@ -166,20 +162,10 @@ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." icon_state = "militaryjacket" inhand_icon_state = null - allowed = list( - /obj/item/flashlight, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy, - /obj/item/storage/fancy/cigarettes, - /obj/item/lighter, - /obj/item/gun/ballistic/automatic/pistol, - /obj/item/gun/ballistic/revolver, - /obj/item/gun/ballistic/revolver/c38/detective, - /obj/item/gun/ballistic/rifle/boltaction/pipegun, - /obj/item/gun/energy/laser/musket, - /obj/item/radio, - ) + +/obj/item/clothing/suit/jacket/miljacket/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -188,6 +174,10 @@ inhand_icon_state = null species_exception = list(/datum/species/golem) +/obj/item/clothing/suit/jacket/letterman/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed + /obj/item/clothing/suit/jacket/letterman_red name = "red letterman jacket" desc = "A letterman jacket in a sick red color. Radical." @@ -195,26 +185,20 @@ inhand_icon_state = null species_exception = list(/datum/species/golem) +/obj/item/clothing/suit/jacket/letterman_red/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed + /obj/item/clothing/suit/jacket/letterman_syndie name = "blood-red letterman jacket" desc = "Oddly, this jacket seems to have a large S on the back..." icon_state = "letterman_s" inhand_icon_state = null species_exception = list(/datum/species/golem) - allowed = list( - /obj/item/flashlight, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/plasmaman, - /obj/item/toy, - /obj/item/storage/fancy/cigarettes, - /obj/item/lighter, - /obj/item/gun/ballistic/automatic/pistol, - /obj/item/gun/ballistic/revolver, - /obj/item/gun/ballistic/revolver/c38/detective, - /obj/item/gun/ballistic/rifle/boltaction/pipegun, - /obj/item/gun/energy/laser/musket, - /obj/item/radio, - ) + +/obj/item/clothing/suit/jacket/letterman_syndie/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed /obj/item/clothing/suit/jacket/letterman_nanotrasen name = "blue letterman jacket" @@ -222,3 +206,7 @@ icon_state = "letterman_n" inhand_icon_state = null species_exception = list(/datum/species/golem) + +/obj/item/clothing/suit/jacket/letterman_nanotrasen/Initialize(mapload) + . = ..() + allowed += GLOB.improvised_firearm_allowed diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 1040bc03120d..12ba36c89eb7 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -58,9 +58,13 @@ return /obj/item/clothing/suit/toggle + abstract_type = /obj/item/clothing/suit/toggle /// The noun that is displayed to the user on toggle. EX: "Toggles the suit's [buttons]". var/toggle_noun = "buttons" /obj/item/clothing/suit/toggle/Initialize(mapload) . = ..() AddComponent(/datum/component/toggle_icon, toggle_noun) + +/obj/item/clothing/head/hooded + abstract_type = /obj/item/clothing/head/hooded diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 0d03a6362013..552e69dcffa5 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -4,6 +4,7 @@ worn_icon = 'icons/mob/clothing/under/default.dmi' lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + abstract_type = /obj/item/clothing/under body_parts_covered = CHEST|GROIN|LEGS|ARMS slot_flags = ITEM_SLOT_ICLOTHING interaction_flags_click = NEED_DEXTERITY @@ -290,9 +291,6 @@ LAZYADD(attached_accessories, accessory) accessory.forceMove(src) - if(isnull(accessory_overlay)) - create_accessory_overlay() - // Allow for accessories to react to the acccessory list now accessory.successful_attach(src) @@ -315,35 +313,25 @@ popped_accessory.balloon_alert(user, "accessory removed") /// Removes the passed accesory from our accessories list -/obj/item/clothing/under/proc/remove_accessory(obj/item/clothing/accessory/removed) - if(removed == attached_accessories[1]) - accessory_overlay = null +/obj/item/clothing/under/proc/remove_accessory(obj/item/clothing/accessory/removed, update = TRUE) + // Remove it from the list before detaching LAZYREMOVE(attached_accessories, removed) - if(isnull(accessory_overlay) && LAZYLEN(attached_accessories)) - create_accessory_overlay() - removed.detach(src) - update_appearance() - -/// Handles creating the worn overlay mutable appearance -/// Only the first accessory attached is displayed (currently) -/obj/item/clothing/under/proc/create_accessory_overlay() - var/obj/item/clothing/accessory/prime_accessory = attached_accessories[1] - accessory_overlay = mutable_appearance(prime_accessory.worn_icon, prime_accessory.icon_state) - accessory_overlay.alpha = prime_accessory.alpha - accessory_overlay.color = prime_accessory.color + if(update) + update_accessory_overlay() -/// Updates the accessory's worn overlay mutable appearance +/// Handles creating, updating and cutting the worn overlay mutable appearance. /obj/item/clothing/under/proc/update_accessory_overlay() - if(isnull(accessory_overlay)) + if(!length(attached_accessories)) + accessory_overlay = null return - - cut_overlay(accessory_overlay) - create_accessory_overlay() + accessory_overlay = mutable_appearance() + for(var/obj/item/clothing/accessory/accessory as anything in attached_accessories) + accessory_overlay.overlays += accessory.generate_accessory_overlay(src) update_appearance() // so we update the suit inventory overlay too /obj/item/clothing/under/Exited(atom/movable/gone, direction) @@ -355,8 +343,9 @@ /// Helper to remove all attachments to the passed location /obj/item/clothing/under/proc/dump_attachments(atom/drop_to = drop_location()) for(var/obj/item/clothing/accessory/worn_accessory as anything in attached_accessories) - remove_accessory(worn_accessory) + remove_accessory(worn_accessory, update = FALSE) worn_accessory.forceMove(drop_to) + update_accessory_overlay() /obj/item/clothing/under/atom_destruction(damage_flag) dump_attachments() @@ -533,4 +522,5 @@ return ..() /obj/item/clothing/under/rank + abstract_type = /obj/item/clothing/under/rank dying_key = DYE_REGISTRY_UNDER diff --git a/code/modules/clothing/under/accessories/_accessories.dm b/code/modules/clothing/under/accessories/_accessories.dm index 60fcbf97e5cb..0e4e2f981907 100644 --- a/code/modules/clothing/under/accessories/_accessories.dm +++ b/code/modules/clothing/under/accessories/_accessories.dm @@ -15,6 +15,7 @@ worn_icon = 'icons/mob/clothing/accessories.dmi' icon_state = "plasma" inhand_icon_state = "" //no inhands + abstract_type = /obj/item/clothing/accessory slot_flags = NONE w_class = WEIGHT_CLASS_SMALL item_flags = NOBLUDGEON @@ -111,6 +112,10 @@ /obj/item/clothing/accessory/proc/successful_attach(obj/item/clothing/under/attached_to) SHOULD_CALL_PARENT(TRUE) + if(!attached_to.accessory_overlay) + attached_to.accessory_overlay = mutable_appearance() + attached_to.accessory_overlay.overlays += generate_accessory_overlay(attached_to) //uniform appearance will be updated by the caller + // Do on-equip effects if we're already equipped var/mob/worn_on = attached_to.loc if(istype(worn_on)) @@ -119,6 +124,13 @@ SEND_SIGNAL(src, COMSIG_ACCESSORY_ATTACHED, attached_to) SEND_SIGNAL(attached_to, COMSIG_CLOTHING_ACCESSORY_ATTACHED, src) +/obj/item/clothing/accessory/proc/generate_accessory_overlay(obj/item/clothing/under/attached_to) + SHOULD_CALL_PARENT(TRUE) + var/mutable_appearance/appearance = mutable_appearance(worn_icon, icon_state) + appearance.alpha = alpha + appearance.color = color + return appearance + /** * Detach this accessory from the passed clothing article * diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm index 1d39d2f1ad71..c2c1325d4aaa 100644 --- a/code/modules/clothing/under/jobs/cargo.dm +++ b/code/modules/clothing/under/jobs/cargo.dm @@ -1,6 +1,7 @@ /obj/item/clothing/under/rank/cargo icon = 'icons/obj/clothing/under/cargo.dmi' worn_icon = 'icons/mob/clothing/under/cargo.dmi' + abstract_type = /obj/item/clothing/under/rank/cargo /obj/item/clothing/under/rank/cargo/qm name = "quartermaster's uniform" diff --git a/code/modules/clothing/under/jobs/centcom.dm b/code/modules/clothing/under/jobs/centcom.dm index ccd268eb7641..38bcafe12114 100644 --- a/code/modules/clothing/under/jobs/centcom.dm +++ b/code/modules/clothing/under/jobs/centcom.dm @@ -1,6 +1,7 @@ /obj/item/clothing/under/rank/centcom icon = 'icons/obj/clothing/under/centcom.dmi' worn_icon = 'icons/mob/clothing/under/centcom.dmi' + abstract_type = /obj/item/clothing/under/rank/centcom /obj/item/clothing/under/rank/centcom/commander name = "\improper CentCom commander's suit" diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm index d906bc3d8792..923cfbaa74ce 100644 --- a/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -3,6 +3,7 @@ /obj/item/clothing/under/rank/civilian icon = 'icons/obj/clothing/under/civilian.dmi' worn_icon = 'icons/mob/clothing/under/civilian.dmi' + abstract_type = /obj/item/clothing/under/rank/civilian /obj/item/clothing/under/rank/civilian/purple_bartender desc = "It looks like it has lots of flair!" @@ -113,6 +114,7 @@ desc = "Slick threads." icon = 'icons/obj/clothing/under/suits.dmi' worn_icon = 'icons/mob/clothing/under/suits.dmi' + abstract_type = /obj/item/clothing/under/rank/civilian/lawyer can_adjust = FALSE /obj/item/clothing/under/rank/civilian/lawyer/dye_item(dye_color, dye_key_override) diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 85ce2c2976f4..257312ffff83 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -3,6 +3,7 @@ /obj/item/clothing/under/rank/engineering icon = 'icons/obj/clothing/under/engineering.dmi' worn_icon = 'icons/mob/clothing/under/engineering.dmi' + abstract_type = /obj/item/clothing/under/rank/engineering armor_type = /datum/armor/clothing_under/rank_engineering resistance_flags = NONE diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index 9937e23929a1..6cf86c8770e6 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -1,6 +1,7 @@ /obj/item/clothing/under/rank/medical icon = 'icons/obj/clothing/under/medical.dmi' worn_icon = 'icons/mob/clothing/under/medical.dmi' + abstract_type = /obj/item/clothing/under/rank/medical armor_type = /datum/armor/clothing_under/rank_medical /datum/armor/clothing_under/rank_medical diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm index bb65ef5801f7..b5731ac06a41 100644 --- a/code/modules/clothing/under/jobs/rnd.dm +++ b/code/modules/clothing/under/jobs/rnd.dm @@ -1,6 +1,7 @@ /obj/item/clothing/under/rank/rnd icon = 'icons/obj/clothing/under/rnd.dmi' worn_icon = 'icons/mob/clothing/under/rnd.dmi' + abstract_type = /obj/item/clothing/under/rank/rnd armor_type = /datum/armor/clothing_under/science /datum/armor/clothing_under/science diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 1753c9311e1e..8d6753afadb7 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -12,6 +12,7 @@ /obj/item/clothing/under/rank/security icon = 'icons/obj/clothing/under/security.dmi' worn_icon = 'icons/mob/clothing/under/security.dmi' + abstract_type = /obj/item/clothing/under/rank/security armor_type = /datum/armor/clothing_under/rank_security strip_delay = 5 SECONDS sensor_mode = SENSOR_COORDS diff --git a/code/modules/clothing/under/jobs/station_trait.dm b/code/modules/clothing/under/jobs/station_trait.dm index 034641d35b19..b351bd2a17e1 100644 --- a/code/modules/clothing/under/jobs/station_trait.dm +++ b/code/modules/clothing/under/jobs/station_trait.dm @@ -4,6 +4,7 @@ /obj/item/clothing/under/rank/station_trait icon = 'icons/obj/clothing/under/station_trait.dmi' worn_icon = 'icons/mob/clothing/under/station_trait.dmi' + abstract_type = /obj/item/clothing/under/rank/station_trait /obj/item/clothing/under/rank/station_trait/human_ai name = "ai's uniform" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index ba7a6b8c0ba6..91ca031837f7 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -1,6 +1,7 @@ /obj/item/clothing/under/misc icon = 'icons/obj/clothing/under/misc.dmi' worn_icon = 'icons/mob/clothing/under/misc.dmi' + abstract_type = /obj/item/clothing/under/misc /obj/item/clothing/under/misc/pj name = "\improper PJs" diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 90f05d8f2ea6..ea76c0b61533 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -6,6 +6,7 @@ custom_price = PAYCHECK_CREW icon = 'icons/obj/clothing/under/shorts_pants_shirts.dmi' worn_icon = 'icons/mob/clothing/under/shorts_pants_shirts.dmi' + abstract_type = /obj/item/clothing/under/pants species_exception = list(/datum/species/golem) /obj/item/clothing/under/pants/slacks diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm index 8ec8e5b2d8a5..986def70031c 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -37,6 +37,8 @@ var/list/transaction_history = list() ///A lazylist of coupons redeemed with the Coupon Master pda app associated with this account. var/list/redeemed_coupons + /// How many paychecks to skip when payday is called. + var/paydays_to_skip = 0 /datum/bank_account/New(newname, job, modifier = 1, player_account = TRUE) account_holder = newname @@ -188,10 +190,21 @@ * Arguments: * * amount_of_paychecks - literally the number of salaries, 1 for issuing one salary, 5 for issuing five salaries. * * free - issuance of free funds, if TRUE then takes funds from the void, if FALSE (default) tries to send from the department's account. + * * skippable - if TRUE, this proc may pay out nothing if the account has paydays_to_skip + * * event - the name of the event that is being processed, used for bank card messages. */ -/datum/bank_account/proc/payday(amount_of_paychecks, free = FALSE) +/datum/bank_account/proc/payday(amount_of_paychecks, free = FALSE, skippable = FALSE, event = "Payday") if(!account_job) - return + return FALSE + + if(skippable && !free) + while(paydays_to_skip > 0 && amount_of_paychecks > 0) + amount_of_paychecks -= 1 + paydays_to_skip -= 1 + + if(amount_of_paychecks <= 0) + return FALSE + var/money_to_transfer = round(account_job.paycheck * payday_modifier * amount_of_paychecks) if(amount_of_paychecks == 1) money_to_transfer = clamp(money_to_transfer, 0, PAYCHECK_CREW) //We want to limit single, passive paychecks to regular crew income. @@ -201,17 +214,15 @@ SSeconomy.station_target += money_to_transfer log_econ("[money_to_transfer] credits were given to [src.account_holder]'s account from income.") return TRUE - else - var/datum/bank_account/department_account = SSeconomy.get_dep_account(account_job.paycheck_department) - if(department_account) - if(!transfer_money(department_account, money_to_transfer)) - bank_card_talk("ERROR: Payday aborted, departmental funds insufficient.") - return FALSE - else - bank_card_talk("Payday processed, account now holds [account_balance] cr.") - return TRUE - bank_card_talk("ERROR: Payday aborted, unable to contact departmental account.") - return FALSE + var/datum/bank_account/department_account = SSeconomy.get_dep_account(account_job.paycheck_department) + if(isnull(department_account)) + bank_card_talk("ERROR: [event] aborted, unable to contact departmental account.") + return FALSE + if(!transfer_money(department_account, money_to_transfer)) + bank_card_talk("ERROR: [event] aborted, departmental funds insufficient.") + return FALSE + bank_card_talk("[event] processed, account now holds [account_balance] cr.") + return TRUE /** * This sends a local chat message to the owner of a bank account, on all ID cards registered to the bank_account. diff --git a/code/modules/events/space_vines/vine_mutations.dm b/code/modules/events/space_vines/vine_mutations.dm index 8a9d922ee822..9db702169dd6 100644 --- a/code/modules/events/space_vines/vine_mutations.dm +++ b/code/modules/events/space_vines/vine_mutations.dm @@ -1,6 +1,8 @@ /datum/spacevine_mutation /// Displayed name of mutation var/name = "" + /// Description of mutation, shown in the plant analyzer + var/description = "" /// Severity of mutation in terms of gameplay, affects appearance chance and how many mutations can be on the same vine var/severity = 1 /// The mutation's contribution to a given vine's color @@ -64,6 +66,7 @@ /datum/spacevine_mutation/light name = "Light" + description = "Emits light." hue = "#B2EA70" quality = POSITIVE severity = SEVERITY_TRIVIAL @@ -74,6 +77,7 @@ /datum/spacevine_mutation/toxicity name = "Toxic" + description = "Releases toxins when touched or eaten." hue = "#9B3675" severity = SEVERITY_AVERAGE quality = NEGATIVE @@ -91,6 +95,7 @@ /datum/spacevine_mutation/explosive // JC IT'S A BOMB name = "Explosive" + description = "Causes an explosion when destroyed." hue = "#D83A56" quality = NEGATIVE severity = SEVERITY_MAJOR @@ -108,6 +113,7 @@ /datum/spacevine_mutation/fire_proof name = "Fire proof" + description = "Provides immunity to heat and burn damage." hue = "#FF616D" quality = MINOR_NEGATIVE severity = SEVERITY_ABOVE_AVERAGE @@ -123,6 +129,7 @@ /datum/spacevine_mutation/cold_proof name = "Cold proof" + description = "Provides immunity to cold damage." hue = "#0BD5D9" quality = MINOR_NEGATIVE severity = SEVERITY_AVERAGE @@ -133,6 +140,7 @@ /datum/spacevine_mutation/temp_stabilisation name = "Temperature stabilisation" + description = "Stabilizes the temperature of the surrounding area." hue = "#B09856" quality = POSITIVE severity = SEVERITY_MINOR @@ -156,6 +164,7 @@ /datum/spacevine_mutation/vine_eating name = "Vine eating" + description = "Destroys other Kudzu vines on spread." hue = "#F4A442" quality = MINOR_NEGATIVE severity = SEVERITY_MINOR @@ -167,6 +176,7 @@ /datum/spacevine_mutation/aggressive_spread //very OP, but im out of other ideas currently name = "Aggressive spreading" + description = "Heavily wounds mobs when spreading or tangling them." hue = "#316b2f" severity = SEVERITY_MAJOR quality = NEGATIVE @@ -222,6 +232,7 @@ /datum/spacevine_mutation/transparency name = "transparent" + description = "Allows light to pass through." hue = "" quality = POSITIVE severity = SEVERITY_TRIVIAL @@ -232,6 +243,7 @@ /datum/spacevine_mutation/oxy_eater name = "Oxygen consuming" + description = "Consumes Oxygen from the surrounding area." hue = "#28B5B5" severity = SEVERITY_AVERAGE quality = NEGATIVE @@ -247,6 +259,7 @@ /datum/spacevine_mutation/nitro_eater name = "Nitrogen consuming" + description = "Consumes Nitrogen from the surrounding area." hue = "#FF7B54" severity = SEVERITY_AVERAGE quality = NEGATIVE @@ -262,6 +275,7 @@ /datum/spacevine_mutation/carbondioxide_eater name = "CO2 consuming" + description = "Consumes Carbon Dioxide from the surrounding area." hue = "#798777" severity = SEVERITY_MINOR quality = POSITIVE @@ -277,6 +291,7 @@ /datum/spacevine_mutation/plasma_eater name = "Plasma consuming" + description = "Consumes Plasma from the surrounding area." hue = "#9074b6" severity = SEVERITY_AVERAGE quality = POSITIVE @@ -292,6 +307,7 @@ /datum/spacevine_mutation/thorns name = "Thorny" + description = "Causes damage when hitting or passing through the vines." hue = "#9ECCA4" severity = SEVERITY_AVERAGE quality = NEGATIVE @@ -324,6 +340,7 @@ /datum/spacevine_mutation/hardened name = "Hardened" + description = "Provides resistance to cutting attacks, makes vines hardier, and prevents light from passing through." hue = "#997700" quality = NEGATIVE severity = SEVERITY_ABOVE_AVERAGE @@ -340,6 +357,7 @@ /datum/spacevine_mutation/timid name = "Timid" + description = "Hides the vines under structures and prevents them from tangling mobs." hue = "#a4a9ac" quality = POSITIVE severity = SEVERITY_MINOR @@ -354,6 +372,7 @@ /datum/spacevine_mutation/flowering name = "Flowering" + description = "Causes the vine to grow flower buds which spawns man eating plants when fully grown." hue = "#66DE93" quality = NEGATIVE severity = SEVERITY_MAJOR diff --git a/code/modules/experisci/experiment/physical_experiments.dm b/code/modules/experisci/experiment/physical_experiments.dm index 60303814e44e..11075d1c75ec 100644 --- a/code/modules/experisci/experiment/physical_experiments.dm +++ b/code/modules/experisci/experiment/physical_experiments.dm @@ -43,12 +43,12 @@ linked_experiment_handler.announce_message("Incorrect object for experiment.") return FALSE - RegisterSignal(currently_scanned_atom, COMSIG_ARCADE_PRIZEVEND, PROC_REF(win_arcade)) + RegisterSignal(currently_scanned_atom, COMSIG_ARCADE_VICTORY, PROC_REF(win_arcade)) linked_experiment_handler.announce_message("Experiment ready to start.") return TRUE /datum/experiment/physical/arcade_winner/unregister_events() - UnregisterSignal(currently_scanned_atom, COMSIG_ARCADE_PRIZEVEND) + UnregisterSignal(currently_scanned_atom, COMSIG_ARCADE_VICTORY) /datum/experiment/physical/arcade_winner/check_progress() . += EXPERIMENT_PROG_BOOL("Win an arcade game at a tracked arcade cabinet.", is_complete()) diff --git a/code/modules/explorer_drone/exploration_events/_exploration_event.dm b/code/modules/explorer_drone/exploration_events/_exploration_event.dm index 5385a48fbb4e..d60b730e07de 100644 --- a/code/modules/explorer_drone/exploration_events/_exploration_event.dm +++ b/code/modules/explorer_drone/exploration_events/_exploration_event.dm @@ -1,7 +1,7 @@ /// Exploration event /datum/exploration_event /// These types will be ignored in event creation - var/root_abstract_type = /datum/exploration_event + abstract_type = /datum/exploration_event ///This name will show up in exploration list if it's repeatable var/name = "Something interesting" /// encountered at least once @@ -40,7 +40,7 @@ /// Simple events, not a full fledged adventure, consist only of single encounter screen /datum/exploration_event/simple - root_abstract_type = /datum/exploration_event/simple + abstract_type = /datum/exploration_event/simple var/ui_image = "default" /// Show ignore button. var/skippable = TRUE diff --git a/code/modules/explorer_drone/exploration_events/adventure.dm b/code/modules/explorer_drone/exploration_events/adventure.dm index bdf9b62c10b5..f7127d677785 100644 --- a/code/modules/explorer_drone/exploration_events/adventure.dm +++ b/code/modules/explorer_drone/exploration_events/adventure.dm @@ -2,7 +2,7 @@ /datum/exploration_event/adventure discovery_log = "Encountered something unexpected" var/datum/adventure/adventure - root_abstract_type = /datum/exploration_event/adventure + abstract_type = /datum/exploration_event/adventure /datum/exploration_event/adventure/encounter(obj/item/exodrone/drone) . = ..() diff --git a/code/modules/explorer_drone/exploration_events/danger.dm b/code/modules/explorer_drone/exploration_events/danger.dm index 605974fa8289..5a4d70207423 100644 --- a/code/modules/explorer_drone/exploration_events/danger.dm +++ b/code/modules/explorer_drone/exploration_events/danger.dm @@ -1,6 +1,6 @@ /// Danger event - unskippable, if you have appriopriate tool you can mitigate damage. /datum/exploration_event/simple/danger - root_abstract_type = /datum/exploration_event/simple/danger + abstract_type = /datum/exploration_event/simple/danger description = "You encounter a giant error." var/required_tool = EXODRONE_TOOL_LASER var/has_tool_action_text = "Fight" @@ -88,7 +88,7 @@ required_tool = EXODRONE_TOOL_MULTITOOL deep_scan_description = "Site is exposed to space radiation. Using self-diagnostic multiool attachment advised." description = "The drone feed suddenly goes haywire! It seems that the drone got hit by a burst of cosmic rays! You'll have to wait for the signal to be restored." - has_tool_description = "Your multitool should allow a significant amount of the damage to be repaired on its own." //wait, what? + has_tool_description = "Your multitool should allow a significant amount of the damage to be repaired on its own." //wait, what? no_tool_description = "Nothing more to be done than to wait and assess the damage." has_tool_action_text = "Wait" no_tool_action_text = "Wait" diff --git a/code/modules/explorer_drone/exploration_events/resource.dm b/code/modules/explorer_drone/exploration_events/resource.dm index 762f661aa6cf..908ad0cb81d8 100644 --- a/code/modules/explorer_drone/exploration_events/resource.dm +++ b/code/modules/explorer_drone/exploration_events/resource.dm @@ -1,7 +1,7 @@ /// Simple event type that checks if you have a tool and after a retrieval delay adds loot to drone. /datum/exploration_event/simple/resource name = "retrievable resource" - root_abstract_type = /datum/exploration_event/simple/resource + abstract_type = /datum/exploration_event/simple/resource discovery_log = "Encountered recoverable resource." action_text = "Extract" /// Tool type required to recover this resource diff --git a/code/modules/explorer_drone/exploration_events/trader.dm b/code/modules/explorer_drone/exploration_events/trader.dm index 0367eb71516e..ba0bbdf22eda 100644 --- a/code/modules/explorer_drone/exploration_events/trader.dm +++ b/code/modules/explorer_drone/exploration_events/trader.dm @@ -1,6 +1,6 @@ /// Trader events - If drone is loaded with X exchanges it for Y, might require translator tool. /datum/exploration_event/simple/trader - root_abstract_type = /datum/exploration_event/simple/trader + abstract_type = /datum/exploration_event/simple/trader action_text = "Trade" /// Obj path we'll take or list of paths ,one path will be picked from it at init var/required_path diff --git a/code/modules/explorer_drone/exploration_site.dm b/code/modules/explorer_drone/exploration_site.dm index 9a21203d5962..4a8be99417e7 100644 --- a/code/modules/explorer_drone/exploration_site.dm +++ b/code/modules/explorer_drone/exploration_site.dm @@ -120,7 +120,7 @@ GLOBAL_LIST_EMPTY(exploration_sites) . = list() for(var/event_type in subtypesof(/datum/exploration_event)) var/datum/exploration_event/event = event_type - if(initial(event.root_abstract_type) == event_type) + if(initial(event.abstract_type) == event_type) continue event = new event_type .[event_type] = list("required" = event.required_site_traits,"blacklisted" = event.blacklisted_site_traits) diff --git a/code/modules/fishing/fish/types/rift.dm b/code/modules/fishing/fish/types/rift.dm index eb72c82ac448..ba6a0142ed44 100644 --- a/code/modules/fishing/fish/types/rift.dm +++ b/code/modules/fishing/fish/types/rift.dm @@ -722,12 +722,7 @@ icon_state = "babbearfish" /datum/bodypart_overlay/simple/babbearfish/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if((human.head?.flags_inv & HIDEEARS) || (human.wear_mask?.flags_inv & HIDEEARS)) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEEARS) /obj/item/organ/ears/babbelfish/Initialize(mapload) . = ..() diff --git a/code/modules/fishing/sources/subtypes/surgery.dm b/code/modules/fishing/sources/subtypes/surgery.dm index 3beaa1d2fd98..0ee2b06d856a 100644 --- a/code/modules/fishing/sources/subtypes/surgery.dm +++ b/code/modules/fishing/sources/subtypes/surgery.dm @@ -12,9 +12,13 @@ wait_time_range = list(6 SECONDS, 12 SECONDS) /datum/fish_source/surgery/spawn_reward(reward_path, atom/spawn_location, atom/fishing_spot, obj/item/fishing_rod/used_rod) + if(reward_path != FISHING_RANDOM_ORGAN) + return ..() + if(istype(fishing_spot, /obj/machinery/fishing_portal_generator)) var/obj/machinery/fishing_portal_generator/portal = fishing_spot fishing_spot = portal.current_linked_atom + if(!iscarbon(fishing_spot)) var/random_type = pick(subtypesof(/obj/item/organ) - GLOB.prototype_organs) return new random_type(spawn_location) diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index 2659d9800a40..192760ed4474 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -160,11 +160,22 @@ /obj/machinery/coffeemaker/proc/replace_pot(mob/living/user, obj/item/reagent_containers/cup/coffeepot/new_coffeepot) if(!user) return FALSE - if(coffeepot) + + // If we're trying to eject/remove the current pot + if(!new_coffeepot) + if(!coffeepot) + balloon_alert(user, "no coffeepot to remove!") + return FALSE try_put_in_hand(coffeepot, user) - if(new_coffeepot) + balloon_alert(user, "coffeepot returned") + coffeepot = null + else + // If we're replacing with a new pot + if(coffeepot) + try_put_in_hand(coffeepot, user) coffeepot = new_coffeepot - balloon_alert(user, "replaced pot") + balloon_alert(user, "coffeepot inserted") + update_appearance(UPDATE_OVERLAYS) return TRUE @@ -183,90 +194,92 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers) +/obj/machinery/coffeemaker/item_interaction(mob/living/user, obj/item/tool, list/modifiers) //You can only screw open empty grinder - if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) - return FALSE + if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + return ITEM_INTERACT_SUCCESS - if(default_deconstruction_crowbar(attack_item)) - return + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS if(panel_open) //Can't insert objects when its screwed open - return TRUE + return ITEM_INTERACT_BLOCKING - if (istype(attack_item, /obj/item/reagent_containers/cup/coffeepot) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/cup/coffeepot/new_pot = attack_item - . = TRUE //no afterattack + if (istype(tool, /obj/item/reagent_containers/cup/coffeepot) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + var/obj/item/reagent_containers/cup/coffeepot/new_pot = tool + . = ITEM_INTERACT_SUCCESS //no afterattack if(!user.transferItemToLoc(new_pot, src)) - return TRUE + return ITEM_INTERACT_BLOCKING replace_pot(user, new_pot) update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/cup/glass/coffee_cup) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/cup/glass/coffee_cup/new_cup = attack_item + if (istype(tool, /obj/item/reagent_containers/cup/glass/coffee_cup) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + var/obj/item/reagent_containers/cup/glass/coffee_cup/new_cup = tool if(new_cup.reagents.total_volume > 0) balloon_alert(user, "the cup must be empty!") - return + return ITEM_INTERACT_BLOCKING if(coffee_cups >= max_coffee_cups) balloon_alert(user, "the cup holder is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING coffee_cups++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/condiment/pack/sugar)) - var/obj/item/reagent_containers/condiment/pack/sugar/new_pack = attack_item + if (istype(tool, /obj/item/reagent_containers/condiment/pack/sugar)) + var/obj/item/reagent_containers/condiment/pack/sugar/new_pack = tool if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) balloon_alert(user, "the pack must be full!") - return + return ITEM_INTERACT_BLOCKING if(sugar_packs >= max_sugar_packs) balloon_alert(user, "the sugar compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING sugar_packs++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/condiment/creamer)) - var/obj/item/reagent_containers/condiment/creamer/new_pack = attack_item + if (istype(tool, /obj/item/reagent_containers/condiment/creamer)) + var/obj/item/reagent_containers/condiment/creamer/new_pack = tool if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) balloon_alert(user, "the pack must be full!") - return + return ITEM_INTERACT_BLOCKING if(creamer_packs >= max_creamer_packs) balloon_alert(user, "the creamer compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING creamer_packs++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/condiment/pack/astrotame)) - var/obj/item/reagent_containers/condiment/pack/astrotame/new_pack = attack_item + if (istype(tool, /obj/item/reagent_containers/condiment/pack/astrotame)) + var/obj/item/reagent_containers/condiment/pack/astrotame/new_pack = tool if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) balloon_alert(user, "the pack must be full!") - return + return ITEM_INTERACT_BLOCKING else if(sweetener_packs >= max_sweetener_packs) balloon_alert(user, "the sweetener compartment is full!") - return - else if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + else if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING sweetener_packs++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/coffee_cartridge) && !(attack_item.item_flags & ABSTRACT)) - var/obj/item/coffee_cartridge/new_cartridge = attack_item + if (istype(tool, /obj/item/coffee_cartridge) && !(tool.item_flags & ABSTRACT)) + var/obj/item/coffee_cartridge/new_cartridge = tool if(!user.transferItemToLoc(new_cartridge, src)) - return + return ITEM_INTERACT_BLOCKING replace_cartridge(user, new_cartridge) balloon_alert(user, "added cartridge") update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack + + return NONE // Allow normal attack processing if no special interaction occurred /obj/machinery/coffeemaker/proc/try_brew() if(!cartridge) @@ -582,101 +595,102 @@ return FALSE return TRUE -/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers) +/obj/machinery/coffeemaker/impressa/item_interaction(mob/living/user, obj/item/tool, list/modifiers) //You can only screw open empty grinder - if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) - return + if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + return ITEM_INTERACT_SUCCESS - if(default_deconstruction_crowbar(attack_item)) - return + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS if(panel_open) //Can't insert objects when its screwed open - return TRUE + return ITEM_INTERACT_BLOCKING - if (istype(attack_item, /obj/item/reagent_containers/cup/coffeepot) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/cup/coffeepot/new_pot = attack_item + if (istype(tool, /obj/item/reagent_containers/cup/coffeepot) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + var/obj/item/reagent_containers/cup/coffeepot/new_pot = tool if(!user.transferItemToLoc(new_pot, src)) - return TRUE + return ITEM_INTERACT_BLOCKING replace_pot(user, new_pot) update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/cup/glass/coffee) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/cup/glass/coffee/new_cup = attack_item //different type of cup + if (istype(tool, /obj/item/reagent_containers/cup/glass/coffee) && !(tool.item_flags & ABSTRACT) && tool.is_open_container()) + var/obj/item/reagent_containers/cup/glass/coffee/new_cup = tool //different type of cup if(new_cup.reagents.total_volume > 0 ) balloon_alert(user, "the cup must be empty!") - return + return ITEM_INTERACT_BLOCKING if(coffee_cups >= max_coffee_cups) balloon_alert(user, "the cup holder is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING coffee_cups++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/condiment/pack/sugar)) - var/obj/item/reagent_containers/condiment/pack/sugar/new_pack = attack_item + if (istype(tool, /obj/item/reagent_containers/condiment/pack/sugar)) + var/obj/item/reagent_containers/condiment/pack/sugar/new_pack = tool if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) balloon_alert(user, "the pack must be full!") - return + return ITEM_INTERACT_BLOCKING if(sugar_packs >= max_sugar_packs) balloon_alert(user, "the sugar compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING sugar_packs++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/condiment/creamer)) - var/obj/item/reagent_containers/condiment/creamer/new_pack = attack_item + if (istype(tool, /obj/item/reagent_containers/condiment/creamer)) + var/obj/item/reagent_containers/condiment/creamer/new_pack = tool if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) balloon_alert(user, "the pack must be full!") - return + return ITEM_INTERACT_BLOCKING if(creamer_packs >= max_creamer_packs) balloon_alert(user, "the creamer compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING creamer_packs++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/reagent_containers/condiment/pack/astrotame)) - var/obj/item/reagent_containers/condiment/pack/astrotame/new_pack = attack_item + if (istype(tool, /obj/item/reagent_containers/condiment/pack/astrotame)) + var/obj/item/reagent_containers/condiment/pack/astrotame/new_pack = tool if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) balloon_alert(user, "the pack must be full!") - return + return ITEM_INTERACT_BLOCKING if(sweetener_packs >= max_sweetener_packs) balloon_alert(user, "the sweetener compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src)) + return ITEM_INTERACT_BLOCKING sweetener_packs++ update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return ITEM_INTERACT_SUCCESS //no afterattack - if (istype(attack_item, /obj/item/food/grown/coffee) && !(attack_item.item_flags & ABSTRACT)) + if (istype(tool, /obj/item/food/grown/coffee) && !(tool.item_flags & ABSTRACT)) if(coffee_amount >= BEAN_CAPACITY) balloon_alert(user, "the coffee container is full!") - return - if(!HAS_TRAIT(attack_item, TRAIT_DRIED)) + return ITEM_INTERACT_BLOCKING + if(!HAS_TRAIT(tool, TRAIT_DRIED)) balloon_alert(user, "coffee beans must be dry!") - return - var/obj/item/food/grown/coffee/new_coffee = attack_item + return ITEM_INTERACT_BLOCKING + var/obj/item/food/grown/coffee/new_coffee = tool if(!user.transferItemToLoc(new_coffee, src)) - return + return ITEM_INTERACT_BLOCKING coffee += new_coffee coffee_amount++ balloon_alert(user, "added coffee") + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS //no afterattack - - if (istype(attack_item, /obj/item/storage/box/coffeepack)) + if (istype(tool, /obj/item/storage/box/coffeepack)) if(coffee_amount >= BEAN_CAPACITY) balloon_alert(user, "the coffee container is full!") - return - var/obj/item/storage/box/coffeepack/new_coffee_pack = attack_item + return ITEM_INTERACT_BLOCKING + var/obj/item/storage/box/coffeepack/new_coffee_pack = tool for(var/obj/item/food/grown/coffee/new_coffee in new_coffee_pack.contents) if(HAS_TRAIT(new_coffee, TRAIT_DRIED)) //the coffee beans inside must be dry if(coffee_amount < BEAN_CAPACITY) @@ -687,15 +701,16 @@ balloon_alert(user, "added coffee") update_appearance(UPDATE_OVERLAYS) else - return + return ITEM_INTERACT_BLOCKING else - return + return ITEM_INTERACT_BLOCKING else balloon_alert(user, "non-dried beans inside of coffee pack!") - return + return ITEM_INTERACT_BLOCKING + update_appearance(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS //no afterattack - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack + return NONE // Allow normal attack processing if no special interaction occurred /obj/machinery/coffeemaker/impressa/take_cup(mob/user) if(!coffee_cups) //shouldn't happen, but we all know how stuff manages to break diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index f5ff1c140e88..5d0beed7ee0a 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -57,11 +57,6 @@ visible_message(span_notice("[exposing_reagent] begins to cook on [src].")) return NONE -/obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I) - . = ..() - return default_deconstruction_crowbar(I, ignore_panel = TRUE) - - /obj/machinery/griddle/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(griddled_objects.len >= max_items) diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index 7b4ccb762801..a0d0ebad4176 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -270,6 +270,9 @@ return ITEM_INTERACT_SUCCESS /obj/item/plate/oven_tray/item_interaction(mob/living/user, obj/item/item, list/modifiers) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . if(isnull(item.atom_storage)) return NONE diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index 243d4f0ef148..225e8d868650 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -24,26 +24,25 @@ if(fragile) AddElement(/datum/element/can_shatter) -/obj/item/plate/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) - if(!IS_EDIBLE(I)) - balloon_alert(user, "not food!") - return - if(I.w_class > biggest_w_class) +/obj/item/plate/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!IS_EDIBLE(tool)) + return NONE + if(tool.w_class > biggest_w_class) balloon_alert(user, "too big!") - return + return ITEM_INTERACT_BLOCKING if(contents.len >= max_items) balloon_alert(user, "can't fit!") - return + return ITEM_INTERACT_BLOCKING //Center the icon where the user clicked. if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) - return - if(user.transferItemToLoc(I, src, silent = FALSE)) - I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -max_x_offset, max_x_offset) - I.pixel_y = min(text2num(LAZYACCESS(modifiers, ICON_Y)) + placement_offset, max_height_offset) - to_chat(user, span_notice("You place [I] on [src].")) - AddToPlate(I, user) - else - return ..() + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(tool, src, silent = FALSE)) + return ITEM_INTERACT_BLOCKING + tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -max_x_offset, max_x_offset) + tool.pixel_y = min(text2num(LAZYACCESS(modifiers, ICON_Y)) + placement_offset, max_height_offset) + to_chat(user, span_notice("You place [tool] on [src].")) + AddToPlate(tool, user) + return ITEM_INTERACT_SUCCESS /obj/item/plate/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!iscarbon(target)) diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm index 78b9623c3a01..2b3cefec7dbd 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -656,3 +656,70 @@ /datum/chemical_reaction/drink/blue_hawaiian results = list(/datum/reagent/consumable/ethanol/blue_hawaiian = 5) required_reagents = list(/datum/reagent/consumable/ethanol/coconut_rum = 2, /datum/reagent/consumable/pineapplejuice = 1, /datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/ethanol/curacao = 1) + +/datum/chemical_reaction/drink/boston_sour + results = list(/datum/reagent/consumable/ethanol/boston_sour = 15) + required_reagents = list(/datum/reagent/consumable/ethanol/whiskey_sour = 15, /datum/reagent/consumable/eggwhite = 2, /datum/reagent/consumable/ethanol/bitters = 1) + mix_message = "A frothy head forms over the mixture." + +/datum/chemical_reaction/drink/star + results = list(/datum/reagent/consumable/ethanol/star = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/applejack = 5, /datum/reagent/consumable/ethanol/vermouth = 5, /datum/reagent/consumable/ethanol/bitters = 1) + +/datum/chemical_reaction/drink/old_fashioned + results = list(/datum/reagent/consumable/ethanol/old_fashioned = 30) + required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 25, /datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/ethanol/bitters = 2) + mix_message = "The sugar dissolves into the bitters and whiskey." + +/datum/chemical_reaction/drink/sazerac + results = list(/datum/reagent/consumable/ethanol/sazerac = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/old_fashioned = 10, /datum/reagent/consumable/ethanol/absinthe = 1) + mix_message = "The mixture takes on a pleasing pink hue." + +/datum/chemical_reaction/drink/amaretto_sour + results = list(/datum/reagent/consumable/ethanol/amaretto_sour = 15) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 10, /datum/reagent/consumable/lemonjuice = 5, /datum/reagent/consumable/eggwhite = 2) + mix_message = "A frothy head forms over the mixture." + +/datum/chemical_reaction/drink/ramos_gin_fizz + results = list(/datum/reagent/consumable/ethanol/ramos_gin_fizz = 25) + //yes, this is intentionally a pain in the ass + required_reagents = list(/datum/reagent/consumable/ethanol/ginfizz = 12, /datum/reagent/consumable/lemonjuice = 3, /datum/reagent/consumable/sugar = 3, /datum/reagent/consumable/eggwhite = 3, /datum/reagent/consumable/cream = 3, /datum/reagent/consumable/ethanol/triple_sec = 1) + mix_message = "The drink forms a rising head of foam that begins to creep out of the top of the glass." + +/datum/chemical_reaction/drink/french_75 + results = list(/datum/reagent/consumable/ethanol/french_75 = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/champagne = 5, /datum/reagent/consumable/ethanol/gin = 3, /datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/sugar = 1) + +/datum/chemical_reaction/drink/sangria + results = list(/datum/reagent/consumable/ethanol/sangria = 20) + required_reagents = list(/datum/reagent/consumable/ethanol/wine = 10, /datum/reagent/consumable/ethanol/cognac = 3, /datum/reagent/consumable/triple_citrus = 3, /datum/reagent/consumable/sodawater = 3, /datum/reagent/consumable/sugar = 1) + +/datum/chemical_reaction/drink/suffering_bastard + results = list(/datum/reagent/consumable/ethanol/suffering_bastard = 20) + required_reagents = list(/datum/reagent/consumable/sol_dry = 10, /datum/reagent/consumable/ethanol/cognac = 3, /datum/reagent/consumable/ethanol/gin = 3, /datum/reagent/consumable/limejuice = 2, /datum/reagent/consumable/ethanol/bitters = 1, /datum/reagent/consumable/sugar = 1) + +/datum/chemical_reaction/drink/hot_toddy + results = list(/datum/reagent/consumable/ethanol/hot_toddy = 10) + required_reagents = list(/datum/reagent/water = 5, /datum/reagent/consumable/ethanol/cognac = 3, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/lemonjuice = 1) + mix_message = "The scent of warm cognac fills the air." + required_temp = 320 //Pour 100c water into other ingredients + +/datum/chemical_reaction/drink/tizirian_sour + results = list(/datum/reagent/consumable/ethanol/tizirian_sour = 8) + required_reagents = list(/datum/reagent/consumable/ethanol/bitters = 3, /datum/reagent/consumable/lemonjuice = 2, /datum/reagent/consumable/korta_nectar = 2, /datum/reagent/consumable/sugar = 1) + +/datum/chemical_reaction/drink/daiquiri + results = list(/datum/reagent/consumable/ethanol/daiquiri = 6) + required_reagents = list(/datum/reagent/consumable/ethanol/rum = 3, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/ice = 1) + +/datum/chemical_reaction/drink/flip_cocktail + results=list(/datum/reagent/consumable/ethanol/flip_cocktail = 25) + required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 15, /datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/eggwhite = 4, /datum/reagent/consumable/eggyolk = 2) + mix_message = "The egg emulsifies into a smooth mixture." + +/datum/chemical_reaction/drink/blue_blazer + results=list(/datum/reagent/consumable/ethanol/blue_blazer = 9) + required_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 4, /datum/reagent/water = 4, /datum/reagent/consumable/sugar = 1) + mix_message = "The whiskey ignites in a brilliant blue flame!" + required_temp = 365 //autoignition temp of ethanol diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm index 3790c7a31008..9b4f82d0c349 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm @@ -177,3 +177,7 @@ /datum/chemical_reaction/drink/t_letter results = list(/datum/reagent/consumable/t_letter = 2) required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/tea = 1) + +/datum/chemical_reaction/drink/bitters_soda + results = list(/datum/reagent/consumable/ethanol/bitters_soda = 15) + required_reagents = list(/datum/reagent/consumable/sodawater = 10, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/ethanol/bitters = 1) diff --git a/code/modules/food_and_drinks/restaurant/customers/_customer.dm b/code/modules/food_and_drinks/restaurant/customers/_customer.dm index 97b5b0c00ece..35b162e29b79 100644 --- a/code/modules/food_and_drinks/restaurant/customers/_customer.dm +++ b/code/modules/food_and_drinks/restaurant/customers/_customer.dm @@ -95,6 +95,7 @@ /datum/reagent/consumable/ethanol/beer = 25, /datum/reagent/consumable/ethanol/b52 = 6, /datum/reagent/consumable/ethanol/manhattan = 3, + /datum/reagent/consumable/ethanol/old_fashioned = 3, /datum/reagent/consumable/ethanol/atomicbomb = 1, ), ) @@ -141,6 +142,7 @@ /datum/reagent/consumable/ethanol/wine = 3, /datum/reagent/consumable/ethanol/grappa = 3, /datum/reagent/consumable/ethanol/amaretto = 5, + /datum/reagent/consumable/ethanol/amaretto_sour = 3, /datum/reagent/consumable/cucumberlemonade = 2, ), ) @@ -178,6 +180,7 @@ /datum/reagent/consumable/ethanol/beer = 5, /datum/reagent/consumable/ethanol/wine = 5, /datum/reagent/consumable/ethanol/gin_garden = 2, + /datum/reagent/consumable/ethanol/french_75 = 5, ), ) @@ -396,6 +399,7 @@ /datum/reagent/consumable/ethanol/martini = 5, /datum/reagent/consumable/ethanol/gintonic = 5, /datum/reagent/consumable/tea = 10, + /datum/reagent/consumable/ethanol/hot_toddy = 5, ), ) diff --git a/code/modules/forensics/forensics_helpers.dm b/code/modules/forensics/forensics_helpers.dm index 46c0bfa3a9df..5b32ee434182 100644 --- a/code/modules/forensics/forensics_helpers.dm +++ b/code/modules/forensics/forensics_helpers.dm @@ -200,7 +200,7 @@ var/dirty_hands = !!(target_flags & (ITEM_SLOT_GLOVES|ITEM_SLOT_HANDS)) var/dirty_feet = !!(target_flags & ITEM_SLOT_FEET) - var/slots_to_bloody = target_flags & ~check_covered_slots() + var/slots_to_bloody = target_flags & ~hidden_slots_to_inventory_slots(covered_slots) var/list/all_worn = get_equipped_items() for(var/obj/item/thing as anything in all_worn) if(thing.slot_flags & slots_to_bloody) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index f02632934549..0426d59ae012 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -26,8 +26,8 @@ var/processed_items_per_cycle = 5 /// The maximum amount of items the biogenerator can hold for biomass conversion purposes. var/max_items = 20 - /// The current amount of items that can be converted into biomass that the biogenerator is holding. - var/current_item_count = 0 + /// Cached amount of items currently in the biogenerator, for use in UI so we don't have to loop over contents every second while its open + var/content_count_cache = 0 /// The maximum amount of biomass that will affect the visuals of the biogenerator. var/max_visual_biomass = 5000 /// The maximum amount of reagents that the biogenerator can output to a container at once. @@ -155,7 +155,7 @@ . += span_notice(" - Productivity at [productivity * 100]%.") . += span_notice(" - Converting [processed_items_per_cycle] pieces of food per cycle.") . += span_notice(" - Matter consumption at [1 / efficiency * 100]%.") - . += span_notice(" - Internal biomass converter capacity at [max_items] pieces of food, and currently holding [current_item_count] piece\s.") + . += span_notice(" - Internal biomass converter capacity at [max_items] pieces of food, and currently holding [get_content_count()] piece\s.") if(welded_down) . += span_info("It's moored firmly to the floor. You can unsecure its moorings with a welder.") @@ -238,33 +238,35 @@ insert_beaker(user, tool) return ITEM_INTERACT_SUCCESS + var/content_count = get_content_count() if(istype(tool, /obj/item/storage/bag)) - if(current_item_count >= max_items) + if(content_count >= max_items) to_chat(user, span_warning("\The [src] is already full! Activate it to free up some space.")) return ITEM_INTERACT_FAILURE var/obj/item/storage/bag/bag = tool for(var/obj/item/food/item in bag.contents) - if(current_item_count >= max_items) + if(content_count >= max_items) break - if(bag.atom_storage.attempt_remove(item, src)) - current_item_count++ + bag.atom_storage.attempt_remove(item, src) + content_count = get_content_count() // Refresh the cache for UI if(bag.contents.len == 0) to_chat(user, span_info("You empty \the [bag] into \the [src].")) - else if (current_item_count >= max_items) + else if (content_count >= max_items) to_chat(user, span_info("You fill \the [src] from \the [bag] to its capacity.")) else to_chat(user, span_info("You fill \the [src] from \the [bag].")) return ITEM_INTERACT_SUCCESS if(istype(tool, /obj/item/food)) - if(current_item_count >= max_items) + if(content_count >= max_items) to_chat(user, span_warning("\The [src] is already full! Activate it to free up some space.")) return ITEM_INTERACT_FAILURE if(user.transferItemToLoc(tool, src)) to_chat(user, span_info("You insert \the [tool] in \the [src]")) + get_content_count() // Refresh the cache for UI return ITEM_INTERACT_SUCCESS to_chat(user, span_warning("You cannot put \the [tool] in \the [src]!")) @@ -274,16 +276,6 @@ eject_beaker(user) return CLICK_ACTION_SUCCESS -/obj/machinery/biogenerator/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - if(istype(arrived, /obj/item/food)) - current_item_count += 1 // No need to track qdels because they call Exited() - -/obj/machinery/biogenerator/Exited(atom/movable/gone, direction) - . = ..() - if(istype(gone, /obj/item/food)) - current_item_count -= 1 - /// Activates biomass processing and converts all inserted food products into biomass /obj/machinery/biogenerator/proc/start_process() if(machine_stat != NONE || panel_open) @@ -310,7 +302,7 @@ stop_process() return - if(!current_item_count) + if(!get_content_count()) stop_process() return @@ -327,12 +319,16 @@ use_energy(active_power_usage * seconds_per_tick) - if(!current_item_count) + if(!get_content_count()) stop_process(FALSE) update_appearance() - +/obj/machinery/biogenerator/proc/get_content_count() + content_count_cache = 0 + for (var/obj/item/food/food in contents) + content_count_cache += 1 + return content_count_cache /** * Simple helper proc that converts the given food item into biomass for the generator, while also handling removing it @@ -485,7 +481,7 @@ data["processing"] = processing data["max_output"] = max_output data["efficiency"] = efficiency - data["can_process"] = !!current_item_count + data["can_process"] = !!content_count_cache if(beaker) data["beakerCurrentVolume"] = round(beaker.reagents.total_volume, 0.01) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index a254241d1fd1..3a819bf9941e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -11,10 +11,11 @@ // Base type. Subtypes are found in /grown dir. Lavaland-based subtypes can be found in mining/ash_flora.dm /obj/item/food/grown + name = "fresh produce" // so recipe text doesn't say 'snack' icon = 'icons/obj/service/hydroponics/harvest.dmi' icon_state = "berrypile" worn_icon = 'icons/mob/clothing/head/hydroponics.dmi' - name = "fresh produce" // so recipe text doesn't say 'snack' + abstract_type = /obj/item/food/grown max_volume = PLANT_REAGENT_VOLUME w_class = WEIGHT_CLASS_SMALL resistance_flags = FLAMMABLE diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index f23bb43305b8..93be3a4a05f1 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -1,11 +1,12 @@ // Citrus - base type /obj/item/food/grown/citrus - seed = /obj/item/seeds/lime name = "citrus" desc = "It's so sour, your face will twist." icon_state = "lime" + abstract_type = /obj/item/food/grown/citrus foodtypes = FRUIT wine_power = 30 + seed = /obj/item/seeds/lime // Lime /obj/item/seeds/lime diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index 40a84d9c8ff9..8fb4c974f1c1 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -15,7 +15,7 @@ growing_icon = 'icons/obj/service/hydroponics/growing_flowers.dmi' icon_grow = "poppy-grow" icon_dead = "poppy-dead" - genes = list(/datum/plant_gene/trait/preserved) + genes = list(/datum/plant_gene/trait/preserved, /datum/plant_gene/trait/opium_production) mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/poppy/lily) reagents_add = list(/datum/reagent/medicine/c2/libital = 0.2, /datum/reagent/consumable/nutriment = 0.05) @@ -42,6 +42,7 @@ growing_icon = 'icons/obj/service/hydroponics/growing_flowers.dmi' icon_grow = "lily-grow" icon_dead = "lily-dead" + genes = list(/datum/plant_gene/trait/preserved) mutatelist = list(/obj/item/seeds/poppy/lily/trumpet) /obj/item/food/grown/poppy/lily @@ -71,7 +72,7 @@ icon_grow = "spacemanstrumpet-grow" icon_dead = "spacemanstrumpet-dead" mutatelist = null - genes = list(/datum/plant_gene/reagent/preset/polypyr, /datum/plant_gene/trait/preserved) + genes = list(/datum/plant_gene/trait/preserved, /datum/plant_gene/reagent/preset/polypyr) reagents_add = list(/datum/reagent/consumable/nutriment = 0.05) rarity = 30 graft_gene = /datum/plant_gene/reagent/preset/polypyr @@ -96,6 +97,7 @@ growing_icon = 'icons/obj/service/hydroponics/growing_flowers.dmi' icon_grow = "geranium-grow" icon_dead = "geranium-dead" + genes = list(/datum/plant_gene/trait/preserved) mutatelist = list(/obj/item/seeds/poppy/geranium/fraxinella) /obj/item/food/grown/poppy/geranium diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 9d0e465d033f..7a1003ed2ad8 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -1,5 +1,6 @@ /obj/item/food/grown/mushroom name = "mushroom" + abstract_type = /obj/item/food/grown/mushroom // This is a prototype that should never be spawned // but we'll default it to SOME seed if it does end up spawning just so we don't runtime horribly seed = /obj/item/seeds/chanter diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 2b97110dafae..842c10a025e2 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -106,11 +106,10 @@ sampleDNA = null contains_sample = FALSE -/obj/item/seeds/replicapod/get_unique_analyzer_text() +/obj/item/seeds/replicapod/get_unique_analyzer_data() if(contains_sample) - return "It contains a blood sample with blood DNA (UE) \"[sampleDNA]\"." //blood DNA (UE) shows in medical records and is readable by forensics scanners - else - return null + return list("Blood DNA" = sampleDNA) + return null /obj/item/seeds/replicapod/harvest(mob/user) //now that one is fun -- Urist var/obj/machinery/hydroponics/parent = loc diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index f0db7a02282a..f2d611b1aefe 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -42,7 +42,11 @@ throw_range = 3 attack_verb_continuous = list("bashes", "batters", "bludgeons", "whacks") attack_verb_simple = list("bash", "batter", "bludgeon", "whack") + /// Type of plank you can get from this type of log var/plank_type = /obj/item/stack/sheet/mineral/wood + /// How many planks you can get from this type of log, without counting seed potency + var/plank_count = 1 + /// Name of plank, shown in context tips and balloon alerts when cutting the log var/plank_name = "wooden planks" var/static/list/accepted = typecacheof(list( /obj/item/food/grown/tobacco, @@ -56,6 +60,8 @@ /obj/item/grown/log/Initialize(mapload, obj/item/seeds/new_seed) . = ..() register_context() + if(seed) + plank_count += round(seed.potency / 25) /obj/item/grown/log/add_context( atom/source, @@ -80,9 +86,6 @@ /obj/item/grown/log/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(attacking_item.get_sharpness()) - var/plank_count = 1 - if(seed) - plank_count += round(seed.potency / 25) user.balloon_alert(user, "made [plank_count] [plank_name]") new plank_type(user.loc, plank_count) @@ -111,6 +114,7 @@ seed = null name = "wood log" desc = "TIMMMMM-BERRRRRRRRRRR!" + plank_count = 10 /obj/item/grown/log/steel seed = /obj/item/seeds/tower/steel diff --git a/code/modules/hydroponics/grown/weeds/kudzu.dm b/code/modules/hydroponics/grown/weeds/kudzu.dm index a0a3c9405718..87241365cf49 100644 --- a/code/modules/hydroponics/grown/weeds/kudzu.dm +++ b/code/modules/hydroponics/grown/weeds/kudzu.dm @@ -50,13 +50,12 @@ plant(user) to_chat(user, span_notice("You plant the kudzu. You monster.")) -/obj/item/seeds/kudzu/get_unique_analyzer_text() - var/kudzu_mutations = "" - var/output_message = "" - for(var/datum/spacevine_mutation/SM in mutations) - kudzu_mutations += "[(kudzu_mutations == "") ? "" : ", "][SM.name]" - output_message += "Plant Mutations: [(kudzu_mutations == "") ? "None." : "[kudzu_mutations]."]" - return output_message +/obj/item/seeds/kudzu/get_unique_analyzer_data() + var/list/all_mutations = list() + for(var/datum/spacevine_mutation/vine_trait in mutations) + all_mutations[vine_trait.name] = vine_trait.description + + return list("Kudzu Traits" = all_mutations) /obj/item/seeds/kudzu/on_chem_reaction(datum/reagents/reagents) var/list/temp_mut_list = list() diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 2b2556790e2b..1565c3113ac5 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -6,6 +6,7 @@ name = "grown_weapon" icon = 'icons/obj/service/hydroponics/harvest.dmi' worn_icon = 'icons/mob/clothing/head/hydroponics.dmi' + abstract_type = /obj/item/grown resistance_flags = FLAMMABLE var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. /// Should we pixel offset ourselves at init? for mapping @@ -13,7 +14,7 @@ /// The reagent this plant distill to. If NULL, it uses a generic fruit_wine reagent and adjusts its variables. var/distill_reagent -// This may look like it's doing nothing but it's necessary, we do this to have kwargs work in New (for passing into Initialize) +// This may look like it's doing nothing but it's necessary, we do this to have kwargs work in New (for passing into Initialize) /obj/item/grown/New(loc, obj/item/seeds/new_seed) return ..() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 5d110f8ef8ee..00d01c9732d5 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -111,16 +111,16 @@ if(HAS_SILICON_ACCESS(user)) return NONE + context[SCREENTIP_CONTEXT_RMB] = "Empty nutrients" + switch(plant_status) if(HYDROTRAY_PLANT_DEAD) context[SCREENTIP_CONTEXT_LMB] = "Remove dead plant" - return CONTEXTUAL_SCREENTIP_SET if(HYDROTRAY_PLANT_HARVESTABLE) context[SCREENTIP_CONTEXT_LMB] = "Harvest plant" - return CONTEXTUAL_SCREENTIP_SET - return NONE + return CONTEXTUAL_SCREENTIP_SET // If the plant is harvestable, we can graft it with secateurs or harvest it with a plant bag. if(plant_status == HYDROTRAY_PLANT_HARVESTABLE) @@ -529,19 +529,24 @@ ///Sets a new value for the myseed variable, which is the seed of the plant that's growing inside the tray. /obj/machinery/hydroponics/proc/set_seed(obj/item/seeds/new_seed, delete_old_seed = TRUE) - var/old_seed = myseed + var/obj/item/seeds/old_seed = myseed myseed = new_seed + for(var/datum/plant_gene/trait/gene in old_seed?.genes) + gene.on_unplanted_from_tray(src, old_seed) if(old_seed && delete_old_seed) qdel(old_seed) set_plant_status(new_seed ? HYDROTRAY_PLANT_GROWING : HYDROTRAY_NO_PLANT) //To make sure they can't just put in another seed and insta-harvest it if(myseed && myseed.loc != src) myseed.forceMove(src) SEND_SIGNAL(src, COMSIG_HYDROTRAY_SET_SEED, new_seed) + for(var/datum/plant_gene/trait/gene in myseed?.genes) + gene.on_plant_in_tray(src, myseed) age = 0 update_appearance() if(isnull(myseed)) remove_shared_particles(/particles/pollen) + /* * Setter proc to set a tray to a new self_sustaining state and update all values associated with it. * diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 0cc9d78bc39a..0a5c7b711300 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -123,7 +123,7 @@ /// Flag - Traits that share an ID cannot be placed on the same plant. var/trait_ids /// Flag - Modifications made to the final product. - var/trait_flags + var/trait_flags = TRAIT_SHOW_EXAMINE /// A blacklist of seeds that a trait cannot be attached to. var/list/obj/item/seeds/seed_blacklist @@ -178,10 +178,29 @@ return FALSE // Add on any bonus lines on examine - if(description) + if(description && (trait_flags & TRAIT_SHOW_EXAMINE)) RegisterSignal(our_plant, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) return TRUE +/** + * on_plant_in_tray is called when a seed with this trait is placed in a hydroponics tray + * + * * tray - the hydroponics tray the seed is placed in + * * seed - the seed being placed in the tray + */ +/datum/plant_gene/trait/proc/on_plant_in_tray(obj/machinery/hydroponics/tray, obj/item/seeds/seed) + return + +/** + * on_unplanted_from_tray is called when a seed with this trait is removed from a hydroponics tray + * (this can be done from being harvested, being uprooted, etc.) + * + * * tray - the hydroponics tray the seed is removed from + * * seed - the seed being removed from the tray + */ +/datum/plant_gene/trait/proc/on_unplanted_from_tray(obj/machinery/hydroponics/tray, obj/item/seeds/seed) + return + /// Add on any unique examine text to the plant's examine text. /datum/plant_gene/trait/proc/examine(obj/item/our_plant, mob/examiner, list/examine_list) SIGNAL_HANDLER @@ -335,7 +354,7 @@ to_chat(eater, span_notice("You feel energized as you bite into [our_plant].")) var/batteries_recharged = FALSE var/obj/item/seeds/our_seed = our_plant.get_plant_seed() - for(var/obj/item/stock_parts/power_store/found_cell in eater.get_all_contents()) + for(var/obj/item/stock_parts/power_store/found_cell in eater.get_all_cells()) var/newcharge = min(our_seed.potency * 0.01 * found_cell.maxcharge, found_cell.maxcharge) if(found_cell.charge < newcharge) found_cell.charge = newcharge @@ -499,7 +518,7 @@ description = "The reagent volume is doubled, halving the plant yield instead." icon = FA_ICON_FLASK_VIAL rate = 2 - trait_flags = TRAIT_HALVES_YIELD + trait_flags = TRAIT_SHOW_EXAMINE|TRAIT_HALVES_YIELD mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE /datum/plant_gene/trait/maxchem/on_new_plant(obj/item/our_plant, newloc) @@ -895,7 +914,7 @@ description = "It consumes nutriments to heat up other reagents, halving the yield." icon = FA_ICON_TEMPERATURE_ARROW_UP trait_ids = TEMP_CHANGE_ID - trait_flags = TRAIT_HALVES_YIELD + trait_flags = TRAIT_SHOW_EXAMINE|TRAIT_HALVES_YIELD mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE /** @@ -907,7 +926,7 @@ description = "It consumes nutriments to cool down other reagents, halving the yield." icon = FA_ICON_TEMPERATURE_ARROW_DOWN trait_ids = TEMP_CHANGE_ID - trait_flags = TRAIT_HALVES_YIELD + trait_flags = TRAIT_SHOW_EXAMINE|TRAIT_HALVES_YIELD mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE /// Prevents species mutation, while still allowing wild mutation harvest and Floral Somatoray species mutation. Trait acts as a tag for hydroponics.dm to recognise. diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index c2985aef15e5..2f0f026110e3 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -6,6 +6,7 @@ icon = 'icons/obj/service/hydroponics/seeds.dmi' icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game. worn_icon_state = "seed" + abstract_type = /obj/item/seeds w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE /// Name of plant when planted. @@ -452,9 +453,11 @@ /** * Override for seeds with unique text for their analyzer. (No newlines at the start or end of unique text!) - * Returns null if no unique text, or a string of text if there is. + * Returns null if no unique data + * Return an assoc list (label = text) to add a new line to the analyzer + * Return an assoc list (label = list(text = tooltip, text = tooltip)) to add a new collapsible section to the analyzer */ -/obj/item/seeds/proc/get_unique_analyzer_text() +/obj/item/seeds/proc/get_unique_analyzer_data() return null /** @@ -656,3 +659,11 @@ plant_overlay.icon_state = "[icon_grow][t_growthstate]" plant_overlay.pixel_z = plant_icon_offset return plant_overlay + +/// Called when the seed is set in a tray +/obj/item/seeds/proc/on_planted(obj/machinery/hydroponics/parent) + return + +/// Called when the seed is removed from a tray - possibly from being harvested, possibly from being uprooted +/obj/item/seeds/proc/on_unplanted(obj/machinery/hydroponics/parent) + return diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index 1691dbecfb13..8989d753a959 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -685,9 +685,53 @@ name = "Complex Harvest" description = "Halves the maximum yield of the plant, and prevents it from benefiting from pollination's yield bonus." icon = FA_ICON_SLASH - trait_flags = TRAIT_HALVES_YIELD|TRAIT_NO_POLLINATION + trait_flags = TRAIT_SHOW_EXAMINE|TRAIT_HALVES_YIELD|TRAIT_NO_POLLINATION mutability_flags = NONE +/// Poppy's unique trait that allows slicing for sap +/datum/plant_gene/trait/opium_production + name = "Sap Buds" + description = "Using a knife or other sharp object on the plant between ages 200 seconds to 400 seconds will yield a sap." + trait_flags = NONE + icon = FA_ICON_PILLS + /// Has parent plant been harvested for sap already? + var/extracted = FALSE + +/datum/plant_gene/trait/opium_production/on_plant_in_tray(obj/machinery/hydroponics/tray, obj/item/seeds/seed) + RegisterSignal(tray, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(try_extract)) + extracted = FALSE // just in case... + +/datum/plant_gene/trait/opium_production/on_unplanted_from_tray(obj/machinery/hydroponics/tray, obj/item/seeds/seed) + UnregisterSignal(tray, COMSIG_ATOM_ITEM_INTERACTION) + +/// Redirect tray item interaction so we can have custom extracting behavior +/datum/plant_gene/trait/opium_production/proc/try_extract(obj/machinery/hydroponics/source, mob/living/user, obj/item/tool, ...) + SIGNAL_HANDLER + + if(!tool.sharpness || tool.tool_behaviour == TOOL_SHOVEL) + return NONE + + if(source.age < 10) + to_chat(user, span_warning("The [LOWER_TEXT(source.myseed.plantname)] are too young to extract sap from!")) + return ITEM_INTERACT_FAILURE + if(source.age > 19) + to_chat(user, span_warning("The [LOWER_TEXT(source.myseed.plantname)] are too old to extract sap from!")) + return ITEM_INTERACT_FAILURE + if(extracted) + to_chat(user, span_warning("The [LOWER_TEXT(source.myseed.plantname)] have already been harvested for sap!")) + return ITEM_INTERACT_FAILURE + + extracted = TRUE + new /obj/item/food/drug/opium/raw(source.drop_location(), source.myseed.potency) + playsound(src, 'sound/effects/bubbles/bubbles.ogg', 30, TRUE) + playsound(tool, 'sound/items/weapons/bladeslice.ogg', 30, TRUE) + user.visible_message( + span_notice("[user] carefully slices open a [source.myseed.species] pod, extracting a sap."), + span_notice("You carefully slice the [source.myseed.species]'s pod, collecting the fragrant, alluring sap."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ) + return ITEM_INTERACT_SUCCESS + /// Starthistle's essential invasive spreading /datum/plant_gene/trait/invasive/galaxythistle mutability_flags = PLANT_GENE_GRAFTABLE diff --git a/code/modules/instruments/instrument_data/_instrument_data.dm b/code/modules/instruments/instrument_data/_instrument_data.dm index 12a4b17062a2..2f3929fdfaae 100644 --- a/code/modules/instruments/instrument_data/_instrument_data.dm +++ b/code/modules/instruments/instrument_data/_instrument_data.dm @@ -17,14 +17,14 @@ * Since songs cache them while playing, there isn't realistic issues regarding performance from accessing. */ /datum/instrument + /// Used for categorization subtypes + abstract_type = /datum/instrument /// Name of the instrument var/name = "Generic instrument" /// Uniquely identifies this instrument so runtime changes are possible as opposed to paths. If this is unset, things will use path instead. var/id /// Category var/category = "Unsorted" - /// Used for categorization subtypes - var/abstract_type = /datum/instrument /// Write here however many samples, follow this syntax: "%note num%"='%sample file%' eg. "27"='synthesizer/e2.ogg'. Key must never be lower than 0 and higher than 127 var/list/real_samples /// assoc list key = /datum/instrument_key. do not fill this yourself! diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index de6ae2d0bbf1..cde0adbdc945 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -7,6 +7,7 @@ icon = 'icons/obj/art/musician.dmi' lefthand_file = 'icons/mob/inhands/equipment/instruments_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/instruments_righthand.dmi' + abstract_type = /obj/item/instrument /// Our song datum. var/datum/song/handheld/song /// Our allowed list of instrument ids. This is nulled on initialize. diff --git a/code/modules/jobs/departments/departments.dm b/code/modules/jobs/departments/departments.dm index c87e1dc31c5e..3d974366cd8e 100644 --- a/code/modules/jobs/departments/departments.dm +++ b/code/modules/jobs/departments/departments.dm @@ -43,6 +43,10 @@ job_datum.spawn_positions = 0 job_datum.total_positions = 0 +/// Returns all jobs that are in this category for jobbans +/datum/job_department/proc/get_jobban_jobs() + return department_jobs.Copy() + /// Returns a nation name for this department. /datum/job_department/proc/generate_nation_name() var/static/list/nation_suffixes = list("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka") @@ -93,6 +97,10 @@ head_of_staff_access = ACCESS_HOS department_access = REGION_ACCESS_SECURITY +/datum/job_department/security/get_jobban_jobs() + // Captains often fulfill security duties so they are considered part of the security department for jobbans + return ..() | SSjob.get_job_type(/datum/job/captain) + /datum/job_department/engineering department_name = DEPARTMENT_ENGINEERING department_bitflags = DEPARTMENT_BITFLAG_ENGINEERING diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 869c59c7044e..449392abe265 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -203,7 +203,7 @@ /mob/living/carbon/human/on_job_equipping(datum/job/equipping, client/player_client) if(equipping.paycheck_department) var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier) - bank_account.payday(STARTING_PAYCHECKS, TRUE) + bank_account.payday(STARTING_PAYCHECKS, free = TRUE) account_id = bank_account.account_id bank_account.replaceable = FALSE add_mob_memory(/datum/memory/key/account, remembered_id = account_id) diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index f865819203bd..a9872c6092f8 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -30,7 +30,6 @@ department_for_prefs = /datum/job_department/captain departments_list = list( /datum/job_department/command, - /datum/job_department/security, ) family_heirlooms = list(/obj/item/reagent_containers/cup/glass/flask/gold, /obj/item/toy/captainsaid/collector) diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 3a9a9fbc397b..8b24da5ab06c 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -69,6 +69,8 @@ backpack_contents = list( /obj/item/melee/baton/telescopic/silver = 1, /obj/item/construction/rcd/ce = 1, + /obj/item/extinguisher/mini = 1, + /obj/item/analyzer = 1, ) belt = /obj/item/storage/belt/utility/chief/full ears = /obj/item/radio/headset/heads/ce diff --git a/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm index 4f0af0d2d061..c11c931a3ef9 100644 --- a/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm +++ b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm @@ -34,7 +34,7 @@ . = ..() // Gorilla with a wage, what's he buyin? var/datum/bank_account/bank_account = new(spawned.real_name, src) - bank_account.payday(STARTING_PAYCHECKS, TRUE) + bank_account.payday(STARTING_PAYCHECKS, free = TRUE) bank_account.replaceable = FALSE spawned.add_mob_memory(/datum/memory/key/account, remembered_id = bank_account.account_id) diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 112f75aa4020..0478989ee518 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -235,7 +235,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( built_in_his_image.add_mood_event("blessing", /datum/mood_event/blessing) return BLESSING_SUCCESS -/obj/item/book/bible/attack(mob/living/target_mob, mob/living/carbon/human/user, params, heal_mode = TRUE) +/obj/item/book/bible/attack(mob/living/target_mob, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers, heal_mode = TRUE) if(!ISADVANCEDTOOLUSER(user)) balloon_alert(user, "not dextrous enough!") return @@ -393,7 +393,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( if(uses) return "Read" -/obj/item/book/bible/syndicate/attack(mob/living/target_mob, mob/living/carbon/human/user, params, heal_mode = TRUE) +/obj/item/book/bible/syndicate/attack(mob/living/target_mob, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers, heal_mode = TRUE) if(!user.combat_mode) return ..() - return ..(target_mob, user, heal_mode = FALSE) + return ..(target_mob, user, modifiers, attack_modifiers, heal_mode = FALSE) diff --git a/code/modules/library/skill_learning/generic_skillchips/misc.dm b/code/modules/library/skill_learning/generic_skillchips/misc.dm index 92c024c47322..083f67cb4a00 100644 --- a/code/modules/library/skill_learning/generic_skillchips/misc.dm +++ b/code/modules/library/skill_learning/generic_skillchips/misc.dm @@ -1,15 +1,5 @@ //Contains generic skillchips that are fairly short and simple -/obj/item/skillchip/basketweaving - name = "Basketsoft 3000 skillchip" - desc = "Underwater edition." - auto_traits = list(TRAIT_UNDERWATER_BASKETWEAVING_KNOWLEDGE) - skill_name = "Underwater Basketweaving" - skill_description = "Master intricate art of using twine to create perfect baskets while submerged." - skill_icon = "shopping-basket" - activate_message = span_notice("You're one with the twine and the sea.") - deactivate_message = span_notice("Higher mysteries of underwater basketweaving leave your mind.") - /obj/item/skillchip/wine_taster name = "WINE skillchip" desc = "Wine.Is.Not.Equal version 5." diff --git a/code/modules/library/skill_learning/generic_skillchips/point.dm b/code/modules/library/skill_learning/generic_skillchips/point.dm index 8b26e413b7e2..23971af80e01 100644 --- a/code/modules/library/skill_learning/generic_skillchips/point.dm +++ b/code/modules/library/skill_learning/generic_skillchips/point.dm @@ -26,7 +26,7 @@ /obj/item/skillchip/big_pointer/proc/fancier_pointer(mob/living/user, atom/pointed, obj/effect/temp_visual/point/point) SIGNAL_HANDLER - if(HAS_TRAIT(user, TRAIT_UNKNOWN)) + if(HAS_TRAIT(user, TRAIT_UNKNOWN_APPEARANCE)) return point.cut_overlays() var/datum/action/change_pointer_color/action = locate() in actions diff --git a/code/modules/library/skill_learning/generic_skillchips/underwater_basketweaving.dm b/code/modules/library/skill_learning/generic_skillchips/underwater_basketweaving.dm new file mode 100644 index 000000000000..eb83bffdad02 --- /dev/null +++ b/code/modules/library/skill_learning/generic_skillchips/underwater_basketweaving.dm @@ -0,0 +1,43 @@ + +/obj/item/skillchip/basketweaving + name = "Basketsoft 3000 skillchip" + desc = "Underwater edition." + skill_name = "Underwater Basketweaving" + skill_description = "Master intricate art of using twine to create perfect baskets while submerged." + skill_icon = "shopping-basket" + activate_message = span_notice("You're one with the twine and the sea.") + deactivate_message = span_notice("Higher mysteries of underwater basketweaving leave your mind.") + +/obj/item/skillchip/basketweaving/has_mob_incompatibility(mob/living/carbon/target) + . = ..() + if(.) + return + + if(!target.mind) + return "Target incapable of learning recipe." + +/obj/item/skillchip/basketweaving/on_activate(mob/living/carbon/user, silent=FALSE) + . = ..() + if(!user.mind) + return + learn_recipes(user) + //Prevent the skill from being transferred via mindswap. What an edge case + RegisterSignal(user.mind, COMSIG_MIND_TRANSFERRED, PROC_REF(forget_recipes)) + RegisterSignal(user, COMSIG_MOB_MIND_TRANSFERRED_INTO, PROC_REF(learn_recipes)) + +/obj/item/skillchip/basketweaving/proc/learn_recipes(mob/source) + SIGNAL_HANDLER + for(var/recipe_type in typesof(/datum/crafting_recipe/underwater_basket)) + source.mind.teach_crafting_recipe(recipe_type) + +/obj/item/skillchip/basketweaving/proc/forget_recipes(datum/mind/source, mob/previous_body) + SIGNAL_HANDLER + for(var/recipe_type in typesof(/datum/crafting_recipe/underwater_basket)) + source.forget_crafting_recipe(recipe_type) + +/obj/item/skillchip/basketweaving/on_deactivate(mob/living/carbon/user, silent=FALSE) + if(user.mind) + forget_recipes(user.mind) + UnregisterSignal(user.mind, COMSIG_MIND_TRANSFERRED) + UnregisterSignal(user, COMSIG_MOB_MIND_TRANSFERRED_INTO) + return ..() diff --git a/code/modules/loadout/loadout_items.dm b/code/modules/loadout/loadout_items.dm index a74e87b4c0e3..2400798bbeb2 100644 --- a/code/modules/loadout/loadout_items.dm +++ b/code/modules/loadout/loadout_items.dm @@ -30,6 +30,8 @@ GLOBAL_LIST_INIT(all_loadout_categories, init_loadout_categories()) * Singleton that holds all the information about each loadout items, and how to equip them. */ /datum/loadout_item + /// The abstract parent of this loadout item, to determine which items to not instantiate + abstract_type = /datum/loadout_item /// The category of the loadout item. Set automatically in New VAR_FINAL/datum/loadout_category/category /// Displayed name of the loadout item. @@ -49,8 +51,6 @@ GLOBAL_LIST_INIT(all_loadout_categories, init_loadout_categories()) /// Whether this item can be reskinned. /// Only works if the item has a "unique reskin" list set. var/can_be_reskinned = FALSE - /// The abstract parent of this loadout item, to determine which items to not instantiate - var/abstract_type = /datum/loadout_item /// The actual item path of the loadout item. var/obj/item/item_path /// Icon file (DMI) for the UI to use for preview icons. diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index a77131e73cec..418a4b8e5093 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -333,6 +333,14 @@ new /obj/effect/decal/cleanable/blood/gibs/old(src) new /obj/item/book/granter/crafting_recipe/boneyard_notes(src) +/obj/structure/closet/crate/grave/skeleton + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + affect_mood = TRUE + +/obj/structure/closet/crate/grave/skeleton/PopulateContents() + . = ..() + new /mob/living/carbon/human/species/skeleton(src) + //***Fluff items for lore/intrigue /obj/item/paper/crumpled/muddy/fluff/elephant_graveyard name = "posted warning" diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index cb6dd212f3e0..6d0b7e58167a 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -179,7 +179,7 @@ qdel(src) return if(9 to 11) - airlock.lights = FALSE + airlock.feedback = FALSE // These do not use airlock.bolt() because we want to pretend it was always locked. That means no sound effects. airlock.locked = TRUE if(12 to 15) diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 1efcf71676e6..e5a323d07253 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -1008,27 +1008,61 @@ GLOBAL_LIST_EMPTY(map_model_default) var/old_position = 1 while(position != 0) // find next delimiter that is not within "..." - position = find_next_delimiter_position(text,old_position,delimiter) + position = find_next_delimiter_position(text, old_position, delimiter) // check if this is a simple variable (as in list(var1, var2)) or an associative one (as in list(var1="foo",var2=7)) - var/equal_position = findtext(text,"=",old_position, position) - var/trim_left = trim(copytext(text,old_position,(equal_position ? equal_position : position))) - var/left_constant = parse_constant(trim_left) - if(position) - old_position = position + length(text[position]) - if(!left_constant) // damn newlines man. Exists to provide behavior consistency with the above loop. not a major cost becuase this path is cold + var/equal_position = find_next_delimiter_position(text, old_position, "=") + var/trim_left = trim(copytext(text, old_position, (equal_position ? equal_position : position))) + if(!trim_left) // damn newlines man. Exists to provide behavior consistency with the above loop. not a major cost becuase this path is cold + if(position) + old_position = position + length(text[position]) continue - if(equal_position && !isnum(left_constant)) + var/is_simple = TRUE //linear list + var/trim_right = trim_left //simple var + if(equal_position) // Associative var, so do the association. // Note that numbers cannot be keys - the RHS is dropped if so. - var/trim_right = trim(copytext(text, equal_position + length(text[equal_position]), position)) - var/right_constant = parse_constant(trim_right) - .[left_constant] = right_constant - else // simple var + trim_right = trim(copytext(text, equal_position + length(text[equal_position]), position)) + is_simple = FALSE + + //right value is a list and since we used the delimiter , this text would be incomplete so we need to parse the full string + if(copytext(trim_right, 1, 6) == "list(") + var/start_index = is_simple ? old_position : equal_position + length(text[equal_position]) + var/opening_count = 0 + var/closing_count = 0 + var/index = start_index + var/begin = FALSE + while(!begin || (opening_count != closing_count)) + var/char = text[index] + if(char == "(") + opening_count += 1 + begin = TRUE + else if(char == ")") + closing_count += 1 + index += length(char) + trim_right = trim(copytext(text, start_index, index)) + if(is_simple) + trim_left = trim_right + if(index >= length(text)) //stops a wasteful iteration when we reach the end + position = 0 + else + old_position = index + length(text[index]) //this moves our pointer past , to the next element + else if(position) + old_position = position + length(text[position]) + + //assign value + var/left_constant = parse_constant(trim_left) + if(is_simple) . += list(left_constant) + else + .[left_constant] = parse_constant(trim_right) /datum/parsed_map/proc/parse_constant(text) + // empty text + if(!text) + return "" + // number var/num = text2num(text) if(isnum(num)) diff --git a/code/modules/mapping/space_management/space_transition.dm b/code/modules/mapping/space_management/space_transition.dm index 7f2eafe00990..9e303111d944 100644 --- a/code/modules/mapping/space_management/space_transition.dm +++ b/code/modules/mapping/space_management/space_transition.dm @@ -161,7 +161,8 @@ point.set_neigbours(grid, grid_diameter) var/center = round(grid_diameter / 2) - point = grid[CHORDS_TO_1D(grid_diameter, center, center)] + if(transition_levels.len) + point = grid[CHORDS_TO_1D(center, center, grid_diameter)] grid.Cut() var/list/transition_pick = transition_levels.Copy() diff --git a/code/modules/mining/boulder_processing/boulder.dm b/code/modules/mining/boulder_processing/boulder.dm index 274b5d3816d4..6ffddb8e5cd2 100644 --- a/code/modules/mining/boulder_processing/boulder.dm +++ b/code/modules/mining/boulder_processing/boulder.dm @@ -1,4 +1,5 @@ +#define PLATFORM_WARNING_MODIFIER 5 SECONDS /** * The objects that ore vents produce, which is refined into minerals. @@ -25,6 +26,8 @@ var/boulder_size = BOULDER_SIZE_SMALL /// Used in inheriting the icon_state from our parent vent in update_icon. var/boulder_string = "boulder" + /// If the boulder is converted into a platform, how long will it last? Default is 10 seconds unless overwritten by a vent. + var/platform_lifespan = PLATFORM_LIFE_DEFAULT /obj/item/boulder/Initialize(mapload) . = ..() @@ -108,6 +111,30 @@ if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) manual_process(null, user, INATE_BOULDER_SPEED_MULTIPLIER) //A little hacky but it works around the speed of the blackboard task selection process for now. +/obj/item/boulder/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(istype(interacting_with, /turf/open/lava)) + if(!create_platform(interacting_with, user, interacting_with)) + return ITEM_INTERACT_BLOCKING + return ITEM_INTERACT_SUCCESS + +/obj/item/boulder/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, gentle, quickstart, throw_type_path) + . = ..() + if(istype(target, /turf/open/lava)) + if(!create_platform(target, thrower)) + return FALSE + +/obj/item/boulder/proc/create_platform(atom/interacting_with, mob/living/user) + if(locate(/obj/structure/lattice/catwalk/boulder, interacting_with)) + to_chat(user, span_warning("There is already a boulder platform here!")) + return FALSE + + var/obj/structure/lattice/catwalk/boulder/platform = new(interacting_with) + addtimer(CALLBACK(platform, TYPE_PROC_REF(/obj/structure/lattice/catwalk/boulder, pre_self_destruct)), platform_lifespan) + // See Lattice.dm for more info + visible_message(span_notice("\The [src] floats on \the [interacting_with], forming a temporary platform!")) + qdel(src) + return TRUE /** * This is called when a boulder is processed by a mob or tool, and reduces the durability of the boulder. * @param obj/item/weapon The weapon that is being used to process the boulder, that we pull toolspeed from. If null, we use the override_speed_multiplier instead. @@ -189,3 +216,5 @@ for(var/obj/item/content as anything in contents) content.forceMove(get_turf(src)) qdel(src) + +#undef PLATFORM_WARNING_MODIFIER diff --git a/code/modules/mining/boulder_processing/boulder_types.dm b/code/modules/mining/boulder_processing/boulder_types.dm index 6298bb98139e..ec67648fe2a3 100644 --- a/code/modules/mining/boulder_processing/boulder_types.dm +++ b/code/modules/mining/boulder_processing/boulder_types.dm @@ -69,10 +69,9 @@ /datum/material/titanium = 8, /datum/material/uranium = 3, ) - set_custom_materials(list(pick_weight(expanded_gulag_minerals) = SHEET_MATERIAL_AMOUNT)) -///lowgrade boulder, most commonly spawned +///lowgrade boulder, Exists as an admin spawn for testing /obj/item/boulder/shabby name = "shabby boulder" desc = "A bizarre, twisted boulder. Wait, wait no, it's just a rock." diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index b662242fb84b..420aad1ceaa0 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -27,9 +27,10 @@ /obj/item/mining_scanner/admin /obj/item/mining_scanner/admin/attack_self(mob/user) - for(var/turf/closed/mineral/M in world) - if(M.scan_state) - M.icon_state = M.scan_state + for(var/turf/closed/mineral/mineral_turf in world) + if(mineral_turf.scan_state) + mineral_turf.icon = mineral_turf.scan_icon + mineral_turf.icon_state = mineral_turf.scan_state qdel(src) /obj/item/t_scanner/adv_mining_scanner @@ -91,6 +92,7 @@ var/obj/effect/temp_visual/mining_overlay/scan_overlay = locate(/obj/effect/temp_visual/mining_overlay) in mineral if(!scan_overlay) scan_overlay = new(mineral) + scan_overlay.icon = mineral.scan_icon scan_overlay.icon_state = mineral.scan_state continue diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index d05370b273fb..8738752af33e 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -62,31 +62,30 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) if(thing.anchored) return NONE - . = ITEM_INTERACT_BLOCKING var/obj/structure/extraction_point/beacon = beacon_ref?.resolve() if(isnull(beacon)) balloon_alert(user, "not linked!") beacon_ref = null - return . + return ITEM_INTERACT_BLOCKING var/area/area = get_area(thing) if(!can_use_indoors) if(!area.outdoors) balloon_alert(user, "not outdoors!") - return . + return ITEM_INTERACT_BLOCKING if(area.area_flags & NOTELEPORT) balloon_alert(user, "unable to activate!") - return + return ITEM_INTERACT_BLOCKING var/area/target_area = get_area(beacon) if(area != target_area && ((area.area_flags & LOCAL_TELEPORT) || (target_area.area_flags & LOCAL_TELEPORT))) balloon_alert(user, "unable to activate!") - return + return ITEM_INTERACT_BLOCKING if(!safe_for_living_creatures && check_for_living_mobs(thing)) to_chat(user, span_warning("[src] is not safe for use with living creatures, they wouldn't survive the trip back!")) balloon_alert(user, "not safe!") - return . + return ITEM_INTERACT_BLOCKING if(thing.move_resist > max_force_fulton) balloon_alert(user, "too heavy!") - return . + return ITEM_INTERACT_BLOCKING balloon_alert_to_viewers("attaching...") playsound(thing, 'sound/items/zip/zip.ogg', vol = 50, vary = TRUE) if(isliving(thing)) @@ -95,7 +94,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) to_chat(thing, span_userdanger("You are being extracted! Stand still to proceed.")) if(!do_after(user, 5 SECONDS, target = thing)) - return . + return ITEM_INTERACT_BLOCKING balloon_alert_to_viewers("extracting!") if(loc == user && ishuman(user)) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index e5d6e82cf747..d9e6b3c16c85 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -185,6 +185,7 @@ desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl." icon = 'icons/obj/mining_zones/ash_flora.dmi' icon_state = "mushroom_shavings" + abstract_type = /obj/item/food/grown/ash_flora w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE max_integrity = 100 diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 465bfff27085..d3d05077b7e3 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -151,6 +151,28 @@ )) signal.send_to_receivers() +/obj/machinery/mineral/ore_redemption/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!materials.mat_container || panel_open || !powered()) + return ..() + + var/list/obj/item/stack/ore/gathered_ores = list() + if(istype(tool, /obj/item/stack/ore)) + gathered_ores += tool + else if(tool.atom_storage && !tool.atom_storage.locked) + tool.atom_storage.remove_type(/obj/item/stack/ore, src, check_adjacent = TRUE, user = user, inserted = gathered_ores) + if(!gathered_ores.len) + return ..() + + for(var/obj/item/stack/ore/gathered_ore as anything in gathered_ores) + var/obj/item/smelted_ore = gathered_ore.on_orm_collection() + if(isnull(smelted_ore)) + continue + + if(materials.insert_item(smelted_ore, ore_multiplier) <= 0) + unload_mineral(smelted_ore) + + return ITEM_INTERACT_SUCCESS + /obj/machinery/mineral/ore_redemption/pickup_item(datum/source, atom/movable/target, direction) if(QDELETED(target)) return @@ -170,13 +192,12 @@ //smelting the ore for(var/obj/item/stack/ore/gathered_ore as anything in ore_list) - if(isnull(gathered_ore.refined_type)) + var/obj/item/smelted_ore = gathered_ore.on_orm_collection() + if(isnull(smelted_ore)) continue - if(materials.insert_item(gathered_ore, ore_multiplier) <= 0) - unload_mineral(gathered_ore) //if rejected unload - - SEND_SIGNAL(src, COMSIG_ORM_COLLECTED_ORE) + if(materials.insert_item(smelted_ore, ore_multiplier) <= 0) + unload_mineral(smelted_ore) //if rejected unload if(!console_notify_timer) // gives 5 seconds for a load of ores to be sucked up by the ORM before it sends out request console notifications. This should be enough time for most deposits that people make @@ -344,7 +365,7 @@ var/amount = round(min(text2num(params["sheets"]), 50, can_smelt_alloy(alloy))) if(amount < 1) //no negative mats return - materials.use_materials(alloy.materials, multiplier = amount, action = "released", name = "sheets", user_data = ID_DATA(usr)) + materials.use_materials(alloy.materials, multiplier = amount, action = "withdrawn", name = "sheets", user_data = ID_DATA(usr)) var/output if(ispath(alloy.build_path, /obj/item/stack/sheet)) output = new alloy.build_path(src, amount) diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 467b7786e083..82b87421d299 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -33,8 +33,8 @@ interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON processing_flags = NONE - /// By default, an ore silo requires you to be wearing an ID to pull materials from it. - var/ID_required = TRUE + /// Only the station loaded ore silo starts out with ID restrictions, else its optional + var/ID_required = FALSE /// List of all connected components that are on hold from accessing materials. var/list/holds = list() /// List of all components that are sharing ores with this silo. @@ -52,6 +52,7 @@ RADIO_CHANNEL_SUPPLY = NONE, RADIO_CHANNEL_SECURITY = NONE, ) + ///List of announcement messages for silo restrictions var/static/alist/announcement_messages = alist( BAN_ATTEMPT_FAILURE_NO_ACCESS = "ACCESS ENFORCEMENT FAILURE: $SILO_USER_NAME lacks supply command authority.", BAN_ATTEMPT_FAILURE_CHALLENGING_DA_CHIEF = "ACCESS ENFORCEMENT FAILURE: $SILO_USER_NAME attempting subversion of supply command authority.", @@ -69,6 +70,7 @@ /obj/machinery/ore_silo/Initialize(mapload) . = ..() + materials = AddComponent( \ /datum/component/material_container, \ SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \ @@ -80,12 +82,28 @@ ), \ allowed_items = /obj/item/stack \ ) + if (!GLOB.ore_silo_default && mapload && is_station_level(z)) GLOB.ore_silo_default = src + ID_required = TRUE + register_context() setup_radio() configure_default_announcements_policy() +/obj/machinery/ore_silo/Destroy() + if (GLOB.ore_silo_default == src) + GLOB.ore_silo_default = null + + for(var/datum/component/remote_materials/mats as anything in ore_connected_machines) + mats.disconnect() + + ore_connected_machines = null + materials = null + QDEL_NULL(radio) + + return ..() + /obj/machinery/ore_silo/emag_act(mob/living/user) if(obj_flags & EMAGGED) return FALSE @@ -104,19 +122,6 @@ radio.keyslot.channels[RADIO_CHANNEL_SECURITY] = TRUE radio.recalculateChannels() -/obj/machinery/ore_silo/Destroy() - if (GLOB.ore_silo_default == src) - GLOB.ore_silo_default = null - - for(var/datum/component/remote_materials/mats as anything in ore_connected_machines) - mats.disconnect() - - ore_connected_machines = null - materials = null - QDEL_NULL(radio) - - return ..() - /obj/machinery/ore_silo/examine(mob/user) . = ..() . += span_notice("It can be linked to techfabs, circuit printers and protolathes with a multitool.") @@ -144,14 +149,14 @@ /obj/machinery/ore_silo/proc/on_item_consumed(datum/component/material_container/container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context, alist/user_data) SIGNAL_HANDLER - silo_log(context, "DEPOSIT", amount_inserted, item_inserted.name, mats_consumed, user_data) + silo_log(context, "DEPOSITED", amount_inserted, item_inserted.name, mats_consumed, user_data) SEND_SIGNAL(context, COMSIG_SILO_ITEM_CONSUMED, container, item_inserted, last_inserted_id, mats_consumed, amount_inserted) /obj/machinery/ore_silo/proc/log_sheets_ejected(datum/component/material_container/container, obj/item/stack/sheet/sheets, atom/context, alist/user_data) SIGNAL_HANDLER - silo_log(context, "EJECT", -sheets.amount * SHEET_MATERIAL_AMOUNT, "[sheets.singular_name]", sheets.custom_materials, user_data) + silo_log(context, "WITHDRAWN", -sheets.amount * SHEET_MATERIAL_AMOUNT, "[sheets.name]", sheets.custom_materials, user_data) /obj/machinery/ore_silo/screwdriver_act(mob/living/user, obj/item/tool) . = ITEM_INTERACT_BLOCKING @@ -330,11 +335,12 @@ if("toggle_ban") var/list/banned_user_data = params["user_data"] - attempt_ban_toggle(usr, banned_user_data) + attempt_ban_toggle(ui.user, banned_user_data) return TRUE if("toggle_restrict") - attempt_toggle_restrict(usr) + attempt_toggle_restrict(ui.user) + return TRUE /** * Called from the ore silo's UI, when someone attempts to (un)ban a user from using the ore silo. * The person doing the banning should have at least QM access. Unless this is emagged. Not modifiable by silicons unless emagged. @@ -558,6 +564,7 @@ var/amount ///List of individual materials used in the action var/list/materials + ///User data of the player doing material operations var/alist/user_data /datum/ore_silo_log/New(obj/machinery/M, _action, _amount, _noun, list/mats=list(), alist/user_data) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 599f446017d7..8582a1c3c86c 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -43,6 +43,14 @@ if(stack_overlays) . += stack_overlays +/** + * Called when the ore is collected by an ore redemption machine. returns the ore itself. + * Normally, ores without a refined type aren't collected by the orm. + * It can also be overriden for more specific behavior (for example, sand is smelted into glass beforehand because of different mats). + */ +/obj/item/stack/ore/proc/on_orm_collection() + return isnull(refined_type) ? null : src + /obj/item/stack/ore/welder_act(mob/living/user, obj/item/I) ..() if(!refined_type) @@ -98,7 +106,7 @@ icon_state = "glass" singular_name = "sand pile" points = 1 - mats_per_unit = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT) + mats_per_unit = list(/datum/material/sand = SHEET_MATERIAL_AMOUNT) refined_type = /obj/item/stack/sheet/glass w_class = WEIGHT_CLASS_TINY mine_experience = 0 //its sand @@ -114,6 +122,11 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ . = ..() AddComponent(/datum/component/storm_hating) +/obj/item/stack/ore/glass/on_orm_collection() //we need to smelt the glass beforehand because the silo and orm don't accept sand mats + var/obj/item/stack/sheet/glass = new refined_type(drop_location(), amount) + qdel(src) + return glass + /obj/item/stack/ore/glass/get_main_recipes() . = ..() . += GLOB.sand_recipes @@ -138,6 +151,9 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ return FALSE +/obj/item/stack/ore/glass/thirty + amount = 30 + /obj/item/stack/ore/glass/basalt name = "volcanic ash" icon_state = "volcanic_sand" diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 324282c0af05..11cbd18a3717 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -180,7 +180,7 @@ SET_PLANE_EXPLICIT(I, ABOVE_HUD_PLANE, src) if(I.pulledby) I.pulledby.stop_pulling() - if(!I.on_equipped(src, ITEM_SLOT_HANDS, initial = visuals_only)) + if(!has_equipped(I, ITEM_SLOT_HANDS, initial = visuals_only)) return FALSE update_held_items() I.pixel_x = I.base_pixel_x @@ -295,10 +295,7 @@ location = turf break - I.forceMove(location) - I.layer = initial(I.layer) - SET_PLANE_EXPLICIT(I, initial(I.plane), location) - I.dropped(src) + transferItemToLoc(I, location, force = TRUE, silent = TRUE, animated = !ignore_animation) return FALSE /// Returns true if a mob is holding something @@ -424,13 +421,10 @@ if(!item_dropping) return FALSE - if(client) - client.screen -= item_dropping + client?.screen -= item_dropping - if(observers?.len) - for(var/mob/dead/observe as anything in observers) - if(observe.client) - observe.client.screen -= item_dropping + for(var/mob/dead/observe as anything in observers) + observe.client?.screen -= item_dropping item_dropping.layer = initial(item_dropping.layer) SET_PLANE_EXPLICIT(item_dropping, initial(item_dropping.plane), newloc) @@ -441,7 +435,7 @@ else item_dropping.forceMove(newloc) - item_dropping.dropped(src, silent) + has_unequipped(item_dropping, silent) SEND_SIGNAL(item_dropping, COMSIG_ITEM_POST_UNEQUIP, force, newloc, no_move, invdrop, silent) SEND_SIGNAL(src, COMSIG_MOB_UNEQUIPPED_ITEM, item_dropping, force, newloc, no_move, invdrop, silent) return TRUE @@ -520,8 +514,15 @@ /// This proc is called after an item has been successfully handled and equipped to a slot. /mob/proc/has_equipped(obj/item/item, slot, initial = FALSE) + SHOULD_CALL_PARENT(TRUE) return item.on_equipped(src, slot, initial) +/// This proc is called after an item has been removed from a mob but before it has been officially deslotted. +/mob/proc/has_unequipped(obj/item/item, silent = FALSE) + SHOULD_CALL_PARENT(TRUE) + item.dropped(src, silent) + return TRUE + /** * Equip an item to the slot or delete * @@ -683,3 +684,19 @@ . += item else if(del_if_nodrop && !(item.item_flags & ABSTRACT)) qdel(item) + +/** + * Iterates over all contents of the mob to find all items with a cell (or loose cells) + * Useful instead of iterating contents for cells, as it recurses storage and avoids returning abstract cells (like Ethereals) + * + * * max_percent: The maximum charge percent (0.0-1.0) the cell can have to be included in the results + * + * Returns an assoc list of item - its cell + */ +/mob/living/proc/get_all_cells(max_percent = 1.0) + var/list/cell_items = list() + for(var/obj/item/stored in get_all_gear()) + var/obj/item/stock_parts/power_store/stored_cell = stored.get_cell() + if(stored_cell && stored_cell.charge <= (stored_cell.maxcharge * max_percent)) + cell_items[stored] = stored_cell + return cell_items diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 9ee2145dff23..e2d1482c8a5b 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -2,6 +2,7 @@ /mob/living/basic name = "basic mob" icon = 'icons/mob/simple/animal.dmi' + abstract_type = /mob/living/basic health = 20 maxHealth = 20 max_stamina = BASIC_MOB_STAMINA_MATCH_HEALTH diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index 92afa3006dd8..4a60ca178a75 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -23,7 +23,7 @@ hackables = "health processor circuits" possessed_message = "You are a medbot! Ensure good health among the crew to the best of your ability!" - additional_access = /datum/id_trim/job/paramedic + additional_access = /datum/id_trim/medibot announcement_type = /datum/action/cooldown/bot_announcement/medbot path_image_color = "#d9d9f4" @@ -330,9 +330,10 @@ if(DOING_INTERACTION(src, TEND_DAMAGE_INTERACTION)) return - if((damage_type_healer == HEAL_ALL_DAMAGE && patient.get_total_damage() <= heal_threshold) || (!(damage_type_healer == HEAL_ALL_DAMAGE) && patient.get_current_damage_of_type(damage_type_healer) <= heal_threshold)) - to_chat(src, "[patient] is healthy! Your programming prevents you from tending the wounds of anyone with less than [heal_threshold + 1] [damage_type_healer == HEAL_ALL_DAMAGE ? "total" : damage_type_healer] damage.") - return + if (!(bot_access_flags & BOT_COVER_EMAGGED)) + if((damage_type_healer == HEAL_ALL_DAMAGE && patient.get_total_damage() <= heal_threshold) || (!(damage_type_healer == HEAL_ALL_DAMAGE) && patient.get_current_damage_of_type(damage_type_healer) <= heal_threshold)) + to_chat(src, "[patient] is healthy! Your programming prevents you from tending the wounds of anyone with less than [heal_threshold + 1] [damage_type_healer == HEAL_ALL_DAMAGE ? "total" : damage_type_healer] damage.") + return update_bot_mode(new_mode = BOT_HEALING, update_hud = FALSE) patient.visible_message("[src] is trying to tend the wounds of [patient]", span_userdanger("[src] is trying to tend your wounds!")) @@ -368,6 +369,32 @@ if(CanReach(patient)) melee_attack(patient) +/datum/id_trim/medibot + assignment = JOB_MEDIBOT + trim_state = "trim_paramedic" + department_color = COLOR_MEDICAL_BLUE + subdepartment_color = COLOR_MEDICAL_BLUE + sechud_icon_state = SECHUD_PARAMEDIC + access = list( + ACCESS_BIT_DEN, + ACCESS_CARGO, + ACCESS_CONSTRUCTION, + ACCESS_HYDROPONICS, + ACCESS_MAINT_TUNNELS, + ACCESS_MECH_MEDICAL, + ACCESS_MEDICAL, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINING, + ACCESS_MINING_STATION, + ACCESS_MORGUE, + ACCESS_SCIENCE, + ACCESS_SERVICE, + ACCESS_SURGERY, + ACCESS_VIROLOGY, + ACCESS_PHARMACY, + ) + honorifics = list("Medical Robot") + honorific_positions = HONORIFIC_POSITION_FIRST | HONORIFIC_POSITION_LAST | HONORIFIC_POSITION_FIRST_FULL | HONORIFIC_POSITION_NONE /mob/living/basic/bot/medbot/autopatrol bot_mode_flags = BOT_MODE_ON | BOT_MODE_AUTOPATROL | BOT_MODE_REMOTE_ENABLED | BOT_MODE_CAN_BE_SAPIENT | BOT_MODE_ROUNDSTART_POSSESSION diff --git a/code/modules/mob/living/basic/cytology/vatbeast.dm b/code/modules/mob/living/basic/cytology/vatbeast.dm index 0075061cda1e..d9d1c364802a 100644 --- a/code/modules/mob/living/basic/cytology/vatbeast.dm +++ b/code/modules/mob/living/basic/cytology/vatbeast.dm @@ -15,6 +15,7 @@ damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 1, STAMINA = 1, OXY = 1) melee_damage_lower = 25 melee_damage_upper = 25 + melee_attack_cooldown = CLICK_CD_MELEE obj_damage = 40 unsuitable_atmos_damage = 0 attack_sound = 'sound/items/weapons/punch3.ogg' diff --git a/code/modules/mob/living/basic/drone/inventory.dm b/code/modules/mob/living/basic/drone/inventory.dm index 37f61b2b2086..c6c7aa5da95f 100644 --- a/code/modules/mob/living/basic/drone/inventory.dm +++ b/code/modules/mob/living/basic/drone/inventory.dm @@ -74,7 +74,7 @@ return //Call back for item being equipped to drone - equipping.on_equipped(src, slot) + has_equipped(equipping, slot) /mob/living/basic/drone/getBackSlot() return ITEM_SLOT_DEX_STORAGE diff --git a/code/modules/mob/living/basic/drone/visuals_icons.dm b/code/modules/mob/living/basic/drone/visuals_icons.dm index fb89e82c8a17..59952d8d2490 100644 --- a/code/modules/mob/living/basic/drone/visuals_icons.dm +++ b/code/modules/mob/living/basic/drone/visuals_icons.dm @@ -27,7 +27,7 @@ client.screen += internal_storage -/mob/living/basic/drone/update_worn_head(update_obscured = TRUE) +/mob/living/basic/drone/update_worn_head() remove_overlay(DRONE_HEAD_LAYER) if(head) @@ -44,7 +44,7 @@ apply_overlay(DRONE_HEAD_LAYER) -/mob/living/basic/drone/update_worn_mask(update_obscured = TRUE) +/mob/living/basic/drone/update_worn_mask() update_worn_head() /mob/living/basic/drone/regenerate_icons() diff --git a/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm index a5e0a9c0272c..138d09cf324e 100644 --- a/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm +++ b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm @@ -81,7 +81,7 @@ internal_storage = equipping update_inv_internal_storage() - equipping.on_equipped(src, slot) + has_equipped(equipping, slot) return TRUE /mob/living/basic/guardian/dextrous/getBackSlot() diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm index bfbd222f89ca..72c55a8eca3c 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm @@ -10,6 +10,7 @@ mob_biotypes = MOB_ORGANIC|MOB_BUG melee_damage_lower = 30 melee_damage_upper = 30 + melee_attack_cooldown = CLICK_CD_MELEE maxHealth = 300 health = 300 diff --git a/code/modules/mob/living/basic/pets/parrot/poly.dm b/code/modules/mob/living/basic/pets/parrot/poly.dm index 93308852a520..f79df7e8dec2 100644 --- a/code/modules/mob/living/basic/pets/parrot/poly.dm +++ b/code/modules/mob/living/basic/pets/parrot/poly.dm @@ -16,7 +16,7 @@ name = "Poly" desc = "Poly the Parrot. An expert on quantum cracker theory." gold_core_spawnable = NO_SPAWN - speech_probability_rate = 13 + speech_probability_rate = 6 /// Callback to save our memory at the end of the round. var/datum/callback/roundend_callback = null diff --git a/code/modules/mob/living/basic/slime/actions.dm b/code/modules/mob/living/basic/slime/actions.dm index 2995a240a40f..b96ada87025e 100644 --- a/code/modules/mob/living/basic/slime/actions.dm +++ b/code/modules/mob/living/basic/slime/actions.dm @@ -106,11 +106,11 @@ balloon_alert(src, "overcrowded!") return - var/list/babies = list() - var/new_nutrition = round(nutrition * 0.9) - var/new_powerlevel = round(powerlevel / 4) + var/new_nutrition = floor(nutrition * 0.9) + var/new_powerlevel = floor(powerlevel * 0.25) var/turf/drop_loc = drop_location() + var/list/created_slimes = list(src) var/list/slime_friends = list() for(var/faction_member in faction) var/mob/living/possible_friend = locate(faction_member) in GLOB.mob_living_list @@ -118,42 +118,34 @@ continue slime_friends += possible_friend - for(var/i in 1 to 4) - var/child_colour - - if(mutation_chance >= 100) - child_colour = /datum/slime_type/rainbow - else if(prob(mutation_chance)) - child_colour = pick_weight(slime_type.mutations) - else - child_colour = slime_type.type - - var/mob/living/basic/slime/baby - baby = new(drop_loc, child_colour) - - if(ckey) - baby.set_nutrition(new_nutrition) //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! - - baby.powerlevel = new_powerlevel - if(i != 1) - step_away(baby, src) - + for(var/i in 1 to 3) + var/mob/living/basic/slime/baby = new(drop_loc, get_random_mutation()) + created_slimes += baby for(var/slime_friend in slime_friends) baby.befriend(slime_friend) - babies += baby - if(mutation_chance == 0) - baby.mutation_chance = 0 - else - baby.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) SSblackbox.record_feedback("tally", "slime_babies_born", 1, baby.slime_type.colour) + step_away(baby, src) - var/mob/living/basic/slime/new_slime = pick(babies) // slime that the OG slime will move into. - new_slime.set_combat_mode(TRUE) + set_nutrition(SLIME_STARTING_NUTRITION) + for(var/mob/living/basic/slime/baby as anything in created_slimes) + if(ckey) // Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! + baby.set_nutrition(new_nutrition) + baby.powerlevel = new_powerlevel + if(mutation_chance) + baby.mutation_chance = clamp(mutation_chance + rand(-5, 5), 0, 100) + else + baby.mutation_chance = 0 - if(isnull(mind)) - new_slime.PossessByPlayer(key) - else - mind.transfer_to(new_slime) + set_life_stage(SLIME_LIFE_STAGE_BABY) + set_slime_type(get_random_mutation()) + amount_grown = 0 + mutator_used = FALSE - qdel(src) +/mob/living/basic/slime/proc/get_random_mutation() + if(mutation_chance >= 100) + return /datum/slime_type/rainbow + else if(prob(mutation_chance)) + return pick_weight(slime_type.mutations) + else + return slime_type.type diff --git a/code/modules/mob/living/basic/slime/life.dm b/code/modules/mob/living/basic/slime/life.dm index b1e24070ff6e..fc7b55927434 100644 --- a/code/modules/mob/living/basic/slime/life.dm +++ b/code/modules/mob/living/basic/slime/life.dm @@ -7,7 +7,7 @@ if(!HAS_TRAIT(src, TRAIT_STASIS)) //No hunger in stasis handle_nutrition(seconds_per_tick) - handle_slime_stasis(seconds_per_tick) + handle_slime_stasis() /mob/living/basic/slime/handle_environment(datum/gas_mixture/environment, seconds_per_tick, times_fired) ..() @@ -17,7 +17,7 @@ remove_status_effect(/datum/status_effect/freon, SLIME_COLD) ///Handles if a slime's environment would cause it to enter stasis. Ignores TRAIT_STASIS -/mob/living/basic/slime/proc/handle_slime_stasis(seconds_per_tick) +/mob/living/basic/slime/proc/handle_slime_stasis() var/datum/gas_mixture/environment = loc.return_air() var/bz_percentage = 0 diff --git a/code/modules/mob/living/basic/slime/slime.dm b/code/modules/mob/living/basic/slime/slime.dm index 1b9dd8566586..36a023318c43 100644 --- a/code/modules/mob/living/basic/slime/slime.dm +++ b/code/modules/mob/living/basic/slime/slime.dm @@ -21,8 +21,8 @@ maxHealth = 150 health = 150 mob_biotypes = MOB_SLIME - melee_damage_lower = 5 - melee_damage_upper = 25 + melee_damage_lower = 7 + melee_damage_upper = 17 wound_bonus = -45 can_buckle_to = FALSE @@ -125,8 +125,8 @@ for(var/datum/slime_type/slime_type as anything in subtypesof(/datum/slime_type)) possible_slime_types[slime_type] = new slime_type + set_life_stage(new_life_stage, TRUE) set_slime_type(new_type) - set_life_stage(new_life_stage) set_nutrition(SLIME_STARTING_NUTRITION) AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = 2) @@ -250,29 +250,23 @@ . += span_warning("It seems too overcroweded to properly reproduce!") ///Changes the slime's current life state -/mob/living/basic/slime/proc/set_life_stage(new_life_stage = SLIME_LIFE_STAGE_BABY) +/mob/living/basic/slime/proc/set_life_stage(new_life_stage = SLIME_LIFE_STAGE_BABY, initial = FALSE) life_stage = new_life_stage - - switch(life_stage) - if(SLIME_LIFE_STAGE_BABY) - - health = initial(health) - maxHealth = initial(maxHealth) - - obj_damage = initial(obj_damage) - melee_damage_lower = initial(melee_damage_lower) - melee_damage_upper = initial(melee_damage_upper) - wound_bonus = initial(wound_bonus) - - if(SLIME_LIFE_STAGE_ADULT) - - health = 200 - maxHealth = 200 - - obj_damage = 15 - melee_damage_lower += 10 - melee_damage_upper += 10 - wound_bonus = -90 + if(life_stage == SLIME_LIFE_STAGE_ADULT) + health /= 0.75 + maxHealth /= 0.75 + melee_damage_lower *= 2 + melee_damage_upper *= 2 + obj_damage = 15 + wound_bonus = -90 + + else if(!initial) + health *= 0.75 + maxHealth *= 0.75 + melee_damage_lower *= 0.5 + melee_damage_upper *= 0.5 + obj_damage = initial(obj_damage) + wound_bonus = initial(wound_bonus) ai_controller.set_blackboard_key(BB_SLIME_LIFE_STAGE, life_stage) update_mob_action_buttons() diff --git a/code/modules/mob/living/basic/snails/snail.dm b/code/modules/mob/living/basic/snails/snail.dm index 259bce0d5c4d..0cbdaf9f1132 100644 --- a/code/modules/mob/living/basic/snails/snail.dm +++ b/code/modules/mob/living/basic/snails/snail.dm @@ -11,6 +11,8 @@ butcher_results = list(/obj/item/food/meat/slab/bugmeat = 1) mob_biotypes = MOB_ORGANIC density = FALSE + mob_size = MOB_SIZE_TINY + held_w_class = WEIGHT_CLASS_TINY pass_flags = PASSTABLE | PASSMOB health = 30 maxHealth = 30 diff --git a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm index a85f4cab8143..32738c054347 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -127,6 +127,7 @@ obj_damage = 11 melee_damage_lower = 0 melee_damage_upper = 0 + melee_attack_cooldown = CLICK_CD_MELEE sharpness = NONE //it's made of butter armour_penetration = 0 response_harm_continuous = "takes a bite out of" diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 9acddd1c8600..738a711d3c9b 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -142,9 +142,19 @@ if(!gibbed) var/make_a_corpse = TRUE var/place_to_make_corpse = loc + var/must_equip = FALSE + var/equip_slot + var/mob/holding_mob + var/obj/item/mob_holder/found_holder if(istype(loc, /obj/item/mob_holder))//If our mouse is dying in place holder we want to put the dead mouse where the place holder was - var/obj/item/mob_holder/found_holder = loc + found_holder = loc place_to_make_corpse = found_holder.loc + if(istype(found_holder.loc,/mob/living/carbon)) + holding_mob = found_holder.loc + place_to_make_corpse = get_turf(holding_mob) + equip_slot = holding_mob.get_slot_by_item(found_holder) + if(equip_slot == ITEM_SLOT_HANDS || equip_slot == ITEM_SLOT_RPOCKET || equip_slot == ITEM_SLOT_LPOCKET) + must_equip = TRUE if(istype(found_holder.loc, /obj/machinery/microwave))//Microwaves gib things that die when cooked, so we don't need to make a dead body too make_a_corpse = FALSE if(make_a_corpse) @@ -153,6 +163,11 @@ if(HAS_TRAIT(src, TRAIT_BEING_SHOCKED)) mouse.desc = "They're toast." mouse.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY) + found_holder?.release(FALSE) + if(must_equip) + if(equip_slot == ITEM_SLOT_HANDS) + holding_mob.dropItemToGround(found_holder) + holding_mob.equip_to_slot(mouse,equip_slot) qdel(src) /mob/living/basic/mouse/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) diff --git a/code/modules/mob/living/blood_types.dm b/code/modules/mob/living/blood_types.dm index f379900acb7c..c2c68428ec55 100644 --- a/code/modules/mob/living/blood_types.dm +++ b/code/modules/mob/living/blood_types.dm @@ -15,8 +15,6 @@ var/datum/reagent/reagent_type = /datum/reagent/blood /// What chem is used to restore this blood type (outside of itself, of course)? var/datum/reagent/restoration_chem = /datum/reagent/iron - /// Exclude abstract root types from being initialized by defining them here - var/root_abstract_type /// If this blood type is meant to persist across species changes var/is_species_universal /// Splash and expose behaviors for this blood type's reagent, to prevent water-blood covered items, as well as information transfer flags @@ -165,7 +163,7 @@ /datum/blood_type/human desc = "Blood cells suspended in plasma, the most abundant of which being the hemoglobin-containing red blood cells." dna_string = "Human DNA" - root_abstract_type = /datum/blood_type/human + abstract_type = /datum/blood_type/human /datum/blood_type/human/a_minus name = BLOOD_TYPE_A_MINUS @@ -384,7 +382,7 @@ /// An abstract-ish blood type used particularly for species with blood set to random reagents, such as podpeople /datum/blood_type/random_chemical - root_abstract_type = /datum/blood_type/random_chemical + abstract_type = /datum/blood_type/random_chemical /datum/blood_type/random_chemical/New(datum/reagent/reagent) name = initial(reagent.name) @@ -393,7 +391,7 @@ id = type_key() color = initial(reagent.color) reagent_type = reagent - root_abstract_type = null + abstract_type = null /datum/blood_type/random_chemical/type_key() return reagent_type diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 6a16b8ea879f..004dbedb06a7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -220,32 +220,10 @@ /mob/living/carbon/proc/uncuff() if (handcuffed) - var/obj/item/W = handcuffed - set_handcuffed(null) - if (buckled?.buckle_requires_restraints) - buckled.unbuckle_mob(src) - update_handcuffed() - if (client) - client.screen -= W - if (W) - W.forceMove(drop_location()) - W.dropped(src) - if (W) - W.layer = initial(W.layer) - SET_PLANE_EXPLICIT(W, initial(W.plane), src) + dropItemToGround(handcuffed, TRUE) changeNext_move(0) if (legcuffed) - var/obj/item/W = legcuffed - legcuffed = null - update_worn_legcuffs() - if (client) - client.screen -= W - if (W) - W.forceMove(drop_location()) - W.dropped(src) - if (W) - W.layer = initial(W.layer) - SET_PLANE_EXPLICIT(W, initial(W.plane), src) + dropItemToGround(legcuffed, TRUE) changeNext_move(0) /mob/living/carbon/proc/clear_cuffs(obj/item/I, cuff_break) @@ -263,18 +241,10 @@ else if(I == handcuffed) - handcuffed.forceMove(drop_location()) - set_handcuffed(null) - I.dropped(src) - if(buckled?.buckle_requires_restraints) - buckled.unbuckle_mob(src) - update_handcuffed() + dropItemToGround(I, TRUE) return TRUE if(I == legcuffed) - legcuffed.forceMove(drop_location()) - legcuffed = null - I.dropped(src) - update_worn_legcuffs() + dropItemToGround(I, TRUE) return TRUE /mob/living/carbon/proc/accident(obj/item/I) @@ -836,8 +806,6 @@ if(heal_flags & HEAL_RESTRAINTS) QDEL_NULL(handcuffed) QDEL_NULL(legcuffed) - set_handcuffed(null) - update_handcuffed() return ..() @@ -1128,7 +1096,7 @@ . |= held_thing.wash(clean_types) // Check and wash stuff that isn't covered - var/covered = check_covered_slots() + var/covered = hidden_slots_to_inventory_slots(covered_slots) for(var/obj/item/worn as anything in get_equipped_items()) var/slot = get_slot_by_item(worn) // Don't wash glasses if something other than them is covering our eyes @@ -1185,9 +1153,6 @@ scaries.fake = TRUE QDEL_NULL(phantom_wound) -/mob/living/carbon/is_face_visible() - return !(wear_mask?.flags_inv & HIDEFACE) && !(head?.flags_inv & HIDEFACE) - /// Returns whether or not the carbon should be able to be shocked /mob/living/carbon/proc/should_electrocute(power_source) if (ismecha(loc)) @@ -1231,7 +1196,7 @@ REMOVE_TRAIT(src, TRAIT_RESTRAINED, HANDCUFFED_TRAIT) else if(handcuffed) ADD_TRAIT(src, TRAIT_RESTRAINED, HANDCUFFED_TRAIT) - + update_handcuffed() /mob/living/carbon/on_lying_down(new_lying_angle) . = ..() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 1efea4923e57..90896042dbea 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,4 +1,5 @@ /mob/living/carbon + abstract_type = /mob/living/carbon blood_volume = BLOOD_VOLUME_NORMAL gender = MALE pressure_resistance = 15 @@ -125,3 +126,8 @@ var/bodyshape = BODYSHAPE_HUMANOID COOLDOWN_DECLARE(bleeding_message_cd) + + /// Obscured hide flags (hideflags that can't be seen AND can't be interacted with) + var/obscured_slots = NONE + /// Covered hide flags (hideflags that can be seen, BUT can't be interacted with) + var/covered_slots = NONE diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index a7b22ed39b5b..78f5d38205b6 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -1,7 +1,3 @@ -/mob/living/carbon/update_obscured_slots(obscured_flags) - ..() - update_body() - /// Updates features and clothing attached to a specific limb with limb-specific offsets /mob/living/carbon/proc/update_features(feature_key) switch(feature_key) @@ -338,7 +334,7 @@ overlays_standing[WOUND_LAYER] = wound_overlay apply_overlay(WOUND_LAYER) -/mob/living/carbon/update_worn_mask(update_obscured = TRUE) +/mob/living/carbon/update_worn_mask() remove_overlay(FACEMASK_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -349,15 +345,13 @@ inv.update_appearance() if(wear_mask) - if(update_obscured) - update_obscured_slots(wear_mask.flags_inv) - if(!(check_obscured_slots() & ITEM_SLOT_MASK)) + if(!(obscured_slots & HIDEMASK)) overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) -/mob/living/carbon/update_worn_neck(update_obscured = TRUE) +/mob/living/carbon/update_worn_neck() remove_overlay(NECK_LAYER) if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) @@ -365,15 +359,13 @@ inv.update_appearance() if(wear_neck) - if(update_obscured) - update_obscured_slots(wear_neck.flags_inv) - if(!(check_obscured_slots() & ITEM_SLOT_NECK)) + if(!(obscured_slots & HIDENECK)) overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck.dmi') update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) -/mob/living/carbon/update_worn_back(update_obscured = TRUE) +/mob/living/carbon/update_worn_back() remove_overlay(BACK_LAYER) if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) @@ -381,24 +373,20 @@ inv.update_appearance() if(back) - if(update_obscured) - update_obscured_slots(back.flags_inv) overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi') update_hud_back(back) apply_overlay(BACK_LAYER) -/mob/living/carbon/update_worn_legcuffs(update_obscured = TRUE) +/mob/living/carbon/update_worn_legcuffs() remove_overlay(LEGCUFF_LAYER) clear_alert("legcuffed") if(legcuffed) - if(update_obscured) - update_obscured_slots(legcuffed.flags_inv) overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/simple/mob.dmi', "legcuff1", -LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = src.legcuffed) -/mob/living/carbon/update_worn_head(update_obscured = TRUE) +/mob/living/carbon/update_worn_head() remove_overlay(HEAD_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -409,20 +397,16 @@ inv.update_appearance() if(head) - if(update_obscured) - update_obscured_slots(head.flags_inv) - if(!(check_obscured_slots() & ITEM_SLOT_HEAD)) + if(!(obscured_slots & HIDEHEADGEAR)) overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/default.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) -/mob/living/carbon/update_worn_handcuffs(update_obscured = TRUE) +/mob/living/carbon/update_worn_handcuffs() remove_overlay(HANDCUFF_LAYER) if(handcuffed) - if(update_obscured) - update_obscured_slots(handcuffed.flags_inv) var/mutable_appearance/handcuff_overlay = mutable_appearance('icons/mob/simple/mob.dmi', "handcuff1", -HANDCUFF_LAYER) if(handcuffed.blocks_emissive != EMISSIVE_BLOCK_NONE) handcuff_overlay.overlays += emissive_blocker(handcuff_overlay.icon, handcuff_overlay.icon_state, src, alpha = handcuff_overlay.alpha) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 8e1c9d91fbf3..d7d3df762be8 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -6,7 +6,7 @@ return null /mob/living/carbon/examine(mob/user) - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) return list(span_warning("You're struggling to make out any details...")) var/t_He = p_They() @@ -365,14 +365,13 @@ /// Coolects examine information about the mob's clothing and equipment /mob/living/carbon/proc/get_clothing_examine_info(mob/living/user) . = list() - var/obscured = check_obscured_slots() var/t_He = p_They() var/t_His = p_Their() var/t_his = p_their() var/t_has = p_have() var/t_is = p_are() //head - if(head && !(obscured & ITEM_SLOT_HEAD) && !HAS_TRAIT(head, TRAIT_EXAMINE_SKIP)) + if(head && !(obscured_slots & HIDEHEADGEAR) && !HAS_TRAIT(head, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.examine_title(user)] on [t_his] head." //back if(back && !HAS_TRAIT(back, TRAIT_EXAMINE_SKIP)) @@ -388,7 +387,7 @@ var/obj/item/corresponding_item = get_item_for_held_index(part.held_index) || part . += "[t_He] [t_has] a [corresponding_item.examine_title(user)] in place of [t_his] [initial(part.plaintext_zone)]." //gloves - if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !HAS_TRAIT(gloves, TRAIT_EXAMINE_SKIP)) + if(gloves && !(obscured_slots & HIDEGLOVES) && !HAS_TRAIT(gloves, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [gloves.examine_title(user)] on [t_his] hands." else if(GET_ATOM_BLOOD_DECAL_LENGTH(src) && num_hands) var/list/blood_stains = GET_ATOM_BLOOD_DECALS(src) @@ -402,15 +401,15 @@ var/cables_or_cuffs = istype(handcuffed, /obj/item/restraints/handcuffs/cable) ? "restrained with cable" : "handcuffed" . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") //shoes - if(shoes && !(obscured & ITEM_SLOT_FEET) && !HAS_TRAIT(shoes, TRAIT_EXAMINE_SKIP)) + if(shoes && !(obscured_slots & HIDESHOES) && !HAS_TRAIT(shoes, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [shoes.examine_title(user)] on [t_his] feet." //mask - if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !HAS_TRAIT(wear_mask, TRAIT_EXAMINE_SKIP)) + if(wear_mask && !(obscured_slots & HIDEMASK) && !HAS_TRAIT(wear_mask, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [wear_mask.examine_title(user)] on [t_his] face." - if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !HAS_TRAIT(wear_neck, TRAIT_EXAMINE_SKIP)) + if(wear_neck && !(obscured_slots & HIDENECK) && !HAS_TRAIT(wear_neck, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_neck.examine_title(user)] around [t_his] neck." //eyes - if(!(obscured & ITEM_SLOT_EYES) ) + if(!(obscured_slots & HIDEEYES)) if(glasses && !HAS_TRAIT(glasses, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [glasses.examine_title(user)] covering [t_his] eyes." else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) @@ -418,13 +417,12 @@ else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) . += span_warning("[t_His] eyes are bloodshot!") //ears - if(ears && !(obscured & ITEM_SLOT_EARS) && !HAS_TRAIT(ears, TRAIT_EXAMINE_SKIP)) + if(ears && !(obscured_slots & HIDEEARS) && !HAS_TRAIT(ears, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [ears.examine_title(user)] on [t_his] ears." // Yes there's a lot of copypasta here, we can improve this later when carbons are less dumb in general /mob/living/carbon/human/get_clothing_examine_info(mob/living/user) . = list() - var/obscured = check_obscured_slots() var/t_He = p_They() var/t_His = p_Their() var/t_his = p_their() @@ -432,7 +430,7 @@ var/t_is = p_are() //uniform - if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !HAS_TRAIT(w_uniform, TRAIT_EXAMINE_SKIP)) + if(w_uniform && !(obscured_slots & HIDEJUMPSUIT) && !HAS_TRAIT(w_uniform, TRAIT_EXAMINE_SKIP)) //accessory var/accessory_message = "" if(istype(w_uniform, /obj/item/clothing/under)) @@ -443,16 +441,16 @@ . += "[t_He] [t_is] wearing [w_uniform.examine_title(user)][accessory_message]." //head - if(head && !(obscured & ITEM_SLOT_HEAD) && !HAS_TRAIT(head, TRAIT_EXAMINE_SKIP)) + if(head && !(obscured_slots & HIDEHEADGEAR) && !HAS_TRAIT(head, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.examine_title(user)] on [t_his] head." //mask - if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !HAS_TRAIT(wear_mask, TRAIT_EXAMINE_SKIP)) + if(wear_mask && !(obscured_slots & HIDEMASK) && !HAS_TRAIT(wear_mask, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [wear_mask.examine_title(user)] on [t_his] face." //neck - if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !HAS_TRAIT(wear_neck, TRAIT_EXAMINE_SKIP)) + if(wear_neck && !(obscured_slots & HIDENECK) && !HAS_TRAIT(wear_neck, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_neck.examine_title(user)] around [t_his] neck." //eyes - if(!(obscured & ITEM_SLOT_EYES) ) + if(!(obscured_slots & HIDEEYES)) if(glasses && !HAS_TRAIT(glasses, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [glasses.examine_title(user)] covering [t_his] eyes." else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) @@ -460,13 +458,13 @@ else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) . += span_warning("[t_His] eyes are bloodshot!") //ears - if(ears && !(obscured & ITEM_SLOT_EARS) && !HAS_TRAIT(ears, TRAIT_EXAMINE_SKIP)) + if(ears && !(obscured_slots & HIDEEARS) && !HAS_TRAIT(ears, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [ears.examine_title(user)] on [t_his] ears." //suit/armor if(wear_suit && !HAS_TRAIT(wear_suit, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_suit.examine_title(user)]." //suit/armor storage - if(s_store && !(obscured & ITEM_SLOT_SUITSTORE) && !HAS_TRAIT(s_store, TRAIT_EXAMINE_SKIP)) + if(s_store && !(obscured_slots & HIDESUITSTORAGE) && !HAS_TRAIT(s_store, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] carrying [s_store.examine_title(user)] on [t_his] [wear_suit.name]." //back if(back && !HAS_TRAIT(back, TRAIT_EXAMINE_SKIP)) @@ -491,7 +489,7 @@ var/obj/item/corresponding_item = get_item_for_held_index(part.held_index) || part . += "[t_He] [t_has] [corresponding_item.examine_title(user)] in place of [t_his] [initial(part.plaintext_zone)]." //gloves - if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !HAS_TRAIT(gloves, TRAIT_EXAMINE_SKIP)) + if(gloves && !(obscured_slots & HIDEGLOVES) && !HAS_TRAIT(gloves, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [gloves.examine_title(user)] on [t_his] hands." else if(GET_ATOM_BLOOD_DECAL_LENGTH(src) || blood_in_hands) if(num_hands) @@ -501,10 +499,10 @@ var/cables_or_cuffs = istype(handcuffed, /obj/item/restraints/handcuffs/cable) ? "restrained with cable" : "handcuffed" . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") //belt - if(belt && !(obscured & ITEM_SLOT_BELT) && !HAS_TRAIT(belt, TRAIT_EXAMINE_SKIP)) + if(belt && !(obscured_slots & HIDEBELT) && !HAS_TRAIT(belt, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_has] [belt.examine_title(user)] about [t_his] waist." //shoes - if(shoes && !(obscured & ITEM_SLOT_FEET) && !HAS_TRAIT(shoes, TRAIT_EXAMINE_SKIP)) + if(shoes && !(obscured_slots & HIDESHOES) && !HAS_TRAIT(shoes, TRAIT_EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [shoes.examine_title(user)] on [t_his] feet." /// Collects info displayed about any HUDs the user has when examining src @@ -584,12 +582,12 @@ /mob/living/carbon/human/examine_more(mob/user) . = ..() - if(istype(w_uniform, /obj/item/clothing/under) && !(check_obscured_slots() & ITEM_SLOT_ICLOTHING) && !HAS_TRAIT(w_uniform, TRAIT_EXAMINE_SKIP)) + if(istype(w_uniform, /obj/item/clothing/under) && !(obscured_slots & HIDEJUMPSUIT) && !HAS_TRAIT(w_uniform, TRAIT_EXAMINE_SKIP)) var/obj/item/clothing/under/undershirt = w_uniform if(undershirt.has_sensor == BROKEN_SENSORS) . += list(span_notice("\The [undershirt]'s medical sensors are sparking.")) - if(HAS_TRAIT(src, TRAIT_UNKNOWN) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) return var/limbs_text = get_mismatched_limb_text() @@ -622,7 +620,7 @@ /// Reports how old the mob appears to be /mob/living/carbon/human/proc/get_age_text() - if((wear_mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEFACE)) + if(obscured_slots & HIDEFACE) return var/age_text diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 7ef6b08251c8..d5b60051347f 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -72,8 +72,13 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) qdel(delete) /mob/living/carbon/human/dummy/has_equipped(obj/item/item, slot, initial = FALSE) + SHOULD_CALL_PARENT(FALSE) // assuming direct control item.item_flags |= IN_INVENTORY - return item.visual_equipped(src, slot, initial) + if(!item.visual_equipped(src, slot, initial)) + return FALSE + + add_item_coverage(item) + return TRUE /mob/living/carbon/human/dummy/proc/wipe_state() delete_equipment() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d2c86f4da5f7..c40e6ab1b7ba 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -105,7 +105,7 @@ if(!same_id || (text2num(href_list["examine_time"]) + viable_time) < world.time) to_chat(viewer, span_notice("You don't have that good of a memory. Examine [p_them()] again.")) return - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) to_chat(viewer, span_notice("You can't make out that ID anymore.")) return if(!isobserver(viewer) && get_dist(viewer, src) > ID_EXAMINE_DISTANCE + 1) // leeway, ignored if the viewer is a ghost @@ -588,7 +588,7 @@ * Returns false if we couldn't wash our hands due to them being obscured, otherwise true */ /mob/living/carbon/human/proc/wash_hands(clean_types) - if(check_covered_slots() & ITEM_SLOT_GLOVES) + if(covered_slots & HIDEGLOVES) return FALSE if(gloves) @@ -611,7 +611,7 @@ if(glasses && !is_eyes_covered(ITEM_SLOT_MASK|ITEM_SLOT_HEAD) && glasses.wash(clean_types)) . = TRUE - if(wear_mask && !(check_covered_slots() & ITEM_SLOT_MASK) && wear_mask.wash(clean_types)) + if(wear_mask && !(covered_slots & HIDEMASK) && wear_mask.wash(clean_types)) . = TRUE /** @@ -623,7 +623,7 @@ . |= COMPONENT_CLEANED // Wash hands if exposed - if(!gloves && (clean_types & CLEAN_TYPE_BLOOD) && blood_in_hands > 0 && !(check_covered_slots() & ITEM_SLOT_GLOVES)) + if(!gloves && (clean_types & CLEAN_TYPE_BLOOD) && blood_in_hands > 0 && !(covered_slots & HIDEGLOVES)) blood_in_hands = 0 update_worn_gloves() . |= COMPONENT_CLEANED @@ -1115,11 +1115,8 @@ /mob/living/carbon/human/species/lizard/silverscale race = /datum/species/lizard/silverscale -/mob/living/carbon/human/species/spirit - race = /datum/species/spirit - /mob/living/carbon/human/species/ghost - race = /datum/species/spirit/ghost + race = /datum/species/ghost /mob/living/carbon/human/species/ethereal race = /datum/species/ethereal diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4e9e37010eed..a3034d11719a 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -393,7 +393,7 @@ if (!(flags & SHOCK_NO_HUMAN_ANIM)) electrocution_animation(4 SECONDS) -/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) //todo: update this to utilize check_obscured_slots() //and make sure it's check_obscured_slots(TRUE) to stop aciding through visors etc +/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) //todo: update this to utilize obscured_slots //and make sure it's check_obscured_slots(TRUE) to stop aciding through visors etc var/list/damaged = list() var/list/inventory_items_to_kill = list() var/acidity = acidpwr * min(acid_volume*0.005, 0.1) @@ -673,29 +673,28 @@ /mob/living/carbon/human/proc/burn_clothing(seconds_per_tick, stacks) var/list/burning_items = list() - var/covered = check_covered_slots() //HEAD// - if(glasses && !(covered & ITEM_SLOT_EYES)) + if(glasses && !(covered_slots & HIDEEYES)) burning_items += glasses - if(wear_mask && !(covered & ITEM_SLOT_MASK)) + if(wear_mask && !(covered_slots & HIDEMASK)) burning_items += wear_mask - if(wear_neck && !(covered & ITEM_SLOT_NECK)) + if(wear_neck && !(covered_slots & HIDENECK)) burning_items += wear_neck - if(ears && !(covered & ITEM_SLOT_EARS)) + if(ears && !(covered_slots & HIDEEARS)) burning_items += ears if(head) burning_items += head //CHEST// - if(w_uniform && !(covered & ITEM_SLOT_ICLOTHING)) + if(w_uniform && !(covered_slots & HIDEJUMPSUIT)) burning_items += w_uniform if(wear_suit) burning_items += wear_suit //ARMS & HANDS// var/obj/item/clothing/arm_clothes = null - if(gloves && !(covered & ITEM_SLOT_GLOVES)) + if(gloves && !(covered_slots & HIDEGLOVES)) arm_clothes = gloves else if(wear_suit && ((wear_suit.body_parts_covered & HANDS) || (wear_suit.body_parts_covered & ARMS))) arm_clothes = wear_suit @@ -706,7 +705,7 @@ //LEGS & FEET// var/obj/item/clothing/leg_clothes = null - if(shoes && !(covered & ITEM_SLOT_FEET)) + if(shoes && !(covered_slots & HIDESHOES)) leg_clothes = shoes else if(wear_suit && ((wear_suit.body_parts_covered & FEET) || (wear_suit.body_parts_covered & LEGS))) leg_clothes = wear_suit diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 78d4db6fa0a4..5269d7ebefb7 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -14,6 +14,7 @@ initial_language_holder = /datum/language_holder/empty // We get stuff from our species flags_1 = PREVENT_CONTENTS_EXPLOSION_1 max_grab = GRAB_KILL + examine_thats = "This is" //Hair colour and style var/hair_color = COLOR_BLACK @@ -70,7 +71,8 @@ var/obj/item/l_store = null var/obj/item/s_store = null - var/special_voice = "" // For changing our voice. Used by a symptom. + /// Allows for special overrides of voice + var/override_voice = "" var/datum/physiology/physiology diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 5c4140223be8..1bcdb336d9f6 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -8,7 +8,7 @@ //Useful when player do something with computers /mob/living/carbon/human/proc/get_assignment(if_no_id = "No id", if_no_job = "No job", hand_first = TRUE) var/obj/item/card/id/id = get_idcard(hand_first) - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) return if_no_id if(id) . = id.assignment @@ -25,7 +25,7 @@ //Useful when player do something with computers /mob/living/carbon/human/proc/get_authentification_name(if_no_id = "Unknown") var/obj/item/card/id/id = get_idcard(FALSE) - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) return if_no_id if(id) return id.registered_name @@ -48,66 +48,66 @@ var/force_set = LAZYACCESS(identity, VISIBLE_NAME_FORCED) if(force_set) // our name is overriden by something return signal_face // no need to null-check, because force_set will always set a signal_face - var/face_name = !isnull(signal_face) ? signal_face : get_face_name("") - var/id_name = !isnull(signal_id) ? signal_id : get_id_name("") + + var/face_name = isnull(signal_face) ? get_face_name("") : signal_face + var/id_name = isnull(signal_id) ? get_id_name("", honorifics = TRUE) : signal_id + + // We need to account for real name if(force_real_name) - var/fake_name - if (face_name && face_name != real_name) - fake_name = face_name - if(add_id_name && id_name && id_name != real_name) - if (!isnull(fake_name) && id_name != face_name) - fake_name = "[fake_name]/[id_name]" - else - fake_name = id_name - if (HAS_TRAIT(src, TRAIT_UNKNOWN) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN) || (!face_name && !id_name)) - fake_name = "Unknown" - return "[real_name][fake_name ? " (as [fake_name])" : ""]" - if(HAS_TRAIT(src, TRAIT_UNKNOWN) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) + var/disguse_name = get_visible_name(add_id_name = TRUE, force_real_name = FALSE) + return "[real_name][disguse_name == real_name ? "" : " (as [disguse_name])"]" + + // We're just some unknown guy + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) return "Unknown" - if(face_name) - if(add_id_name && id_name && (id_name != face_name)) + + // We have a face and an ID + if(face_name && id_name) + var/normal_id_name = get_id_name("") // need to check base ID name to avoid "John (as Captain John)" + if(normal_id_name == face_name) + return id_name // (this turns "John" into "Captain John") + if(add_id_name) return "[face_name] (as [id_name])" - return face_name - if(id_name) - return id_name - return "Unknown" -/// Returns "Unknown" if facially disfigured and real_name if not. -/// Useful for setting name when Fluacided or when updating a human's name variable + // Just go down the list of stuff we recorded + return face_name || id_name || "Unknown" + +/** + * Gets what the face of this mob looks like + * + * * if_no_face - What to return if we have no face or our face is obscured/disfigured + */ /mob/living/carbon/proc/get_face_name(if_no_face = "Unknown") return real_name /mob/living/carbon/human/get_face_name(if_no_face = "Unknown") - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) return if_no_face //We're Unknown, no face information for you - for(var/obj/item/worn_item in get_equipped_items()) - if(!(worn_item.flags_inv & HIDEFACE)) - continue + if(obscured_slots & HIDEFACE) return if_no_face var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) - if(isnull(head) || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (head.brutestate + head.burnstate) > 2 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible + if(isnull(head) || !real_name || HAS_TRAIT(src, TRAIT_DISFIGURED) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible return if_no_face return real_name -//gets name from ID or PDA itself, ID inside PDA doesn't matter -//Useful when player is being seen by other mobs -/mob/living/carbon/proc/get_id_name(if_no_id = "Unknown") +/** + * Gets whatever name is in our ID or PDA + * + * * if_no_id - What to return if we have no ID or PDA + * * honorifics - Whether to include honorifics in the returned name (if the found ID has any set) + */ +/mob/living/carbon/proc/get_id_name(if_no_id = "Unknown", honorifics = FALSE) return -/mob/living/carbon/human/get_id_name(if_no_id = "Unknown") - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) - . = if_no_id //You get NOTHING, no id name, good day sir +/mob/living/carbon/human/get_id_name(if_no_id = "Unknown", honorifics = FALSE) + if(HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) var/list/identity = list(null, null, null) SEND_SIGNAL(src, COMSIG_HUMAN_GET_FORCED_NAME, identity) - if(identity[VISIBLE_NAME_FORCED]) - return identity[VISIBLE_NAME_FACE] // to return forced names when unknown, instead of ID - else - var/obj/item/card/id/id = astype(wear_id, /obj/item/card/id) \ - || astype(wear_id, /obj/item/storage/wallet)?.front_id \ - || astype(wear_id, /obj/item/modular_computer)?.stored_id - . = id?.registered_name - if(!.) - . = if_no_id //to prevent null-names making the mob unclickable + return identity[VISIBLE_NAME_FORCED] ? identity[VISIBLE_NAME_FACE] : if_no_id + + // either results in an ID card, a generic card, or null + var/obj/item/card/id = wear_id?.GetID() || astype(wear_id, /obj/item/card) + return id?.get_displayed_name(honorifics) || if_no_id /mob/living/carbon/human/get_idcard(hand_first = TRUE) . = ..() diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 053582174d18..a962b5d33cc3 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -29,40 +29,22 @@ return "gurgles" return tongue.temp_say_mod || tongue.say_mod || ..() -/mob/living/carbon/human/GetVoice() - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) - return ("Unknown") - - if(istype(wear_mask, /obj/item/clothing/mask/chameleon)) - var/obj/item/clothing/mask/chameleon/V = wear_mask - if(V.voice_change && wear_id) - var/obj/item/card/id/idcard = wear_id.GetID() - if(istype(idcard)) - return idcard.registered_name - else - return real_name - else - return real_name - - if(mind) - var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling?.mimicing) - return changeling.mimicing - if(GetSpecialVoice()) - return GetSpecialVoice() +/mob/living/carbon/human/get_voice() + if(HAS_TRAIT(src, TRAIT_UNKNOWN_VOICE)) + return "Unknown" + var/id_name = get_id_name("") + if(HAS_TRAIT(src, TRAIT_VOICE_MATCHES_ID) && id_name) + return id_name + if(override_voice) + return override_voice + if(real_name == id_name) // Allows for "Captain John" to have the voice "Captain Join" and not "John" + return get_id_name("", honorifics = TRUE) return real_name -/mob/living/carbon/human/proc/SetSpecialVoice(new_voice) - if(new_voice) - special_voice = new_voice - return - -/mob/living/carbon/human/proc/UnsetSpecialVoice() - special_voice = "" - return - -/mob/living/carbon/human/proc/GetSpecialVoice() - return special_voice +/mob/living/carbon/human/get_message_voice(visible_name) + . = ..() + if(. != name) + . += " (as [get_id_name("Unknown", honorifics = TRUE)])" /mob/living/carbon/human/binarycheck() if(stat >= SOFT_CRIT) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 5c9c3ef86c64..8579ceeeb0ca 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -70,14 +70,10 @@ There are several things that need to be remembered: //damage overlays update_damage_overlays() -/mob/living/carbon/human/update_obscured_slots(obscured_flags) - ..() - sec_hud_set_security_status() - /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv -/mob/living/carbon/human/update_worn_undersuit(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_undersuit() remove_overlay(UNIFORM_LAYER) if(client && hud_used) @@ -88,10 +84,7 @@ There are several things that need to be remembered: var/obj/item/clothing/under/uniform = w_uniform update_hud_uniform(uniform) - if(update_obscured) - update_obscured_slots(uniform.flags_inv) - - if(HAS_TRAIT(uniform, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_ICLOTHING)) + if(HAS_TRAIT(uniform, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEJUMPSUIT)) return var/target_overlay = uniform.icon_state @@ -136,7 +129,7 @@ There are several things that need to be remembered: apply_overlay(UNIFORM_LAYER) check_body_shape(BODYSHAPE_DIGITIGRADE, ITEM_SLOT_ICLOTHING) -/mob/living/carbon/human/update_worn_id(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_id() remove_overlay(ID_LAYER) if(client && hud_used) @@ -149,9 +142,6 @@ There are several things that need to be remembered: var/obj/item/worn_item = wear_id update_hud_id(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON)) return @@ -169,7 +159,7 @@ There are several things that need to be remembered: apply_overlay(ID_LAYER) -/mob/living/carbon/human/update_worn_gloves(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_gloves() remove_overlay(GLOVES_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]) @@ -198,10 +188,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = gloves update_hud_gloves(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_GLOVES)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEGLOVES)) return var/icon_file = 'icons/mob/clothing/hands.dmi' @@ -233,7 +220,7 @@ There are several things that need to be remembered: overlays_standing[GLOVES_LAYER] = gloves_overlay apply_overlay(GLOVES_LAYER) -/mob/living/carbon/human/update_worn_glasses(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_glasses() remove_overlay(GLASSES_LAYER) var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) @@ -248,10 +235,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = glasses update_hud_glasses(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_EYES)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEEYES)) return var/icon_file = 'icons/mob/clothing/eyes.dmi' @@ -261,7 +245,8 @@ There are several things that need to be remembered: overlays_standing[GLASSES_LAYER] = glasses_overlay apply_overlay(GLASSES_LAYER) -/mob/living/carbon/human/update_worn_ears(update_obscured = TRUE) + +/mob/living/carbon/human/update_worn_ears() remove_overlay(EARS_LAYER) var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) @@ -276,10 +261,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = ears update_hud_ears(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_EARS)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEEARS)) return var/icon_file = 'icons/mob/clothing/ears.dmi' @@ -289,7 +271,7 @@ There are several things that need to be remembered: overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) -/mob/living/carbon/human/update_worn_neck(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_neck() remove_overlay(NECK_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) @@ -300,10 +282,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = wear_neck update_hud_neck(wear_neck) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_NECK)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDENECK)) return var/icon_file = 'icons/mob/clothing/neck.dmi' @@ -315,7 +294,7 @@ There are several things that need to be remembered: apply_overlay(NECK_LAYER) -/mob/living/carbon/human/update_worn_shoes(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_shoes() remove_overlay(SHOES_LAYER) if(num_legs < 2) @@ -329,10 +308,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = shoes update_hud_shoes(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_FEET)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDESHOES)) return var/icon_file = DEFAULT_SHOES_FILE @@ -356,7 +332,7 @@ There are several things that need to be remembered: apply_overlay(SHOES_LAYER) check_body_shape(BODYSHAPE_DIGITIGRADE, ITEM_SLOT_FEET) -/mob/living/carbon/human/update_suit_storage(update_obscured = TRUE) +/mob/living/carbon/human/update_suit_storage() remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) @@ -367,10 +343,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = s_store update_hud_s_store(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_SUITSTORE)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDESUITSTORAGE)) return var/mutable_appearance/s_store_overlay = worn_item.build_worn_icon(default_layer = SUIT_STORE_LAYER, default_icon_file = 'icons/mob/clothing/belt_mirror.dmi') @@ -379,7 +352,7 @@ There are several things that need to be remembered: overlays_standing[SUIT_STORE_LAYER] = s_store_overlay apply_overlay(SUIT_STORE_LAYER) -/mob/living/carbon/human/update_worn_head(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_head() remove_overlay(HEAD_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1]) var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] @@ -389,10 +362,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = head update_hud_head(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_HEAD)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEHEADGEAR)) return var/icon_file = 'icons/mob/clothing/head/default.dmi' @@ -405,7 +375,7 @@ There are several things that need to be remembered: apply_overlay(HEAD_LAYER) check_body_shape(BODYSHAPE_SNOUTED, ITEM_SLOT_HEAD) -/mob/living/carbon/human/update_worn_belt(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_belt() remove_overlay(BELT_LAYER) if(client && hud_used) @@ -416,10 +386,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = belt update_hud_belt(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_BELT)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEBELT)) return var/icon_file = 'icons/mob/clothing/belt.dmi' @@ -437,7 +404,7 @@ There are several things that need to be remembered: apply_overlay(BELT_LAYER) -/mob/living/carbon/human/update_worn_oversuit(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_oversuit() remove_overlay(SUIT_LAYER) if(client && hud_used) @@ -448,9 +415,6 @@ There are several things that need to be remembered: var/obj/item/worn_item = wear_suit update_hud_wear_suit(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON)) return @@ -485,7 +449,7 @@ There are several things that need to be remembered: client.screen += r_store update_observer_view(r_store) -/mob/living/carbon/human/update_worn_mask(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_mask() remove_overlay(FACEMASK_LAYER) var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) @@ -500,10 +464,7 @@ There are several things that need to be remembered: var/obj/item/worn_item = wear_mask update_hud_wear_mask(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (check_obscured_slots() & ITEM_SLOT_MASK)) + if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDEMASK)) return var/icon_file = 'icons/mob/clothing/mask.dmi' @@ -515,7 +476,7 @@ There are several things that need to be remembered: apply_overlay(FACEMASK_LAYER) check_body_shape(BODYSHAPE_SNOUTED, ITEM_SLOT_MASK) -/mob/living/carbon/human/update_worn_back(update_obscured = TRUE) +/mob/living/carbon/human/update_worn_back() remove_overlay(BACK_LAYER) if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]) @@ -527,9 +488,6 @@ There are several things that need to be remembered: var/mutable_appearance/back_overlay update_hud_back(worn_item) - if(update_obscured) - update_obscured_slots(worn_item.flags_inv) - if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON)) return diff --git a/code/modules/mob/living/carbon/human/init_signals.dm b/code/modules/mob/living/carbon/human/init_signals.dm index 4bea0e925eac..827716b91a6b 100644 --- a/code/modules/mob/living/carbon/human/init_signals.dm +++ b/code/modules/mob/living/carbon/human/init_signals.dm @@ -1,10 +1,9 @@ /mob/living/carbon/human/register_init_signals() . = ..() - RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_UNKNOWN), SIGNAL_REMOVETRAIT(TRAIT_UNKNOWN)), PROC_REF(update_ID_card)) + RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_UNKNOWN_APPEARANCE), SIGNAL_REMOVETRAIT(TRAIT_UNKNOWN_APPEARANCE)), PROC_REF(update_ID_card)) RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_DWARF), SIGNAL_REMOVETRAIT(TRAIT_DWARF)), PROC_REF(on_dwarf_trait)) RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_TOO_TALL), SIGNAL_REMOVETRAIT(TRAIT_TOO_TALL)), PROC_REF(on_tootall_trait)) - RegisterSignal(src, COMSIG_MOVABLE_MESSAGE_GET_NAME_PART, PROC_REF(get_name_part)) RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_FAT), SIGNAL_REMOVETRAIT(TRAIT_FAT)), PROC_REF(on_fat)) RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_NOHUNGER), SIGNAL_REMOVETRAIT(TRAIT_NOHUNGER)), PROC_REF(on_nohunger)) @@ -13,15 +12,9 @@ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_FACE_ACT, PROC_REF(clean_face)) - // List of signals which force a visible name update - // TRAIT_UNKNOWN is excluded as it calls update_ID_card which also calls update_visible_name - var/static/list/name_update_signals = list( - SIGNAL_ADDTRAIT(TRAIT_INVISIBLE_MAN), - SIGNAL_REMOVETRAIT(TRAIT_INVISIBLE_MAN), - SIGNAL_ADDTRAIT(TRAIT_DISFIGURED), - SIGNAL_REMOVETRAIT(TRAIT_DISFIGURED), - ) - RegisterSignals(src, name_update_signals, PROC_REF(update_visible_name)) + RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_HUSK), SIGNAL_REMOVETRAIT(TRAIT_HUSK)), PROC_REF(refresh_obscured)) + RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_INVISIBLE_MAN), SIGNAL_REMOVETRAIT(TRAIT_INVISIBLE_MAN)), PROC_REF(invisible_man_toggle)) + RegisterSignals(src, list(SIGNAL_ADDTRAIT(TRAIT_DISFIGURED), SIGNAL_REMOVETRAIT(TRAIT_DISFIGURED)), PROC_REF(update_visible_name)) /// Gaining or losing [TRAIT_DWARF] updates our height and grants passtable /mob/living/carbon/human/proc/on_dwarf_trait(datum/source) @@ -39,21 +32,6 @@ SIGNAL_HANDLER update_mob_height() -///From compose_message(). Snowflake code converted into its own signal proc -/mob/living/carbon/human/proc/get_name_part(datum/source, list/stored_name, visible_name) - SIGNAL_HANDLER - /** - * For if the message can be seen but not heard, shows our visible identity (like when using sign language) - * Also used by hallucinations, so it doesn't give source's identity away. - */ - if(visible_name) - stored_name[NAME_PART_INDEX] = get_visible_name() - return - var/voice_name = GetVoice() - if(name != voice_name) - voice_name += " (as [get_id_name("Unknown")])" - stored_name[NAME_PART_INDEX] = voice_name - /mob/living/carbon/human/proc/on_fat(datum/source) SIGNAL_HANDLER hud_used?.hunger?.update_hunger_bar() @@ -91,3 +69,9 @@ vision_distance = COMBAT_MESSAGE_RANGE, ) playsound(src, SFX_RUSTLE, 50, TRUE, -5, frequency = 0.8) + +/// When [TRAIT_INVISIBLE_MAN] is added or removed we need to update a few things +/mob/living/carbon/human/proc/invisible_man_toggle(datum/source) + SIGNAL_HANDLER + refresh_obscured() + update_visible_name() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 0805e2a11694..a2dfad08eeec 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -215,7 +215,6 @@ . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should. if(!. || !item_dropping) return - var/not_handled = FALSE //if we actually unequipped an item, this is because we dont want to run this proc twice, once for carbons and once for humans if(item_dropping == wear_suit) if(s_store && invdrop) dropItemToGround(s_store, TRUE) //It makes no sense for your suit storage to stay on you if you drop your suit. @@ -280,15 +279,12 @@ s_store = null if(!QDELETED(src)) update_suit_storage() - else - not_handled = TRUE - - if(not_handled) - return - update_equipment_speed_mods() - update_obscured_slots(item_dropping.flags_inv) - hud_used?.update_locked_slots() +/mob/living/carbon/human/item_coverage_changed(added_slots, removed_slots) + . = ..() + if((added_slots|removed_slots) & HIDEFACE) + sec_hud_set_security_status() + update_visible_name() /mob/living/carbon/human/toggle_internals(obj/item/tank, is_external = FALSE) // Just close the tank if it's the one the mob already has open. @@ -420,9 +416,3 @@ new_bodypart.try_attach_limb(src, TRUE) hand_bodyparts[i] = new_bodypart ..() //Don't redraw hands until we have organs for them - -/mob/living/carbon/human/update_equipment(obj/item/source) - . = ..() - // If the item we equipped/unequipped hides our face, we (potentially) need to update our name - if (source.flags_inv & HIDEFACE) - update_visible_name() diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index f3361ee7a724..eca9383698f9 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -28,17 +28,17 @@ /datum/species/fly/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load, regenerate_icons) . = ..() - RegisterSignal(human_who_gained_species, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(damage_weakness)) + RegisterSignal(human_who_gained_species, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) /datum/species/fly/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) . = ..() - UnregisterSignal(C, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS) + UnregisterSignal(C, COMSIG_ATOM_ATTACKBY) -/datum/species/fly/proc/damage_weakness(datum/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) +/datum/species/fly/proc/on_attackby(mob/living/source, obj/item/attacking_item, mob/living/attacker, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER if(istype(attacking_item, /obj/item/melee/flyswatter)) - damage_mods += 30 // Yes, a 30x damage modifier + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 30) // Yes, a 30x damage modifier /datum/species/fly/get_physical_attributes() return "These hideous creatures suffer from pesticide immensely, eat waste, and are incredibly vulnerable to bright lights. They do have wings though." diff --git a/code/modules/mob/living/carbon/human/species_types/ghost.dm b/code/modules/mob/living/carbon/human/species_types/ghost.dm index 7e54ce261966..e1653c9f3b48 100644 --- a/code/modules/mob/living/carbon/human/species_types/ghost.dm +++ b/code/modules/mob/living/carbon/human/species_types/ghost.dm @@ -1,22 +1,23 @@ ///Spirit mob that lacks legs but still roams the station as part of the unliving. -/datum/species/spirit - name = "Spirit" - id = SPECIES_SPIRIT +/datum/species/ghost + name = "Ghost" + id = SPECIES_GHOST inherent_traits = list( TRAIT_GENELESS, + TRAIT_MOVE_FLYING, TRAIT_NEVER_WOUNDED, TRAIT_NOBLOOD, TRAIT_NODISMEMBER, TRAIT_NO_DNA_COPY, + TRAIT_NO_FLOATING_ANIM, TRAIT_NO_PLASMA_TRANSFORM, TRAIT_NO_UNDERWEAR, + TRAIT_RESISTLOWPRESSURE, TRAIT_UNHUSKABLE, - TRAIT_NO_FLOATING_ANIM, - TRAIT_MOVE_FLYING, ) - inherent_biotypes = MOB_SPIRIT | MOB_UNDEAD + inherent_biotypes = MOB_HUMANOID | MOB_SPIRIT | MOB_UNDEAD no_equip_flags = ITEM_SLOT_FEET - changesource_flags = MIRROR_BADMIN | WABBAJACK | SLIME_EXTRACT + changesource_flags = MIRROR_BADMIN | WABBAJACK | SLIME_EXTRACT | MIRROR_PRIDE | MIRROR_MAGIC sexes = FALSE meat = /obj/item/ectoplasm @@ -32,34 +33,45 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/ghost, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/ghost/spirit, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/ghost, BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/ghost, BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/ghost, ) - ///Boolean on whether this species type is available at roundstart during halloween, used to deny subtypes. - var/halloween_exclusive = TRUE + ///Innate passthrough ability given to ghosts that allows them to phase but drops their stuff. + var/datum/action/innate/toggle_passthrough/passthrough_ability -/datum/species/spirit/check_roundstart_eligible() - if(check_holidays(HALLOWEEN) && halloween_exclusive) +/datum/species/ghost/check_roundstart_eligible() + if(check_holidays(HALLOWEEN)) return TRUE return ..() -/datum/species/spirit/get_physical_attributes() - return "Spirits are the spiritual remains of long-passed entities. They lack legs, can fly, but still eat, breathe, hear and see." +/datum/species/ghost/on_species_gain(mob/living/carbon/human/new_ghost, datum/species/old_species, pref_load, regenerate_icons) + . = ..() + passthrough_ability = new(src) + passthrough_ability.Grant(new_ghost) -/datum/species/spirit/get_species_description() +/datum/species/ghost/on_species_loss(mob/living/carbon/human/former_ghost, datum/species/new_species, pref_load) + QDEL_NULL(passthrough_ability) + return ..() + +/datum/species/ghost/get_physical_attributes() + return "Ghosts are the spiritual remains of long-passed entities. They lack legs, can fly, and phase through walls, \ + but still eat, breathe, hear and see." + +/datum/species/ghost/get_species_description() return "Spirits are spirits of long-dead creatures whom, for one reason or another, still roam around." -/datum/species/spirit/get_species_lore() +/datum/species/ghost/get_species_lore() return list( - "Spirits are the non-physical remains that linger onto their mortal coil. \ - They still need their protein and organs to keep themselves \"alive\", \ - which leads to many of them still believing they are still part of the living, \ - whether or not they are is a very open-ended debate between philosophers.", + "Ghosts are one of the spookiest creatures known in the galaxy. \ + While they still need their protein to sustain themselves, they are able to control their own bodies, \ + going through walls and getting rid of all their posessions at will. \ + Most knowledge known about them is kept secret by Nanotrasen's top Chaplains, who are keen \ + to keep it private.", ) -/datum/species/spirit/create_pref_unique_perks() +/datum/species/ghost/create_pref_unique_perks() var/list/to_add = list() to_add += list(list( @@ -69,6 +81,14 @@ SPECIES_PERK_DESC = "Ghosts lack legs and float, preventing you from falling into holes in the ground.", )) + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, + SPECIES_PERK_ICON = "ghost", + SPECIES_PERK_NAME = "Incorporeal", + SPECIES_PERK_DESC = "Ghost carry their tombstones with them and are directly tied to it. \ + dropping the tombstone will allow you to phase through solid matter, but leaves you vulnerable.", + )) + to_add += list(list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, SPECIES_PERK_ICON = "shoe-prints", @@ -78,102 +98,35 @@ return to_add -/** - * Ghost subtype - * This is the type of ghost that can actually phase through walls, - * exclusive to magic mirrors & admins, as roundstart-ability to phase anywhere - * is not something that is generally fun to play against. - */ -/datum/species/spirit/ghost - name = "Ghost" - id = SPECIES_GHOST - inherent_traits = list( - TRAIT_GENELESS, - TRAIT_NEVER_WOUNDED, - TRAIT_NOBLOOD, - TRAIT_NODISMEMBER, - TRAIT_NO_DNA_COPY, - TRAIT_NO_PLASMA_TRANSFORM, - TRAIT_NO_UNDERWEAR, - TRAIT_UNHUSKABLE, - TRAIT_NO_FLOATING_ANIM, - TRAIT_MOVE_FLYING, - //ghost-unique - TRAIT_SEE_BLESSED_TILES, - ) - //they have a different chest. - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/ghost, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/ghost, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/ghost, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/ghost, - ) - changesource_flags = MIRROR_BADMIN | MIRROR_PRIDE | MIRROR_MAGIC - halloween_exclusive = FALSE - - ///Innate passthrough ability given to ghosts that allows them to phase but drops their stuff. - var/datum/action/innate/toggle_passthrough/passthrough_ability - -/datum/species/spirit/ghost/get_physical_attributes() - return "Ghosts are the spiritual remains of long-passed entities. They lack legs, can fly, can choose at will to become incorporeal, \ - but still eat, breathe, hear and see." - -/datum/species/spirit/ghost/get_species_lore() - return list( - "Ghosts are one of the spookiest creatures known in the galaxy. \ - While they still need their protein to sustain themselves, they are able to control their own bodies, \ - going through walls and getting rid of all their posessions at will. \ - Most knowledge known about them is kept secret by Nanotrasen's top Chaplains, who are keen \ - to keep it private.", - ) - -/datum/species/spirit/ghost/on_species_gain(mob/living/carbon/human/new_ghost, datum/species/old_species, pref_load, regenerate_icons) - . = ..() - passthrough_ability = new(src) - passthrough_ability.Grant(new_ghost) - for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) - blessed_hud.check_hud(new_ghost) - -/datum/species/spirit/ghost/on_species_loss(mob/living/carbon/human/former_ghost, datum/species/new_species, pref_load) - . = ..() - QDEL_NULL(passthrough_ability) - //this has to be called after parent so inherent traits is cleared before we update our HUDs - for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) - blessed_hud.check_hud(former_ghost) - -/datum/species/spirit/ghost/create_pref_unique_perks() - var/list/to_add = ..() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "ghost", - SPECIES_PERK_NAME = "Incorporeal", - SPECIES_PERK_DESC = "Ghost are able to control their body to the extent where you can willingly make yourself able \ - to phase through anything, including your own equipment.", - )) - - return to_add - /** * Passthrough ability * * Ghost innate ability that allows them to enter ghost mode, - * which gives them the phasing ability, but makes them drop everything - * and completely unable to wear anything. + * which gives them the phasing ability, but makes them unable to use anything, + * and they will be tied to a tombstone that, if dug up, will kill them and turn them + * into a skeleton. */ /datum/action/innate/toggle_passthrough name = "Toggle passthrough" - desc = "Toggles your ability to phase through everything, including your gear and any incompatible organs/limbs." + desc = "Toggles phasing through everything, including your hands. You are tied to your tombstone while this is active. \ + At least you know how to keep your clothes on." button_icon = 'icons/hud/actions.dmi' button_icon_state = "ghost" + ///Grave that appears when we're passing through, which we are also tied to. + var/obj/structure/closet/crate/grave/skeleton/grave + /datum/action/innate/toggle_passthrough/Grant(mob/grant_to) . = ..() - RegisterSignal(grant_to, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(on_new_limb)) + grave = new() + //contents are initialized when the grave is robbed as that's when the crate is opened for the first time. + RegisterSignal(grave, COMSIG_CLOSET_CONTENTS_INITIALIZED, PROC_REF(on_grave_robbed)) + RegisterSignal(grave, COMSIG_CLOSET_POST_OPEN, PROC_REF(post_grave_robbed)) /datum/action/innate/toggle_passthrough/Remove(mob/remove_from) - swap_mode(force_off = TRUE) - UnregisterSignal(remove_from, COMSIG_CARBON_POST_ATTACH_LIMB) + if(!QDELING(remove_from)) + swap_mode(force_off = TRUE) + QDEL_NULL(grave) return ..() /datum/action/innate/toggle_passthrough/Activate() @@ -182,30 +135,6 @@ return swap_mode() -/datum/action/innate/toggle_passthrough/IsAvailable(feedback) - if(!isliving(owner)) - return FALSE - var/mob/living/living_owner = owner - if(living_owner.has_reagent(/datum/reagent/water/holywater)) - return FALSE - //technically you can trap a ghost by blessing them as theyre phasing, - //but they can still be dragged out. - if(locate(/obj/effect/blessing) in get_turf(owner)) - return FALSE - var/obj/item/bodypart/chest/their_chest = living_owner.get_bodypart(BODY_ZONE_CHEST) - if(!their_chest || !(their_chest.bodytype & BODYTYPE_GHOST)) - return FALSE - return ..() - -///Called when the owner of this action gets a new limb, if it isn't a ghost-limb -///the action will turn itself off, and you'll lose said limb if you try using this action again. -/datum/action/innate/toggle_passthrough/proc/on_new_limb(mob/source, obj/item/bodypart/new_part, special) - SIGNAL_HANDLER - if(!iscarbon(owner)) - return - if(!(new_part.bodytype & BODYTYPE_GHOST)) - swap_mode(force_off = TRUE) - ///Swaps the mode, allowing us to phase through stuff but drops everything. Optional 'force_off' arg to prevent being able to turn it on. /datum/action/innate/toggle_passthrough/proc/swap_mode(force_off) //we can only turn off, early return if we're trying to turn it on instead. @@ -213,17 +142,9 @@ return var/mob/living/carbon/carbon_owner = owner - var/datum/species/carbon_species = carbon_owner.dna.species - - //drop any limbs & organs that can't phase, now that you're phasing. - for(var/obj/item/bodypart/bodypart as anything in carbon_owner.bodyparts) - if(!(bodypart.bodytype & BODYTYPE_GHOST)) - bodypart.drop_limb(special = FALSE, dismembered = FALSE, move_to_floor = TRUE) - for(var/obj/item/organ/organ as anything in carbon_owner.organs) - if(!(organ.organ_flags & ORGAN_GHOST)) - organ.Remove(owner, special = FALSE) - if(HAS_TRAIT_FROM(carbon_owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT)) + grave.forceMove(get_turf(carbon_owner)) + carbon_owner.AddComponent(/datum/component/leash, grave, distance = 7) REMOVE_TRAIT(carbon_owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT) carbon_owner.add_traits(list( TRAIT_MOVE_PHASING, @@ -232,10 +153,11 @@ TRAIT_HANDS_BLOCKED, //MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_STORAGE TRAIT_PULL_BLOCKED, //MOBILITY_PULL TRAIT_UI_BLOCKED, //MOBILITY_UI - ), SPECIES_TRAIT) - carbon_species.update_no_equip_flags(carbon_owner, ALL) - RegisterSignal(carbon_owner, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(attempt_move)) + ), SPECIES_TRAIT) else + qdel(carbon_owner.GetComponent(/datum/component/leash)) + carbon_owner.forceMove(get_turf(grave)) + grave.moveToNullspace() ADD_TRAIT(carbon_owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT) carbon_owner.remove_traits(list( TRAIT_MOVE_PHASING, @@ -244,13 +166,16 @@ TRAIT_HANDS_BLOCKED, TRAIT_PULL_BLOCKED, TRAIT_UI_BLOCKED, - ), SPECIES_TRAIT) - carbon_species.update_no_equip_flags(carbon_owner, initial(carbon_species.no_equip_flags)) - UnregisterSignal(carbon_owner, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) + ), SPECIES_TRAIT) + +///Called when the contents are made, which means the grave has been 'opened', therefore robbed. +/datum/action/innate/toggle_passthrough/proc/on_grave_robbed(obj/structure/closet/crate/grave/skeleton/source) + SIGNAL_HANDLER + var/mob/living/carbon/human/species/skeleton/skeletons_in_the_closet = locate() in source.contents + owner.mind.transfer_to(skeletons_in_the_closet, force_key_move = TRUE) + skeletons_in_the_closet.death(gibbed = FALSE) -///Called when attempting to move to a new tile while the action is active, returns to cancel moving. -/datum/action/innate/toggle_passthrough/proc/attempt_move(mob/source, new_loc, direct) +///Called AFTER the contents have been spit out, which means the owner is now in the skeleton. Let's clean up. +/datum/action/innate/toggle_passthrough/proc/post_grave_robbed(obj/structure/closet/crate/grave/skeleton/source) SIGNAL_HANDLER - if(locate(/obj/effect/blessing) in new_loc) - to_chat(source, span_warning("Holy energies block your path!")) - return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE + qdel(owner) diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index c23c0d4f2b68..3eaa7346fdcc 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -31,17 +31,17 @@ /datum/species/moth/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load, regenerate_icons) . = ..() - RegisterSignal(human_who_gained_species, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(damage_weakness)) + RegisterSignal(human_who_gained_species, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) /datum/species/moth/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) . = ..() - UnregisterSignal(C, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS) + UnregisterSignal(C, COMSIG_ATOM_ATTACKBY) -/datum/species/moth/proc/damage_weakness(datum/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) +/datum/species/moth/proc/on_attackby(mob/living/source, obj/item/attacking_item, mob/living/attacker, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER if(istype(attacking_item, /obj/item/melee/flyswatter)) - damage_mods += 10 // Yes, a 10x damage modifier + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 10) // Yes, a 10x damage modifier /datum/species/moth/randomize_features() var/list/features = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index e03cef43cf3b..9d0797e0b04e 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -78,12 +78,7 @@ return SSaccessories.caps_list /datum/bodypart_overlay/mutant/mushroom_cap/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR) /datum/bodypart_overlay/mutant/mushroom_cap/override_color(obj/item/bodypart/bodypart_owner) //The mushroom cap is red by default (can still be dyed) diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index d68e588fcb8b..60010bcfd842 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -23,6 +23,7 @@ TRAIT_UNHUSKABLE, TRAIT_XENO_IMMUNE, ) + inherent_factions = list(FACTION_SKELETON) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutanttongue = /obj/item/organ/tongue/bone mutantstomach = /obj/item/organ/stomach/bone diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 68dcc4ea89e5..3fd0212c2847 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -37,7 +37,7 @@ to_chat(new_vampire, "[info_text]") new_vampire.skin_tone = "albino" new_vampire.update_body(0) - RegisterSignal(new_vampire, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(damage_weakness)) + RegisterSignal(new_vampire, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) if(new_vampire.hud_used) on_hud_created(new_vampire) else @@ -45,7 +45,7 @@ /datum/species/human/vampire/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) . = ..() - UnregisterSignal(C, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS) + UnregisterSignal(C, COMSIG_ATOM_ATTACKBY) QDEL_NULL(blood_display) /datum/species/human/vampire/spec_life(mob/living/carbon/human/vampire, seconds_per_tick, times_fired) @@ -78,11 +78,11 @@ blood_hud.infodisplay += blood_display blood_hud.show_hud(blood_hud.hud_version) -/datum/species/human/vampire/proc/damage_weakness(datum/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) +/datum/species/human/vampire/proc/on_attackby(mob/living/source, obj/item/attacking_item, mob/living/attacker, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER if(istype(attacking_item, /obj/item/nullrod/whip)) - damage_mods += 2 + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 2) /datum/species/human/vampire/get_physical_attributes() return "Vampires are afflicted with the Thirst, needing to sate it by draining the blood out of another living creature. However, they do not need to breathe or eat normally. \ diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index a2f4b623826d..8ab032018078 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -1,21 +1,3 @@ -/// Returns a list of slots that are *visibly* covered by clothing and thus cannot be seen by others -/mob/living/carbon/proc/check_obscured_slots() - var/hidden_slots = NONE - - for(var/obj/item/equipped_item in get_equipped_items()) - hidden_slots |= equipped_item.flags_inv - - return hidden_slots_to_inventory_slots(hidden_slots) - -/// Returns a list of slots that are protected by other clothing, but could possibly be seen by others, via transparent visors and similar stuff -/mob/living/carbon/proc/check_covered_slots() - var/hidden_slots = NONE - - for(var/obj/item/equipped_item in get_equipped_items()) - hidden_slots |= equipped_item.flags_inv | equipped_item.transparent_protection - - return hidden_slots_to_inventory_slots(hidden_slots) - /// Convers HIDEX to ITEM_SLOT_X, should be phased out in favor of using latter everywhere later /proc/hidden_slots_to_inventory_slots(hidden_slots) var/obscured = NONE @@ -81,34 +63,13 @@ /// Returns items which are currently visible on the mob /mob/living/carbon/proc/get_visible_items() - var/static/list/visible_slots = list( - ITEM_SLOT_OCLOTHING, - ITEM_SLOT_ICLOTHING, - ITEM_SLOT_GLOVES, - ITEM_SLOT_EYES, - ITEM_SLOT_EARS, - ITEM_SLOT_MASK, - ITEM_SLOT_HEAD, - ITEM_SLOT_FEET, - ITEM_SLOT_ID, - ITEM_SLOT_BELT, - ITEM_SLOT_BACK, - ITEM_SLOT_NECK, - ITEM_SLOT_HANDS, - ITEM_SLOT_SUITSTORE, - ITEM_SLOT_HANDCUFFED, - ITEM_SLOT_LEGCUFFED, - ) - var/list/obscured = check_obscured_slots() var/list/visible_items = list() - for (var/slot in visible_slots) - if (obscured & slot) - continue - var/obj/item/equipped = get_item_by_slot(slot) - if (equipped) - visible_items += equipped + var/obscured_item_slots = hidden_slots_to_inventory_slots(obscured_slots) for (var/obj/item/held in held_items) visible_items += held + for(var/obj/item/thing in get_equipped_items()) + if(!(get_slot_by_item(thing) & obscured_item_slots)) + visible_items += thing return visible_items /mob/living/carbon/proc/equip_in_one_of_slots(obj/item/equipping, list/slots, qdel_on_fail = TRUE, indirect_action = FALSE) @@ -154,13 +115,10 @@ equipping.pulledby.stop_pulling() equipping.screen_loc = null - if(client) - client.screen -= equipping + client?.screen -= equipping - if(observers?.len) - for(var/mob/dead/observe as anything in observers) - if(observe.client) - observe.client.screen -= equipping + for(var/mob/dead/observe as anything in observers) + observe.client?.screen -= equipping equipping.forceMove(src) SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src) @@ -190,7 +148,6 @@ update_worn_neck(equipping) if(ITEM_SLOT_HANDCUFFED) set_handcuffed(equipping) - update_handcuffed() if(ITEM_SLOT_LEGCUFFED) legcuffed = equipping update_worn_legcuffs() @@ -203,24 +160,43 @@ //Item has been handled at this point and equipped callback can be safely called //We cannot call it for items that have not been handled as they are not yet correctly //in a slot (handled further down inheritance chain, probably living/carbon/human/equip_to_slot - if(!not_handled) + if(!not_handled && slot != ITEM_SLOT_HANDS) // put in hands calls equipped on its own, annoyingly has_equipped(equipping, slot, initial) return not_handled -/mob/living/carbon/has_equipped(obj/item/item, slot, initial) +/mob/living/carbon/get_equipped_speed_mod_items() + return ..() + get_equipped_items() + +/mob/living/carbon/has_equipped(obj/item/item, slot, initial = FALSE) . = ..() + if(!.) + return + + update_equipment_speed_mods() hud_used?.update_locked_slots() + if(!(slot & item.slot_flags)) // Things below only update if slotted in (ie: not held) + return + if(item.hair_mask) + update_body() + add_item_coverage(item) -/mob/living/carbon/get_equipped_speed_mod_items() - return ..() + get_equipped_items() +/mob/living/carbon/has_unequipped(obj/item/item) + . = ..() // NB: ATP the item is still in the slot, but no longer has the IN_INVENTORY flag (so is not returned by get_equipped_items) + if(!.) + return + + update_equipment_speed_mods() + hud_used?.update_locked_slots() + if(item.hair_mask) + update_body() + remove_item_coverage(item) /mob/living/carbon/doUnEquip(obj/item/item_dropping, force, newloc, no_move, invdrop = TRUE, silent = FALSE) . = ..() //Sets the default return value to what the parent returns. if(!. || !item_dropping) //We don't want to set anything to null if the parent returned 0. return - var/not_handled = FALSE //if we actually unequipped an item, this is because we dont want to run this proc twice, once for carbons and once for humans if(item_dropping == head) head = null if(!QDELETED(src)) @@ -241,14 +217,10 @@ set_handcuffed(null) if(buckled?.buckle_requires_restraints) buckled.unbuckle_mob(src) - if(!QDELETED(src)) - update_handcuffed() else if(item_dropping == legcuffed) legcuffed = null if(!QDELETED(src)) update_worn_legcuffs() - else - not_handled = TRUE // Not an else-if because we're probably equipped in another slot if(item_dropping == internal && (QDELETED(src) || QDELETED(item_dropping) || item_dropping.loc != src)) @@ -256,12 +228,44 @@ if(!QDELETED(src)) update_mob_action_buttons(UPDATE_BUTTON_STATUS) - if(not_handled) - return +/// Adds the passed item's coverage to the mob's coverage related flags +/mob/living/carbon/proc/add_item_coverage(obj/item/item) + var/pre_coverage = obscured_slots + obscured_slots |= item.flags_inv + covered_slots |= item.flags_inv | item.transparent_protection + if(pre_coverage != obscured_slots) + item_coverage_changed(obscured_slots & ~pre_coverage, pre_coverage & ~obscured_slots) - update_equipment_speed_mods() - update_obscured_slots(item_dropping.flags_inv) - hud_used?.update_locked_slots() +/// Removes the passed item's coverage from the mob's coverage related flags +/mob/living/carbon/proc/remove_item_coverage(obj/item/item) + refresh_obscured() // No way to remove a single item's coverage without recalculating everything + +/mob/living/carbon/refresh_obscured() + var/pre_coverage = obscured_slots + + obscured_slots = NONE + covered_slots = NONE + for(var/obj/item/other_equipped_item as anything in get_equipped_items()) + obscured_slots |= other_equipped_item.flags_inv + covered_slots |= other_equipped_item.flags_inv | other_equipped_item.transparent_protection + + if(HAS_TRAIT(src, TRAIT_HUSK) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) + obscured_slots |= HIDEHAIR|HIDEFACIALHAIR + + if(pre_coverage != obscured_slots) + item_coverage_changed(obscured_slots & ~pre_coverage, pre_coverage & ~obscured_slots) + +/** + * Called when a mob's obscured slots change + * + * Args + * * added_slots - slots that were added to obscured_slots + * * removed_slots - slots that were removed from obscured_slots + */ +/mob/living/carbon/proc/item_coverage_changed(added_slots, removed_slots) + update_clothing(hidden_slots_to_inventory_slots(added_slots|removed_slots)) + if((added_slots|removed_slots) & (HIDEJUMPSUIT|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT|HIDEMUTWINGS|HIDEANTENNAE)) + update_body() /// Returns the helmet if an air tank compatible helmet is equipped. /mob/living/carbon/proc/can_breathe_helmet() diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 98077996f0ab..8f1fd0b431d1 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -14,6 +14,19 @@ . = ..() user.spin(TAUNT_EMOTE_DURATION, 0.1 SECONDS) +/datum/emote/living/tongue + key = "tongue" + key_third_person = "tongues" + message = "sticks their tongue out." + +/datum/emote/living/tongue/run_emote(mob/user, params, type_override, intentional) + var/mob/living/carbon/human/human_user = user + if(istype(human_user) && !human_user.get_organ_slot(ORGAN_SLOT_TONGUE)) + to_chat(human_user, span_warning("You don't have a tongue!")) + return + . = ..() + QDEL_IN(human_user.give_emote_overlay(/datum/bodypart_overlay/simple/emote/tongue), 5.2 SECONDS) + /datum/emote/living/blush key = "blush" key_third_person = "blushes" @@ -385,6 +398,11 @@ return return user.dna.species.get_cough_sound(user) +/datum/emote/living/wheeze + key = "wheeze" + key_third_person = "wheezes" + message = "wheezes!" + emote_type = EMOTE_AUDIBLE /datum/emote/living/pout key = "pout" @@ -630,7 +648,7 @@ TIMER_COOLDOWN_START(user, COOLDOWN_YAWN_PROPAGATION, cooldown * 3) var/mob/living/carbon/carbon_user = user - if(istype(carbon_user) && ((carbon_user.wear_mask?.flags_inv & HIDEFACE) || carbon_user.head?.flags_inv & HIDEFACE)) + if(carbon_user.obscured_slots & HIDEFACE) return // if your face is obscured, skip propagation var/propagation_distance = user.client ? 5 : 2 // mindless mobs are less able to spread yawns diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index f0d3e1f249e9..bab3c20164b2 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2478,11 +2478,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(GRAB_KILL) add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/kill) - -/// Only defined for carbons who can wear masks and helmets, we just assume other mobs have visible faces -/mob/living/proc/is_face_visible() - return TRUE - /// Sprite to show for photocopying mob butts /mob/living/proc/get_butt_sprite() return null @@ -2958,7 +2953,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /// Create a report string about how strong this person looks, generated in a somewhat arbitrary fashion /mob/living/proc/compare_fitness(mob/living/scouter) - if (HAS_TRAIT(src, TRAIT_UNKNOWN)) + if (HAS_TRAIT(src, TRAIT_UNKNOWN_APPEARANCE)) return span_warning("It's impossible to tell whether this person lifts.") var/our_fitness_level = calculate_fitness() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 7754593a4327..505000db7679 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -1,5 +1,6 @@ /mob/living see_invisible = SEE_INVISIBLE_LIVING + abstract_type = /mob/living hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD) pressure_resistance = 10 hud_type = /datum/hud/living diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 69c548ab9379..d1c35cf77a3d 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -424,7 +424,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( if(!M.client.prefs.read_preference(/datum/preference/toggle/enable_runechat) || (SSlag_switch.measures[DISABLE_RUNECHAT] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES))) speech_bubble_recipients.Add(M.client) found_client = TRUE - if(SStts.tts_enabled && voice && found_client && !message_mods[MODE_CUSTOM_SAY_ERASE_INPUT] && !HAS_TRAIT(src, TRAIT_SIGN_LANG) && !HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(SStts.tts_enabled && voice && found_client && !message_mods[MODE_CUSTOM_SAY_ERASE_INPUT] && !HAS_TRAIT(src, TRAIT_SIGN_LANG) && !HAS_TRAIT(src, TRAIT_UNKNOWN_VOICE)) var/tts_message_to_use = tts_message if(!tts_message_to_use) tts_message_to_use = message_raw diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 75564b0448d4..a0c117593de1 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -781,7 +781,7 @@ var/obj/structure/ai_core/new_core = new /obj/structure/ai_core/deactivated(loc, posibrain_inside)//Spawns a deactivated terminal at AI location. new_core.circuit.battery = battery ai_restore_power()//So the AI initially has power. - control_disabled = TRUE //Can't control things remotely if you're stuck in a card! + set_control_disabled(TRUE) //Can't control things remotely if you're stuck in a card! radio_enabled = FALSE //No talking on the built-in radio for you either! forceMove(card) card.AI = src @@ -810,14 +810,14 @@ var/treated_message = source.generate_messagepart(raw_translation, spans, message_mods) var/start = "Relayed Speech: " - var/namepart - var/list/stored_name = list(null) - SEND_SIGNAL(speaker, COMSIG_MOVABLE_MESSAGE_GET_NAME_PART, stored_name, FALSE) - namepart = stored_name[NAME_PART_INDEX] || "[speaker.GetVoice()]" + var/namepart = speaker.get_message_voice() var/hrefpart = "" var/jobpart = "Unknown" - if(!HAS_TRAIT(speaker, TRAIT_UNKNOWN)) //don't fetch the speaker's job in case they have something that conseals their identity completely + // if voice is concealed, job is concealed + // on the other hand we don't care about TRAIT_UNKNOWN_APPEARANCE + // (AI can associate voice -> name -> crew record -> job) + if(!HAS_TRAIT(speaker, TRAIT_UNKNOWN_VOICE)) if (isliving(speaker)) var/mob/living/living_speaker = speaker if(living_speaker.job) @@ -1092,12 +1092,16 @@ . = ..() .[/datum/job/ai::title] = minutes -/mob/living/silicon/ai/GetVoice() +/mob/living/silicon/ai/get_voice() . = ..() if(ai_voicechanger && ai_voicechanger.changing_voice) return ai_voicechanger.say_name return +/mob/living/silicon/ai/proc/set_control_disabled(control_disabled) + SEND_SIGNAL(src, COMSIG_SILICON_AI_SET_CONTROL_DISABLED, control_disabled) + src.control_disabled = control_disabled + #undef HOLOGRAM_CHOICE_CHARACTER #undef CHARACTER_TYPE_SELF #undef CHARACTER_TYPE_CREWMEMBER diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4f910463b9b3..eb9eb2d2fc02 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -312,6 +312,12 @@ eye_lights.icon = icon add_overlay(eye_lights) + var/obj/item/shield_module/shield_module = locate(/obj/item/shield_module) in src + if(shield_module && shield_module.active) + add_overlay(shield_module.shield_overlay) + else if (shield_module && !shield_module.active) + cut_overlay(shield_module.shield_overlay) + if(opened) if(wiresexposed) add_overlay("ov-opencover +w") diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 0306e8b56649..e198a254c8b2 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -109,6 +109,24 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real return ITEM_INTERACT_SUCCESS return ITEM_INTERACT_BLOCKING + if(istype(tool, /obj/item/storage/part_replacer)) + var/obj/item/storage/part_replacer/replacer = tool + if(!opened) + balloon_alert(user, "chassis cover is closed!") + return ITEM_INTERACT_BLOCKING + if(!istype(model, /obj/item/robot_model/engineering)) + balloon_alert(user, "wrong cyborg model!") + return ITEM_INTERACT_BLOCKING + if(locate(/obj/item/borg/upgrade/rped) in src) + balloon_alert(user, "already has a RPED!") + return ITEM_INTERACT_BLOCKING + qdel(tool) + var/obj/item/borg/upgrade/smallrped/lilrped = new + if(apply_upgrade(lilrped, user)) + balloon_alert(user, "[replacer] installed") + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + if(istype(tool, /obj/item/ai_module)) if(!opened) balloon_alert(user, "chassis cover is closed!") @@ -517,3 +535,25 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real spark_system.start() . = TRUE return ..() || . + +/mob/living/silicon/robot/apply_damage(damage, damagetype, def_zone, blocked, forced, spread_damage, wound_bonus, exposed_wound_bonus, sharpness, attack_direction, attacking_item) + var/mob/living/silicon/robot/borg = src + var/obj/item/shield_module/shield = locate() in borg + if(!shield) + return ..() + if(borg.cell.charge <= 0.4 * STANDARD_CELL_CHARGE) + balloon_alert(borg, "not enough energy!") + if(shield.active) + shield.active = FALSE + playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE) + borg.cut_overlay(shield.shield_overlay) + return + if(shield && shield.active) + if(!lavaland_equipment_pressure_check(get_turf(borg))) + balloon_alert(borg, "the shield didn't absorb the damage!") + return ..() + playsound(src, 'sound/vehicles/mecha/mech_shield_deflect.ogg', 100, TRUE) + balloon_alert(borg, "absorbed!") + borg.cell.use(damage * (STANDARD_CELL_CHARGE / 15), force = TRUE) + damage *= 0.5 + return ..() diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index 07eb2b23611c..8ae9d1cf0c6b 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -19,6 +19,7 @@ mouse_drop_zone = TRUE held_items = list(null, null, null) //we use held_items for the module holding, because that makes sense to do! default_hand_amount = 3 + examine_thats = "This is" ///Represents the cyborg's model (engineering, medical, etc.) var/obj/item/robot_model/model = null diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index d473cf205fd0..8c8e27080929 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -213,7 +213,7 @@ if(!to_stock) //Nothing for us in the silo continue - storage_datum.energy += charger.materials.use_materials(list(GET_MATERIAL_REF(storage_datum.mat_type) = to_stock), action = "resupplied", name = "units", user_data = ID_DATA(robot)) + storage_datum.energy += charger.materials.use_materials(list(GET_MATERIAL_REF(storage_datum.mat_type) = to_stock), action = "restocked", name = "units", user_data = ID_DATA(robot)) charger.balloon_alert(robot, "+ [to_stock]u [initial(storage_datum.mat_type.name)]") playsound(charger, 'sound/items/weapons/gun/general/mag_bullet_insert.ogg', 50, vary = FALSE) return @@ -386,7 +386,6 @@ name = "Engineering" basic_modules = list( /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/meson, /obj/item/construction/rcd/borg, /obj/item/pipe_dispenser, /obj/item/extinguisher, @@ -404,6 +403,7 @@ /obj/item/stack/rods/cyborg, /obj/item/construction/rtd/borg, /obj/item/stack/cable_coil, + /obj/item/airlock_painter/decal/cyborg, ) radio_channels = list(RADIO_CHANNEL_ENGINEERING) emag_modules = list( @@ -413,6 +413,36 @@ model_select_icon = "engineer" model_traits = list(TRAIT_NEGATES_GRAVITY) hat_offset = list("north" = list(0, -4), "south" = list(0, -4), "east" = list(4, -4), "west" = list(-4, -4)) + var/datum/weakref/night_vision_ref + +/datum/action/cooldown/borg_meson + name = "Toggle Meson Vision" + button_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon_state = "meson" + +/datum/action/cooldown/borg_meson/Activate() + if(usr.sight & SEE_TURFS) + usr.clear_sight(SEE_TURFS) + owner.lighting_cutoff_red += 5 + owner.lighting_cutoff_green += 15 + owner.lighting_cutoff_blue += 5 + else + usr.add_sight(SEE_TURFS) + owner.lighting_cutoff_red -= 5 + owner.lighting_cutoff_green -= 15 + owner.lighting_cutoff_blue -= 5 + +/obj/item/robot_model/engineering/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE) + var/datum/action/cooldown/borg_meson/night_vision = new(loc) + . = ..() + if(!.) + return + night_vision.Grant(loc) + night_vision_ref = WEAKREF(night_vision) + +/obj/item/robot_model/engineering/Destroy() + QDEL_NULL(night_vision_ref) + return ..() /obj/item/robot_model/janitor name = "Janitor" @@ -701,6 +731,8 @@ /obj/item/stack/medical/bone_gel, /obj/item/borg/apparatus/organ_storage, /obj/item/borg/lollipop, + /obj/item/storage/bag/chemistry, + ) radio_channels = list(RADIO_CHANNEL_MEDICAL) emag_modules = list( @@ -718,7 +750,6 @@ name = "Miner" basic_modules = list( /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/meson, /obj/item/storage/bag/ore/cyborg, /obj/item/pickaxe/drill, /obj/item/shovel, @@ -730,6 +761,7 @@ /obj/item/gps/cyborg, /obj/item/stack/marker_beacon, /obj/item/t_scanner/adv_mining_scanner/cyborg, + /obj/item/shield_module, ) radio_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) emag_modules = list( @@ -743,6 +775,19 @@ "Spider Miner" = list(SKIN_ICON_STATE = "spidermin", SKIN_HAT_OFFSET = list("north" = list(0, -2), "south" = list(0, -2), "east" = list(-2, -2), "west" = list(2, -2))), "Lavaland Miner" = list(SKIN_ICON_STATE = "miner"), ) + var/datum/weakref/night_vision_ref + +/obj/item/robot_model/miner/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE) + var/datum/action/cooldown/borg_meson/night_vision = new(loc) + . = ..() + if(!.) + return + night_vision.Grant(loc) + night_vision_ref = WEAKREF(night_vision) + +/obj/item/robot_model/miner/Destroy() + QDEL_NULL(night_vision_ref) + return ..() /obj/item/robot_model/peacekeeper name = "Peacekeeper" @@ -902,6 +947,7 @@ /obj/item/stack/medical/bone_gel, /obj/item/gun/medbeam, /obj/item/borg/apparatus/organ_storage, + /obj/item/storage/bag/chemistry, ) cyborg_base_icon = "synd_medical" model_select_icon = "malf" @@ -912,7 +958,6 @@ name = "Syndicate Saboteur" basic_modules = list( /obj/item/assembly/flash/cyborg, - /obj/item/borg/sight/thermal, /obj/item/construction/rcd/borg/syndicate, /obj/item/pipe_dispenser, /obj/item/restraints/handcuffs/cable/zipties, @@ -926,6 +971,7 @@ /obj/item/borg/apparatus/sheet_manipulator, /obj/item/stack/rods/cyborg, /obj/item/construction/rtd/borg, + /obj/item/airlock_painter/decal/cyborg, /obj/item/dest_tagger/borg, /obj/item/stack/cable_coil, /obj/item/pinpointer/syndicate_cyborg, @@ -937,6 +983,33 @@ model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NEGATES_GRAVITY) hat_offset = list("north" = list(0, -4), "south" = list(0, -4), "east" = list(4, -4), "west" = list(-4, -4)) canDispose = TRUE + var/datum/weakref/thermal_vision_ref + +/datum/action/cooldown/borg_thermal + name = "Toggle Thermal Night Vision" + button_icon = 'icons/mob/actions/actions_mecha.dmi' + button_icon_state = "meson" + +/datum/action/cooldown/borg_thermal/Activate() + if(usr.sight & SEE_TURFS) + usr.clear_sight(SEE_TURFS|SEE_MOBS) + usr.lighting_cutoff = LIGHTING_CUTOFF_VISIBLE + else + usr.add_sight(SEE_TURFS|SEE_MOBS) + usr.lighting_cutoff = LIGHTING_CUTOFF_HIGH + usr.sync_lighting_plane_cutoff() + +/obj/item/robot_model/saboteur/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE) + var/datum/action/cooldown/borg_thermal/thermal_vision = new(loc) + . = ..() + if(!.) + return + thermal_vision.Grant(loc) + thermal_vision_ref = WEAKREF(thermal_vision) + +/obj/item/robot_model/saboteur/Destroy() + QDEL_NULL(thermal_vision_ref) + return ..() /obj/item/robot_model/syndicate/kiltborg name = "Highlander" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index eb90260a3ff2..ecd088b26d4d 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -1,5 +1,6 @@ /mob/living/silicon gender = NEUTER + abstract_type = /mob/living/silicon verb_say = "states" verb_ask = "queries" verb_exclaim = "declares" diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index 7e806bbdf8c9..c3edff2b94b2 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -24,7 +24,7 @@ var/namepart = name // If carbon, use voice to account for voice changers if(iscarbon(src)) - namepart = GetVoice() + namepart = get_voice() // AI in carbon body should still have its real name var/obj/item/organ/brain/cybernetic/ai/brain = get_organ_slot(ORGAN_SLOT_BRAIN) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index d2fb1785b868..d902fdf1eff8 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -349,7 +349,6 @@ return FALSE if(!current_target.handcuffed) current_target.set_handcuffed(new cuff_type(current_target)) - current_target.update_handcuffed() playsound(src, SFX_LAW, 50, FALSE) back_to_idle() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index c6e03028a263..bd8b6fdc01c8 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -1,4 +1,5 @@ /mob/living/simple_animal/hostile + abstract_type = /mob/living/simple_animal/hostile faction = list(FACTION_HOSTILE) stop_automated_movement_when_pulled = 0 obj_damage = 40 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index ace7f2d257e1..909a06706308 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/hostile/megafauna name = "boss of this gym" desc = "Attack the weak point for massive damage." + abstract_type = /mob/living/simple_animal/hostile/megafauna health = 1000 maxHealth = 1000 combat_mode = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 4f07a92bec1f..dc469a813bf7 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -200,7 +200,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/hunter/AttackingTarget(atom/attacked_target) . = ..() if(. && prob(12)) - INVOKE_ASYNC(dash, TYPE_PROC_REF(/datum/action, Trigger), NONE, target) + INVOKE_ASYNC(dash, TYPE_PROC_REF(/datum/action, Trigger), src, NONE, target) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom name = "hostile-environment miner" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 8cc6fc3e02f9..e105ab56cd1e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -7,6 +7,7 @@ name = "elite" desc = "An elite monster, found in one of the strange tumors on lavaland." icon = 'icons/mob/simple/lavaland/lavaland_elites.dmi' + abstract_type = /mob/living/simple_animal/hostile/asteroid/elite faction = list(FACTION_MINING, FACTION_BOSS) robust_searching = TRUE ranged_ignores_vision = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index 9999736abf72..a2e718aa851e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -1,5 +1,6 @@ //the base mining mob /mob/living/simple_animal/hostile/asteroid + abstract_type = /mob/living/simple_animal/hostile/asteroid vision_range = 2 atmos_requirements = null faction = list(FACTION_MINING) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index c65176ceacda..d324557412dc 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -2,6 +2,7 @@ /mob/living/simple_animal name = "animal" icon = 'icons/mob/simple/animal.dmi' + abstract_type = /mob/living/simple_animal health = 20 maxHealth = 20 gender = PLURAL //placeholder diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a047f0dc1ed9..4f5432ee1f04 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -675,18 +675,25 @@ return // check to see if their face is blocked or, if not, a signal blocks it - if(examined_mob.is_face_visible() && SEND_SIGNAL(src, COMSIG_MOB_EYECONTACT, examined_mob, TRUE) != COMSIG_BLOCK_EYECONTACT) + if(examined_mob.can_eye_contact() && SEND_SIGNAL(src, COMSIG_MOB_EYECONTACT, examined_mob, TRUE) != COMSIG_BLOCK_EYECONTACT) var/obj/item/clothing/eye_cover = examined_mob.is_eyes_covered() if (!eye_cover || (!eye_cover.tint && !eye_cover.flash_protect)) var/msg = span_smallnotice("You make eye contact with [examined_mob].") addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), src, msg), 0.3 SECONDS) // so the examine signal has time to fire and this will print after - if(!imagined_eye_contact && is_face_visible() && !examined_mob.is_blind() && SEND_SIGNAL(examined_mob, COMSIG_MOB_EYECONTACT, src, FALSE) != COMSIG_BLOCK_EYECONTACT) + if(!imagined_eye_contact && can_eye_contact() && !examined_mob.is_blind() && SEND_SIGNAL(examined_mob, COMSIG_MOB_EYECONTACT, src, FALSE) != COMSIG_BLOCK_EYECONTACT) var/obj/item/clothing/eye_cover = is_eyes_covered() if (!eye_cover || (!eye_cover.tint && !eye_cover.flash_protect)) var/msg = span_smallnotice("[src] makes eye contact with you.") addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), examined_mob, msg), 0.3 SECONDS) +/// Checks if we can make eye contact or someone can make eye contact with us +/mob/living/proc/can_eye_contact() + return TRUE + +/mob/living/carbon/can_eye_contact() + return !(obscured_slots & HIDEFACE) + /** * Called by using Activate Held Object with an empty hand/limb * @@ -1502,11 +1509,6 @@ else living_flags |= QUEUE_NUTRITION_UPDATE -/// Update mob stats based on equipment we are wearing when an item is equipped/dropped, to be overriden by children -/// source - Item that caused the update by being equipped/dropped -/mob/proc/update_equipment(obj/item/source) - update_equipment_speed_mods() - /// Apply a proper movespeed modifier based on items we have equipped /mob/proc/update_equipment_speed_mods() var/speedies = 0 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index fe91176128b4..d43edf33d746 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -9,6 +9,7 @@ /mob density = TRUE layer = MOB_LAYER + abstract_type = /mob animate_movement = SLIDE_STEPS hud_possible = list(ANTAG_HUD) pressure_resistance = 8 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f833ad9028a6..16a77411e4c0 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -101,8 +101,10 @@ //We are now going to move var/add_delay = mob.cached_multiplicative_slowdown - var/new_glide_size = DELAY_TO_GLIDE_SIZE(add_delay * ( (NSCOMPONENT(direct) && EWCOMPONENT(direct)) ? sqrt(2) : 1 ) ) - mob.set_glide_size(new_glide_size) // set it now in case of pulled objects + var/glide_delay = add_delay + if(NSCOMPONENT(direct) && EWCOMPONENT(direct)) + glide_delay = FLOOR(glide_delay * sqrt(2), world.tick_lag) + mob.set_glide_size(DELAY_TO_GLIDE_SIZE(glide_delay)) // set it now in case of pulled objects //If the move was recent, count using old_move_delay //We want fractional behavior and all if(old_move_delay + world.tick_lag > world.time) @@ -120,7 +122,7 @@ . = ..() if((direct & (direct - 1)) && mob.loc == new_loc) //moved diagonally successfully - add_delay *= sqrt(2) + add_delay = FLOOR(add_delay * sqrt(2), world.tick_lag) var/after_glide = 0 if(visual_delay) diff --git a/code/modules/mob/mob_update_icons.dm b/code/modules/mob/mob_update_icons.dm index b14da72e8306..210c041408c2 100644 --- a/code/modules/mob/mob_update_icons.dm +++ b/code/modules/mob/mob_update_icons.dm @@ -42,42 +42,24 @@ if(slot_flags & ITEM_SLOT_HANDS) update_held_items() -///Updates item slots obscured by this item (or using an override of flags to check) -/mob/proc/update_obscured_slots(obscured_flags) - if(obscured_flags & HIDEGLOVES) - update_worn_gloves(update_obscured = FALSE) - if(obscured_flags & HIDESUITSTORAGE) - update_suit_storage(update_obscured = FALSE) - if(obscured_flags & HIDEJUMPSUIT) - update_worn_undersuit(update_obscured = FALSE) - if(obscured_flags & HIDESHOES) - update_worn_shoes(update_obscured = FALSE) - if(obscured_flags & HIDEMASK) - update_worn_mask(update_obscured = FALSE) - if(obscured_flags & HIDEBELT) - update_worn_belt(update_obscured = FALSE) - if(obscured_flags & HIDEEARS) - update_worn_ears(update_obscured = FALSE) - if(obscured_flags & HIDEEYES) - update_worn_glasses(update_obscured = FALSE) - if(obscured_flags & HIDENECK) - update_worn_neck(update_obscured = FALSE) - if(obscured_flags & HIDEHEADGEAR) - update_worn_head(update_obscured = FALSE) +/// Recalculates the mob's obscured and covered slots based on currently equipped items +/mob/proc/refresh_obscured() + SIGNAL_HANDLER + return /mob/proc/update_icons() return ///Updates the handcuff overlay & HUD element. -/mob/proc/update_worn_handcuffs(update_obscured = FALSE) +/mob/proc/update_worn_handcuffs() return ///Updates the legcuff overlay & HUD element. -/mob/proc/update_worn_legcuffs(update_obscured = FALSE) +/mob/proc/update_worn_legcuffs() return ///Updates the back overlay & HUD element. -/mob/proc/update_worn_back(update_obscured = FALSE) +/mob/proc/update_worn_back() return ///Updates the held items overlay(s) & HUD element. @@ -86,27 +68,27 @@ SEND_SIGNAL(src, COMSIG_MOB_UPDATE_HELD_ITEMS) ///Updates the mask overlay & HUD element. -/mob/proc/update_worn_mask(update_obscured = FALSE) +/mob/proc/update_worn_mask() return ///Updates the neck overlay & HUD element. -/mob/proc/update_worn_neck(update_obscured = FALSE) +/mob/proc/update_worn_neck() return ///Updates the oversuit overlay & HUD element. -/mob/proc/update_worn_oversuit(update_obscured = FALSE) +/mob/proc/update_worn_oversuit() return ///Updates the undersuit/uniform overlay & HUD element. -/mob/proc/update_worn_undersuit(update_obscured = FALSE) +/mob/proc/update_worn_undersuit() return ///Updates the belt overlay & HUD element. -/mob/proc/update_worn_belt(update_obscured = FALSE) +/mob/proc/update_worn_belt() return ///Updates the on-head overlay & HUD element. -/mob/proc/update_worn_head(update_obscured = FALSE) +/mob/proc/update_worn_head() return ///Updates every part of a carbon's body. Including parts, mutant parts, lips, underwear, and socks. @@ -117,23 +99,23 @@ return ///Updates the glasses overlay & HUD element. -/mob/proc/update_worn_glasses(update_obscured = FALSE) +/mob/proc/update_worn_glasses() return ///Updates the id overlay & HUD element. -/mob/proc/update_worn_id(update_obscured = FALSE) +/mob/proc/update_worn_id() return ///Updates the shoes overlay & HUD element. -/mob/proc/update_worn_shoes(update_obscured = FALSE) +/mob/proc/update_worn_shoes() return ///Updates the glasses overlay & HUD element. -/mob/proc/update_worn_gloves(update_obscured = FALSE) +/mob/proc/update_worn_gloves() return ///Updates the suit storage overlay & HUD element. -/mob/proc/update_suit_storage(update_obscured = FALSE) +/mob/proc/update_suit_storage() return ///Updates the pocket overlay & HUD element. @@ -141,5 +123,5 @@ return ///Updates the headset overlay & HUD element. -/mob/proc/update_worn_ears(update_obscured = FALSE) +/mob/proc/update_worn_ears() return diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm index d0424d9682dc..8385b6576710 100644 --- a/code/modules/mod/mod_actions.dm +++ b/code/modules/mod/mod_actions.dm @@ -32,7 +32,7 @@ /datum/action/item_action/mod/do_effect(trigger_flags) var/obj/item/mod/control/mod = target - if(mod.malfunctioning && prob(75)) + if(mod.malfunctioning && prob(MOD_MALFUNCTION_PROB)) mod.balloon_alert(usr, "button malfunctions!") return FALSE return TRUE @@ -182,7 +182,7 @@ . = ..() if(!.) return - module.on_select() + module.on_select(owner) /datum/action/item_action/mod/pinnable/module/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force) current_button.cut_overlays() diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 76fa31d5eacf..d2baba9c8d21 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -271,7 +271,7 @@ part.alternate_worn_layer = part_datum.unsealed_layer update_speed() wearer.update_clothing(part.slot_flags | slot_flags) - wearer.update_obscured_slots(part.visor_flags_inv) + wearer.refresh_obscured() if((part.clothing_flags & (MASKINTERNALS|HEADINTERNALS)) && wearer.invalid_internals()) wearer.cutoff_internals() SEND_SIGNAL(src, COMSIG_MOD_PART_SEALED, part_datum) diff --git a/code/modules/mod/mod_ai.dm b/code/modules/mod/mod_ai.dm index 269eb4a96bb8..461cb8c4f86e 100644 --- a/code/modules/mod/mod_ai.dm +++ b/code/modules/mod/mod_ai.dm @@ -45,7 +45,7 @@ /// Place an AI in control of your suit functions /obj/item/mod/control/proc/ai_enter_mod(mob/living/silicon/ai/new_ai) - new_ai.control_disabled = FALSE + new_ai.set_control_disabled(FALSE) new_ai.radio_enabled = TRUE new_ai.ai_restore_power() new_ai.cancel_camera() @@ -58,7 +58,7 @@ /obj/item/mod/control/proc/ai_exit_mod(obj/item/aicard/card) var/mob/living/silicon/ai/old_ai = ai_assistant old_ai.ai_restore_power()//So the AI initially has power. - old_ai.control_disabled = TRUE + old_ai.set_control_disabled(TRUE) old_ai.radio_enabled = FALSE old_ai.disconnect_shell() old_ai.forceMove(card) diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index d6974643acf0..cb4689e81d04 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -191,6 +191,7 @@ set_wearer(user) else if(wearer) unset_wearer() + return ..() /obj/item/mod/control/dropped(mob/user) . = ..() @@ -377,7 +378,7 @@ return cell /obj/item/mod/control/GetAccess() - if(ai_controller) + if(ai_controller && req_access) return req_access.Copy() else return ..() diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 2a1c677b6411..db4b0f61c255 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -167,6 +167,7 @@ part.worn_icon = used_skin[MOD_WORN_ICON_OVERRIDE] || 'icons/mob/clothing/modsuit/mod_clothing.dmi' part.icon_state = "[skin]-[part.base_icon_state][mod.get_part_datum(part).sealed ? "-sealed" : ""]" mod.wearer?.update_clothing(part.slot_flags) + mod.wearer?.refresh_obscured() /datum/armor/mod_theme melee = 10 diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 03cd746045c5..26e06bb0bdd5 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -409,13 +409,12 @@ /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/dispenser/ninja, /obj/item/mod/module/dna_lock/reinforced, - /obj/item/mod/module/emp_shield/pulse, + /obj/item/mod/module/emp_shield, /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/dispenser/ninja, - /obj/item/mod/module/emp_shield/pulse, /obj/item/mod/module/weapon_recall, /obj/item/mod/module/adrenaline_boost, /obj/item/mod/module/energy_net, diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index 9a8e77f7e8e7..e25c3b2a836c 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -86,7 +86,7 @@ . = ..() if(.) return - if(malfunctioning && prob(75)) + if(malfunctioning && prob(MOD_MALFUNCTION_PROB)) balloon_alert(ui.user, "button malfunctions!") return switch(action) @@ -108,7 +108,7 @@ var/obj/item/mod/module/module = locate(params["ref"]) in modules if(!module) return - module.on_select() + module.on_select(ui.user) // We can now if("configure") var/obj/item/mod/module/module = locate(params["ref"]) in modules if(!module) diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index 5f0be8207f92..ecf20ae2532a 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -3,6 +3,7 @@ name = "MOD module" icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' icon_state = "module" + abstract_type = /obj/item/mod/module /// If it can be removed var/removable = TRUE /// If it's passive, togglable, usable or active @@ -105,32 +106,29 @@ return TRUE /// Called when the module is selected from the TGUI, radial or the action button -/obj/item/mod/module/proc/on_select() - if(!mod.wearer) - if(ismob(mod.loc)) - balloon_alert(mod.loc, "not equipped!") +/obj/item/mod/module/proc/on_select(mob/activator) + if(!mod.wearer && !(allow_flags & MODULE_ALLOW_UNWORN)) //No wearer and cannot be used unworn + balloon_alert(activator, "not equipped!") return - if(((!mod.active || mod.activating) && !(allow_flags & MODULE_ALLOW_INACTIVE)) || module_type == MODULE_PASSIVE) - if(mod.wearer) - balloon_alert(mod.wearer, "not active!") + if(((!mod.active || mod.activating) && !(allow_flags & (MODULE_ALLOW_INACTIVE | MODULE_ALLOW_UNWORN))) || module_type == MODULE_PASSIVE) // not active + balloon_alert(activator, "not active!") return - if(!has_required_parts(mod.mod_parts, need_active = TRUE)) - if(mod.wearer) - balloon_alert(mod.wearer, "required parts inactive!") - var/list/slot_strings = list() - for(var/slot in required_slots) - var/list/slot_list = parse_slot_flags(slot) - slot_strings += (length(slot_list) == 1 ? "" : "one of ") + english_list(slot_list, and_text = " or ") - to_chat(mod.wearer, span_warning("[src] requires these slots to be deployed: [english_list(slot_strings)]")) - playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + if(!has_required_parts(mod.mod_parts, need_active = TRUE) && !(allow_flags & MODULE_ALLOW_UNWORN)) // Doesn't have parts + balloon_alert(activator, "required parts inactive!") + var/list/slot_strings = list() + for(var/slot in required_slots) + var/list/slot_list = parse_slot_flags(slot) + slot_strings += (length(slot_list) == 1 ? "" : "one of ") + english_list(slot_list, and_text = " or ") + to_chat(activator, span_warning("[src] requires these slots to be deployed: [english_list(slot_strings)]")) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return if(module_type != MODULE_USABLE) if(active) - deactivate() + deactivate(activator) else - activate() + activate(activator) else - used() + used(activator) SEND_SIGNAL(mod, COMSIG_MOD_MODULE_SELECTED, src) /// Apply a cooldown until this item can be used again @@ -141,16 +139,16 @@ SEND_SIGNAL(src, COMSIG_MODULE_COOLDOWN_STARTED, applied_cooldown) /// Called when the module is activated -/obj/item/mod/module/proc/activate() +/obj/item/mod/module/proc/activate(mob/activator) if(!COOLDOWN_FINISHED(src, cooldown_timer)) - balloon_alert(mod.wearer, "on cooldown!") + balloon_alert(activator, "on cooldown!") return FALSE if(!mod.active || mod.activating || !mod.get_charge()) - balloon_alert(mod.wearer, "unpowered!") + balloon_alert(activator, "unpowered!") return FALSE if(!(allow_flags & MODULE_ALLOW_PHASEOUT) && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) //specifically a to_chat because the user is phased out. - to_chat(mod.wearer, span_warning("You cannot activate this right now.")) + to_chat(activator, span_warning("You cannot activate this right now.")) return FALSE if(SEND_SIGNAL(src, COMSIG_MODULE_TRIGGERED, mod.wearer) & MOD_ABORT_USE) return FALSE @@ -160,25 +158,25 @@ mod.selected_module = src if(device) if(mod.wearer.put_in_hands(device)) - balloon_alert(mod.wearer, "[device] extended") + balloon_alert(activator, "[device] extended") RegisterSignal(mod.wearer, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) RegisterSignal(mod.wearer, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) else - balloon_alert(mod.wearer, "can't extend [device]!") + balloon_alert(activator, "can't extend [device]!") mod.wearer.transferItemToLoc(device, src, force = TRUE) return FALSE else var/used_button = mod.wearer.client?.prefs.read_preference(/datum/preference/choiced/mod_select) || MIDDLE_CLICK update_signal(used_button) - balloon_alert(mod.wearer, "[src] activated, [used_button]-click to use") + balloon_alert(mod.wearer, "[src] activated, [used_button]-click to use") // As of now, only wearers can "use" mods active = TRUE SEND_SIGNAL(src, COMSIG_MODULE_ACTIVATED) - on_activation() + on_activation(activator) update_clothing_slots() return TRUE /// Called when the module is deactivated -/obj/item/mod/module/proc/deactivate(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/proc/deactivate(mob/activator, display_message = TRUE, deleting = FALSE) active = FALSE if(module_type == MODULE_ACTIVE) mod.selected_module = null @@ -192,12 +190,15 @@ UnregisterSignal(mod.wearer, used_signal) used_signal = null SEND_SIGNAL(src, COMSIG_MODULE_DEACTIVATED, mod.wearer) - on_deactivation(display_message = TRUE, deleting = FALSE) + on_deactivation(activator, display_message = TRUE, deleting = FALSE) update_clothing_slots() return TRUE /// Call to update all slots visually affected by this module /obj/item/mod/module/proc/update_clothing_slots() + if(!mod.wearer) + return + var/updated_slots = mod.slot_flags if (mask_worn_overlay) for (var/obj/item/part as anything in mod.get_parts()) @@ -208,24 +209,25 @@ mod.wearer.update_clothing(updated_slots) /// Called when the module is used -/obj/item/mod/module/proc/used() +/obj/item/mod/module/proc/used(mob/activator) if(!COOLDOWN_FINISHED(src, cooldown_timer)) - balloon_alert(mod.wearer, "on cooldown!") + balloon_alert(activator, "on cooldown!") return FALSE if(!check_power(use_energy_cost)) - balloon_alert(mod.wearer, "not enough charge!") + balloon_alert(activator, "not enough charge!") return FALSE if(!(allow_flags & MODULE_ALLOW_PHASEOUT) && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) //specifically a to_chat because the user is phased out. - to_chat(mod.wearer, span_warning("You cannot activate this right now.")) + to_chat(activator, span_warning("You cannot activate this right now.")) return FALSE if(SEND_SIGNAL(src, COMSIG_MODULE_TRIGGERED, mod.wearer) & MOD_ABORT_USE) return FALSE start_cooldown() - addtimer(CALLBACK(mod.wearer, TYPE_PROC_REF(/mob, update_clothing), mod.slot_flags), cooldown_time+1) //need to run it a bit after the cooldown starts to avoid conflicts + if(mod.wearer) + addtimer(CALLBACK(mod.wearer, TYPE_PROC_REF(/mob, update_clothing), mod.slot_flags), cooldown_time+1) //need to run it a bit after the cooldown starts to avoid conflicts update_clothing_slots() SEND_SIGNAL(src, COMSIG_MODULE_USED) - on_use() + on_use(activator) return TRUE /// Called when an activated module without a device is used @@ -257,15 +259,15 @@ return TRUE /// Called from the module's activate() -/obj/item/mod/module/proc/on_activation() +/obj/item/mod/module/proc/on_activation(mob/activator) return /// Called from the module's deactivate() -/obj/item/mod/module/proc/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/proc/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) return /// Called from the module's used() -/obj/item/mod/module/proc/on_use() +/obj/item/mod/module/proc/on_use(mob/activator) return /// Called on the MODsuit's process if it is an active module diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index 436d3dc9e874..f79701e7961f 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -63,7 +63,7 @@ drain_power(use_energy_cost) grab_atom(target) -/obj/item/mod/module/anomaly_locked/kinesis/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/anomaly_locked/kinesis/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) clear_grab(playsound = !deleting) /obj/item/mod/module/anomaly_locked/kinesis/process(seconds_per_tick) diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index 9f1cec7e9fab..4b948d6ed07e 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -15,12 +15,22 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 10 incompatible_modules = list(/obj/item/mod/module/pathfinder) required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) + allow_flags = list(MODULE_ALLOW_INACTIVE|MODULE_ALLOW_UNWORN) /// The pathfinding implant. var/obj/item/implant/mod/implant + /// Whether the implant has been used or not + var/implant_inside = TRUE + /// The jet icon we apply to the MOD. + var/image/jet_icon + /// Allow suit activation - Lets this module be recalled from the MOD. + var/allow_suit_activation = FALSE // I'm not here to argue about balance + /obj/item/mod/module/pathfinder/Initialize(mapload) . = ..() implant = new(src) + jet_icon = image(icon = 'icons/obj/clothing/modsuit/mod_modules.dmi', icon_state = "mod_jet", layer = LOW_ITEM_LAYER) + /obj/item/mod/module/pathfinder/Destroy() QDEL_NULL(implant) @@ -28,28 +38,28 @@ /obj/item/mod/module/pathfinder/Exited(atom/movable/gone, direction) if(gone == implant) - implant = null + implant_inside = FALSE update_icon_state() return ..() /obj/item/mod/module/pathfinder/update_icon_state() . = ..() - icon_state = implant ? "pathfinder" : "pathfinder_empty" + icon_state = implant_inside ? "pathfinder" : "pathfinder_empty" /obj/item/mod/module/pathfinder/examine(mob/user) . = ..() - if(implant) + if(implant_inside) . += span_notice("Use it on a human to implant them.") else . += span_warning("The implant is missing.") /obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) - if(!ishuman(target) || !implant) + if(!ishuman(target) || !implant_inside) // Not human, or no implant in module return if(!do_after(user, 1.5 SECONDS, target = target)) balloon_alert(user, "interrupted!") return - if(!implant.implant(target, user)) + if(!implant.implant(target, user)) // If implant fails balloon_alert(user, "can't implant!") return if(target == user) @@ -57,21 +67,29 @@ else target.visible_message(span_notice("[user] implants [target]."), span_notice("[user] implants you with [implant].")) playsound(src, 'sound/effects/spray.ogg', 30, TRUE, -6) - module_type = MODULE_PASSIVE -/obj/item/mod/module/pathfinder/on_use() +/obj/item/mod/module/pathfinder/on_use(mob/activator) . = ..() - if (!ishuman(mod.wearer) || !implant) + if(mod.wearer && implant_inside) // implant them + try_implant(activator) + return + if(mod.wearer) + balloon_alert(activator, "suit already worn!") + else + recall(activator) + + +/// Assuming we have a wearer, attempt to implant them. +/obj/item/mod/module/pathfinder/proc/try_implant(mob/activator) + if(!ishuman(mod.wearer)) // Wearer isn't human return if(!implant.implant(mod.wearer, mod.wearer)) - balloon_alert(mod.wearer, "can't implant!") + balloon_alert(activator, "can't implant!") return - balloon_alert(mod.wearer, "implanted") + balloon_alert(activator, "implanted") + if(!(activator == mod.wearer)) // someone else implanted you + balloon_alert(mod.wearer, "pathfinder MOD tracker implanted!") playsound(src, 'sound/effects/spray.ogg', 30, TRUE, -6) - module_type = MODULE_PASSIVE - var/datum/action/item_action/mod/pinnable/module/existing_action = pinned_to[REF(mod.wearer)] - if(existing_action) - mod.remove_item_action(existing_action) /obj/item/mod/module/pathfinder/proc/attach(mob/living/user) if(!ishuman(user)) @@ -87,27 +105,86 @@ playsound(mod, 'sound/machines/ping.ogg', 50, TRUE) drain_power(use_energy_cost) +/obj/item/mod/module/pathfinder/proc/recall(mob/recaller) + if(!implant) + balloon_alert(recaller, "no target implant!") + return FALSE + if(recaller != implant.imp_in && !allow_suit_activation) // No pAI recalling + balloon_alert(recaller, "sector safety regulations prevent MOD-side recalling!") + return FALSE + if(mod.open) + balloon_alert(recaller, "cover open!") + return FALSE + if(mod.ai_controller) + balloon_alert(recaller, "already moving!") + return FALSE + if(ismob(get_atom_on_turf(mod))) + balloon_alert(recaller, "already on someone!") + return FALSE + if(mod.z != implant.imp_in.z || get_dist(implant.imp_in, mod) > MOD_AI_RANGE) + balloon_alert(recaller, "too far!") + return FALSE + var/datum/ai_controller/mod_ai = new /datum/ai_controller/mod(mod) + mod.ai_controller = mod_ai + mod_ai.set_movement_target(type, implant.imp_in) + mod_ai.set_blackboard_key(BB_MOD_TARGET, implant.imp_in) + mod_ai.set_blackboard_key(BB_MOD_MODULE, src) + mod.interaction_flags_item &= ~INTERACT_ITEM_ATTACK_HAND_PICKUP + mod.AddElement(/datum/element/movetype_handler) + ADD_TRAIT(mod, TRAIT_MOVE_FLYING, MOD_TRAIT) + animate(mod, 0.2 SECONDS, pixel_x = base_pixel_y, pixel_y = base_pixel_y) + mod.add_overlay(jet_icon) + RegisterSignal(mod, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + balloon_alert(recaller, "suit recalled") + if(!(recaller == mod.wearer)) + balloon_alert(mod.wearer, "suit recalled") + return TRUE + +/obj/item/mod/module/pathfinder/proc/on_move(atom/movable/source, atom/old_loc, dir, forced) + SIGNAL_HANDLER + + var/matrix/mod_matrix = matrix() + mod_matrix.Turn(get_angle(source, implant.imp_in)) + source.transform = mod_matrix + +/obj/item/mod/module/pathfinder/proc/end_recall(successful = TRUE) + if(!mod) + return + QDEL_NULL(mod.ai_controller) + mod.interaction_flags_item |= INTERACT_ITEM_ATTACK_HAND_PICKUP + REMOVE_TRAIT(mod, TRAIT_MOVE_FLYING, MOD_TRAIT) + mod.RemoveElement(/datum/element/movetype_handler) + mod.cut_overlay(jet_icon) + mod.transform = matrix() + UnregisterSignal(mod, COMSIG_MOVABLE_MOVED) + if(!successful) + balloon_alert(implant.imp_in, "suit lost connection!") + +// ########### +// THE INPLANT +// ########### + + /obj/item/implant/mod name = "MOD pathfinder implant" desc = "Lets you recall a MODsuit to you at any time." actions_types = list(/datum/action/item_action/mod_recall) + allow_multiple = TRUE // Surgrey is annoying if you loose your MOD /// The pathfinder module we are linked to. var/obj/item/mod/module/pathfinder/module - /// The jet icon we apply to the MOD. - var/image/jet_icon + + /obj/item/implant/mod/Initialize(mapload) . = ..() if(!istype(loc, /obj/item/mod/module/pathfinder)) return INITIALIZE_HINT_QDEL module = loc - jet_icon = image(icon = 'icons/obj/clothing/modsuit/mod_modules.dmi', icon_state = "mod_jet", layer = LOW_ITEM_LAYER) /obj/item/implant/mod/Destroy() if(module?.mod?.ai_controller) - end_recall(successful = FALSE) + module.end_recall(successful = FALSE) module = null - jet_icon = null return ..() /obj/item/implant/mod/get_data() @@ -115,55 +192,6 @@ Name: Nakamura Engineering Pathfinder Implant
    \ Implant Details: Allows for the recall of a Modular Outerwear Device by the implant owner at any time.
    " -/obj/item/implant/mod/proc/recall() - if(!module?.mod) - balloon_alert(imp_in, "no connected unit!") - return FALSE - if(module.mod.open) - balloon_alert(imp_in, "cover open!") - return FALSE - if(module.mod.ai_controller) - balloon_alert(imp_in, "already moving!") - return FALSE - if(ismob(get_atom_on_turf(module.mod))) - balloon_alert(imp_in, "already on someone!") - return FALSE - if(module.z != z || get_dist(imp_in, module.mod) > MOD_AI_RANGE) - balloon_alert(imp_in, "too far!") - return FALSE - var/datum/ai_controller/mod_ai = new /datum/ai_controller/mod(module.mod) - module.mod.ai_controller = mod_ai - mod_ai.set_movement_target(type, imp_in) - mod_ai.set_blackboard_key(BB_MOD_TARGET, imp_in) - mod_ai.set_blackboard_key(BB_MOD_IMPLANT, src) - module.mod.interaction_flags_item &= ~INTERACT_ITEM_ATTACK_HAND_PICKUP - module.mod.AddElement(/datum/element/movetype_handler) - ADD_TRAIT(module.mod, TRAIT_MOVE_FLYING, MOD_TRAIT) - animate(module.mod, 0.2 SECONDS, pixel_x = base_pixel_y, pixel_y = base_pixel_y) - module.mod.add_overlay(jet_icon) - RegisterSignal(module.mod, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) - balloon_alert(imp_in, "suit recalled") - return TRUE - -/obj/item/implant/mod/proc/end_recall(successful = TRUE) - if(!module?.mod) - return - QDEL_NULL(module.mod.ai_controller) - module.mod.interaction_flags_item |= INTERACT_ITEM_ATTACK_HAND_PICKUP - REMOVE_TRAIT(module.mod, TRAIT_MOVE_FLYING, MOD_TRAIT) - module.mod.RemoveElement(/datum/element/movetype_handler) - module.mod.cut_overlay(jet_icon) - module.mod.transform = matrix() - UnregisterSignal(module.mod, COMSIG_MOVABLE_MOVED) - if(!successful) - balloon_alert(imp_in, "suit lost connection!") - -/obj/item/implant/mod/proc/on_move(atom/movable/source, atom/old_loc, dir, forced) - SIGNAL_HANDLER - - var/matrix/mod_matrix = matrix() - mod_matrix.Turn(get_angle(source, imp_in)) - source.transform = mod_matrix /datum/action/item_action/mod_recall name = "Recall MOD" @@ -185,7 +213,7 @@ /datum/action/item_action/mod_recall/do_effect(trigger_flags) var/obj/item/implant/mod/implant = target if(!COOLDOWN_FINISHED(src, recall_cooldown)) - implant.balloon_alert(implant.imp_in, "on cooldown!") + implant.balloon_alert(owner, "on cooldown!") return - if(implant.recall()) + if(implant.module.recall(owner)) // change this COOLDOWN_START(src, recall_cooldown, 15 SECONDS) diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index d8449338f7bf..cd2e8ce06d4e 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -78,6 +78,8 @@ idle_power_cost = 0 //magic use_energy_cost = 0 //magic too max_charges = 5 + recharge_start_delay = 20 SECONDS + charge_increment_delay = 3 SECONDS shield_icon_file = 'icons/effects/magic.dmi' shield_icon = "mageshield" required_slots = list() @@ -290,7 +292,7 @@ complexity = 2 incompatible_modules = list(/obj/item/mod/module/chameleon) cooldown_time = 0.5 SECONDS - allow_flags = MODULE_ALLOW_INACTIVE + allow_flags = list(MODULE_ALLOW_INACTIVE|MODULE_ALLOW_UNWORN) /// A list of all the items the suit can disguise as. var/list/possible_disguises = list() /// The path of the item we're disguised as. @@ -312,17 +314,17 @@ return_look() possible_disguises = null -/obj/item/mod/module/chameleon/used() +/obj/item/mod/module/chameleon/used(mob/activator) if(mod.active || mod.activating) - balloon_alert(mod.wearer, "unit active!") + balloon_alert(activator, "unit active!") return FALSE return ..() -/obj/item/mod/module/chameleon/on_use() +/obj/item/mod/module/chameleon/on_use(mob/activator) if(current_disguise) return_look() return - var/picked_name = tgui_input_list(mod.wearer, "Select look to change into", "Chameleon Settings", possible_disguises) + var/picked_name = tgui_input_list(activator, "Select look to change into", "Chameleon Settings", possible_disguises) if(!possible_disguises[picked_name] || mod.active || mod.activating) return current_disguise = possible_disguises[picked_name] @@ -417,7 +419,7 @@ incompatible_modules = list(/obj/item/mod/module/infiltrator, /obj/item/mod/module/welding/syndicate, /obj/item/mod/module/welding, /obj/item/mod/module/headprotector) required_slots = list(ITEM_SLOT_FEET, ITEM_SLOT_HEAD, ITEM_SLOT_OCLOTHING) /// List of traits added when the suit is activated - var/list/traits_to_add = list(TRAIT_SILENT_FOOTSTEPS, TRAIT_UNKNOWN, TRAIT_HEAD_INJURY_BLOCKED) + var/list/traits_to_add = list(TRAIT_SILENT_FOOTSTEPS, TRAIT_UNKNOWN_APPEARANCE, TRAIT_UNKNOWN_VOICE, TRAIT_HEAD_INJURY_BLOCKED) /obj/item/mod/module/infiltrator/on_install() . = ..() @@ -504,10 +506,10 @@ if(disrupted.on_saboteur(src, 1 MINUTES)) mod.add_charge(DEFAULT_CHARGE_DRAIN * 250) -/obj/item/mod/module/stealth/wraith/on_activation() +/obj/item/mod/module/stealth/wraith/on_activation(mob/activator) return // Don't activate stealth when the module is activated because the stealth portion of the module is fully passive -/obj/item/mod/module/stealth/wraith/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/stealth/wraith/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) . = ..() UnregisterSignal(mod.wearer, list(COMSIG_LIVING_MOB_BUMP, COMSIG_ATOM_BUMPED, COMSIG_MOB_FIRED_GUN)) diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index fa28e7aaee63..5838e2391cdd 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -81,11 +81,11 @@ . = ..() UnregisterSignal(mod, COMSIG_MOD_UPDATE_SPEED) -/obj/item/mod/module/magboot/on_activation() +/obj/item/mod/module/magboot/on_activation(mob/activator) mod.wearer.add_traits(active_traits, REF(src)) mod.update_speed() -/obj/item/mod/module/magboot/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/magboot/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) mod.wearer.remove_traits(active_traits, REF(src)) mod.update_speed() @@ -140,7 +140,7 @@ if (key == "cut_tethers") SEND_SIGNAL(src, COMSIG_MOD_TETHER_SNAP) -/obj/item/mod/module/tether/on_deactivation(display_message, deleting) +/obj/item/mod/module/tether/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) SEND_SIGNAL(src, COMSIG_MOD_TETHER_SNAP) /obj/projectile/tether @@ -222,6 +222,7 @@ anchor.pixel_x = hitx anchor.pixel_y = hity anchor.anchored = TRUE + anchor.reset_pixel_pos = TRUE anchor.parent_module = parent_module firer.AddComponent(/datum/component/tether, anchor, 7, "MODtether", parent_module = parent_module, tether_trait_source = REF(parent_module)) @@ -238,6 +239,8 @@ interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT /// MODsuit tether module that created our projectile var/obj/item/mod/module/tether/parent_module + /// Should we reset our pixel positions next time we move? + var/reset_pixel_pos = FALSE /obj/item/tether_anchor/Initialize(mapload) . = ..() @@ -255,8 +258,12 @@ /obj/item/tether_anchor/wrench_act(mob/living/user, obj/item/tool) . = ..() - default_unfasten_wrench(user, tool) - return ITEM_INTERACT_SUCCESS + if (default_unfasten_wrench(user, tool)) + pixel_x = 0 + pixel_y = 0 + reset_pixel_pos = FALSE + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/item/tether_anchor/attack_hand_secondary(mob/user, list/modifiers) if (!can_interact(user) || !user.CanReach(src) || !isturf(loc)) @@ -274,6 +281,13 @@ user.AddComponent(/datum/component/tether, src, 7, "tether", tether_trait_source = REF(src)) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/item/tether_anchor/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if (reset_pixel_pos) + pixel_x = 0 + pixel_y = 0 + reset_pixel_pos = FALSE + /obj/item/tether_anchor/mouse_drop_receive(atom/target, mob/user, params) if (!can_interact(user) || !user.CanReach(src) || !isturf(loc)) return @@ -394,7 +408,7 @@ /obj/item/mod/module/constructor/on_part_deactivation(deleting = FALSE) REMOVE_TRAIT(mod.wearer, TRAIT_QUICK_BUILD, REF(src)) -/obj/item/mod/module/constructor/on_use() +/obj/item/mod/module/constructor/on_use(mob/activator) rcd_scan(src, fade_time = 10 SECONDS) drain_power(use_energy_cost) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index b7016fc4224f..5455675c6daf 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -171,12 +171,12 @@ return FALSE return TRUE -/obj/item/mod/module/jetpack/on_activation() +/obj/item/mod/module/jetpack/on_activation(mob/activator) mod.wearer.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/full_speed) if (!stabilize) ADD_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, REF(src)) -/obj/item/mod/module/jetpack/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/jetpack/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) mod.wearer.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/full_speed) REMOVE_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, REF(src)) @@ -206,9 +206,9 @@ incompatible_modules = list(/obj/item/mod/module/jump_jet) required_slots = list(ITEM_SLOT_BACK) -/obj/item/mod/module/jump_jet/on_use() +/obj/item/mod/module/jump_jet/on_use(mob/activator) if (DOING_INTERACTION(mod.wearer, mod.wearer)) - balloon_alert(mod.wearer, "busy!") + balloon_alert(activator, "busy!") return balloon_alert(mod.wearer, "launching...") mod.wearer.Shake(duration = 1 SECONDS) @@ -243,9 +243,9 @@ incompatible_modules = list(/obj/item/mod/module/status_readout) tgui_id = "status_readout" required_slots = list(ITEM_SLOT_BACK) - /// Does this show damage types, body temp, satiety + /// Does this show damage types, body temp, satiety? var/display_detailed_vitals = TRUE - /// Does this show DNA data + /// Does this show DNA data? var/display_dna = FALSE /// Does this show the round ID and shift time? var/display_time = FALSE @@ -253,6 +253,8 @@ var/death_sound = 'sound/effects/flatline3.ogg' /// Death sound volume. Please be responsible with this. var/death_sound_volume = 50 + /// Does this boost suit sensor status across Z-levels? + var/sensor_boost = TRUE /obj/item/mod/module/status_readout/add_ui_data() . = ..() @@ -291,6 +293,7 @@ . = ..() .["display_detailed_vitals"] = add_ui_configuration("Detailed Vitals", "bool", display_detailed_vitals) .["display_dna"] = add_ui_configuration("DNA Information", "bool", display_dna) + .["sensor_boost"] = add_ui_configuration("Suit Sensor Booster", "bool", sensor_boost) /obj/item/mod/module/status_readout/configure_edit(key, value) switch(key) @@ -298,12 +301,23 @@ display_detailed_vitals = text2num(value) if("display_dna") display_dna = text2num(value) + if("sensor_boost") + sensor_boost = text2num(value) + update_sensor_booster() /obj/item/mod/module/status_readout/on_part_activation() RegisterSignal(mod.wearer, COMSIG_LIVING_DEATH, PROC_REF(death_sound)) + update_sensor_booster() /obj/item/mod/module/status_readout/on_part_deactivation(deleting) UnregisterSignal(mod.wearer, COMSIG_LIVING_DEATH) + REMOVE_TRAIT(mod.wearer, TRAIT_MULTIZ_SUIT_SENSORS, REF(src)) + +/obj/item/mod/module/status_readout/proc/update_sensor_booster() + if(sensor_boost) + ADD_TRAIT(mod.wearer, TRAIT_MULTIZ_SUIT_SENSORS, REF(src)) + else + REMOVE_TRAIT(mod.wearer, TRAIT_MULTIZ_SUIT_SENSORS, REF(src)) /obj/item/mod/module/status_readout/proc/death_sound(mob/living/carbon/human/wearer) SIGNAL_HANDLER @@ -424,12 +438,12 @@ /// Maximum range we can set. var/max_range = 5 -/obj/item/mod/module/flashlight/on_activation() +/obj/item/mod/module/flashlight/on_activation(mob/activator) set_light_flags(light_flags | LIGHT_ATTACHED) set_light_on(active) active_power_cost = base_power * light_range -/obj/item/mod/module/flashlight/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/flashlight/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) set_light_flags(light_flags & ~LIGHT_ATTACHED) set_light_on(active) @@ -504,13 +518,13 @@ /// Time it takes for us to dispense. var/dispense_time = 0 SECONDS -/obj/item/mod/module/dispenser/on_use() +/obj/item/mod/module/dispenser/on_use(mob/activator) if(dispense_time && !do_after(mod.wearer, dispense_time, target = mod)) balloon_alert(mod.wearer, "interrupted!") return FALSE var/obj/item/dispensed = new dispense_type(mod.wearer.loc) mod.wearer.put_in_hands(dispensed) - balloon_alert(mod.wearer, "[dispensed] dispensed") + balloon_alert(activator, "[dispensed] dispensed") playsound(src, 'sound/machines/click.ogg', 100, TRUE) drain_power(use_energy_cost) return dispensed @@ -613,9 +627,9 @@ UnregisterSignal(mod, COMSIG_ATOM_EMP_ACT) UnregisterSignal(mod, COMSIG_ATOM_EMAG_ACT) -/obj/item/mod/module/dna_lock/on_use() +/obj/item/mod/module/dna_lock/on_use(mob/activator) dna = mod.wearer.dna.unique_enzymes - balloon_alert(mod.wearer, "dna updated") + balloon_alert(activator, "dna updated") drain_power(use_energy_cost) /obj/item/mod/module/dna_lock/emp_act(severity) @@ -753,12 +767,11 @@ ///A module that recharges the suit by an itsy tiny bit whenever the user takes a step. Originally called "magneto module" but the videogame reference sounds cooler. /obj/item/mod/module/joint_torsion name = "MOD joint torsion ratchet module" - desc = "A compact, weak AC generator that charges the suit's internal cell through the power of deambulation. It doesn't work in zero G." + desc = "A compact, weak AC generator that charges the suit's internal cell through the power of deambulation. It doesn't work in zero G. More than one can be installed." icon_state = "joint_torsion" complexity = 1 - incompatible_modules = list(/obj/item/mod/module/joint_torsion) required_slots = list(ITEM_SLOT_FEET) - var/power_per_step = DEFAULT_CHARGE_DRAIN * 0.3 + var/power_per_step = DEFAULT_CHARGE_DRAIN * 0.45 /obj/item/mod/module/joint_torsion/on_part_activation() if(!(mod.wearer.movement_type & (FLOATING|FLYING))) @@ -841,11 +854,11 @@ container = null return ..() -/obj/item/mod/module/recycler/on_activation() +/obj/item/mod/module/recycler/on_activation(mob/activator) connector = AddComponent(/datum/component/connect_loc_behalf, mod.wearer, loc_connections) RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(on_wearer_moved)) -/obj/item/mod/module/recycler/on_deactivation(display_message, deleting = FALSE) +/obj/item/mod/module/recycler/on_deactivation(mob/activator, display_message, deleting = FALSE) QDEL_NULL(connector) UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(on_wearer_moved)) diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index 17804dcd4067..2e0b2dba3a0f 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -136,12 +136,12 @@ QDEL_NULL(rave_screen) return ..() -/obj/item/mod/module/visor/rave/on_activation() +/obj/item/mod/module/visor/rave/on_activation(mob/activator) rave_screen = mod.wearer.add_client_colour(/datum/client_colour/rave, REF(src)) rave_screen.update_color(rainbow_order[rave_number]) music_player.start_music(mod.wearer) -/obj/item/mod/module/visor/rave/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/visor/rave/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) QDEL_NULL(rave_screen) if(isnull(music_player.active_song_sound)) return @@ -199,7 +199,7 @@ cooldown_time = 30 SECONDS required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING) -/obj/item/mod/module/tanner/on_use() +/obj/item/mod/module/tanner/on_use(mob/activator) playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE) var/datum/reagents/holder = new() holder.add_reagent(/datum/reagent/spraytan, 10) @@ -223,7 +223,7 @@ var/blowing_time = 10 SECONDS var/oxygen_damage = 20 -/obj/item/mod/module/balloon/on_use() +/obj/item/mod/module/balloon/on_use(mob/activator) if(!do_after(mod.wearer, blowing_time, target = mod)) return FALSE mod.wearer.adjustOxyLoss(oxygen_damage) @@ -247,7 +247,7 @@ /// The total number of sheets created by this MOD. The more sheets, them more likely they set on fire. var/num_sheets_dispensed = 0 -/obj/item/mod/module/paper_dispenser/on_use() +/obj/item/mod/module/paper_dispenser/on_use(mob/activator) if(!do_after(mod.wearer, 1 SECONDS, target = mod)) return FALSE @@ -316,7 +316,7 @@ /// If you use the module on a planetary turf, you fly up. To the sky. var/you_fucked_up = FALSE -/obj/item/mod/module/atrocinator/on_activation() +/obj/item/mod/module/atrocinator/on_activation(mob/activator) playsound(src, 'sound/effects/curse/curseattack.ogg', 50) mod.wearer.AddElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY) RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(check_upstairs)) @@ -325,13 +325,13 @@ passtable_on(mod.wearer, REF(src)) check_upstairs() //todo at some point flip your screen around -/obj/item/mod/module/atrocinator/deactivate(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/atrocinator/deactivate(mob/activator, display_message = TRUE, deleting = FALSE) if(you_fucked_up && !deleting) - to_chat(mod.wearer, span_danger("It's too late.")) + to_chat(activator, span_danger("It's too late.")) return FALSE return ..() -/obj/item/mod/module/atrocinator/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/atrocinator/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) if(!deleting) playsound(src, 'sound/effects/curse/curseattack.ogg', 50) qdel(mod.wearer.RemoveElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY)) diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index 77bd5a129f28..e06745450049 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -19,7 +19,7 @@ /// The alpha applied when the cloak is on. var/stealth_alpha = 50 -/obj/item/mod/module/stealth/on_activation() +/obj/item/mod/module/stealth/on_activation(mob/activator) if(bumpoff) RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth)) RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) @@ -28,7 +28,7 @@ animate(mod.wearer, alpha = stealth_alpha, time = 1.5 SECONDS) drain_power(use_energy_cost) -/obj/item/mod/module/stealth/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/stealth/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) if(bumpoff) UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP) UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED)) @@ -72,11 +72,11 @@ cooldown_time = 3 SECONDS -/obj/item/mod/module/stealth/ninja/on_activation() +/obj/item/mod/module/stealth/ninja/on_activation(mob/activator) . = ..() ADD_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, REF(src)) -/obj/item/mod/module/stealth/ninja/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/stealth/ninja/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) . = ..() REMOVE_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, REF(src)) @@ -287,7 +287,7 @@ use_energy_cost = DEFAULT_CHARGE_DRAIN * 10 cooldown_time = 8 SECONDS -/obj/item/mod/module/emp_shield/pulse/on_use() +/obj/item/mod/module/emp_shield/pulse/on_use(mob/activator) playsound(src, 'sound/effects/empulse.ogg', 60, TRUE) empulse(src, heavy_range = 4, light_range = 6) drain_power(use_energy_cost) @@ -302,6 +302,7 @@ and even useful information such as their overall health and wellness. This one comes with a clock that calibrates to the \ local system time, and an operational ID number display. The vital monitor's speaker has been removed." display_time = TRUE + sensor_boost = FALSE death_sound = null death_sound_volume = null @@ -419,7 +420,7 @@ return FALSE return ..() -/obj/item/mod/module/adrenaline_boost/on_use() +/obj/item/mod/module/adrenaline_boost/on_use(mob/activator) if(IS_SPACE_NINJA(mod.wearer)) mod.wearer.say(pick_list_replacements(NINJA_FILE, "lines"), forced = type) to_chat(mod.wearer, span_notice("You have used the adrenaline boost.")) diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm index 8cb15d35370a..8a41d449edf8 100644 --- a/code/modules/mod/modules/modules_science.dm +++ b/code/modules/mod/modules/modules_science.dm @@ -13,10 +13,10 @@ incompatible_modules = list(/obj/item/mod/module/reagent_scanner) required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) -/obj/item/mod/module/reagent_scanner/on_activation() +/obj/item/mod/module/reagent_scanner/on_activation(mob/activator) ADD_TRAIT(mod.wearer, TRAIT_REAGENT_SCANNER, REF(src)) -/obj/item/mod/module/reagent_scanner/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/reagent_scanner/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) REMOVE_TRAIT(mod.wearer, TRAIT_REAGENT_SCANNER, REF(src)) /obj/item/mod/module/reagent_scanner/advanced @@ -29,12 +29,12 @@ removable = FALSE var/explosion_detection_dist = 21 -/obj/item/mod/module/reagent_scanner/advanced/on_activation() +/obj/item/mod/module/reagent_scanner/advanced/on_activation(mob/activator) . = ..() ADD_TRAIT(mod.wearer, TRAIT_RESEARCH_SCANNER, REF(src)) RegisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION, PROC_REF(sense_explosion)) -/obj/item/mod/module/reagent_scanner/advanced/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/reagent_scanner/advanced/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) . = ..() REMOVE_TRAIT(mod.wearer, TRAIT_RESEARCH_SCANNER, REF(src)) UnregisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION) @@ -61,13 +61,13 @@ accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/grav) required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT) -/obj/item/mod/module/anomaly_locked/antigrav/on_activation() +/obj/item/mod/module/anomaly_locked/antigrav/on_activation(mob/activator) if(mod.wearer.has_gravity()) new /obj/effect/temp_visual/mook_dust(get_turf(src)) mod.wearer.AddElement(/datum/element/forced_gravity, 0) playsound(src, 'sound/effects/gravhit.ogg', 50) -/obj/item/mod/module/anomaly_locked/antigrav/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/anomaly_locked/antigrav/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) mod.wearer.RemoveElement(/datum/element/forced_gravity, 0) if(deleting) return diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index a19cd09db2b0..2eaebddaf556 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -82,7 +82,7 @@ /obj/item/mod/module/pepper_shoulders/on_part_deactivation(deleting = FALSE) UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK) -/obj/item/mod/module/pepper_shoulders/on_use() +/obj/item/mod/module/pepper_shoulders/on_use(mob/activator) playsound(src, 'sound/effects/spray.ogg', 30, TRUE, -6) var/datum/reagents/capsaicin_holder = new(10) capsaicin_holder.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 10) @@ -117,7 +117,7 @@ /// Gun we have holstered. var/obj/item/gun/holstered -/obj/item/mod/module/holster/on_use() +/obj/item/mod/module/holster/on_use(mob/activator) if(!holstered) var/obj/item/gun/holding = mod.wearer.get_active_held_item() if(!holding) @@ -163,11 +163,12 @@ /// List of spans we add to the speaker. var/list/voicespan = list(SPAN_COMMAND) -/obj/item/mod/module/megaphone/on_activation() +/obj/item/mod/module/megaphone/on_activation(mob/activator) RegisterSignal(mod.wearer, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + RegisterSignal(mod.wearer, COMSIG_LIVING_TREAT_MESSAGE, PROC_REF(add_tts_filter)) -/obj/item/mod/module/megaphone/on_deactivation(display_message = TRUE, deleting = FALSE) - UnregisterSignal(mod.wearer, COMSIG_MOB_SAY) +/obj/item/mod/module/megaphone/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) + UnregisterSignal(mod.wearer, list(COMSIG_LIVING_TREAT_MESSAGE, COMSIG_MOB_SAY)) /obj/item/mod/module/megaphone/proc/handle_speech(datum/source, list/speech_args) SIGNAL_HANDLER @@ -175,6 +176,11 @@ speech_args[SPEECH_SPANS] |= voicespan drain_power(use_energy_cost) +/obj/item/mod/module/megaphone/proc/add_tts_filter(mob/living/carbon/user, list/message_args) + SIGNAL_HANDLER + ///A sharper and louder sound with a bit of echo + message_args[TREAT_TTS_FILTER_ARG] += "acrusher=samples=2:level_out=6,aecho=delays=90:decays=0.3,aemphasis=type=cd,acontrast=30,crystalizer=i=5" + ///Criminal Capture - Generates hardlight bags you can put people in and sinch. /obj/item/mod/module/criminalcapture name = "MOD criminal capture module" @@ -203,7 +209,7 @@ idle_power_cost = linked_bodybag ? (DEFAULT_CHARGE_DRAIN * 3) : 0 return ..() -/obj/item/mod/module/criminalcapture/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/criminalcapture/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) if(!linked_bodybag) return packup() @@ -269,7 +275,7 @@ overlay_state_inactive = "module_mirage_grenade" dispense_type = /obj/item/grenade/mirage -/obj/item/mod/module/dispenser/mirage/on_use() +/obj/item/mod/module/dispenser/mirage/on_use(mob/activator) var/obj/item/grenade/mirage/grenade = ..() grenade.arm_grenade(mod.wearer) @@ -318,18 +324,18 @@ /// Effect image on projectiles. var/image/projectile_effect /// The dampening field - var/datum/proximity_monitor/advanced/projectile_dampener/dampening_field + var/datum/proximity_monitor/advanced/bubble/projectile_dampener/dampening_field /obj/item/mod/module/projectile_dampener/Initialize(mapload) . = ..() projectile_effect = image('icons/effects/fields.dmi', "projectile_dampen_effect") -/obj/item/mod/module/projectile_dampener/on_activation() +/obj/item/mod/module/projectile_dampener/on_activation(mob/activator) if(istype(dampening_field)) QDEL_NULL(dampening_field) dampening_field = new(mod.wearer, field_radius, TRUE, src) -/obj/item/mod/module/projectile_dampener/on_deactivation(display_message, deleting = FALSE) +/obj/item/mod/module/projectile_dampener/on_deactivation(mob/activator, display_message, deleting = FALSE) QDEL_NULL(dampening_field) ///Active Sonar - Displays a hud circle on the turf of any living creatures in the given radius @@ -429,12 +435,12 @@ scanned_slice = 1 COOLDOWN_START(src, scan_cooldown, scan_cooldown_time) -/obj/item/mod/module/active_sonar/on_use() - balloon_alert(mod.wearer, "readying sonar...") +/obj/item/mod/module/active_sonar/on_use(mob/activator) + balloon_alert(activator, "readying sonar...") playsound(mod.wearer, 'sound/vehicles/mecha/skyfall_power_up.ogg', vol = 20, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) if(!do_after(mod.wearer, 1.1 SECONDS, target = mod)) return - playsound(mod.wearer, 'sound/effects/ping_hit.ogg', vol = 75, vary = TRUE) // Should be audible for the radius of the sonar + playsound(src, 'sound/effects/ping_hit.ogg', vol = 75, vary = TRUE) // Should be audible for the radius of the sonar to_chat(mod.wearer, span_notice("You slam your fist into the ground, sending out a sonic wave that detects [detect_living_creatures()] living beings nearby!")) for(var/mob/living/creature as anything in keyed_creatures) new /obj/effect/temp_visual/sonar_ping(mod.wearer.loc, mod.wearer, creature) diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index 3a53705e24bc..9ca53939fb2a 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -12,7 +12,7 @@ incompatible_modules = list(/obj/item/mod/module/bikehorn) cooldown_time = 1 SECONDS -/obj/item/mod/module/bikehorn/on_use() +/obj/item/mod/module/bikehorn/on_use(mob/activator) playsound(src, 'sound/items/bikehorn.ogg', 100, FALSE) drain_power(use_energy_cost) diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 3a244f7ea740..4ba54760aca7 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -18,8 +18,8 @@ . = ..() AddComponent(/datum/component/gps/item, "MOD0", state = GLOB.deep_inventory_state, overlay_state = FALSE) -/obj/item/mod/module/gps/on_use() - attack_self(mod.wearer) +/obj/item/mod/module/gps/on_use(mob/activator) + attack_self(mod.wearer) // todo: refactor to make compatable with pAIs. Maybe ui_interact(activator) ///Hydraulic Clamp - Lets you pick up and drop crates. /obj/item/mod/module/clamp @@ -40,16 +40,28 @@ var/load_time = 3 SECONDS /// The max amount of crates you can carry. var/max_crates = 3 + /// Disallow mobs larger than this size in containers + var/max_mob_size = MOB_SIZE_SMALL + /// Items that allowed to be picked up by this module + var/list/accepted_items /// The crates stored in the module. var/list/stored_crates = list() + +/obj/item/mod/module/clamp/Initialize(mapload) + . = ..() + accepted_items = typecacheof(list( + /obj/structure/closet/crate, + /obj/item/delivery/big + )) + /obj/item/mod/module/clamp/on_select_use(atom/target) . = ..() if(!.) return if(!mod.wearer.Adjacent(target)) return - if(istype(target, /obj/structure/closet/crate) || istype(target, /obj/item/delivery/big)) + if(is_type_in_typecache(target, accepted_items)) var/atom/movable/picked_crate = target if(!check_crate_pickup(picked_crate)) return @@ -92,7 +104,7 @@ balloon_alert(mod.wearer, "too many crates!") return FALSE for(var/mob/living/mob in target.get_all_contents()) - if(mob.mob_size < MOB_SIZE_HUMAN) + if(mob.mob_size <= max_mob_size) continue balloon_alert(mod.wearer, "crate too heavy!") return FALSE @@ -124,10 +136,10 @@ overlay_state_active = "module_drill" required_slots = list(ITEM_SLOT_GLOVES) -/obj/item/mod/module/drill/on_activation() +/obj/item/mod/module/drill/on_activation(mob/activator) RegisterSignal(mod.wearer, COMSIG_MOVABLE_BUMP, PROC_REF(bump_mine)) -/obj/item/mod/module/drill/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/drill/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) UnregisterSignal(mod.wearer, COMSIG_MOVABLE_BUMP) /obj/item/mod/module/drill/on_select_use(atom/target) @@ -202,7 +214,7 @@ ore.forceMove(src) ores += ore -/obj/item/mod/module/orebag/on_use() +/obj/item/mod/module/orebag/on_use(mob/activator) for(var/obj/item/ore as anything in ores) ore.forceMove(drop_location()) ores -= ore @@ -333,7 +345,7 @@ locker.throw_at(mod.wearer, range = 7, speed = 3, force = MOVE_FORCE_WEAK, \ callback = CALLBACK(src, PROC_REF(check_locker), locker)) -/obj/item/mod/module/magnet/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/magnet/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) if(istype(mod.wearer.pulling, /obj/structure/closet)) mod.wearer.stop_pulling() @@ -343,13 +355,13 @@ if(!locker.Adjacent(mod.wearer) || !isturf(locker.loc) || !isturf(mod.wearer.loc)) return mod.wearer.start_pulling(locker) - locker.strong_grab = TRUE + ADD_TRAIT(locker, TRAIT_STRONGPULL, REF(mod.wearer)) RegisterSignal(locker, COMSIG_ATOM_NO_LONGER_PULLED, PROC_REF(on_stop_pull)) /obj/item/mod/module/magnet/proc/on_stop_pull(obj/structure/closet/locker, atom/movable/last_puller) SIGNAL_HANDLER - locker.strong_grab = FALSE + REMOVE_TRAIT(locker, TRAIT_STRONGPULL, REF(mod.wearer)) UnregisterSignal(locker, COMSIG_ATOM_NO_LONGER_PULLED) /obj/item/mod/module/ash_accretion @@ -369,7 +381,7 @@ /// Armor values per tile. var/datum/armor/armor_mod = /datum/armor/mod_ash_accretion /// Speed added when you're fully covered in ash. - var/speed_added = -0.5 + var/speed_added = -0.75 /// Turfs that let us accrete ash. var/static/list/accretion_turfs /// Turfs that let us keep ash. @@ -483,13 +495,13 @@ TRAIT_NO_SLIP_ALL, ) -/obj/item/mod/module/sphere_transform/activate() +/obj/item/mod/module/sphere_transform/activate(mob/activator) if(!mod.wearer.has_gravity()) - balloon_alert(mod.wearer, "no gravity!") + balloon_alert(activator, "no gravity!") return FALSE return ..() -/obj/item/mod/module/sphere_transform/on_activation() +/obj/item/mod/module/sphere_transform/on_activation(mob/activator) playsound(src, 'sound/items/modsuit/ballin.ogg', 100, TRUE) mod.wearer.add_filter("mod_ball", 1, alpha_mask_filter(icon = icon('icons/mob/clothing/modsuit/mod_modules.dmi', "ball_mask"), flags = MASK_INVERSE)) mod.wearer.add_filter("mod_blur", 2, angular_blur_filter(size = 15)) @@ -503,7 +515,7 @@ mod.wearer.add_movespeed_modifier(/datum/movespeed_modifier/sphere) RegisterSignal(mod.wearer, COMSIG_MOB_STATCHANGE, PROC_REF(on_statchange)) -/obj/item/mod/module/sphere_transform/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/sphere_transform/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) if(!deleting) playsound(src, 'sound/items/modsuit/ballin.ogg', 100, TRUE, frequency = -1) mod.wearer.remove_offsets(REF(src)) @@ -516,9 +528,9 @@ mod.wearer.remove_movespeed_modifier(/datum/movespeed_modifier/sphere) UnregisterSignal(mod.wearer, COMSIG_MOB_STATCHANGE) -/obj/item/mod/module/sphere_transform/used() +/obj/item/mod/module/sphere_transform/used(mob/activator) if(!lavaland_equipment_pressure_check(get_turf(src))) - balloon_alert(mod.wearer, "too much pressure!") + balloon_alert(activator, "too much pressure!") playsound(src, 'sound/items/weapons/gun/general/dry_fire.ogg', 25, TRUE) return FALSE return ..() diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm index 701cbc304210..0a18a5598302 100644 --- a/code/modules/mod/modules/modules_timeline.dm +++ b/code/modules/mod/modules/modules_timeline.dm @@ -29,9 +29,10 @@ UnregisterSignal(mod, COMSIG_MOD_ACTIVATE) UnregisterSignal(mod, COMSIG_MOD_MODULE_REMOVAL) -/obj/item/mod/module/eradication_lock/on_use() +/obj/item/mod/module/eradication_lock/on_use(mob/activator) true_owner_ckey = mod.wearer.ckey - balloon_alert(mod.wearer, "user remembered") + balloon_alert(activator, "user remembered") + playsound(src, 'sound/items/pshoom/pshoom.ogg', 25, TRUE) drain_power(use_energy_cost) ///Signal fired when the modsuit tries activating @@ -66,8 +67,8 @@ cooldown_time = 20 SECONDS required_slots = list(ITEM_SLOT_BACK) -/obj/item/mod/module/rewinder/on_use() - balloon_alert(mod.wearer, "anchor point set") +/obj/item/mod/module/rewinder/on_use(mob/activator) + balloon_alert(activator, "anchor point set") playsound(src, 'sound/items/modsuit/time_anchor_set.ogg', 50, TRUE) //stops all mods from triggering during rewinding for(var/obj/item/mod/module/module as anything in mod.modules) @@ -110,13 +111,13 @@ ///The current timestop in progress. var/obj/effect/timestop/channelled/timestop -/obj/item/mod/module/timestopper/used() +/obj/item/mod/module/timestopper/used(mob/activator) if(timestop) - mod.balloon_alert(mod.wearer, "already freezing time!") + mod.balloon_alert(activator, "already freezing time!") return FALSE return ..() -/obj/item/mod/module/timestopper/on_use() +/obj/item/mod/module/timestopper/on_use(mob/activator) //stops all mods from triggering during timestop- including timestop itself for(var/obj/item/mod/module/module as anything in mod.modules) RegisterSignal(module, COMSIG_MODULE_TRIGGERED, PROC_REF(on_module_triggered)) @@ -159,14 +160,14 @@ ///The dummy for phasing from this module, the wearer is phased out while this exists. var/obj/effect/dummy/phased_mob/chrono/phased_mob -/obj/item/mod/module/timeline_jumper/used() +/obj/item/mod/module/timeline_jumper/used(mob/activator) var/area/noteleport_check = get_area(mod.wearer) if(noteleport_check && !check_teleport_valid(mod.wearer, get_turf(mod.wearer))) - to_chat(mod.wearer, span_danger("Some dull, universal force is between you and the [phased_mob ? "current timeline" : "stream between timelines"].")) + to_chat(activator, span_danger("Some dull, universal force is between you and the [phased_mob ? "current timeline" : "stream between timelines"].")) return FALSE return ..() -/obj/item/mod/module/timeline_jumper/on_use() +/obj/item/mod/module/timeline_jumper/on_use(mob/activator) if(!phased_mob) //phasing out mod.visible_message(span_warning("[mod.wearer] leaps out of the timeline!")) diff --git a/code/modules/mod/modules/modules_visor.dm b/code/modules/mod/modules/modules_visor.dm index 7897ac404f27..c865cc3e6703 100644 --- a/code/modules/mod/modules/modules_visor.dm +++ b/code/modules/mod/modules/modules_visor.dm @@ -12,12 +12,12 @@ /// The traits given by the visor. var/list/visor_traits = list() -/obj/item/mod/module/visor/on_activation() +/obj/item/mod/module/visor/on_activation(mob/activator) if(length(visor_traits)) mod.wearer.add_traits(visor_traits, REF(src)) mod.wearer.update_sight() -/obj/item/mod/module/visor/on_deactivation(display_message = TRUE, deleting = FALSE) +/obj/item/mod/module/visor/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) if(length(visor_traits)) mod.wearer.remove_traits(visor_traits, REF(src)) mod.wearer.update_sight() @@ -91,10 +91,10 @@ incompatible_modules = list(/obj/item/mod/module/night, /obj/item/mod/module/visor/night) required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK) -/obj/item/mod/module/night/on_activation() - ADD_TRAIT(mod.wearer, TRAIT_TRUE_NIGHT_VISION, REF(src)) +/obj/item/mod/module/night/on_activation(mob/activator) + mod.wearer.add_traits(mod.wearer, TRAIT_TRUE_NIGHT_VISION, REF(src)) mod.wearer.update_sight() -/obj/item/mod/module/night/on_deactivation(display_message = TRUE, deleting = FALSE) - REMOVE_TRAIT(mod.wearer, TRAIT_TRUE_NIGHT_VISION, REF(src)) +/obj/item/mod/module/night/on_deactivation(mob/activator, display_message = TRUE, deleting = FALSE) + mod.wearer.remove_traits(mod.wearer, TRAIT_TRUE_NIGHT_VISION, REF(src)) mod.wearer.update_sight() diff --git a/code/modules/modular_computers/file_system/programs/maintenance/themes.dm b/code/modules/modular_computers/file_system/programs/maintenance/themes.dm index 26717e33d3a6..e3dca731d3a0 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/themes.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/themes.dm @@ -35,10 +35,19 @@ qdel(src) /datum/computer_file/program/maintenance/theme/cat - theme_name = CAT_THEME_NAME + theme_name = PDA_THEME_CAT_NAME /datum/computer_file/program/maintenance/theme/lightmode - theme_name = LIGHT_THEME_NAME + theme_name = PDA_THEME_LIGHT_MODE_NAME /datum/computer_file/program/maintenance/theme/spooky - theme_name = ELDRITCH_THEME_NAME + theme_name = PDA_THEME_SPOOKY_NAME + +/datum/computer_file/program/maintenance/theme/hacker + theme_name = PDA_THEME_HACKERMAN_NAME + +/datum/computer_file/program/maintenance/theme/roulette + theme_name = PDA_THEME_ROULETTE_NAME + +/datum/computer_file/program/maintenance/theme/alien + theme_name = PDA_THEME_ABDUCTOR_NAME diff --git a/code/modules/modular_computers/file_system/programs/theme_selector.dm b/code/modules/modular_computers/file_system/programs/theme_selector.dm index 6190f9b15aba..3d3f5a6a3cbb 100644 --- a/code/modules/modular_computers/file_system/programs/theme_selector.dm +++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm @@ -16,7 +16,7 @@ var/list/data = list() if(computer.obj_flags & EMAGGED) - data["themes"] += list(list("theme_name" = SYNDICATE_THEME_NAME, "theme_ref" = GLOB.pda_name_to_theme[SYNDICATE_THEME_NAME])) + data["themes"] += list(list("theme_name" = PDA_THEME_SYNDICATE_NAME, "theme_ref" = GLOB.pda_name_to_theme[PDA_THEME_SYNDICATE_NAME])) for(var/theme_key in GLOB.default_pda_themes + imported_themes) data["themes"] += list(list("theme_name" = theme_key, "theme_ref" = GLOB.pda_name_to_theme[theme_key])) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 258ae40a15e5..11f55c54a4d1 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -61,6 +61,9 @@ if(IS_WRITING_UTENSIL(held_item)) context[SCREENTIP_CONTEXT_LMB] = "Rename" return CONTEXTUAL_SCREENTIP_SET + if((held_item.tool_behaviour == TOOL_KNIFE || held_item.tool_behaviour == TOOL_WIRECUTTER) && !contents.len) + context[SCREENTIP_CONTEXT_LMB] = "Cut apart" + return CONTEXTUAL_SCREENTIP_SET return NONE /obj/item/folder/proc/remove_item(obj/item/Item, mob/user) @@ -93,6 +96,8 @@ return insertables_act(user, tool) if(IS_WRITING_UTENSIL(tool)) return writing_utensil_act(user, tool) + if(tool.tool_behaviour == TOOL_KNIFE || tool.tool_behaviour == TOOL_WIRECUTTER) + return sharp_thing_act(user, tool) return NONE /obj/item/folder/proc/insertables_act(mob/living/user, obj/item/tool) @@ -116,6 +121,16 @@ playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) return ITEM_INTERACT_SUCCESS +/obj/item/folder/proc/sharp_thing_act(mob/user, obj/item/sharp_tool) + if(contents.len) + balloon_alert(user, "empty [src] first!") + return ITEM_INTERACT_BLOCKING + + balloon_alert(user, "cut apart") + qdel(src) + user.put_in_hands(new /obj/item/stack/sheet/cardboard) + return ITEM_INTERACT_SUCCESS + /obj/item/folder/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(is_type_in_typecache(interacting_with, folder_insertables)) return interact_with_insertables(interacting_with, user) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 1801a23b1554..2c0cac37b40e 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -892,6 +892,12 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) charges = 200 max_charges = 200 +/obj/item/toner/infinite + name = "infinite toner cartridge" + desc = "...are you satisfied now?" + charges = INFINITY + max_charges = INFINITY + #undef PHOTOCOPIER_FEE #undef BLANKS_FILE_NAME #undef PAPER_PAPER_USE diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index c55c038de299..9ef40666fc35 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -315,8 +315,9 @@ qdel(clone_area) get_icon.Blend("#000", ICON_UNDERLAY) for(var/mob/living/carbon/human/person in mobs) - if(person.is_face_visible()) - names += "[person.name]" + if(person.obscured_slots & HIDEFACE) + continue + names += "[person.name]" var/datum/picture/picture = new("picture", desc.Join("
    "), mobs_spotted, dead_spotted, names, get_icon, null, psize_x, psize_y, blueprints, can_see_ghosts = see_ghosts) after_picture(user, picture) diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 450746c71a22..9c76e499a607 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -53,7 +53,7 @@ if(!seen) P.mobs_seen -= seen_ref continue - if(!isobserver(seen) && !isspirit(seen)) + if(!isobserver(seen) && !isghostspecies(seen)) continue set_custom_materials(list(/datum/material/hauntium =SHEET_MATERIAL_AMOUNT)) grind_results = list(/datum/reagent/hauntium = 20) diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index 1627b667f1a1..84e51918dc8c 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -98,7 +98,9 @@ /obj/machinery/plumbing/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced) user.balloon_alert_to_viewers("furiously plunging...") - if(do_after(user, 3 SECONDS, target = src)) - user.balloon_alert_to_viewers("finished plunging") - reagents.expose(get_turf(src), TOUCH) //splash on the floor - reagents.clear_reagents() + if(!do_after(user, 3 SECONDS, target = src)) + return TRUE + user.balloon_alert_to_viewers("finished plunging") + reagents.expose(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + return TRUE diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index a2e3f905d1fa..0fef34ef4ca0 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -22,10 +22,12 @@ /obj/machinery/iv_drip/plumbing/plunger_act(obj/item/plunger/attacking_plunger, mob/living/user, reinforced) user.balloon_alert_to_viewers("furiously plunging...", "plunging iv drip...") - if(do_after(user, 3 SECONDS, target = src)) - user.balloon_alert_to_viewers("finished plunging") - reagents.expose(get_turf(src), TOUCH) //splash on the floor - reagents.clear_reagents() + if(!do_after(user, 3 SECONDS, target = src)) + return TRUE + user.balloon_alert_to_viewers("finished plunging") + reagents.expose(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + return TRUE /obj/machinery/iv_drip/plumbing/wrench_act(mob/living/user, obj/item/tool) if(default_unfasten_wrench(user, tool) != SUCCESSFUL_UNFASTEN) diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index ca0336de3d81..4bd9321d2a86 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -53,6 +53,7 @@ packaging_types += list(category_item) packaging_type = GLOB.reagent_containers[CAT_PILLS][1] + packaging_category = CAT_PILLS max_volume = initial(packaging_type.volume) current_volume = clamp(current_volume, MIN_VOLUME, max_volume) @@ -77,11 +78,11 @@ var/suffix switch(packaging_category) if(CAT_PILLS) - suffix = "Pill" + suffix = "pill" if(CAT_PATCHES) - suffix = "Patch" + suffix = "patch" else - suffix = "Bottle" + suffix = "bottle" container.name = "[product_name] [suffix]" reagents.trans_to(container, current_volume) if (istype(container, /obj/item/reagent_containers/applicator/pill)) diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 92ccd59f8c6b..dbdf8325db43 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -590,15 +590,14 @@ force_update = TRUE return - if(obj_flags & EMAGGED || malfai) + if((obj_flags & EMAGGED) || malfai) hacked_flicker_counter = hacked_flicker_counter - 1 if(hacked_flicker_counter <= 0) flicker_hacked_icon() - if(COOLDOWN_FINISHED(src, malf_ai_pt_generation) && cell.use(60 KILO JOULES)>0 && malfai.malf_picker.processing_time 0 && malfai.malf_picker.processing_time < MALF_MAX_PP) // Over time generation of malf points for the ai controlling it, costs a bit of power + COOLDOWN_START(src, malf_ai_pt_generation, 30 SECONDS) + malfai.malf_picker.processing_time += 1 //dont use any power from that channel if we shut that power channel off if(operating) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index eafe8e35027d..4c9665ce10e2 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -16,6 +16,7 @@ throwforce = 5 throw_speed = 2 throw_range = 5 + emp_damage_modifier = 1 w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) @@ -53,6 +54,7 @@ desc = "A power cell with a slightly higher capacity than normal!" icon_state = "9v_cell" maxcharge = STANDARD_CELL_CHARGE * 2.5 + custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) chargerate = STANDARD_CELL_RATE * 0.5 @@ -83,6 +85,7 @@ /obj/item/stock_parts/power_store/cell/pulse //200 pulse shots name = "pulse rifle power cell" + emp_damage_modifier = 0.5 maxcharge = STANDARD_CELL_CHARGE * 40 chargerate = STANDARD_CELL_RATE * 0.75 @@ -97,6 +100,7 @@ /obj/item/stock_parts/power_store/cell/ninja name = "black power cell" icon_state = "bscell" + emp_damage_modifier = 3 maxcharge = STANDARD_CELL_CHARGE * 10 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6) chargerate = STANDARD_CELL_RATE @@ -104,10 +108,11 @@ /obj/item/stock_parts/power_store/cell/high name = "high-capacity power cell" icon_state = "hcell" + emp_damage_modifier = 3 maxcharge = STANDARD_CELL_CHARGE * 10 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6) chargerate = STANDARD_CELL_RATE * 0.75 - + /obj/item/stock_parts/power_store/cell/high/empty empty = TRUE @@ -115,6 +120,7 @@ /obj/item/stock_parts/power_store/cell/super name = "super-capacity power cell" icon_state = "scell" + emp_damage_modifier = 5 maxcharge = STANDARD_CELL_CHARGE * 20 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 3) chargerate = STANDARD_CELL_RATE @@ -125,6 +131,7 @@ /obj/item/stock_parts/power_store/cell/hyper name = "hyper-capacity power cell" icon_state = "hpcell" + emp_damage_modifier = 5 maxcharge = STANDARD_CELL_CHARGE * 30 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 4) chargerate = STANDARD_CELL_RATE * 1.5 @@ -136,6 +143,7 @@ name = "bluespace power cell" desc = "A rechargeable transdimensional power cell." icon_state = "bscell" + emp_damage_modifier = 5 maxcharge = STANDARD_CELL_CHARGE * 40 custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*6) chargerate = STANDARD_CELL_RATE * 2 @@ -146,6 +154,7 @@ /obj/item/stock_parts/power_store/cell/infinite name = "infinite-capacity power cell" icon_state = "icell" + emp_damage_modifier = 0 maxcharge = INFINITY //little disappointing if you examine it and it's not huge custom_materials = list(/datum/material/glass=HALF_SHEET_MATERIAL_AMOUNT) chargerate = INFINITY @@ -172,6 +181,7 @@ icon = 'icons/obj/service/hydroponics/harvest.dmi' icon_state = "potato" maxcharge = STANDARD_CELL_CHARGE * 0.3 + emp_damage_modifier = 0.5 //It's biological, so charge_light_type = null connector_type = null custom_materials = null @@ -185,6 +195,7 @@ /obj/item/stock_parts/power_store/cell/emproof name = "\improper EMP-proof cell" desc = "An EMP-proof cell." + emp_damage_modifier = 0 maxcharge = STANDARD_CELL_CHARGE * 0.5 /obj/item/stock_parts/power_store/cell/emproof/Initialize(mapload) @@ -242,6 +253,7 @@ connector_type = null custom_materials = null grind_results = null + emp_damage_modifier = 0 /obj/item/stock_parts/power_store/cell/ethereal/examine(mob/user) . = ..() diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index 3491c23e2c07..f54cbbefce9a 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -388,7 +388,7 @@ return // attempt to stick weapon into light socket - if(status != LIGHT_EMPTY) + if(status != LIGHT_EMPTY || user.combat_mode) return ..() if(tool.tool_behaviour == TOOL_SCREWDRIVER) //If it's a screwdriver open it. tool.play_tool_sound(src, 75) diff --git a/code/modules/power/power_store.dm b/code/modules/power/power_store.dm index c03b5b9590c6..7e4852f84598 100644 --- a/code/modules/power/power_store.dm +++ b/code/modules/power/power_store.dm @@ -34,6 +34,8 @@ var/connector_type = "standard" ///Does the cell start without any charge? var/empty = FALSE + // Damage multiplier the cells take from emps to prevent stuff like bluespace cells taking 40 shots to drain. + var/emp_damage_modifier = 1 /obj/item/stock_parts/power_store/get_cell() return src @@ -239,7 +241,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - use(STANDARD_CELL_CHARGE / severity, force = TRUE) + use((STANDARD_CELL_CHARGE /severity) * emp_damage_modifier , force = TRUE) /obj/item/stock_parts/power_store/ex_act(severity, target) . = ..() diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 04d139ca3751..1168a2b3814f 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -36,7 +36,7 @@ select_name = "kill" /obj/item/ammo_casing/energy/laser/hos - e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE * 1.2) + e_cost = LASER_SHOTS(12, STANDARD_CELL_CHARGE * 1.2) /obj/item/ammo_casing/energy/laser/musket projectile_type = /obj/projectile/beam/laser/musket diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm index f68879fc7577..840244a3d671 100644 --- a/code/modules/projectiles/ammunition/energy/plasma.dm +++ b/code/modules/projectiles/ammunition/energy/plasma.dm @@ -9,3 +9,4 @@ projectile_type = /obj/projectile/plasma/adv delay = 10 e_cost = LASER_SHOTS(100, STANDARD_CELL_CHARGE) + diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 4194badcc0e3..f708ec04f6cd 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -3,6 +3,7 @@ name = "ammo box (null_reference_exception)" desc = "A box of ammo." icon = 'icons/obj/weapons/guns/ammo.dmi' + abstract_type = /obj/item/ammo_box obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT inhand_icon_state = "syringe_kit" @@ -258,6 +259,7 @@ /obj/item/ammo_box/magazine name = "A magazine (what?)" desc = "A magazine of rounds, they look like error signs... this should probably be reported somewhere." + abstract_type = /obj/item/ammo_box/magazine ammo_box_multiload = AMMO_BOX_MULTILOAD_IN // so you can't use a magazine like a bootleg speedloader drop_sound = 'sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg' pickup_sound = 'sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg' diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm index ff45d604ebc4..1db22717181b 100644 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ b/code/modules/projectiles/boxes_magazines/external/toy.dm @@ -1,6 +1,7 @@ /obj/item/ammo_box/magazine/toy name = "foam force META magazine" desc = "A magazine specifically designed for foam force \"firearms\". Probably not great for actually killing your fellow spaceman." + abstract_type = /obj/item/ammo_box/magazine/toy ammo_type = /obj/item/ammo_casing/foam_dart caliber = CALIBER_FOAM diff --git a/code/modules/projectiles/boxes_magazines/internal/_internal.dm b/code/modules/projectiles/boxes_magazines/internal/_internal.dm index 0579d19234b6..43b34979e44d 100644 --- a/code/modules/projectiles/boxes_magazines/internal/_internal.dm +++ b/code/modules/projectiles/boxes_magazines/internal/_internal.dm @@ -1,5 +1,7 @@ /obj/item/ammo_box/magazine/internal desc = "Oh god, this shouldn't be here" + abstract_type = /obj/item/ammo_box/magazine/internal + spawn_blacklisted = TRUE obj_flags = CONDUCTS_ELECTRICITY item_flags = ABSTRACT diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 38f1b6d944b9..c33d36dd5893 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -9,6 +9,7 @@ icon_state = "revolver" inhand_icon_state = "gun" worn_icon_state = "gun" + abstract_type = /obj/item/gun obj_flags = CONDUCTS_ELECTRICITY appearance_flags = TILE_BOUND|PIXEL_SCALE|LONG_GLIDE|KEEP_TOGETHER slot_flags = ITEM_SLOT_BELT diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index c963f524c3bf..1c639ab90262 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -1,9 +1,10 @@ ///Subtype for any kind of ballistic gun ///This has a shitload of vars on it, and I'm sorry for that, but it does make making new subtypes really easy /obj/item/gun/ballistic - desc = "Now comes in flavors like GUN. Uses 10mm ammo, for some reason." name = "projectile gun" + desc = "Now comes in flavors like GUN. Uses 10mm ammo, for some reason." icon_state = "debug" + abstract_type = /obj/item/gun/ballistic w_class = WEIGHT_CLASS_NORMAL pickup_sound = 'sound/items/handling/gun/gun_pick_up.ogg' drop_sound = 'sound/items/handling/gun/gun_drop.ogg' diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 426d8ef0a608..a404221fb1d8 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -1,4 +1,5 @@ /obj/item/gun/ballistic/automatic + abstract_type = /obj/item/gun/ballistic/automatic w_class = WEIGHT_CLASS_NORMAL can_suppress = TRUE burst_size = 3 diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm index a952c645b9e1..96459341cf36 100644 --- a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm +++ b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm @@ -142,18 +142,20 @@ icon_state = "plastic_arrow_projectile" /// special pyre sect arrow -/// in the future, this needs a special sprite, but bows don't support non-hardcoded arrow sprites /obj/item/ammo_casing/arrow/holy/blazing name = "blazing star arrow" desc = "A holy diver seeking its target, blessed with fire. Will ignite on hit, destroying the arrow. But if you hit an already ignited target...?" + icon_state = "flaming_arrow" + inhand_icon_state = "flaming_arrow" + base_icon_state = "flaming_arrow" projectile_type = /obj/projectile/bullet/arrow/blazing reusable = FALSE /obj/projectile/bullet/arrow/blazing name = "blazing arrow" desc = "THE UNMATCHED POWER OF THE SUN" - icon_state = "holy_arrow_projectile" - damage = 20 + icon_state = "flaming_arrow_projectile" + damage_type = BURN embed_type = null /obj/projectile/bullet/arrow/blazing/on_hit(atom/target, blocked, pierce_hit) @@ -168,3 +170,22 @@ return to_chat(human_target, span_danger("[src] reacts with the flames enveloping you! Oh shit!")) explosion(src, light_impact_range = 1, flame_range = 2) //ow + +/// Ashen arrows +/obj/item/ammo_casing/arrow/ashen + name = "ashen arrow" + desc = "An arrow made from watcher sinew and bone. Seems unusually lethal against the creatures it is made from." + icon_state = "ashen_arrow" + inhand_icon_state = "ashen_arrow" + base_icon_state = "ashen_arrow" + projectile_type = /obj/projectile/bullet/arrow/ashen + +/// ashen arrow projectile +/obj/projectile/bullet/arrow/ashen + name = "ashen arrow" + icon_state = "ashen_arrow_projectile" + +/obj/projectile/bullet/arrow/ashen/Initialize(mapload) + . = ..() + AddElement(/datum/element/bane, mob_biotypes = MOB_MINING, damage_multiplier = 0, added_damage = 40) + diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_types.dm b/code/modules/projectiles/guns/ballistic/bows/bow_types.dm index a857a69c4398..ee8f6ed305de 100644 --- a/code/modules/projectiles/guns/ballistic/bows/bow_types.dm +++ b/code/modules/projectiles/guns/ballistic/bows/bow_types.dm @@ -8,7 +8,8 @@ /obj/item/gun/ballistic/bow/shortbow name = "shortbow" desc = "A simple homemade shortbow. Great for LARPing. Or poking out someones eye." - projectile_damage_multiplier = 0.36 + obj_flags = UNIQUE_RENAME + projectile_damage_multiplier = 0.5 ///chaplain's divine archer bow /obj/item/gun/ballistic/bow/divine @@ -21,7 +22,8 @@ slot_flags = ITEM_SLOT_BACK obj_flags = UNIQUE_RENAME accepted_magazine_type = /obj/item/ammo_box/magazine/internal/bow/holy - projectile_damage_multiplier = 0.4 + projectile_damage_multiplier = 0.6 + projectile_speed_multiplier = 1.5 /obj/item/ammo_box/magazine/internal/bow/holy name = "divine bowstring" @@ -52,3 +54,14 @@ /obj/item/gun/ballistic/bow/divine/with_quiver/Initialize(mapload) . = ..() new /obj/item/storage/bag/quiver/holy(loc) + +/// Ashen bow, crafted from watcher sinew and animal bones. +/obj/item/gun/ballistic/bow/ashenbow + name = "ashen bow" + desc = "A bow made from watcher sinew and bone. Seems to possess an almost eerie radiance about it." + inhand_icon_state = "ashenbow" + base_icon_state = "ashenbow" + worn_icon_state = "ashenbow" + slot_flags = ITEM_SLOT_BACK + obj_flags = UNIQUE_RENAME + projectile_damage_multiplier = 0.5 diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index a9e1cb184a74..2a3d22e00644 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -22,6 +22,7 @@ /obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel name = "underbarrel grenade launcher" + spawn_blacklisted = TRUE pin = null /obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel/Initialize(mapload) diff --git a/code/modules/projectiles/guns/energy/crank_guns.dm b/code/modules/projectiles/guns/energy/crank_guns.dm index 32aa65827cfb..05139823fae2 100644 --- a/code/modules/projectiles/guns/energy/crank_guns.dm +++ b/code/modules/projectiles/guns/energy/crank_guns.dm @@ -44,6 +44,7 @@ shaded_charge = 1 charge_sections = 1 spread = 22.5 + obj_flags = UNIQUE_RENAME /obj/item/gun/energy/disabler/smoothbore/Initialize(mapload) . = ..() diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 32c174881587..670f0b0c3703 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -99,6 +99,7 @@ slowdown = 1 slot_flags = null w_class = WEIGHT_CLASS_HUGE + spawn_blacklisted = TRUE custom_materials = null weapon_weight = WEAPON_HEAVY ammo_type = list(/obj/item/ammo_casing/energy/laser/minigun) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 3bd0429db4be..b613e641a352 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -8,6 +8,7 @@ name = "projectile" icon = 'icons/obj/weapons/guns/projectiles.dmi' icon_state = "bullet" + abstract_type = /obj/projectile density = FALSE anchored = TRUE mouse_opacity = MOUSE_OPACITY_TRANSPARENT diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm index 7da09b567299..adba89e4d889 100644 --- a/code/modules/projectiles/projectile/special/plasma.dm +++ b/code/modules/projectiles/projectile/special/plasma.dm @@ -38,3 +38,4 @@ damage = 24 range = 7 pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index 3099051c1065..c57532b5ae69 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -495,10 +495,9 @@ if(!iscarbon(exposed_mob)) return var/mob/living/carbon/carbies = exposed_mob - if(carbies.stat == DEAD) - show_message = 0 if(!(methods & (PATCH|TOUCH|VAPOR))) return + var/current_bruteloss = carbies.getBruteLoss() // because this will be changed after calling adjustBruteLoss() var/current_fireloss = carbies.getFireLoss() // because this will be changed after calling adjustFireLoss() var/touch_protection_interference = (1 - touch_protection) @@ -514,7 +513,8 @@ if(need_mob_update) carbies.updatehealth() - if(show_message) + + if(show_message && carbies.stat != DEAD) to_chat(carbies, span_danger("You feel your burns and bruises healing! It stings like hell!")) carbies.add_mood_event("painful_medicine", /datum/mood_event/painful_medicine) @@ -525,10 +525,12 @@ //don't try to unhusk mobs above burn damage threshold if (carbies.getFireLoss() > UNHUSK_DAMAGE_THRESHOLD * 2.5) - carbies.visible_message(span_minoralert("The liquid fails to properly stick on [carbies]. [carbies]'s burns need to be repaired first!")) + if (show_message) + carbies.visible_message(span_minoralert("The liquid fails to properly stick on [carbies]. [carbies]'s burns need to be repaired first!")) return else if (carbies.getFireLoss() > UNHUSK_DAMAGE_THRESHOLD) - carbies.visible_message(span_boldnotice("A rubbery liquid partially coats [carbies]'s burns... It seems more is required to fully unhusk!")) + if (show_message) + carbies.visible_message(span_boldnotice("A rubbery liquid partially coats [carbies]'s burns... It seems more is required to fully unhusk!")) return var/datum/reagent/synthflesh = carbies.reagents.has_reagent(/datum/reagent/medicine/c2/synthflesh) @@ -545,7 +547,7 @@ carbies.reagents.remove_reagent(/datum/reagent/medicine/c2/synthflesh, current_volume) // consume the synthflesh, it won't do anything in their blood //we're avoiding using the phrases "burnt flesh" and "burnt skin" here because carbies could be a skeleton or a golem or something carbies.visible_message(span_nicegreen("A rubbery liquid coats [carbies]'s burns. [carbies] looks a lot healthier!")) - else + else if (show_message) carbies.visible_message(span_boldnotice("A rubbery liquid partially coats [carbies]'s burns... It seems more is required to fully unhusk!")) /******ORGAN HEALING******/ diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index b7cda4cd113d..faaf11a32e16 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -2894,6 +2894,156 @@ quality = DRINK_VERYGOOD taste_description = "the aloha state" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/boston_sour + name = "Boston Sour" + description = "Whiskey sour texturally elevated by an egg white." + boozepwr = 35 + color = "#ddc28b" + quality = DRINK_VERYGOOD + taste_description = "foamy lemony sourness" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/star + name = "Star" + description = "A blend of applejack and vermouth accented with bitters." + boozepwr = 40 + color = "#e5a654" + quality = DRINK_GOOD + taste_description = "vinous apples" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/old_fashioned + name = "Old Fashioned" + description = "By some measures the first cocktail, made by flavoring a hard spirit with sugar and bitters, with the spirit in question most often being whiskey in modern times." + boozepwr = 60 + color = "#b4a287" + quality = DRINK_GOOD + taste_description = "rounded out whiskey" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_EASY + +/datum/reagent/consumable/ethanol/sazerac + name = "Sazerac" + description = "Whiskey made aromatic by absinthe and creole bitters." + boozepwr = 65 + color = "#f43f69" + quality = DRINK_GOOD + taste_description = "flowery anise-scented whiskey" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/amaretto_sour + name = "Amaretto Sour" + description = "A sour made with sweet amaretto." + boozepwr = 15 + color = "#ddc28b" + quality = DRINK_VERYGOOD + taste_description = "foamy lemony sweetness" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_MEDIUM + +/datum/reagent/consumable/ethanol/ramos_gin_fizz + name = "Ramos Gin Fizz" + description = "A complex twist on the concept of a gin fizz, adding cream and egg white along side lemon juice for an incomparable textural experience. In this version, the drink's signature usage of orange blossom water is replaced with a drop of orange liqueur." + boozepwr = 35 + color = "#f9e7c2" + quality = DRINK_FANTASTIC + taste_description = "creamy fluffy citrusy gin" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/french_75 + name = "French 75" + description = "A sophisticated cocktail made by strengthening champagne with gin, then flavoring with lemon juice and sugar." + boozepwr = 30 + color = "#ffffc1" + quality = DRINK_GOOD + taste_description = "glory and gunnery" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_MEDIUM + +/datum/reagent/consumable/ethanol/sangria + name = "Sangria" + description = "A blood-red wine punch strengthened with liquor and sweetened with as much chopped fruit as one can get their hands on." + boozepwr = 20 + color = "#c4383b" + quality = DRINK_GOOD + taste_description = "refreshing fruity wine" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/suffering_bastard + name = "Suffering Bastard" + description = "A tiki style hangover cure made from ginger beer, spirits, and bitters." + boozepwr = 20 + color = "#e8ca78" + quality = DRINK_VERYGOOD + taste_description = "ginger-flavored recuperation" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/suffering_bastard/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.apply_status_effect(/datum/status_effect/headache_soothed) //prevents headaches + affected_mob.adjust_disgust(-5 * REM * seconds_per_tick) //removes disgust, same with sol dry + if(affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.5 * REM * seconds_per_tick * normalise_creation_purity(), required_organ_flag = affected_organ_flags)) //heals brain damage very slowly, about 12 damage per 5u + return UPDATE_MOB_HEALTH + +/datum/reagent/consumable/ethanol/blue_blazer + name = "Blue Blazer" + description = "The signature drink of a legendary bartender from the 19th century. While remembered for how he innovated the art of bartending, at the end of the day this drink is really just warmed and sweetened whiskey." + boozepwr = 25 + color = "#b5949b" + quality = DRINK_NICE + taste_description = "scorched sweet whiskey" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/blue_blazer/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(25 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) + +/datum/reagent/consumable/ethanol/hot_toddy + name = "Hot Toddy" + description = "A warmed blend of spirits, sugar, and spices. While the concept is ancient, this preparation with cognac and refined sugar is a bit more modern." + boozepwr = 25 + color = "#f2d2b4" + quality = DRINK_GOOD + taste_description = "the warmth of a comfy fireplace" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_MEDIUM + +/datum/reagent/consumable/ethanol/hot_toddy/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(25 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) + +/datum/reagent/consumable/ethanol/tizirian_sour + name = "Tizirian Sour" + description = "A twist on a trinidad sour, using korta nectar in place of orgeat. Despite the name, it was invented by a martian barkeep." + boozepwr = 35 + color = "#9b4b3a" + quality = DRINK_VERYGOOD + taste_description = "sweetened and spiced bitterness" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/daiquiri + name = "Daiquiri" + description = "In some ways the ultimate tropical cocktail, very few rum drinks are not in some way a descendant of this classic." + boozepwr = 35 + color = "#b6d3a6ff" + quality = DRINK_NICE + taste_description = "crisp lime" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/flip_cocktail + name = "Flip Cocktail" + description = "A simplified and modernized adaptation of a much older drink that predates the Cocktail. While the older version used ale and was heated before it was drunk, this version is chilled. Really, the main similarity is the use of a whole egg." + boozepwr = 30 + color = "#dddfcaff" + quality = DRINK_GOOD + taste_description = "creamy brandy and nutmeg" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/flip_cocktail/on_mob_metabolize(mob/living/drinker) + . = ..() + if(prob(10)) + drinker.emote("flip") #undef ALCOHOL_EXPONENT #undef ALCOHOL_THRESHOLD_MODIFIER diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 1b13ee77cca8..f8aa1c37d39f 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -1366,3 +1366,16 @@ name = "Fruit Punishment" desc = "The unbearable sweetness of the fruit punch is too much to bear without the soothing aura of a liquid cooler! Your body is going into shock!" icon_state = "punch_punishment" + +/datum/reagent/consumable/ethanol/bitters_soda + name = "Bitters and Soda" + description = "A simple beverage of soda water flavored with aromatic bitters. Soothes upset stomachs." + boozepwr = 0 + color = "#f1c1b3" + quality = DRINK_NICE + taste_description = "mild aromatics" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/consumable/ethanol/bitters_soda/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_disgust(-5 * REM * seconds_per_tick) diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm index 87e75346f843..66199848220a 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_alcohol.dm @@ -1030,6 +1030,105 @@ icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "blue_hawaiian" +/datum/glass_style/drinking_glass/boston_sour + required_drink_type = /datum/reagent/consumable/ethanol/boston_sour + name = "Boston Sour" + desc = "A classic twist upon a whiskey sour that uses an egg white to provide texture and structure. Despite what some say, the egg white is not sterilized by the alcohol of the whiskey, but if the eggs are handled properly it's probably fine..." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "boston_sour" + +/datum/glass_style/drinking_glass/star + required_drink_type = /datum/reagent/consumable/ethanol/star + name = "Star" + desc = "This cocktail takes rustic applejack and refines it with sweet vermouth. As comfortable out in the orchard as it is within the estate." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "star" + +/datum/glass_style/drinking_glass/old_fashioned + required_drink_type = /datum/reagent/consumable/ethanol/old_fashioned + name = "Old Fashioned" + desc = "The original Cocktail... With some added anachronisms." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "old_fashioned" + +/datum/glass_style/drinking_glass/sazerac + required_drink_type = /datum/reagent/consumable/ethanol/sazerac + name = "Sazerac" + desc = "A classic cocktail from New Orleans, this drink uses creole style bitters and an absinthe rinse of the serving glass to impart a delightful anise scent." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sazerac" + +/datum/glass_style/drinking_glass/amaretto_sour + required_drink_type = /datum/reagent/consumable/ethanol/amaretto_sour + name = "Amaretto Sour" + desc = "This sweet play on the sour formula has gained popularity among tizirian audiences due to it's nutty-eggy nature. It's still perfectly suited to most anyone's palette, as long as they're not vegan." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "amaretto_sour" + +/datum/glass_style/drinking_glass/ramos_gin_fizz + required_drink_type = /datum/reagent/consumable/ethanol/ramos_gin_fizz + name = "Ramos Gin Fizz" + desc = "This cocktail commits the heresy of combining citrus and cream, but with proper technique avoids curdling and creates a beautifully textural head of foam. Famously delicious, famously innovative, famously annoying to make." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "ramos_gin_fizz" + +/datum/glass_style/drinking_glass/french_75 + required_drink_type = /datum/reagent/consumable/ethanol/french_75 + name = "French 75" + desc = "Named after a field artillery piece used by french forces in the early 20th century, this classy champagne cocktail has changed many times throughout history, although it's ability to evoke victory has remained constant." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "french_75" + +/datum/glass_style/drinking_glass/sangria + required_drink_type = /datum/reagent/consumable/ethanol/sangria + name = "Sangria" + desc = "A wine punch for hot summer days. No bloodletting is involved in it's creation, one hopes." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "sangria" + +/datum/glass_style/drinking_glass/suffering_bastard + required_drink_type = /datum/reagent/consumable/ethanol/suffering_bastard + name = "Suffering Bastard" + desc = "Originally meant as a hangover cure for soldiers away from home, then later adapted into tiki aesthetics, this drink has an uncanny ability to cure headaches and settle stomachs." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "suffering_bastard" + +/datum/glass_style/drinking_glass/blue_blazer + required_drink_type = /datum/reagent/consumable/ethanol/blue_blazer + name = "Blue Blazer" + desc = "A visually stunning drink created by one of the fathers of cocktail bartending, made by tossing flaming whiskey between two glasses. Not to be served if it's above fifty degrees farenheit outside, although that's not much of a concern on a space station." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "blue_blazer" + +/datum/glass_style/drinking_glass/hot_toddy + required_drink_type = /datum/reagent/consumable/ethanol/hot_toddy + name = "Hot Toddy" + desc = "Transports you away from the cold of whatever sub-zero hellhole you're in, if only for a moment." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "hot_toddy" + +/datum/glass_style/drinking_glass/tizirian_sour + required_drink_type = /datum/reagent/consumable/ethanol/tizirian_sour + name = "Tizirian Sour" + desc = "From Trinidad to Tobago to Tiziria, it's quite rare to find a cocktail that uses bitters as a base spirit like this." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "tizirian_sour" + +/datum/glass_style/drinking_glass/daiquiri + required_drink_type = /datum/reagent/consumable/ethanol/daiquiri + name = "Daiquiri" + desc = "Pure, simple, natural. A cuban classic." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "daiquiri" + +/datum/glass_style/drinking_glass/flip_cocktail + required_drink_type = /datum/reagent/consumable/ethanol/flip_cocktail + name = "Flip Cocktail" + desc = "No red-hot iron poker included, unfortunately." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "flip_cocktail" + + // Shot glasses /datum/glass_style/shot_glass/toxins_special diff --git a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm index 9074aff95ef5..e0d8c4990b3b 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/glass_styles/mixed_drinks.dm @@ -75,3 +75,10 @@ desc = "Mullets and cut-up jorts not included." icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "mississippiglass" + +/datum/glass_style/drinking_glass/bitters_soda + required_drink_type = /datum/reagent/consumable/ethanol/bitters_soda + name = "Bitters and Soda" + desc = "A milder, dryer alternative to ginger beer for the task of settling rumbling tummies. Technically contains alcohol, but in low enough concentrations that children or the pregnant can enjoy without worrying." + icon = 'icons/obj/drinks/mixed_drinks.dmi' + icon_state = "bitters_soda" diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 039e6a2898b3..39e76fea2687 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -137,6 +137,7 @@ name = "Methamphetamine" description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage." color = "#78C8FA" //best case scenario is the "default", gets muddled depending on purity + taste_description = "harsh, burning chemicals" overdose_threshold = 20 metabolization_rate = 0.75 * REAGENTS_METABOLISM ph = 5 @@ -169,7 +170,7 @@ /datum/reagent/drug/methamphetamine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.") + var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.", "You understand now.") if(SPT_PROB(2.5, seconds_per_tick)) to_chat(affected_mob, span_notice("[high_message]")) affected_mob.add_mood_event("tweaking", /datum/mood_event/stimulant_medium) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 7f69044234db..0c3fa94a077f 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -566,6 +566,87 @@ if(need_mob_update) return UPDATE_MOB_HEALTH +/datum/reagent/medicine/albuterol + name = "Albuterol" + description = "A potent bronchodilator capable of increasing the amount of gas inhaled by the lungs. Is highly effective at shutting down asthma attacks, \ + but only when inhaled. Overdose causes over-dilation, resulting in reduced lung function. " + taste_description = "bitter and salty air" + overdose_threshold = 30 + color = "#8df5f0" + metabolization_rate = REAGENTS_METABOLISM + ph = 4 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + default_container = /obj/item/reagent_containers/inhaler_canister + + /// The decrement we will apply to the received_pressure_mult of our targets lungs. + var/pressure_mult_increment = 0.4 + /// After this many cycles of overdose, we activate secondary effects. + var/secondary_overdose_effect_cycle_threshold = 40 + /// We stop increasing stamina damage once we reach this number. + var/maximum_od_stamina_damage = 80 + +/datum/reagent/medicine/albuterol/on_mob_metabolize(mob/living/affected_mob) + . = ..() + + if (!iscarbon(affected_mob)) + return + + // has additional effects on asthma, but that's handled in the quirk + + RegisterSignal(affected_mob, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(holder_lost_organ)) + RegisterSignal(affected_mob, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(holder_gained_organ)) + var/mob/living/carbon/carbon_mob = affected_mob + var/obj/item/organ/lungs/holder_lungs = carbon_mob.get_organ_slot(ORGAN_SLOT_LUNGS) + holder_lungs?.adjust_received_pressure_mult(pressure_mult_increment) + +/datum/reagent/medicine/albuterol/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + + if (!iscarbon(affected_mob)) + return + + UnregisterSignal(affected_mob, list(COMSIG_CARBON_LOSE_ORGAN, COMSIG_CARBON_GAIN_ORGAN)) + var/mob/living/carbon/carbon_mob = affected_mob + var/obj/item/organ/lungs/holder_lungs = carbon_mob.get_organ_slot(ORGAN_SLOT_LUNGS) + holder_lungs?.adjust_received_pressure_mult(-pressure_mult_increment) + +/datum/reagent/medicine/albuterol/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + + if (!iscarbon(affected_mob)) + return + + var/mob/living/carbon/carbon_mob = affected_mob + if (SPT_PROB(25, seconds_per_tick)) + carbon_mob.adjust_jitter_up_to(2 SECONDS, 20 SECONDS) + if (SPT_PROB(35, seconds_per_tick)) + if (prob(60)) + carbon_mob.losebreath += 1 + to_chat(affected_mob, span_danger("Your diaphram spasms and you find yourself unable to breathe!")) + else + carbon_mob.breathe(seconds_per_tick, times_fired) + to_chat(affected_mob, span_danger("Your diaphram spasms and you unintentionally take a breath!")) + + if (current_cycle > secondary_overdose_effect_cycle_threshold) + if (SPT_PROB(30, seconds_per_tick)) + carbon_mob.adjust_eye_blur_up_to(6 SECONDS, 30 SECONDS) + if (carbon_mob.getStaminaLoss() < maximum_od_stamina_damage) + carbon_mob.adjustStaminaLoss(seconds_per_tick) + +/datum/reagent/medicine/albuterol/proc/holder_lost_organ(datum/source, obj/item/organ/lost) + SIGNAL_HANDLER + + if (istype(lost, /obj/item/organ/lungs)) + var/obj/item/organ/lungs/holder_lungs = lost + holder_lungs.adjust_received_pressure_mult(-pressure_mult_increment) + +/datum/reagent/medicine/albuterol/proc/holder_gained_organ(datum/source, obj/item/organ/gained) + SIGNAL_HANDLER + + if (istype(gained, /obj/item/organ/lungs)) + var/obj/item/organ/lungs/holder_lungs = gained + holder_lungs.adjust_received_pressure_mult(pressure_mult_increment) + /datum/reagent/medicine/ephedrine name = "Ephedrine" description = "Increases resistance to batons and movement speed, giving you hand cramps. Overdose deals toxin damage and inhibits breathing." @@ -637,6 +718,7 @@ name = "Morphine" description = "A painkiller that allows the patient to move at full speed even when injured. Causes drowsiness and eventually unconsciousness in high doses. Overdose will cause a variety of effects, ranging from minor to lethal." color = "#A9FBFB" + taste_description = "a perfumy, bitter vanilla" metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 30 ph = 8.96 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 02b9e2982414..26581e202ed3 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2528,7 +2528,7 @@ /datum/reagent/glitter name = "Glitter" description = "The herpes of arts and crafts." - data = list("colors"=list(COLOR_WHITE = 100)) + data = list("colors" = list(COLOR_WHITE = 100)) color = COLOR_WHITE //pure white taste_description = "plastic" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2541,6 +2541,7 @@ /datum/reagent/glitter/expose_turf(turf/exposed_turf, reac_volume) . = ..() + if(!istype(exposed_turf)) return exposed_turf.spawn_glitter(data["colors"]) @@ -2549,7 +2550,7 @@ . = ..() if(src.data["colors"]) - color = pick(src.data["colors"]) + color = pick_weight(src.data["colors"]) else color = COLOR_WHITE @@ -2562,32 +2563,25 @@ data["colors"] = blend_weighted_lists(mix_data["colors"], data["colors"], prop_current) if(data["colors"]) - color = pick(data["colors"]) + color = pick_weight(data["colors"]) else color = COLOR_WHITE /datum/reagent/glitter/random - name = "Unrandomised Randomised Glitter" - description = "You shouldn't be seeing this, please make an issue report describing how you found it." - - var/list/possible_colors = list( - list(COLOR_WHITE = 100), - list("#ff8080" = 100), - list("#4040ff" = 100), - list("#ff5555" = 34, "#55ff55" = 33, "#5555ff" = 33), + name = "Glitter (Random)" + // The weighted list of random color choices that can be chosen upon spawning + var/static/list/possible_colors = list( + COLOR_WHITE = 25, + "#ff8080" = 25, + "#4040ff" = 25, + "#ff5555" = 8, + "#55ff55" = 9, + "#5555ff" = 8, ) /datum/reagent/glitter/random/on_new(data) - . = ..() - - var/list/color_list = pick(possible_colors) - - var/datum/reagents/our_holder = src.holder - var/our_volume = src.volume - var/list/our_data = list("colors" = color_list) - - our_holder.remove_reagent(/datum/reagent/glitter/random, our_volume) - our_holder.add_reagent(/datum/reagent/glitter, our_volume, data = our_data) + src.data["colors"] = possible_colors + return ..() /datum/reagent/confetti name = "Confetti" diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 6c9ae29d4c3e..ab4de8a550e6 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -259,25 +259,38 @@ ph = 13 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob) +/datum/reagent/toxin/zombiepowder/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection) . = ..() + if(!isliving(exposed_mob) || !(methods & (INGEST|INHALE))) + return + + LAZYINITLIST(data) + data["method"] |= methods + + //the stomach handles INGEST via on_mob_metabolize() we only deal with INHALE + //also means vapour works much faster which is realistic + if(methods & INHALE) + zombify(exposed_mob) +/** + * Does the fake death & oxy loss on the mob + * + * Arguments + * * mob/living/holder_mob - the mob we are zombifying +*/ +/datum/reagent/toxin/zombiepowder/proc/zombify(mob/living/holder_mob) + PRIVATE_PROC(TRUE) + holder_mob.adjustOxyLoss(0.5*REM, FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) if((data?["method"] & (INGEST|INHALE)) && holder_mob.stat != DEAD) holder_mob.fakedeath(type) -/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/affected_mob) +/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob) . = ..() - affected_mob.cure_fakedeath(type) + zombify(holder_mob) -/datum/reagent/toxin/zombiepowder/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection) +/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/affected_mob) . = ..() - if(!(methods & (INGEST|INHALE))) - return - - var/datum/reagent/zombiepowder = exposed_mob.reagents.has_reagent(/datum/reagent/toxin/zombiepowder) - if(zombiepowder) - LAZYINITLIST(zombiepowder.data) - zombiepowder.data["method"] |= (INGEST|INHALE) + affected_mob.cure_fakedeath(type) /datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/affected_mob, seconds_per_tick, times_fired) . = ..() diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm index 802d5a820e2f..8600f1ecdb74 100644 --- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm +++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm @@ -179,7 +179,7 @@ H_ion_release = -1 rate_up_lim = 50 purity_min = 0.25 - reaction_flags = REACTION_PH_VOL_CONSTANT + reaction_flags = REACTION_PH_VOL_CONSTANT|REACTION_CLEAR_INVERSE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY /datum/chemical_reaction/medicine/convermol/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol) diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 531b8b4ba40a..c9a84809ffca 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -77,6 +77,46 @@ e.start(holder.my_atom) holder.clear_reagents() +/datum/chemical_reaction/meth_crystal //Since the meth is a cooled pharmaceutical solvent, this precipitates it into a solid. + required_reagents = list(/datum/reagent/drug/methamphetamine = 10, /datum/reagent/toxin/acid = 2) + mob_react = FALSE + reaction_flags = REACTION_INSTANT + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING + +/datum/chemical_reaction/meth_crystal/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) + var/location = get_turf(holder.my_atom) + + // Calculate purity ignoring sulfuric acid + var/total_nonacid = 0 + var/meth_amt_in_mix = 0 + for(var/datum/reagent/R in holder.reagent_list) + if(istype(R, /datum/reagent/toxin/acid)) + continue // acid doesn't count against purity + total_nonacid += R.volume + if(istype(R, /datum/reagent/drug/methamphetamine)) + meth_amt_in_mix += R.volume + + var/purity = (total_nonacid > 0) ? (meth_amt_in_mix / total_nonacid) : 0.5 //All this tints the crystal above blue purity. + + for(var/i in 1 to round(created_volume, CHEMICAL_VOLUME_ROUNDING)) + var/obj/item/food/drug/meth_crystal/new_crystal = new(location) + new_crystal.pixel_x = rand(-6, 6) + new_crystal.pixel_y = rand(-6, 6) + + var/effective_purity = 0 + if(purity > 0.9) + effective_purity = (purity - 0.9) / 0.1 + + new_crystal.color = BlendRGB("#FAFAFA", "#78C8FA", effective_purity) + + if(new_crystal.reagents) + new_crystal.reagents.clear_reagents() + var/meth_amt = 10 + new_crystal.reagents.add_reagent(/datum/reagent/drug/methamphetamine, meth_amt) + var/imp_amt = round(meth_amt * (1 - purity) * 0.25, 0.1) + if(imp_amt > 0) + new_crystal.reagents.add_reagent(/datum/reagent/consumable/failed_reaction, imp_amt) + /datum/chemical_reaction/bath_salts results = list(/datum/reagent/drug/bath_salts = 7) required_reagents = list(/datum/reagent/toxin/bad_food = 1, /datum/reagent/saltpetre = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/consumable/enzyme = 1, /datum/reagent/consumable/tea = 1, /datum/reagent/mercury = 1) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 07d811649069..40639b2ec30b 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -157,6 +157,51 @@ required_reagents = list(/datum/reagent/medicine/sal_acid = 1, /datum/reagent/lithium = 1, /datum/reagent/aluminium = 1, /datum/reagent/bromine = 1, /datum/reagent/ammonia = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY +/datum/chemical_reaction/medicine/albuterol_creation + results = list(/datum/reagent/medicine/albuterol = 15) + required_reagents = list(/datum/reagent/lithium = 3, /datum/reagent/aluminium = 3, /datum/reagent/bromine = 3, /datum/reagent/inverse/healing/convermol = 1) + reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_ORGAN | REACTION_TAG_OTHER + required_temp = 400 + optimal_temp = 600 + overheat_temp = 900 + +/datum/chemical_reaction/medicine/salbutamol_to_albuterol + results = list(/datum/reagent/medicine/albuterol = 4, /datum/reagent/medicine/sal_acid = 0.5, /datum/reagent/ammonia = 0.5) + required_catalysts = list(/datum/reagent/toxin/acid = 1) + required_reagents = list(/datum/reagent/medicine/salbutamol = 5, /datum/reagent/medicine/c2/convermol = 1) + reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_ORGAN | REACTION_TAG_OTHER + required_temp = 500 + optimal_temp = 610 + overheat_temp = 980 + thermic_constant = 75 + rate_up_lim = 10 + mix_message = "The solution rapidly changes colors, boiling into a pale blue." + +/datum/chemical_reaction/medicine/albuterol_to_salbutamol + results = list(/datum/reagent/medicine/salbutamol = 2, /datum/reagent/ammonia = 1) + required_catalysts = list(/datum/reagent/toxin/acid = 1) + required_reagents = list(/datum/reagent/medicine/albuterol = 3, /datum/reagent/oxygen = 1) + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_ORGAN | REACTION_TAG_OTHER + required_temp = 300 + optimal_temp = 500 + overheat_temp = 800 + mix_message = "The solution breaks apart, turning a deeper blue." + +/datum/chemical_reaction/medicine/albuterol_to_inverse_convermol + results = list(/datum/reagent/inverse/healing/convermol = 1, /datum/reagent/lithium = 3, /datum/reagent/aluminium = 3, /datum/reagent/bromine = 3) + required_catalysts = list(/datum/reagent/toxin/acid/fluacid = 1) + required_reagents = list(/datum/reagent/medicine/albuterol = 5) + reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_ORGAN | REACTION_TAG_OTHER + required_temp = 900 + optimal_temp = 920 + overheat_temp = 990 + thermic_constant = 25 + mix_message = "The solution rapidly breaks apart, turning a mix of colors." + +/datum/chemical_reaction/medicine/albuterol_to_inverse_convermol/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, impure = FALSE) + var/bonus = impure ? 2 : 1 + explode_smoke(holder, equilibrium, 7.5 * bonus, TRUE, TRUE) + /datum/chemical_reaction/medicine/ephedrine results = list(/datum/reagent/medicine/ephedrine = 4) required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/fuel/oil = 1, /datum/reagent/hydrogen = 1, /datum/reagent/diethylamine = 1) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index d69410bd0cea..30339d1f0dc5 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -3,6 +3,7 @@ desc = "..." icon = 'icons/obj/medical/chemical.dmi' icon_state = null + abstract_type = /obj/item/reagent_containers w_class = WEIGHT_CLASS_TINY sound_vary = TRUE /// The maximum amount of reagents per transfer that will be moved out of this reagent container. diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm index 25e6cec8ccac..d832f15d304c 100644 --- a/code/modules/reagents/reagent_containers/applicator.dm +++ b/code/modules/reagents/reagent_containers/applicator.dm @@ -2,6 +2,7 @@ /obj/item/reagent_containers/applicator name = "generic reagent applicator" desc = "Report this please." + abstract_type = /obj/item/reagent_containers/applicator has_variable_transfer_amount = FALSE grind_results = list() /// Action string displayed in vis_message diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 6da1a4c0d8e2..b66794e41d16 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -1,5 +1,6 @@ /obj/item/reagent_containers/cup name = "open container" + abstract_type = /obj/item/reagent_containers/cup amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50) volume = 50 diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index ea4c4a4c8919..b25e99e7000d 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -6,6 +6,7 @@ desc = "yummy" icon = 'icons/obj/drinks/drinks.dmi' icon_state = "glass_empty" + abstract_type = /obj/item/reagent_containers/cup/glass possible_transfer_amounts = list(5,10,15,20,25,30,50) resistance_flags = NONE diff --git a/code/modules/reagents/reagent_containers/cups/soda.dm b/code/modules/reagents/reagent_containers/cups/soda.dm index 49d76958dbce..1624865a6409 100644 --- a/code/modules/reagents/reagent_containers/cups/soda.dm +++ b/code/modules/reagents/reagent_containers/cups/soda.dm @@ -11,6 +11,7 @@ icon = 'icons/obj/drinks/soda.dmi' icon_state = "cola" icon_state_preview = "cola" + abstract_type = /obj/item/reagent_containers/cup/soda_cans reagent_flags = NONE spillable = FALSE custom_price = PAYCHECK_CREW * 0.9 diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm new file mode 100644 index 000000000000..5600625df6cf --- /dev/null +++ b/code/modules/reagents/reagent_containers/inhaler.dm @@ -0,0 +1,314 @@ +/obj/item/inhaler + name = "inhaler" + desc = "A small device capable of administering short bursts of aerosolized chemicals. Requires a canister to function." + w_class = WEIGHT_CLASS_SMALL + + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "inhaler_generic" + + custom_materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 0.1) + + /// The currently installed canister, from which we get our reagents. Nullable. + var/obj/item/reagent_containers/inhaler_canister/canister + /// The path for our initial canister to be generated by. If not null, we start with that canister type. + var/obj/item/reagent_containers/inhaler_canister/initial_casister_path + + /// The underlay of our canister, if one is installed. + var/mutable_appearance/canister_underlay + /// The y offset to be applied to [canister_underlay]. + var/canister_underlay_y_offset = -2 + /// If true, we will show a rotary display with how many puffs we can be used for until the canister runs out. + var/show_puffs_left = TRUE // this is how real inhalers work + +/obj/item/inhaler/Initialize(mapload) + . = ..() + if (ispath(initial_casister_path, /obj/item/reagent_containers/inhaler_canister)) + set_canister(new initial_casister_path) + +/obj/item/inhaler/Destroy(force) + QDEL_NULL(canister) + + return ..() + +/obj/item/inhaler/handle_deconstruct(disassembled) + . = ..() + + canister?.forceMove(drop_location()) + +/obj/item/inhaler/proc/update_canister_underlay() + if (isnull(canister)) + underlays -= canister_underlay + canister_underlay = null + else if (isnull(canister_underlay)) + canister_underlay = mutable_appearance(canister.icon, canister.icon_state) + canister_underlay.pixel_z = canister_underlay_y_offset + underlays += canister_underlay + +/obj/item/inhaler/examine(mob/user) + . = ..() + + if (isnull(canister)) + return + + . += span_blue("It seems to have [canister] inserted.") + if (!show_puffs_left) + return + + var/puffs_left = canister.get_puffs_left() + if (puffs_left > 0) + puffs_left = span_blue("[puffs_left]") + else + puffs_left = span_danger("[puffs_left]") + . += "Its rotary display shows its canister can be used [puffs_left] more times." + +/obj/item/inhaler/Exited(atom/movable/gone, direction) + . = ..() + + if (gone == canister) + set_canister(null, move_canister = FALSE) + + +/obj/item/inhaler/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if (!isliving(interacting_with)) + return ..() // default behavior + var/mob/living/target_mob = interacting_with + + if (!can_puff(target_mob, user)) + return NONE + + var/puff_timer = 0 + + var/pre_use_visible_message + var/pre_use_self_message + var/pre_use_target_message + + var/post_use_visible_message + var/post_use_self_message + var/post_use_target_message + + if (target_mob == user) // no need for a target message + puff_timer = canister.self_administer_delay + + pre_use_visible_message = span_notice("[user] puts [src] to [user.p_their()] lips, fingers on the canister...") + pre_use_self_message = span_notice("You put [src] to your lips and put pressure on the canister...") + + post_use_visible_message = span_notice("[user] takes a puff of [src]!") + post_use_self_message = span_notice("You take a puff of [src]!") + else + puff_timer = canister.other_administer_delay + + pre_use_visible_message = span_warning("[user] tries to force [src] between [target_mob]'s lips...") + pre_use_self_message = span_notice("You try to put [src] to [target_mob]'s lips...") + pre_use_target_message = span_userdanger("[user] tries to force [src] between your lips!") + + post_use_visible_message = span_warning("[user] forces [src] between [target_mob]'s lips and pushes the canister down!") + post_use_self_message = span_notice("You force [src] between [target_mob]'s lips and press on the canister!") + post_use_target_message = span_userdanger("[user] forces [src] between your lips and presses on the canister, filling your lungs with aerosol!") + + if (puff_timer > 0) + user.visible_message(pre_use_visible_message, ignored_mobs = list(user, target_mob)) + to_chat(user, pre_use_self_message) + if (pre_use_target_message) + to_chat(target_mob, pre_use_target_message) + if (!do_after(user, puff_timer, src)) + return NONE + if (!can_puff(target_mob, user)) // sanity + return NONE + + user.visible_message(post_use_visible_message, ignored_mobs = list(user, target_mob)) + to_chat(user, post_use_self_message) + if (post_use_target_message) + to_chat(target_mob, post_use_target_message) + + canister.puff(user, target_mob) + +/obj/item/inhaler/attack_self(mob/user, modifiers) + try_remove_canister(user, modifiers) + + return ..() + +/obj/item/inhaler/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if (istype(tool, /obj/item/reagent_containers/inhaler_canister)) + return try_insert_canister(tool, user, modifiers) + + return ..() + +/// Tries to remove the canister, if any is inserted. +/obj/item/inhaler/proc/try_remove_canister(mob/living/user, modifiers) + if (isnull(canister)) + balloon_alert(user, "no canister inserted!") + return FALSE + + if (canister.removal_time > 0) + balloon_alert(user, "removing canister...") + if (!do_after(user, canister.removal_time, src)) + return FALSE + + balloon_alert(user, "canister removed") + playsound(src, canister.post_insert_sound, canister.post_insert_volume) + set_canister(null, user) + +// Tries to insert a canister, if none is already inserted. +/obj/item/inhaler/proc/try_insert_canister(obj/item/reagent_containers/inhaler_canister/new_canister, mob/living/user, params) + if (!isnull(canister)) + balloon_alert(user, "remove the existing canister!") + return FALSE + + balloon_alert(user, "inserting canister...") + playsound(src, new_canister.pre_insert_sound, new_canister.pre_insert_volume) + if (!do_after(user, new_canister.insertion_time, src)) + return FALSE + playsound(src, new_canister.post_insert_sound, new_canister.post_insert_volume) + balloon_alert(user, "canister inserted") + set_canister(new_canister, user) + + return TRUE + +/// Setter proc for [canister]. Moves the existing canister out of the inhaler, while moving a new canister inside and registering it. +/obj/item/inhaler/proc/set_canister(obj/item/reagent_containers/inhaler_canister/new_canister, mob/living/user, move_canister = TRUE) + if (move_canister && !isnull(canister)) + if (iscarbon(loc)) + var/mob/living/carbon/carbon_loc = loc + INVOKE_ASYNC(carbon_loc, TYPE_PROC_REF(/mob/living/carbon, put_in_hands), canister) + else if (!isnull(loc)) + canister.forceMove(loc) + + canister = new_canister + canister?.forceMove(src) + update_canister_underlay() + +/// Determines if we can be used. Fails on no canister, empty canister, invalid targets, or non-breathing targets. +/obj/item/inhaler/proc/can_puff(mob/living/target_mob, mob/living/user, silent = FALSE) + if (isnull(canister)) + if (!silent) + balloon_alert(user, "no canister!") + return FALSE + if (isnull(canister.reagents) || canister.reagents.total_volume <= 0) + if (!silent) + balloon_alert(user, "canister is empty!") + return FALSE + if (!iscarbon(target_mob)) // maybe mix this into a general has mouth check + if (!silent) + balloon_alert(user, "not breathing!") + return FALSE + var/mob/living/carbon/carbon_target = target_mob + if (carbon_target.is_mouth_covered()) + if (!silent) + balloon_alert(user, "expose the mouth!") + return FALSE + if (HAS_TRAIT(carbon_target, TRAIT_NOBREATH)) + if (!silent) + balloon_alert(user, "not breathing!") + return FALSE + var/obj/item/organ/lungs/lungs = carbon_target.get_organ_slot(ORGAN_SLOT_LUNGS) + if (isnull(lungs) || lungs.received_pressure_mult <= 0) + if (!silent) + balloon_alert(user, "not breathing!") + return FALSE + + return TRUE + +/obj/item/reagent_containers/inhaler_canister + name = "inhaler canister" + desc = "A small canister filled with aerosolized reagents for use in a inhaler." + w_class = WEIGHT_CLASS_TINY + + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "canister_generic" + + reagent_flags = SEALED_CONTAINER|DRAINABLE|REFILLABLE + has_variable_transfer_amount = FALSE + + max_integrity = 60 + + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.2) + + /// The sound that plays when we are used. + var/puff_sound = 'sound/effects/spray.ogg' + /// The volume of [puff_sound] + var/puff_volume = 20 + + /// The sound that plays when someone TRIES to insert us. + var/pre_insert_sound = 'sound/items/taperecorder/tape_flip.ogg' + /// The sound that plays when we are removed or inserted. + var/post_insert_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + + /// The volume of [pre_insert_sound] + var/pre_insert_volume = 50 + /// The volume of [post_insert_sound] + var/post_insert_volume = 50 + + /// The time it takes to insert us into a inhaler. + var/insertion_time = 2 SECONDS + /// The time it takes to remove us from a inhaler. + var/removal_time = 0.5 SECONDS + + /// The time it takes for us to be used on someone else. + var/other_administer_delay = 3 SECONDS + /// The time it takes for us to be used on our owner. + var/self_administer_delay = 1 SECONDS + +/// Called when a inhaler we are in is used on someone. Transfers reagents and plays the puff sound. +/obj/item/reagent_containers/inhaler_canister/proc/puff(mob/living/user, mob/living/carbon/target) + playsound(src, puff_sound, puff_volume, TRUE, -6) + reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user, methods = INHALE) + +/// Returns a integer approximating how many puffs we can be used for. +/obj/item/reagent_containers/inhaler_canister/proc/get_puffs_left() + return ROUND_UP(reagents.total_volume / amount_per_transfer_from_this) + +/obj/item/reagent_containers/inhaler_canister/handle_deconstruct(disassembled) + if (!reagents?.total_volume) + return ..() + + var/datum/reagents/smoke_reagents = new/datum/reagents() // Lets be safe first, our own reagents may be qdelled if we get deleted + var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/smoke = new() + smoke_reagents.my_atom = src + for (var/datum/reagent/reagent as anything in reagents.reagent_list) + smoke_reagents.add_reagent(reagent.type, reagent.volume, added_purity = reagent.purity) + reagents.remove_reagent(reagent.type, reagent.volume) + if (smoke_reagents.reagent_list) + smoke.set_up(1, holder = src, location = get_turf(src), carry = smoke_reagents) + smoke.start(log = TRUE) + visible_message(span_warning("[src] breaks open and sprays its aerosilized contents everywhere!")) + else + visible_message(span_warning("[src] breaks open - but is empty!")) + + return ..() + +/obj/item/inhaler/medical + icon_state = "inhaler_medical" + +/obj/item/inhaler/salbutamol + name = "salbutamol inhaler" + icon_state = "inhaler_medical" + initial_casister_path = /obj/item/reagent_containers/inhaler_canister/salbutamol + +/obj/item/reagent_containers/inhaler_canister/salbutamol + name = "salbutamol canister" + icon_state = "canister_medical" + list_reagents = list(/datum/reagent/medicine/salbutamol = 30) + +/obj/item/inhaler/albuterol + name = "albuterol inhaler" + icon_state = "inhaler_medical" + initial_casister_path = /obj/item/reagent_containers/inhaler_canister/albuterol + +/obj/item/reagent_containers/inhaler_canister/albuterol + name = "albuterol canister" + desc = "A small canister filled with aerosolized reagents for use in a inhaler. This one contains albuterol, a potent bronchodilator that can stop \ + asthma attacks in their tracks." + icon_state = "canister_medical" + list_reagents = list(/datum/reagent/medicine/albuterol = 30) + +/obj/item/reagent_containers/inhaler_canister/albuterol/asthma + name = "low-pressure albuterol canister" + desc = "A small canister filled with aerosolized reagents for use in a inhaler. This one contains albuterol, a potent bronchodilator that can stop \ + asthma attacks in their tracks. It seems to be a lower-pressure variant, and can only hold 20u." + list_reagents = list(/datum/reagent/medicine/albuterol = 20) + volume = 20 + +/obj/item/inhaler/albuterol/asthma + name = "rescue inhaler" + icon_state = "inhaler_generic" + initial_casister_path = /obj/item/reagent_containers/inhaler_canister/albuterol/asthma diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index 8694499586ec..b293a527e731 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -186,6 +186,11 @@ list_reagents = list(/datum/reagent/medicine/c2/aiuri = 2, /datum/reagent/medicine/granibitaluri = 8) icon_state = "bandaid_burn" +/obj/item/reagent_containers/applicator/patch/fent + name = "unmarked patch" + desc = "An unmarked, unlabeled transdermal patch for you to wear!" + list_reagents = list(/datum/reagent/toxin/fentanyl = 2) + /obj/item/reagent_containers/applicator/patch/synthflesh name = "synthflesh patch" desc = "Helps with brute and burn injuries. Slightly toxic. Three patches applied can restore a corpse husked by burns." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 3e1ebf3e4614..52f4f92b54bf 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -6,6 +6,7 @@ desc = "..." icon = 'icons/obj/medical/chemical_tanks.dmi' icon_state = "water" + abstract_type = /obj/structure/reagent_dispensers density = TRUE anchored = FALSE pressure_resistance = 2*ONE_ATMOSPHERE @@ -174,7 +175,7 @@ if(!fuel_amt) visible_message(span_danger("\The [src] ruptures!")) // Leave it up to future terrorists to figure out the best way to mix reagents with fuel for a useful boom here - chem_splash(loc, null, 2 + (reagents.total_volume + fuel_amt) / 1000, list(reagents), extra_heat=(fuel_amt / 50),adminlog=(fuel_amt<25)) + chem_splash(loc, null, 2 + floor((reagents.total_volume + fuel_amt) / 1000), list(reagents), extra_heat=(fuel_amt / 50),adminlog=(fuel_amt<25)) if(fuel_amt) // with that done, actually explode visible_message(span_danger("\The [src] explodes!")) @@ -514,10 +515,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/peppertank, 3 /obj/structure/reagent_dispensers/water_cooler/boom() if(QDELETED(src)) return - var/liquid_amount = 0 if(reagents.total_volume) visible_message(span_danger("\The [src] flips on it's side and spills everywhere!")) - chem_splash(get_turf(src), null, 2 + (reagents.total_volume + liquid_amount) / 1000, list(reagents), extra_heat=(liquid_amount / 50), adminlog=(liquid_amount<25)) + chem_splash(get_turf(src), null, 2 + floor((reagents.total_volume) / 1000), list(reagents)) eject_jug(throw_away = TRUE) playsound(src, 'sound/effects/glass/glassbash.ogg', 100) tip_over() diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index 409ead91fdd6..6d10524ccba0 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -40,7 +40,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE bodypart_traits = list(TRAIT_DISFIGURED, TRAIT_BALD, TRAIT_SHAVED) - head_flags = HEAD_DEBRAIN + head_flags = HEAD_DEBRAIN | HEAD_NO_DISFIGURE // ignore disfigurement by damage, as we're always disfigured /// flavorful variant of psykerizing that deals damage and sends messages before calling psykerize() /mob/living/carbon/human/proc/slow_psykerize(blind_them = FALSE) diff --git a/code/modules/research/designs/autolathe/materials.dm b/code/modules/research/designs/autolathe/materials.dm index cc07a59ea7e2..8fdc01234ce2 100644 --- a/code/modules/research/designs/autolathe/materials.dm +++ b/code/modules/research/designs/autolathe/materials.dm @@ -130,3 +130,36 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, ) + +/datum/design/bs_crystal + name = "Bluespace Crystal" + id = "bscrystal" + build_type = AUTOLATHE + materials = list(/datum/material/bluespace = SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/bluespace_crystal + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, + ) + +/datum/design/mythril + name = "Mythril" + id = "mythril" + build_type = AUTOLATHE + materials = list(/datum/material/mythril = SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/mineral/mythril + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, + ) + +/datum/design/alien_alloy + name = "Alien Alloy" + id = "allienalloy" + build_type = AUTOLATHE + materials = list(/datum/material/alloy/alien = SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/mineral/abductor + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, + ) diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 078e3aabcc0a..2daa2404c08e 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -392,9 +392,9 @@ build_type = IMPRINTER build_path = /obj/item/circuitboard/computer/accounting category = list( - RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RECORDS + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_COMMAND ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SECURITY //Honestly should have a bridge techfab for this sometime. /datum/design/board/shuttle category = list("Computer Boards", "Shuttle Machinery") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 274f5f8b11d9..261b3104bd81 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1652,13 +1652,14 @@ search_metadata = "boris" /datum/design/borg_upgrade_rped - name = "Rapid Part Exchange Device" + name = "Rapid Part Exchange Device Expanded" id = "borg_upgrade_rped" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rped materials = list( - /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, - /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT*2.5, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT*2.5 ) construction_time = 12 SECONDS category = list( @@ -1676,11 +1677,11 @@ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING ) -/datum/design/borg_upgrade_circuit_app - name = "Circuit Manipulator" - id = "borg_upgrade_circuitapp" +/datum/design/borg_upgrade_engineering_app + name = "Engineering Apparatus" + id = "borg_upgrade_engineeringapp" build_type = MECHFAB - build_path = /obj/item/borg/upgrade/circuit_app + build_path = /obj/item/borg/upgrade/engineering_app materials = list( /datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, @@ -1718,6 +1719,22 @@ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) +/datum/design/borg_upgrade_syringe + name = "Advanced Syringe" + id = "borg_upgrade_syringe" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/bs_syringe + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT, + /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace =SMALL_MATERIAL_AMOUNT*5 + ) + construction_time = 12 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL + ) + /datum/design/borg_upgrade_broomer name = "Experimental Push Broom" id = "borg_upgrade_broomer" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 9cfab3b3f8af..e4a8b78a6e77 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -128,6 +128,30 @@ ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE +/datum/design/inhaler + name = "Inhaler" + desc = "A small device capable of administering short bursts of aerosolized chemicals. Requires a canister to function." + id = "inhaler" + build_path = /obj/item/inhaler/medical + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 0.1) + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/inhaler_canister + name = "Inhaler Canister" + desc = "A small canister filled with aerosolized reagents for use in a inhaler." + id = "inhaler_canister" + build_path = /obj/item/reagent_containers/inhaler_canister + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.2) + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + /datum/design/bluespacebodybag name = "Bluespace Body Bag" desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index dd1298af175e..f3fa22a68247 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -1162,3 +1162,21 @@ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +// Anomaly locked item + +/datum/design/space_furnace + name = "Space Furnace" + desc = "A heavy furnace capable of forming a temporary bubble that holds in breathable air. Requires a pyroclastic anomaly core to function." + id = "space_furnace" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT*2.5, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2.5, + ) + build_path = /obj/item/flashlight/lamp/space_bubble + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index b73ae51bdd72..4d0e4537f524 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -778,30 +778,21 @@ user.electrocute_act(15, src, flags = SHOCK_NOGLOVES) playsound(user, SFX_SPARKS, rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - var/list/chargeable_batteries = list() - for(var/obj/item/stock_parts/power_store/C in user.get_all_contents()) - if(C.charge < (C.maxcharge * 0.95)) // otherwise the PDA always gets recharged - chargeable_batteries |= C + var/list/chargeable_items = user.get_all_cells(max_percent = 0.95) // otherwise the PDA always gets recharged lightning_fx(user, stunner) var/recharges = rand(1, 2) - if(!length(chargeable_batteries)) + if(!length(chargeable_items)) to_chat(user, span_notice("You have a strange feeling for a moment, but then it passes.")) return - for(var/obj/item/stock_parts/power_store/to_charge as anything in chargeable_batteries) - if(!recharges) - return + while(length(chargeable_items) && recharges) recharges-- - to_charge = pick(chargeable_batteries) + var/obj/item/to_charge_base = pick_n_take(chargeable_items) + var/obj/item/stock_parts/power_store/to_charge = chargeable_items[to_charge_base] to_charge.charge = to_charge.maxcharge - // The device powered by the cell is assumed to be its location. - var/obj/device = to_charge.loc - // If it's not an object, or the loc's assigned power_store isn't the cell, undo. - if(!istype(device) || (device.get_cell() != to_charge)) - device = to_charge - device.update_appearance(UPDATE_ICON|UPDATE_OVERLAYS) - to_chat(user, span_notice("[device] feels energized!")) - lightning_fx(device, 0.8 SECONDS) + to_charge_base.update_appearance(UPDATE_ICON|UPDATE_OVERLAYS) + to_chat(user, span_notice("[to_charge_base] feels energized!")) + lightning_fx(to_charge_base, 0.8 SECONDS) /obj/item/relic/proc/lightning_fx(atom/shocker, time) var/lightning = mutable_appearance('icons/effects/effects.dmi', "electricity3", layer = ABOVE_MOB_LAYER) diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 7a89429333d7..9fc61e3d1355 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -423,7 +423,7 @@ say("Unable to continue production, missing materials.") finalize_build() return - materials.use_materials(design_materials, material_cost_coefficient, is_stack ? items_remaining : 1, "built", "[design.name]", user_data = user_data) + materials.use_materials(design_materials, material_cost_coefficient, is_stack ? items_remaining : 1, "processed", "[design.name]", user_data = user_data) var/atom/movable/created if(is_stack) diff --git a/code/modules/research/part_replacer.dm b/code/modules/research/part_replacer.dm index 0b4619a862ad..fea7c8211d07 100644 --- a/code/modules/research/part_replacer.dm +++ b/code/modules/research/part_replacer.dm @@ -169,3 +169,8 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' storage_type = /datum/storage/rped/bluespace + +/obj/item/storage/part_replacer/cyborg/small + desc = "Special mechanical module made to store, sort, and apply standard machine parts. This one has as much space, as your regular RPED" + icon_state = "RPED" + storage_type = /datum/storage/rped diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index e05a1d58d4df..5a2a2a47630a 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -6,13 +6,13 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good name = "stock part" desc = "What?" icon = 'icons/obj/devices/stock_parts.dmi' + ///The generic category type that the stock part belongs to. Generic objects that should not be instantiated should have the same type and abstract_type + abstract_type = /obj/item/stock_parts w_class = WEIGHT_CLASS_SMALL var/rating = 1 ///Used when a base part has a different name to higher tiers of part. For example, machine frames want any servo and not just a micro-servo. var/base_name var/energy_rating = 1 - ///The generic category type that the stock part belongs to. Generic objects that should not be instantiated should have the same type and abstract_type - var/abstract_type = /obj/item/stock_parts /obj/item/stock_parts/Initialize(mapload) . = ..() diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index 87300c7e70c8..4cab2dd3f08b 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -89,6 +89,7 @@ "borg_upgrade_piercinghypospray", "borg_upgrade_surgicalprocessor", "borg_upgrade_surgicalomnitool", + "borg_upgrade_syringe", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) @@ -125,7 +126,7 @@ design_ids = list( "borg_upgrade_rped", "borg_upgrade_engineeringomnitool", - "borg_upgrade_circuitapp", + "borg_upgrade_engineeringapp", "borg_upgrade_inducer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm index 74d3b0c51c90..b073eb86ba09 100644 --- a/code/modules/research/techweb/nodes/medbay_nodes.dm +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -49,6 +49,8 @@ prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) design_ids = list( "med_spray_bottle", + "inhaler", + "inhaler_canister", "medigel", "medipen_refiller", "soda_dispenser", diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm index bcaadd5bc4e0..99779a7bcc68 100644 --- a/code/modules/research/techweb/nodes/research_nodes.dm +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -83,6 +83,7 @@ "anomaly_refinery", "anomaly_neutralizer", "reactive_armour", + "space_furnace", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 6d37ec13d01d..3dd92891f511 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -595,7 +595,7 @@ return ..() cooldown = max_cooldown var/list/batteries = list() - for(var/obj/item/stock_parts/power_store/C in owner.get_all_contents()) + for(var/obj/item/stock_parts/power_store/C in owner.get_all_cells()) if(C.charge < C.maxcharge) batteries += C if(batteries.len) diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index c153312cb758..7077b7a7b362 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -87,7 +87,7 @@ Regenerative extracts: /obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user) var/list/batteries = list() - for(var/obj/item/stock_parts/power_store/C in target.get_all_contents()) + for(var/obj/item/stock_parts/power_store/C in target.get_all_cells()) if(C.charge < C.maxcharge) batteries += C if(batteries.len) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index c1fa32ca060a..518adc095664 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -223,7 +223,7 @@ for(var/mob/living/basic/slime/stored_slime in stored_slimes) stored_slime.forceMove(target_turf) REMOVE_TRAIT(stored_slime, TRAIT_STASIS, XENOBIO_CONSOLE_TRAIT) - stored_slime.handle_slime_stasis(0) + stored_slime.handle_slime_stasis() xeno_hud.on_update_hud(LAZYLEN(stored_slimes), stored_monkeys, max_slimes) ///Places every slime not controlled by a player into the internal storage, respecting its limits diff --git a/code/modules/reta/reta_debug.dm b/code/modules/reta/reta_debug.dm new file mode 100644 index 000000000000..788c303c0cfc --- /dev/null +++ b/code/modules/reta/reta_debug.dm @@ -0,0 +1,122 @@ +/** + * Request Emergency Temporary Access - Admin Verbs + */ + +/// Admin command to manually trigger RETA access grant for admins +ADMIN_VERB(reta_manual_trigger, R_ADMIN, "RETA Door Access", "Manually trigger RETA access for testing", ADMIN_CATEGORY_EVENTS) + + var/calling_dept = tgui_input_list(user, "RETA - Which department is CALLING for help?", "Calling Department", list("Security", "Engineering", "Medical", "Science", "Service", "Command", "Cargo", "Mining")) + if(!calling_dept) + return + + var/list/available_depts = list("Security", "Engineering", "Medical", "Science", "Service", "Command", "Cargo", "Mining") + available_depts -= calling_dept + + // Multi-select using repeated input_list calls + var/list/selected_depts = list() + var/list/remaining_depts = available_depts.Copy() + + while(length(remaining_depts)) + remaining_depts += "DONE - Finish selection" + var/choice = tgui_input_list(user, "RETA - Select departments to RESPOND to [calling_dept]\nCurrently selected: [english_list(selected_depts)]\n\nSelect another department or DONE:", "Responding Departments", remaining_depts) + + if(!choice || choice == "DONE - Finish selection") + break + + selected_depts += choice + remaining_depts -= choice + remaining_depts -= "DONE - Finish selection" + + if(!length(selected_depts)) + message_admins("No departments selected for RETA response.") + return + + var/duration = tgui_input_number(user, "Duration in minutes:", "RETA Duration", 5, 60, 1) + if(!duration) + return + + message_admins("[key_name_admin(user)] is manually triggering RETA: [calling_dept] called for help, [english_list(selected_depts)] will get access to [calling_dept] areas for [duration] minutes.") + log_game("ADMIN: [key_name(user)] is manually triggering RETA: [calling_dept] called for help, [english_list(selected_depts)] will get access to [calling_dept] areas for [duration] minutes.") + + // Grant access to each responding department and collect results + var/successful_grants = 0 + var/list/granted_depts = list() + var/total_eligible_cards = 0 + + for(var/responding_dept in selected_depts) + var/dept_eligible_cards = 0 + var/list/job_trims = GLOB.reta_job_trims[responding_dept] + + for(var/mob/living/carbon/human/human_player as anything in GLOB.human_list) + if(!human_player.client || human_player.stat == DEAD) + continue + + var/obj/item/card/id/id_card = human_player.get_idcard(hand_first = FALSE) + if(!id_card || !id_card.trim) + continue + + if(is_type_in_list(id_card.trim, job_trims)) + dept_eligible_cards++ + + total_eligible_cards += dept_eligible_cards + message_admins("[responding_dept] department: [dept_eligible_cards] eligible cards from living players") + + // Note: RETA grants access FROM calling_dept TO responding_dept personnel + // So if Medical calls Security, Security personnel get Medical access + if(reta_find_and_grant_access(responding_dept, calling_dept, duration MINUTES)) + successful_grants++ + granted_depts += responding_dept + + // Report results + if(successful_grants > 0) + message_admins("RETA access granted successfully: [english_list(granted_depts)] personnel now have [calling_dept] access. Total eligible cards: [total_eligible_cards]") + + // Send department announcement like the normal system + var/caller_info = " (Called by CENTCOM)" + var/enhanced_location = "[calling_dept][caller_info]" + + // Send announcements to all successfully granted departments + for(var/dept in granted_depts) + switch(dept) + if("Security") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_SECURITY), "Security") + if("Engineering") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_ENGINEERING), "Engineering") + if("Medical") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_MEDICAL), "Medical") + if("Science") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_SCIENCE), "Science") + if("Service") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_SERVICE), "Service") + if("Command") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_COMMAND), "Command") + if("Cargo") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_SUPPLY), "Cargo") + if("Mining") + aas_config_announce(/datum/aas_config_entry/rc_emergency, list("LOCATION" = enhanced_location), null, list(RADIO_CHANNEL_SUPPLY), "Mining") + + // Send confirmation to the calling department about who has been given access + var/calling_message = "RETA activated[caller_info]. The following now have temporary door access: [english_list(granted_depts)]." + + // Get an announcement system to send simple radio messages + var/obj/machinery/announcement_system/announcer = get_announcement_system(null, null, list(RADIO_CHANNEL_COMMON)) + if(announcer) + switch(calling_dept) + if("Security") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SECURITY) + if("Engineering") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_ENGINEERING) + if("Medical") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_MEDICAL) + if("Science") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SCIENCE) + if("Service") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SERVICE) + if("Command") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_COMMAND) + if("Cargo") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SUPPLY) + if("Mining") + announcer.radio.talk_into(announcer, calling_message, RADIO_CHANNEL_SUPPLY) + else + message_admins("RETA access grant failed for all departments.") diff --git a/code/modules/reta/reta_id_card.dm b/code/modules/reta/reta_id_card.dm new file mode 100644 index 000000000000..29d35133710f --- /dev/null +++ b/code/modules/reta/reta_id_card.dm @@ -0,0 +1,217 @@ +/** + * Request Emergency Temporary Access - ID Card Extensions + * code\modules\reta\reta_system.dm + */ + +/obj/item/card/id + /// Dictionary of temporary department access: dept_name -> list(access_flags) + var/list/reta_temp_access = list() + /// Dictionary of timer IDs for clearing temporary access: dept_name -> timer_id + var/list/reta_timers = list() + +/// Grants temporary department access to this ID card +/obj/item/card/id/proc/grant_reta_access(dept, duration_ds) + if(!GLOB.reta_dept_grants[dept]) + return FALSE + + // Clear existing timer for this department if any (allows extending/refreshing access) + if(reta_timers[dept] && reta_timers[dept] != -1) + deltimer(reta_timers[dept]) + reta_timers[dept] = null + + // Grant access flags for this department + var/list/access_flags = GLOB.reta_dept_grants[dept] + var/list/new_access = list() + + // Initialize department access list if needed + if(!reta_temp_access[dept]) + reta_temp_access[dept] = list() + + for(var/flag in access_flags) + if(!(flag in access)) // Only add if not permanently granted + // Add to department-specific temporary access + reta_temp_access[dept] |= flag + // Add to main access list + access += flag + new_access += flag + + if(!LAZYLEN(new_access)) + return FALSE // No new access granted + + // Set timer for this specific department + reta_timers[dept] = addtimer(CALLBACK(src, PROC_REF(clear_reta_access_for_dept), dept), duration_ds, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + + // Add to global registry for mass operations + GLOB.reta_active_cards |= src + + // User feedback + var/mob/living/carbon/human/holder = get_id_holder() + if(holder) + playsound(holder, 'sound/machines/cryo_warning.ogg', 25, TRUE) + holder.balloon_alert(holder, "emergency access: [dept]") + + // Enhanced logging + var/access_names = list() + for(var/flag in new_access) + access_names += SSid_access.get_access_desc(flag) + + var/holder_info = holder ? "held by [holder]" : "not being held" + log_reta("Granted [dept] temporary access ([english_list(access_names)]) to ID '[registered_name || "Unknown"]' ([holder_info]) for [duration_ds/10] seconds") + investigate_log("RETA: Granted [dept] temporary access ([english_list(access_names)]) to ID '[registered_name || "Unknown"]' ([holder_info])", INVESTIGATE_ACCESSCHANGES) + + return TRUE + +/// Clears temporary access for a specific department +/obj/item/card/id/proc/clear_reta_access_for_dept(dept) + if(!reta_temp_access[dept] || !LAZYLEN(reta_temp_access[dept])) + return + + // User feedback before clearing + var/mob/living/carbon/human/holder = get_id_holder() + if(holder) + holder.balloon_alert(holder, "[dept] access expired") + to_chat(holder, span_warning("Emergency access to [dept] has expired.")) + + // Remove department's temporary access from the main access list + var/list/dept_access = reta_temp_access[dept] + for(var/flag in dept_access) + // Only remove if no other department also grants this access + var/still_needed = FALSE + for(var/other_dept in reta_temp_access) + if(other_dept != dept && reta_temp_access[other_dept] && (flag in reta_temp_access[other_dept])) + still_needed = TRUE + break + + if(!still_needed) + access -= flag + + // Enhanced logging + var/access_names = list() + for(var/flag in dept_access) + access_names += SSid_access.get_access_desc(flag) + + var/holder_info = holder ? "held by [holder]" : "not being held" + log_reta("Cleared [dept] temporary access ([english_list(access_names)]) from ID '[registered_name || "Unknown"]' ([holder_info])") + investigate_log("RETA: Cleared [dept] temporary access ([english_list(access_names)]) from ID '[registered_name || "Unknown"]' ([holder_info])", INVESTIGATE_ACCESSCHANGES) + + // Clean up department data + reta_temp_access[dept] = null + reta_timers[dept] = null + + // Remove from global registry if no more temporary access + if(!has_any_reta_access()) + GLOB.reta_active_cards -= src + +/// Clears all temporary department access from this ID card +/obj/item/card/id/proc/clear_reta_access() + if(!LAZYLEN(reta_temp_access)) + return + + // User feedback before clearing + var/mob/living/carbon/human/holder = get_id_holder() + if(holder) + holder.balloon_alert(holder, "emergency access expired") + to_chat(holder, span_warning("Emergency access has expired.")) + + // Collect all temporary access flags for logging + var/list/all_temp_access = list() + for(var/dept in reta_temp_access) + if(reta_temp_access[dept]) + all_temp_access |= reta_temp_access[dept] + + // Remove all temporary access from the main access list + for(var/flag in all_temp_access) + access -= flag + + // Enhanced logging + var/access_names = list() + for(var/flag in all_temp_access) + access_names += SSid_access.get_access_desc(flag) + + var/holder_info = holder ? "held by [holder]" : "not being held" + log_reta("Cleared all temporary access ([english_list(access_names)]) from ID '[registered_name || "Unknown"]' ([holder_info])") + investigate_log("RETA: Cleared all temporary access ([english_list(access_names)]) from ID '[registered_name || "Unknown"]' ([holder_info])", INVESTIGATE_ACCESSCHANGES) + + // Clear all timers + for(var/dept in reta_timers) + if(reta_timers[dept] && reta_timers[dept] != -1) + deltimer(reta_timers[dept]) + + LAZYCLEARLIST(reta_temp_access) + LAZYCLEARLIST(reta_timers) + + // Remove from global registry + GLOB.reta_active_cards -= src + +/// Checks if this ID card has any temporary access +/obj/item/card/id/proc/has_any_reta_access() + for(var/dept in reta_temp_access) + if(reta_temp_access[dept] && LAZYLEN(reta_temp_access[dept])) + return TRUE + return FALSE + +/// Checks if this ID card has temporary access to a specific flag +/obj/item/card/id/proc/has_reta_access(access_flag) + for(var/dept in reta_temp_access) + if(reta_temp_access[dept] && (access_flag in reta_temp_access[dept])) + return TRUE + return FALSE + +/// Checks if this ID card has temporary access for a specific department +/obj/item/card/id/proc/has_reta_access_for_dept(dept) + return reta_temp_access[dept] && LAZYLEN(reta_temp_access[dept]) + +/// Gets all current temporary access flags for this ID card +/obj/item/card/id/proc/get_reta_access() + var/list/all_access = list() + for(var/dept in reta_temp_access) + if(reta_temp_access[dept]) + all_access |= reta_temp_access[dept] + return all_access + +/// Gets temporary access flags for a specific department +/obj/item/card/id/proc/get_reta_access_for_dept(dept) + var/list/dept_access = reta_temp_access[dept] + return dept_access?.Copy() || list() + +/// Gets a summary of all active RETA accesses (for debugging/display) +/obj/item/card/id/proc/get_reta_summary() + var/list/summary = list() + for(var/dept in reta_temp_access) + if(reta_temp_access[dept] && LAZYLEN(reta_temp_access[dept])) + var/time_left = "unknown" + if(reta_timers[dept]) + var/remaining = timeleft(reta_timers[dept]) + if(remaining > 0) + time_left = "[remaining/10]s" + summary += "[dept] ([LAZYLEN(reta_temp_access[dept])] access, [time_left] left)" + return summary + +/// Helper to get the human holding this ID card +/obj/item/card/id/proc/get_id_holder() + var/mob/living/carbon/human/holder + if(istype(loc, /mob/living/carbon/human)) + holder = loc + else if(istype(loc, /obj/item/card/id) && istype(loc.loc, /mob/living/carbon/human)) + holder = loc.loc + else + // Check if worn in ID slot + for(var/mob/living/carbon/human/human in range(0, src)) + if(human.get_idcard() == src) + holder = human + break + return holder + +/// Cleanup temporary access when ID card is deleted +/obj/item/card/id/Destroy() + // Clear all department timers + for(var/dept in reta_timers) + if(reta_timers[dept] && reta_timers[dept] != -1) + deltimer(reta_timers[dept]) + GLOB.reta_active_cards -= src + return ..() +/* +/mob/living/death(gibbed) + . = ..() + clear_temp_dept_access() +*/ diff --git a/code/modules/reta/reta_system.dm b/code/modules/reta/reta_system.dm new file mode 100644 index 000000000000..ebcfe06d8964 --- /dev/null +++ b/code/modules/reta/reta_system.dm @@ -0,0 +1,319 @@ +/** + * Request Emergency Temporary Access - RETA System + * Provides temporary department access when Requests Console emergency calls are made. + */ + +/// Helper function for RETA-specific logging +/proc/log_reta(text) + WRITE_LOG(GLOB.reta_log, "[time_stamp()] RETA: [text]") + log_game("RETA: [text]") + +/proc/initialize_reta_system() + // Define which access flags are granted for each department + GLOB.reta_dept_grants = list( + "Medical" = list(ACCESS_MEDICAL, ACCESS_SURGERY), + "Security" = list(ACCESS_SECURITY, ACCESS_BRIG, ACCESS_BRIG_ENTRANCE), + "Engineering" = list(ACCESS_ENGINEERING, ACCESS_ATMOSPHERICS), + "Science" = list(ACCESS_SCIENCE, ACCESS_RESEARCH), + "Service" = list(ACCESS_SERVICE, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_HYDROPONICS), + "Cargo" = list(ACCESS_CARGO), + "Mining" = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_CARGO), + "Command" = list(ACCESS_COMMAND), // Admin-only, not available through request consoles + ) + +/// Checks if an origin department is on cooldown for calling a target department +/proc/reta_on_cooldown(origin, target) + var/list/by_target = GLOB.reta_cooldown[origin] + if(!by_target) + return FALSE + var/next_ok = by_target[target] || 0 + return world.time < next_ok + +/// Sets a cooldown for an origin department calling a target department +/proc/reta_set_cooldown(origin, target, cd_ds) + if(!GLOB.reta_cooldown[origin]) + GLOB.reta_cooldown[origin] = list() + GLOB.reta_cooldown[origin][target] = world.time + cd_ds + +/// Tracks recent emergency calls for multiple department analysis +/proc/reta_track_call(origin, target) + var/list/call_info = list( + "time" = world.time, + "origin" = origin + ) + + if(!GLOB.reta_recent_calls[target]) + GLOB.reta_recent_calls[target] = list() + GLOB.reta_recent_calls[target] += list(call_info) + + // Clean old calls (older than 10 minutes) + var/cutoff_time = world.time - 6000 // 10 minutes + if(GLOB.reta_recent_calls[target]) + var/list/recent_calls = GLOB.reta_recent_calls[target] + GLOB.reta_recent_calls[target] = recent_calls.Copy() + for(var/list/old_call in GLOB.reta_recent_calls[target]) + if(old_call["time"] < cutoff_time) + GLOB.reta_recent_calls[target] -= list(old_call) + + // Check for multiple calls scenario + if(LAZYLEN(GLOB.reta_recent_calls[target]) >= 3) + var/list/origins = list() + for(var/list/call_data in GLOB.reta_recent_calls[target]) + origins |= call_data["origin"] + + if(LAZYLEN(origins) >= 3) + message_admins("RETA: Multiple emergency scenario detected! [target] has been called by [english_list(origins)] in the last 10 minutes. Consider station-wide emergency protocols.") + log_game("RETA: Multiple department emergency - [target] called by [english_list(origins)]") + +/// Finds eligible responders and grants them temporary access +/proc/reta_find_and_grant_access(target_dept, origin_dept, duration_ds) + . = 0 + + var/list/job_trims = GLOB.reta_job_trims[target_dept] + if(!LAZYLEN(job_trims)) + log_reta("No job trims defined for department '[target_dept]'") + return FALSE + + var/granted_count = 0 + var/total_players_checked = 0 + var/matching_trim_players = 0 + + // Check ID cards being carried by living players (fast and efficient) + for(var/mob/living/carbon/human/human_player as anything in GLOB.human_list) + // Only check players who are alive and have clients (actively playing) + if(!human_player.client || human_player.stat == DEAD) + continue + + total_players_checked++ + + // Get their ID card (worn_id, hands, or belt) + var/obj/item/card/id/id_card = human_player.get_idcard(hand_first = FALSE) + if(!id_card || !id_card.trim) + continue + + // Check if this card's trim matches the target department + if(!is_type_in_list(id_card.trim, job_trims)) + continue + + matching_trim_players++ + + if(id_card.grant_reta_access(origin_dept, duration_ds)) + granted_count++ + + if(granted_count > 0) + // Register this as an active RETA grant for new cards + if(!GLOB.reta_active_grants[target_dept]) + GLOB.reta_active_grants[target_dept] = list() + GLOB.reta_active_grants[target_dept][origin_dept] = world.time + duration_ds + + // Set up automatic cleanup when the grant expires + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cleanup_expired_reta_grant), target_dept, origin_dept), duration_ds) + + // Update all doors to show RETA lights for newly activated grants + update_all_doors_reta_lights() + + log_reta("Granted temporary [origin_dept] access to [granted_count] [target_dept] department ID cards from a call by [origin_dept].") + . = TRUE + else + log_reta("No [target_dept] personnel found who needed [origin_dept] access from a call by [origin_dept]. (Checked [total_players_checked] living players, [matching_trim_players] had matching trims)") + + return . + +/// Populates the job trims list for RETA system +/proc/populate_reta_job_trims() + GLOB.reta_job_trims = list( + "Medical" = list(), + "Security" = list(), + "Engineering" = list(), + "Science" = list(), + "Service" = list(), + "Command" = list(), + "Cargo" = list(), + "Mining" = list() + ) + + log_game("RETA: Starting job trim population...") + var/total_trims = 0 + for(var/job_trim_path in subtypesof(/datum/id_trim/job)) + var/datum/id_trim/job/trim = new job_trim_path() + total_trims++ + + if(!trim.job) + log_game("RETA: Trim [job_trim_path] has no job") + continue + if(!trim.job.departments_bitflags) + log_game("RETA: Trim [job_trim_path] job [trim.job] has no departments_bitflags") + continue + + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL) + GLOB.reta_job_trims["Medical"] += job_trim_path + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY) + GLOB.reta_job_trims["Security"] += job_trim_path + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_ENGINEERING) + GLOB.reta_job_trims["Engineering"] += job_trim_path + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_SCIENCE) + GLOB.reta_job_trims["Science"] += job_trim_path + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_SERVICE) + GLOB.reta_job_trims["Service"] += job_trim_path + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + GLOB.reta_job_trims["Command"] += job_trim_path + if(trim.job.departments_bitflags & DEPARTMENT_BITFLAG_CARGO) + GLOB.reta_job_trims["Cargo"] += job_trim_path + GLOB.reta_job_trims["Mining"] += job_trim_path // Mining uses CARGO bitflag + + log_game("RETA: Processed [total_trims] trims. Final counts: Medical=[LAZYLEN(GLOB.reta_job_trims["Medical"])], Security=[LAZYLEN(GLOB.reta_job_trims["Security"])], Engineering=[LAZYLEN(GLOB.reta_job_trims["Engineering"])], Science=[LAZYLEN(GLOB.reta_job_trims["Science"])], Service=[LAZYLEN(GLOB.reta_job_trims["Service"])], Command=[LAZYLEN(GLOB.reta_job_trims["Command"])], Cargo=[LAZYLEN(GLOB.reta_job_trims["Cargo"])], Mining=[LAZYLEN(GLOB.reta_job_trims["Mining"])]") + +/// Pushes UI updates to all consoles in the same origin department +/proc/reta_push_ui_updates(origin, target) + for(var/obj/machinery/requests_console/console in GLOB.reta_consoles_by_origin[origin]) + console.ui_update() + +/// Gets the department string for a user based on their job +/proc/reta_get_user_department(mob/user) + if(!user?.mind?.assigned_role) + return null + + var/datum/job/job = user.mind.assigned_role + if(job.departments_bitflags & DEPARTMENT_BITFLAG_ENGINEERING) + return "Engineering" + if(job.departments_bitflags & DEPARTMENT_BITFLAG_SCIENCE) + return "Science" + if(job.departments_bitflags & DEPARTMENT_BITFLAG_CARGO) + return "Cargo" + if(job.departments_bitflags & DEPARTMENT_BITFLAG_SERVICE) + return "Service" + if(job.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL) + return "Medical" + if(job.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY) + return "Security" + if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + return "Command" + + return null + +/// Gets the standardized department string from a console department name +/proc/reta_get_user_department_by_name(dept_name) + if(!dept_name) + return null + + var/dept_lower = LOWER_TEXT(dept_name) + + // Check for partial matches to handle variations in console naming + if(findtext(dept_lower, "engineering") || findtext(dept_lower, "engine")) + return "Engineering" + if(findtext(dept_lower, "science") || findtext(dept_lower, "research")) + return "Science" + if(findtext(dept_lower, "cargo") || findtext(dept_lower, "supply")) + return "Cargo" + if(findtext(dept_lower, "mining") || findtext(dept_lower, "mine")) + return "Mining" + if(findtext(dept_lower, "service") || findtext(dept_lower, "civilian")) + return "Service" + if(findtext(dept_lower, "medical") || findtext(dept_lower, "medbay")) + return "Medical" + if(findtext(dept_lower, "security") || findtext(dept_lower, "sec")) + return "Security" + if(findtext(dept_lower, "command") || findtext(dept_lower, "bridge")) + return "Command" + + // Autonamed areas that belong to service department + if(findtext(dept_lower, "kitchen") || findtext(dept_lower, "bar") || findtext(dept_lower, "cafeteria") || findtext(dept_lower, "diner")) + return "Service" + if(findtext(dept_lower, "hydroponics") || findtext(dept_lower, "botany")) + return "Service" + if(findtext(dept_lower, "janitor") || findtext(dept_lower, "custodial")) + return "Service" + + // Autonamed areas for medical + if(findtext(dept_lower, "pharmacy") || findtext(dept_lower, "chemistry") || findtext(dept_lower, "chem")) + return "Medical" + if(findtext(dept_lower, "morgue") || findtext(dept_lower, "virology")) + return "Medical" + if(findtext(dept_lower, "surgery") || findtext(dept_lower, "operating") || findtext(dept_lower, "cryo")) + return "Medical" + if(findtext(dept_lower, "patients") || findtext(dept_lower, "exam")) + return "Medical" + + // Autonamed areas for engineering + if(findtext(dept_lower, "atmospherics") || findtext(dept_lower, "atmos")) + return "Engineering" + if(findtext(dept_lower, "supermatter") || findtext(dept_lower, "engine")) + return "Engineering" + if(findtext(dept_lower, "gravity") || findtext(dept_lower, "telecomm") || findtext(dept_lower, "tcomm")) + return "Engineering" + + // Autonamed areas for science department + if(findtext(dept_lower, "xenobiology") || findtext(dept_lower, "xenobio")) + return "Science" + if(findtext(dept_lower, "robotics") || findtext(dept_lower, "genetics")) + return "Science" + if(findtext(dept_lower, "ordnance") || findtext(dept_lower, "cytology")) + return "Science" + + // Handle specific autonamed areas that belong to security department + if(findtext(dept_lower, "brig") || findtext(dept_lower, "holding")) + return "Security" + if(findtext(dept_lower, "armory") || findtext(dept_lower, "checkpoint")) + return "Security" + + return null + +/// Cleans up an expired RETA grant from the active grants registry +/proc/cleanup_expired_reta_grant(target_dept, origin_dept) + if(!GLOB.reta_active_grants[target_dept]) + return + GLOB.reta_active_grants[target_dept] -= origin_dept + if(!length(GLOB.reta_active_grants[target_dept])) + GLOB.reta_active_grants -= target_dept + log_reta("Cleaned up expired [origin_dept] grant for [target_dept] department") + + // Update all doors to remove RETA lights for expired grants + update_all_doors_reta_lights() + +/// Updates RETA lighting for all doors in the game +/proc/update_all_doors_reta_lights() + for(var/obj/machinery/door/airlock/door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock)) + door.update_appearance(UPDATE_OVERLAYS) + +/// Applies any currently active RETA grants to a newly created/spawned ID card +/// This should be called when ID cards are created, spawned, or have their trim changed +/proc/apply_active_reta_grants_to_card(obj/item/card/id/id_card) + if(!id_card || !id_card.trim) + return + + // If no active grants, nothing to do (prevents spam during round start) + if(!LAZYLEN(GLOB.reta_active_grants)) + return + + // Check if this card's department has any active incoming RETA grants + for(var/target_dept in GLOB.reta_active_grants) + var/list/job_trims = GLOB.reta_job_trims[target_dept] + if(!LAZYLEN(job_trims)) + continue + + // Check if this card's trim matches the target department + if(!is_type_in_list(id_card.trim, job_trims)) + continue + + log_reta("Card trim [id_card.trim] matches [target_dept] department - applying active grants") + + // Apply all active grants for this department + for(var/origin_dept in GLOB.reta_active_grants[target_dept]) + var/expiry_time = GLOB.reta_active_grants[target_dept][origin_dept] + if(world.time >= expiry_time) + continue // Grant expired, skip it + + var/remaining_time = expiry_time - world.time + if(id_card.grant_reta_access(origin_dept, remaining_time)) + log_reta("Auto-granted [origin_dept] access to newly created [id_card] ([target_dept] department)") + +// Default config values +#define RETA_DEFAULT_DURATION_DS 3000 // 5 minutes +#define RETA_DEFAULT_COOLDOWN_DS 150 // 15 seconds + +/// Initialize RETA config values +/proc/reta_init_config() + log_world("RETA: System initialized with duration=[CONFIG_GET(number/reta_duration_ds)]ds, cooldown=[CONFIG_GET(number/reta_dept_cooldown_ds)]ds, enabled=[CONFIG_GET(flag/reta_enabled)]") + +#undef RETA_DEFAULT_DURATION_DS +#undef RETA_DEFAULT_COOLDOWN_DS diff --git a/code/modules/shuttle/mobile_port/variants/supply.dm b/code/modules/shuttle/mobile_port/variants/supply.dm index c48ab01178eb..a6c5030605a1 100644 --- a/code/modules/shuttle/mobile_port/variants/supply.dm +++ b/code/modules/shuttle/mobile_port/variants/supply.dm @@ -218,7 +218,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( if(spawning_order.charge_on_purchase) receiver_message += " [price] credits have been charged to your bank account" paying_for_this.bank_card_talk(receiver_message) - SSeconomy.track_purchase(paying_for_this, price, spawning_order.pack.name) + SSeconomy.add_audit_entry(paying_for_this, price, spawning_order.pack.name) var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) cargo.adjust_money(price - pack_cost) //Cargo gets the handling fee value += pack_cost diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm index 05a7da0fadab..b85d9ba43d84 100644 --- a/code/modules/spells/spell_types/right_and_wrong.dm +++ b/code/modules/spells/spell_types/right_and_wrong.dm @@ -11,6 +11,8 @@ GLOBAL_DATUM(mass_teaching, /datum/summon_things_controller/spellbook_entry) // 1 in 50 chance of getting something really special. #define SPECIALIST_MAGIC_PROB 2 +GLOBAL_LIST_INIT(summoned_all_guns, get_sane_item_types(/obj/item/gun)) + GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/disabler, /obj/item/gun/energy/e_gun, diff --git a/code/modules/surgery/asthmatic_bypass.dm b/code/modules/surgery/asthmatic_bypass.dm new file mode 100644 index 000000000000..7e69c99a7bdb --- /dev/null +++ b/code/modules/surgery/asthmatic_bypass.dm @@ -0,0 +1,96 @@ +/datum/surgery/asthmatic_bypass + name = "Asthmatic Bypass" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB + requires_bodypart_type = NONE + organ_to_manipulate = ORGAN_SLOT_LUNGS + possible_locs = list(BODY_ZONE_CHEST) + steps = list( + /datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/incise, + /datum/surgery_step/expand_windpipe, + /datum/surgery_step/close, + ) + +/datum/surgery/asthmatic_bypass/can_start(mob/user, mob/living/patient) + . = ..() + + if (!.) + return + + return (patient.has_quirk(/datum/quirk/item_quirk/asthma)) + +/datum/surgery_step/expand_windpipe + name = "force open windpipe (retractor)" + implements = list( + TOOL_RETRACTOR = 80, + TOOL_WIRECUTTER = 45, + ) + time = 8 SECONDS + repeatable = TRUE + preop_sound = 'sound/items/handling/surgery/retractor1.ogg' + success_sound = 'sound/items/handling/surgery/retractor2.ogg' + + /// The amount of inflammation a failure or success of this surgery will reduce. + var/inflammation_reduction = 75 + +/datum/surgery_step/expand_windpipe/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start to stretch [target]'s windpipe, trying your best to avoid nearby blood vessels..."), + span_notice("[user] begins to stretch [target]'s windpipe, taking care to avoid any nearby blood vessels."), + span_notice("[user] begins to stretch [target]'s windpipe."), + ) + display_pain(target, "You feel an agonizing stretching sensation in your neck!") + +/datum/surgery_step/expand_windpipe/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = TRUE) + if (!reduce_inflammation(user, target, tool, surgery)) + return + + default_display_results = FALSE + display_results( + user, + target, + span_notice("You stretch [target]'s windpipe with [tool], managing to avoid the nearby blood vessels and arteries."), + span_notice("[user] succeeds at stretching [target]'s windpipe with [tool], avoiding the nearby blood vessels and arteries."), + span_notice("[user] finishes stretching [target]'s windpipe.") + ) + + return ..() + +/datum/surgery_step/expand_windpipe/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, fail_prob) + if (!reduce_inflammation(user, target, tool, surgery)) + return + + display_results( + user, + target, + span_bolddanger("You stretch [target]'s windpipe with [tool], but accidentally clip a few arteries!"), + span_bolddanger("[user] succeeds at stretching [target]'s windpipe with [tool], but accidentally clips a few arteries!"), + span_bolddanger("[user] finishes stretching [target]'s windpipe, but screws up!") + ) + + target.losebreath++ + + if (iscarbon(target)) + var/mob/living/carbon/carbon_patient = target + var/wound_bonus = tool.wound_bonus + var/obj/item/bodypart/head/patient_chest = carbon_patient.get_bodypart(BODY_ZONE_CHEST) + if (patient_chest) + if (prob(30)) + carbon_patient.cause_wound_of_type_and_severity(WOUND_SLASH, patient_chest, WOUND_SEVERITY_MODERATE, WOUND_SEVERITY_CRITICAL, WOUND_PICK_LOWEST_SEVERITY, tool) + patient_chest.receive_damage(brute = 10, wound_bonus = wound_bonus, sharpness = SHARP_EDGED, damage_source = tool) + + return FALSE + +/// Reduces the asthmatic's inflammation by [inflammation_reduction]. Called by both success and failure. +/datum/surgery_step/expand_windpipe/proc/reduce_inflammation(mob/user, mob/living/target, obj/item/tool, datum/surgery/surgery) + var/datum/quirk/item_quirk/asthma/asthma_quirk = locate(/datum/quirk/item_quirk/asthma) in target.quirks + if (isnull(asthma_quirk)) + qdel(surgery) // not really an error cause quirks can get removed during surgery? + return FALSE + + asthma_quirk.adjust_inflammation(-inflammation_reduction) + return TRUE diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 38731efab0a7..3b7052caeb24 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -1,6 +1,7 @@ /obj/item/bodypart name = "limb" desc = "Why is it detached..." + abstract_type = /obj/item/bodypart force = 3 throwforce = 3 w_class = WEIGHT_CLASS_SMALL @@ -194,7 +195,7 @@ var/unarmed_sharpness = NONE /// Traits that are given to the holder of the part. This does not update automatically on life(), only when the organs are initially generated or inserted! - var/list/bodypart_traits = list() + var/list/bodypart_traits /// The name of the trait source that the organ gives. Should not be altered during the events of gameplay, and will cause problems if it is. var/bodypart_trait_source = BODYPART_TRAIT /// List of the above datums which have actually been instantiated, managed automatically @@ -811,15 +812,15 @@ if(speed_modifier) old_owner.update_bodypart_speed_modifier() - if(length(bodypart_traits)) + if(LAZYLEN(bodypart_traits)) old_owner.remove_traits(bodypart_traits, bodypart_trait_source) UnregisterSignal(old_owner, list( SIGNAL_REMOVETRAIT(TRAIT_NOLIMBDISABLE), - SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), + SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), SIGNAL_REMOVETRAIT(TRAIT_NOBLOOD), SIGNAL_ADDTRAIT(TRAIT_NOBLOOD), - )) + )) UnregisterSignal(old_owner, list(COMSIG_ATOM_RESTYLE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_LIVING_SET_BODY_POSITION)) @@ -831,7 +832,7 @@ if(speed_modifier) owner.update_bodypart_speed_modifier() - if(length(bodypart_traits)) + if(LAZYLEN(bodypart_traits)) owner.add_traits(bodypart_traits, bodypart_trait_source) if(initial(can_be_disabled)) @@ -872,7 +873,7 @@ item_flags &= ~ABSTRACT REMOVE_TRAIT(src, TRAIT_NODROP, ORGAN_INSIDE_BODY_TRAIT) - if(!length(bodypart_traits)) + if(!LAZYLEN(bodypart_traits)) return owner.remove_traits(bodypart_traits, bodypart_trait_source) @@ -1488,3 +1489,17 @@ return "metal" return "error" + +/// Add a trait to the bodypart traits list, then applies the trait if necessary +/obj/item/bodypart/proc/add_bodypart_trait(new_trait) + LAZYOR(bodypart_traits, new_trait) + if(isnull(owner)) + return + ADD_TRAIT(owner, new_trait, bodypart_trait_source) + +/// Remove a trait from the bodypart traits list, then removes the trait if necessary +/obj/item/bodypart/proc/remove_bodypart_trait(old_trait) + LAZYREMOVE(bodypart_traits, old_trait) + if(isnull(owner)) + return + REMOVE_TRAIT(owner, old_trait, bodypart_trait_source) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 0e25e1b981f8..fb979ab054dd 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -206,10 +206,9 @@ arm_owner.dropItemToGround(arm_owner.get_item_for_held_index(held_index), 1) . = ..() if(arm_owner.handcuffed) - arm_owner.handcuffed.forceMove(drop_location()) - arm_owner.handcuffed.dropped(arm_owner) + var/obj/item/lost_cuffs = arm_owner.handcuffed arm_owner.set_handcuffed(null) - arm_owner.update_handcuffed() + arm_owner.dropItemToGround(lost_cuffs, force = TRUE) if(arm_owner.hud_used) var/atom/movable/screen/inventory/hand/associated_hand = arm_owner.hud_used.hand_slots["[held_index]"] associated_hand?.update_appearance() @@ -222,13 +221,8 @@ . = ..() if(special || !leg_owner) return - if(leg_owner.legcuffed) - leg_owner.legcuffed.forceMove(drop_location()) - leg_owner.legcuffed.dropped(leg_owner) - leg_owner.legcuffed = null - leg_owner.update_worn_legcuffs() - if(leg_owner.shoes) - leg_owner.dropItemToGround(leg_owner.shoes, force = TRUE) + leg_owner.dropItemToGround(leg_owner.legcuffed, force = TRUE) + leg_owner.dropItemToGround(leg_owner.shoes, force = TRUE) /obj/item/bodypart/head/drop_limb(special, dismembered, move_to_floor = TRUE) if(!special) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index e8d0f4d440f0..242aab26be5d 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -34,7 +34,7 @@ /// Replacement name var/real_name = "" /// Flags related to appearance, such as hair, lips, etc - var/head_flags = HEAD_ALL_FEATURES + var/head_flags = HEAD_DEFAULT_FEATURES /// Hair style var/hairstyle = "Bald" @@ -214,18 +214,20 @@ . = ..() AddElement(/datum/element/toy_talk) -/obj/item/bodypart/head/GetVoice() +/obj/item/bodypart/head/get_voice() return "The head of [real_name]" /obj/item/bodypart/head/update_bodypart_damage_state() - if (!ishuman(owner)) + if (head_flags & HEAD_NO_DISFIGURE) return ..() + var/old_states = brutestate + burnstate . = ..() var/new_states = brutestate + burnstate - var/mob/living/carbon/human/as_human = owner - if ((old_states >= HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES && new_states < HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES) || (old_states < HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES && new_states >= HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES)) - as_human.update_visible_name() + if(new_states >= HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES) + add_bodypart_trait(TRAIT_DISFIGURED) + else if(old_states >= HUMAN_DISFIGURATION_HEAD_DAMAGE_STATES) + remove_bodypart_trait(TRAIT_DISFIGURED) /obj/item/bodypart/head/monkey icon = 'icons/mob/human/species/monkey/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm index 6cc44094d21f..1d3ed4dfe5e6 100644 --- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm +++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm @@ -11,17 +11,10 @@ LAZYNULL(hair_masks) if(human_head_owner) for(var/obj/item/worn_item in human_head_owner.get_equipped_items()) - if(worn_item.flags_inv & HIDEHAIR) - hair_hidden = TRUE - if(worn_item.flags_inv & HIDEFACIALHAIR) - facial_hair_hidden = TRUE if(worn_item.hair_mask) LAZYSET(hair_masks, worn_item.hair_mask, TRUE) - - //invisibility and husk stuff - if(HAS_TRAIT(human_head_owner, TRAIT_INVISIBLE_MAN) || HAS_TRAIT(human_head_owner, TRAIT_HUSK)) - hair_hidden = TRUE - facial_hair_hidden = TRUE + hair_hidden = !!(human_head_owner.obscured_slots & HIDEHAIR) + facial_hair_hidden = !!(human_head_owner.obscured_slots & HIDEFACIALHAIR) if(is_husked) hair_hidden = TRUE facial_hair_hidden = TRUE diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 6cff487a837c..d60862086725 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -135,6 +135,7 @@ /obj/item/bodypart/arm name = "arm" desc = "Hey buddy give me a HAND and report this to the github because you shouldn't be seeing this." + abstract_type = /obj/item/bodypart/arm attack_verb_continuous = list("slaps", "punches") attack_verb_simple = list("slap", "punch") max_damage = LIMB_MAX_HP_DEFAULT @@ -400,6 +401,7 @@ /obj/item/bodypart/leg name = "leg" desc = "This item shouldn't exist. Talk about breaking a leg. Badum-Tss!" + abstract_type = /obj/item/bodypart/leg attack_verb_continuous = list("kicks", "stomps") attack_verb_simple = list("kick", "stomp") max_damage = LIMB_MAX_HP_DEFAULT diff --git a/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm index adeaa04067cb..765dd8d465b6 100644 --- a/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm @@ -3,7 +3,7 @@ icon_static = 'icons/mob/human/species/ghost.dmi' icon_state = "ghost_head" biological_state = BIO_FLESH - bodytype = BODYTYPE_GHOST + bodytype = BODYTYPE_ORGANIC|BODYTYPE_GHOST limb_id = SPECIES_GHOST is_dimorphic = FALSE should_draw_greyscale = FALSE @@ -18,24 +18,19 @@ icon_state = "ghost_chest" biological_state = BIO_FLESH acceptable_bodyshape = BODYTYPE_GHOST - bodytype = BODYTYPE_GHOST + bodytype = BODYTYPE_ORGANIC|BODYTYPE_GHOST limb_id = SPECIES_GHOST is_dimorphic = FALSE should_draw_greyscale = FALSE dmg_overlay_type = null wing_types = null -//slightly different sprite meant to differentiate spirit from ghost. -/obj/item/bodypart/chest/ghost/spirit - icon_state = "spirit_chest" - limb_id = SPECIES_SPIRIT - /obj/item/bodypart/arm/left/ghost icon = 'icons/mob/human/species/ghost.dmi' icon_static = 'icons/mob/human/species/ghost.dmi' icon_state = "ghost_l_arm" biological_state = BIO_FLESH|BIO_JOINTED - bodytype = BODYTYPE_GHOST + bodytype = BODYTYPE_ORGANIC|BODYTYPE_GHOST limb_id = SPECIES_GHOST should_draw_greyscale = FALSE dmg_overlay_type = null @@ -45,7 +40,7 @@ icon_static = 'icons/mob/human/species/ghost.dmi' icon_state = "ghost_r_arm" biological_state = BIO_FLESH|BIO_JOINTED - bodytype = BODYTYPE_GHOST + bodytype = BODYTYPE_ORGANIC|BODYTYPE_GHOST limb_id = SPECIES_GHOST should_draw_greyscale = FALSE dmg_overlay_type = null diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index b431000b9e24..d8d1ed597744 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -64,7 +64,7 @@ var/uniform_compatible = isnull(worn_uniform) \ || (worn_uniform.supports_variations_flags & DIGITIGRADE_VARIATIONS) \ || !(worn_uniform.body_parts_covered & LEGS) \ - || (worn_suit?.flags_inv & HIDEJUMPSUIT) // If suit hides our jumpsuit, it doesn't matter if it squishes + || (obscured_slots & HIDEJUMPSUIT) // If suit hides our jumpsuit, it doesn't matter if it squishes var/suit_compatible = isnull(worn_suit) \ || (worn_suit.supports_variations_flags & DIGITIGRADE_VARIATIONS) \ diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 7893f33ec4d5..6ce2f81ad6da 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -23,9 +23,7 @@ var/obj/item/implant/implant /datum/surgery_step/extract_implant/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) - for(var/obj/item/object in target.implants) - implant = object - break + implant = LAZYACCESS(target.implants, 1) if(implant) display_results( user, @@ -56,29 +54,27 @@ display_pain(target, "You can feel your [implant.name] pulled out of you!") implant.removed(target) - if (QDELETED(implant)) - return ..() - - var/obj/item/implantcase/case - for(var/obj/item/implantcase/implant_case in user.held_items) - case = implant_case - break - if(!case) - case = locate(/obj/item/implantcase) in get_turf(target) - if(case && !case.imp) - case.imp = implant - implant.forceMove(case) - case.update_appearance() - display_results( - user, - target, - span_notice("You place [implant] into [case]."), - span_notice("[user] places [implant] into [case]!"), - span_notice("[user] places it into [case]!"), - ) - else - qdel(implant) - + if (!QDELETED(implant)) + var/obj/item/implantcase/case + for(var/obj/item/implantcase/implant_case in user.held_items) + case = implant_case + break + if(!case) + case = locate(/obj/item/implantcase) in get_turf(target) + if(case && !case.imp) + case.imp = implant + implant.forceMove(case) + case.update_appearance() + display_results( + user, + target, + span_notice("You place [implant] into [case]."), + span_notice("[user] places [implant] into [case]!"), + span_notice("[user] places it into [case]!"), + ) + else + qdel(implant) + implant = null else to_chat(user, span_warning("You can't find anything in [target]'s [target_zone]!")) return ..() diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index ac602413eee1..69f0809dc89d 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -1,6 +1,7 @@ /obj/item/organ name = "organ" icon = 'icons/obj/medical/organs/organs.dmi' + abstract_type = /obj/item/organ w_class = WEIGHT_CLASS_SMALL throwforce = 0 /// The mob that owns this organ. @@ -324,6 +325,7 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) lungs = new() lungs.Insert(src) lungs.set_organ_damage(0) + lungs.received_pressure_mult = lungs::received_pressure_mult var/obj/item/organ/heart/heart = get_organ_slot(ORGAN_SLOT_HEART) if(heart) @@ -394,28 +396,28 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) replacement.set_organ_damage(damage) /// Called by medical scanners to get a simple summary of how healthy the organ is. Returns an empty string if things are fine. -/obj/item/organ/proc/get_status_text(advanced, add_tooltips) +/obj/item/organ/proc/get_status_text(advanced, add_tooltips, colored = TRUE) if(advanced && (organ_flags & ORGAN_HAZARDOUS)) - return conditional_tooltip("Harmful Foreign Body", "Remove surgically.", add_tooltips) + return conditional_tooltip("[colored ? "" : ""]Harmful Foreign Body[colored ? "" : ""]", "Remove surgically.", add_tooltips) if(organ_flags & ORGAN_EMP) - return conditional_tooltip("EMP-Derived Failure", "Repair or replace surgically.", add_tooltips) + return conditional_tooltip("[colored ? "" : ""]EMP-Derived Failure[colored ? "" : ""]", "Repair or replace surgically.", add_tooltips) var/tech_text = "" if(owner.has_reagent(/datum/reagent/inverse/technetium)) tech_text = "[round((damage / maxHealth) * 100, 1)]% damaged" if(organ_flags & ORGAN_FAILING) - return conditional_tooltip("[tech_text || "Non-Functional"]", "Repair or replace surgically.", add_tooltips) + return conditional_tooltip("[colored ? "" : ""][tech_text || "Non-Functional"][colored ? "" : ""]", "Repair or replace surgically.", add_tooltips) if(damage > high_threshold) - return conditional_tooltip("[tech_text || "Severely Damaged"]", "[healing_factor ? "Treat with rest or use specialty medication." : "Repair surgically or use specialty medication."]", add_tooltips && owner.stat != DEAD) + return conditional_tooltip("[colored ? "" : ""][tech_text || "Severely Damaged"][colored ? "" : ""]", "[healing_factor ? "Treat with rest or use specialty medication." : "Repair surgically or use specialty medication."]", add_tooltips && owner.stat != DEAD) if(damage > low_threshold) - return conditional_tooltip("[tech_text || "Mildly Damaged"] ", "[healing_factor ? "Treat with rest." : "Use specialty medication."]", add_tooltips && owner.stat != DEAD) + return conditional_tooltip("[colored ? "" : ""][tech_text || "Mildly Damaged"][colored ? "" : ""]", "[healing_factor ? "Treat with rest." : "Use specialty medication."]", add_tooltips && owner.stat != DEAD) if(tech_text) - return "[tech_text]" + return "[colored ? "" : ""][tech_text][colored ? "" : ""]" return "" diff --git a/code/modules/surgery/organs/external/_visual_organs.dm b/code/modules/surgery/organs/external/_visual_organs.dm index b4924471195e..2978ffa0dcf5 100644 --- a/code/modules/surgery/organs/external/_visual_organs.dm +++ b/code/modules/surgery/organs/external/_visual_organs.dm @@ -123,12 +123,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times dyable = TRUE /datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR) /datum/bodypart_overlay/mutant/horns/get_global_feature_list() return SSaccessories.horns_list @@ -155,12 +150,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times feature_key = FEATURE_FRILLS /datum/bodypart_overlay/mutant/frills/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(!(human.head?.flags_inv & HIDEEARS)) - return TRUE - return FALSE + return !(bodypart_owner.owner?.obscured_slots & HIDEEARS) /datum/bodypart_overlay/mutant/frills/get_global_feature_list() return SSaccessories.frills_list @@ -189,12 +179,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times feature_key = FEATURE_SNOUT /datum/bodypart_overlay/mutant/snout/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if((human.head?.flags_inv & HIDESNOUT) || (human.wear_mask?.flags_inv & HIDESNOUT)) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDESNOUT) /datum/bodypart_overlay/mutant/snout/get_global_feature_list() return SSaccessories.snouts_list @@ -282,12 +267,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times return burnt ? burn_datum.icon_state : sprite_datum.icon_state /datum/bodypart_overlay/mutant/antennae/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(!(human.head?.flags_inv & HIDEANTENNAE)) - return TRUE - return FALSE + return !(bodypart_owner.owner?.obscured_slots & HIDEANTENNAE) ///The leafy hair of a podperson /obj/item/organ/pod_hair @@ -333,9 +313,4 @@ Unlike normal organs, we're actually inside a persons limbs at all times overlay.color = null /datum/bodypart_overlay/mutant/pod_hair/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR) diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm index 0cb680c112e7..4fc3c862b05b 100644 --- a/code/modules/surgery/organs/external/spines.dm +++ b/code/modules/surgery/organs/external/spines.dm @@ -38,12 +38,7 @@ return SSaccessories.spines_list /datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(human.wear_suit?.flags_inv & HIDEJUMPSUIT) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT) /datum/bodypart_overlay/mutant/spines/set_dye_color(new_color, obj/item/organ/tail/organ) var/obj/item/organ/tail/tail = organ?.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 48eeffece855..a554e759713b 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -148,12 +148,7 @@ return "[wagging ? "wagging_" : ""][sprite_datum.icon_state]" //add the wagging tag if we be wagging /datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(human.wear_suit?.flags_inv & HIDEJUMPSUIT) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT) /obj/item/organ/tail/cat name = "tail" @@ -283,12 +278,7 @@ return (!isnull(tail_spine_key) ? "[tail_spine_key]_" : "") + (wagging ? "wagging_" : "") + sprite_datum.icon_state // Select the wagging state if appropriate /datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(human.wear_suit?.flags_inv & HIDEJUMPSUIT) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT) /datum/bodypart_overlay/mutant/tail_spines/set_dye_color(new_color, obj/item/organ/organ) dye_color = new_color //no update_body_parts() call, tail/set_dye_color will do it. diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 86bad3a1b575..ee6f45de75ee 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -82,8 +82,8 @@ if(human.stat || human.body_position == LYING_DOWN || isnull(human.client)) return FALSE //Jumpsuits have tail holes, so it makes sense they have wing holes too - if(!cant_hide && human.wear_suit && ((human.wear_suit.flags_inv & HIDEJUMPSUIT) && (!human.wear_suit.species_exception || !is_type_in_list(src, human.wear_suit.species_exception)))) - to_chat(human, span_warning("Your suit blocks your wings from extending!")) + if(!cant_hide && (human.obscured_slots & HIDEJUMPSUIT)) + to_chat(human, span_warning("Your clothing blocks your wings from extending!")) return FALSE var/turf/location = get_turf(human) if(!location) diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index ff282b306663..e71251e8ebfc 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -54,11 +54,7 @@ return FALSE if(owner.has_gravity()) return FALSE - if(ishuman(owner)) - var/mob/living/carbon/human/human_owner = owner - if(human_owner.wear_suit?.flags_inv & HIDEMUTWINGS) - return FALSE //Can't fly with hidden wings - if(burnt) + if((owner.obscured_slots & HIDEMUTWINGS) || burnt) return FALSE var/datum/gas_mixture/current = owner.loc.return_air() if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) @@ -117,12 +113,7 @@ return SSaccessories.moth_wings_list /datum/bodypart_overlay/mutant/wings/moth/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(human.wear_suit?.flags_inv & HIDEMUTWINGS) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEMUTWINGS) /datum/bodypart_overlay/mutant/wings/moth/get_base_icon_state() return burnt ? burn_datum.icon_state : sprite_datum.icon_state diff --git a/code/modules/surgery/organs/external/wings/wings.dm b/code/modules/surgery/organs/external/wings/wings.dm index ac990ba10323..a801f9720daf 100644 --- a/code/modules/surgery/organs/external/wings/wings.dm +++ b/code/modules/surgery/organs/external/wings/wings.dm @@ -25,15 +25,4 @@ feature_key = FEATURE_WINGS /datum/bodypart_overlay/mutant/wings/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if(!human.wear_suit) - return TRUE - if(!(human.wear_suit.flags_inv & HIDEJUMPSUIT)) - return TRUE - if(human.wear_suit.species_exception && is_type_in_list(src, human.wear_suit.species_exception)) - return TRUE - return FALSE - - + return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT) diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm index bec23ed56892..5ae800d95ae0 100644 --- a/code/modules/surgery/organs/helpers.dm +++ b/code/modules/surgery/organs/helpers.dm @@ -43,3 +43,30 @@ /mob/living/carbon/get_organ_slot(slot) . = organs_slot[slot] +/** + * Returns a list of all missing organs this species should have + * + * list [key] is the ORGAN_SLOT missing an organ, list value is the text name of the slot organ + */ +/mob/living/carbon/human/proc/get_missing_organs() + var/mob/living/carbon/human/humantarget = src + var/list/missing_organs = list() + + if(!humantarget.get_organ_slot(ORGAN_SLOT_BRAIN)) + missing_organs[ORGAN_SLOT_BRAIN] = "Brain" + if(humantarget.needs_heart() && !humantarget.get_organ_slot(ORGAN_SLOT_HEART)) + missing_organs[ORGAN_SLOT_HEART] = "Heart" + if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOBREATH, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantlungs) && !humantarget.get_organ_slot(ORGAN_SLOT_LUNGS)) + missing_organs[ORGAN_SLOT_LUNGS] = "Lungs" + if(!HAS_TRAIT_FROM(humantarget, TRAIT_LIVERLESS_METABOLISM, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantliver) && !humantarget.get_organ_slot(ORGAN_SLOT_LIVER)) + missing_organs[ORGAN_SLOT_LIVER] = "Liver" + if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOHUNGER, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantstomach) && !humantarget.get_organ_slot(ORGAN_SLOT_STOMACH)) + missing_organs[ORGAN_SLOT_STOMACH] ="Stomach" + if(!isnull(humantarget.dna.species.mutanttongue) && !humantarget.get_organ_slot(ORGAN_SLOT_TONGUE)) + missing_organs[ORGAN_SLOT_TONGUE] = "Tongue" + if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EARS)) + missing_organs[ORGAN_SLOT_EARS] = "Ears" + if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EYES)) + missing_organs[ORGAN_SLOT_EYES] = "Eyes" + + return missing_organs diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index e7594666c4f3..29dbbe6a73d8 100644 --- a/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -99,7 +99,7 @@ ADD_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) organ_owner.med_hud_set_status() -/obj/item/organ/appendix/get_status_text(advanced, add_tooltips) +/obj/item/organ/appendix/get_status_text(advanced, add_tooltips, colored) if(!(organ_flags & ORGAN_FAILING) && inflamation_stage) return conditional_tooltip("Inflamed", "Remove surgically.", add_tooltips) return ..() diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index 681d68e62820..6181ce1105b4 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -1,6 +1,7 @@ /obj/item/organ/cyberimp/arm name = "arm-mounted implant" desc = "An implant that goes in your arm to improve it." + abstract_type = /obj/item/organ/cyberimp/arm zone = BODY_ZONE_R_ARM slot = ORGAN_SLOT_RIGHT_ARM_AUG w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm index c5dedb71fab6..767e759e794d 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm @@ -1,6 +1,7 @@ /obj/item/organ/cyberimp/chest name = "cybernetic torso implant" desc = "Implants for the organs in your torso." + abstract_type = /obj/item/organ/cyberimp/chest zone = BODY_ZONE_CHEST /obj/item/organ/cyberimp/chest/nutriment diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm index e548b25e8358..18a778212289 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm @@ -2,7 +2,7 @@ /obj/item/organ/cyberimp name = "cybernetic implant" desc = "A state-of-the-art implant that improves a baseline's functionality." - + abstract_type = /obj/item/organ/cyberimp organ_flags = ORGAN_ROBOTIC failing_desc = "seems to be broken." /// icon of the bodypart overlay we're going to be applying to our owner diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 66991b6d2367..0c86cac08d56 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -178,12 +178,7 @@ return SSaccessories.ears_list /datum/bodypart_overlay/mutant/cat_ears/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) - var/mob/living/carbon/human/human = bodypart_owner.owner - if(!istype(human)) - return TRUE - if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) - return FALSE - return TRUE + return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR) /datum/bodypart_overlay/mutant/cat_ears/get_image(image_layer, obj/item/bodypart/limb) var/mutable_appearance/base_ears = ..() diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 98d32916c587..5d1d37ca9f99 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -267,8 +267,7 @@ var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -EYES_LAYER, parent) var/list/overlays = list(eye_left, eye_right) - var/obscured = parent.check_obscured_slots() - if(overlay_ignore_lighting && !(obscured & ITEM_SLOT_EYES)) + if(overlay_ignore_lighting && !(parent.obscured_slots & HIDEEYES)) overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -EYES_LAYER, alpha = eye_left.alpha) overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -EYES_LAYER, alpha = eye_right.alpha) @@ -453,6 +452,8 @@ /// Animates one eyelid at a time, thanks BYOND and thanks animation chains /obj/item/organ/eyes/proc/animate_eyelid(obj/effect/abstract/eyelid_effect/eyelid, mob/living/carbon/human/parent, sync_blinking = TRUE, list/anim_times = null) . = list() + if(isnull(eyelid)) // Can't blink if we don't have an eyelid + return var/prevent_loops = HAS_TRAIT(parent, TRAIT_PREVENT_BLINK_LOOPS) animate(eyelid, alpha = 0, time = 0, loop = (prevent_loops ? 0 : -1)) diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm index 0e00dce883af..ce04a2fb66d5 100644 --- a/code/modules/surgery/organs/internal/heart/_heart.dm +++ b/code/modules/surgery/organs/internal/heart/_heart.dm @@ -97,7 +97,7 @@ /obj/item/organ/heart/proc/is_beating() return beating -/obj/item/organ/heart/get_status_text(advanced, add_tooltips) +/obj/item/organ/heart/get_status_text(advanced, add_tooltips, colored) if(owner.has_status_effect(/datum/status_effect/heart_attack)) return conditional_tooltip("Myocardial Infarction", "Apply defibrillation immediately. Similar electric shocks may work in emergencies.", add_tooltips) if((!beating && !(organ_flags & ORGAN_FAILING) && owner.needs_heart() && owner.stat != DEAD)) diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm index 10fbc5f2f304..fe7b726d00a4 100644 --- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm +++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm @@ -108,7 +108,7 @@ return var/list/batteries = list() - for(var/obj/item/stock_parts/power_store/cell in owner.get_all_contents()) + for(var/obj/item/stock_parts/power_store/cell in owner.get_all_cells()) if(cell.used_charge()) batteries += cell diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 27a88a6d94e0..c15dd74a2635 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -69,6 +69,9 @@ var/n2o_euphoria = EUPHORIA_LAST_FLAG var/healium_euphoria = EUPHORIA_LAST_FLAG + /// All incoming breaths will have their pressure multiplied against this. Higher values allow more air to be breathed at once, + /// while lower values can cause suffocation in low pressure environments. + var/received_pressure_mult = 1 var/oxy_breath_dam_min = MIN_TOXIC_GAS_DAMAGE var/oxy_breath_dam_max = MAX_TOXIC_GAS_DAMAGE @@ -168,6 +171,7 @@ receiver.clear_alert(ALERT_NOT_ENOUGH_NITRO) receiver.clear_alert(ALERT_NOT_ENOUGH_PLASMA) receiver.clear_alert(ALERT_NOT_ENOUGH_N2O) + update_bronchodilation_alerts() /obj/item/organ/lungs/on_mob_remove(mob/living/carbon/organ_owner, special, movement_flags) . = ..() @@ -646,7 +650,7 @@ // Build out our partial pressures, for use as we go var/list/partial_pressures = list() for(var/gas_id in breath_gases) - partial_pressures[gas_id] = breath.get_breath_partial_pressure(breath_gases[gas_id][MOLES]) + partial_pressures[gas_id] = breath.get_breath_partial_pressure(breath_gases[gas_id][MOLES] * received_pressure_mult) // Treat gas as other types of gas for(var/list/conversion_packet in treat_as) @@ -1044,6 +1048,38 @@ #undef GAS_TOLERANCE +/// Adjusting proc for [received_pressure_mult]. Updates bronchodilation alerts. +/obj/item/organ/lungs/proc/adjust_received_pressure_mult(adjustment) + received_pressure_mult = max(received_pressure_mult + adjustment, 0) + update_bronchodilation_alerts() + +/// Setter proc for [received_pressure_mult]. Updates bronchodilation alerts. +/obj/item/organ/lungs/proc/set_received_pressure_mult(new_value) + received_pressure_mult = max(new_value, 0) + update_bronchodilation_alerts() + +#define LUNG_CAPACITY_ALERT_BUFFER 0.003 +/// Depending on [received_pressure_mult], gives either a bronchocontraction or bronchoconstriction alert to our owner (if we have one), or clears the alert +/// if [received_pressure_mult] is near 1. +/obj/item/organ/lungs/proc/update_bronchodilation_alerts() + if (!owner) + return + + var/initial_value = initial(received_pressure_mult) + + // you wont really notice if youre only breathing a bit more or a bit less + var/dilated = (received_pressure_mult > (initial_value + LUNG_CAPACITY_ALERT_BUFFER)) + var/constricted = (received_pressure_mult < (initial_value - LUNG_CAPACITY_ALERT_BUFFER)) + + if (dilated) + owner.throw_alert(ALERT_BRONCHODILATION, /atom/movable/screen/alert/bronchodilated) + else if (constricted) + owner.throw_alert(ALERT_BRONCHODILATION, /atom/movable/screen/alert/bronchoconstricted) + else + owner.clear_alert(ALERT_BRONCHODILATION) + +#undef LUNG_CAPACITY_ALERT_BUFFER + /obj/item/organ/lungs/ethereal name = "aeration reticulum" desc = "These exotic lungs seem crunchier than most." diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index e9768693e8c4..f87a16d97b82 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -261,6 +261,7 @@ #include "reagent_transfer.dm" #include "required_map_items.dm" #include "resist.dm" +#include "reta_system.dm" #include "say.dm" #include "screenshot_airlocks.dm" #include "screenshot_antag_icons.dm" diff --git a/code/modules/unit_tests/cargo_crate_sanity.dm b/code/modules/unit_tests/cargo_crate_sanity.dm index db1effb50d7c..82304f2a256d 100644 --- a/code/modules/unit_tests/cargo_crate_sanity.dm +++ b/code/modules/unit_tests/cargo_crate_sanity.dm @@ -19,7 +19,7 @@ var/crate_value = counterlist_sum(minimum_cost.total_value) var/obj/results = new_crate.generate(testing_floor) - var/datum/export_report/export_log = export_item_and_contents(results, apply_elastic = TRUE, delete_unsold = TRUE, export_market = EXPORT_MARKET_STATION) + var/datum/export_report/export_log = export_item_and_contents(results, apply_elastic = TRUE, delete_unsold = TRUE, export_markets = list(EXPORT_MARKET_STATION)) // The value of the crate and all of it's contents. var/value = counterlist_sum(export_log.total_value) diff --git a/code/modules/unit_tests/reta_system.dm b/code/modules/unit_tests/reta_system.dm new file mode 100644 index 000000000000..152b9a69e6bf --- /dev/null +++ b/code/modules/unit_tests/reta_system.dm @@ -0,0 +1,152 @@ +/** + * Unit Tests for Request Emergency Temporary Access (RETA) System + * + * Main system file: code\modules\reta\reta_system.dm + */ + +/datum/unit_test/reta_basic_functions + +/datum/unit_test/reta_basic_functions/Run() + // Initialize RETA system for testing + initialize_reta_system() + + // Test department mapping + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Engineering"), "Engineering", "Engineering department mapping failed") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("engineering"), "Engineering", "Engineering lowercase mapping failed") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Medical Department"), "Medical", "Medical department mapping failed") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("medbay"), "Medical", "Medbay alias mapping failed") + TEST_ASSERT_NULL(reta_get_user_department_by_name("Unknown"), "Unknown department should return null") + + // Test cooldown system + TEST_ASSERT(!reta_on_cooldown("Engineering", "Medical"), "Fresh cooldown should be false") + reta_set_cooldown("Engineering", "Medical", 100) + TEST_ASSERT(reta_on_cooldown("Engineering", "Medical"), "Set cooldown should be true") + + // Test department grants - check that departments get appropriate access levels + TEST_ASSERT(GLOB.reta_dept_grants["Engineering"], "Engineering grants should exist") + TEST_ASSERT(ACCESS_ENGINEERING in GLOB.reta_dept_grants["Engineering"], "Engineering should grant ACCESS_ENGINEERING") + TEST_ASSERT(ACCESS_ATMOSPHERICS in GLOB.reta_dept_grants["Engineering"], "Engineering should grant ACCESS_ATMOSPHERICS") + TEST_ASSERT(!(ACCESS_CONSTRUCTION in GLOB.reta_dept_grants["Engineering"]), "Engineering should NOT grant ACCESS_CONSTRUCTION") + TEST_ASSERT(GLOB.reta_dept_grants["Medical"], "Medical grants should exist") + TEST_ASSERT(ACCESS_MEDICAL in GLOB.reta_dept_grants["Medical"], "Medical should grant ACCESS_MEDICAL") + TEST_ASSERT(ACCESS_SURGERY in GLOB.reta_dept_grants["Medical"], "Medical should grant ACCESS_SURGERY") + TEST_ASSERT(GLOB.reta_dept_grants["Security"], "Security grants should exist") + TEST_ASSERT(ACCESS_SECURITY in GLOB.reta_dept_grants["Security"], "Security should grant ACCESS_SECURITY") + TEST_ASSERT(ACCESS_BRIG in GLOB.reta_dept_grants["Security"], "Security should grant ACCESS_BRIG") + TEST_ASSERT(ACCESS_BRIG_ENTRANCE in GLOB.reta_dept_grants["Security"], "Security should grant ACCESS_BRIG_ENTRANCE") + TEST_ASSERT(!(ACCESS_ARMORY in GLOB.reta_dept_grants["Security"]), "Security should NOT grant ACCESS_ARMORY") + + // Test new departments + TEST_ASSERT(GLOB.reta_dept_grants["Command"], "Command grants should exist") + TEST_ASSERT(ACCESS_COMMAND in GLOB.reta_dept_grants["Command"], "Command should grant ACCESS_COMMAND") + TEST_ASSERT(!(ACCESS_CAPTAIN in GLOB.reta_dept_grants["Command"]), "Command should NOT grant ACCESS_CAPTAIN") + + TEST_ASSERT(GLOB.reta_dept_grants["Cargo"], "Cargo grants should exist") + TEST_ASSERT(ACCESS_CARGO in GLOB.reta_dept_grants["Cargo"], "Cargo should grant ACCESS_CARGO") + TEST_ASSERT(!(ACCESS_MINING in GLOB.reta_dept_grants["Cargo"]), "Cargo should NOT grant ACCESS_MINING") + + TEST_ASSERT(GLOB.reta_dept_grants["Mining"], "Mining grants should exist") + TEST_ASSERT(ACCESS_MINING in GLOB.reta_dept_grants["Mining"], "Mining should grant ACCESS_MINING") + TEST_ASSERT(ACCESS_MINING_STATION in GLOB.reta_dept_grants["Mining"], "Mining should grant ACCESS_MINING_STATION") + TEST_ASSERT(ACCESS_CARGO in GLOB.reta_dept_grants["Mining"], "Mining should grant ACCESS_CARGO") + + // Test department name mapping including new Mining support + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Mining Station"), "Mining", "Mining Station should map to Mining") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Command"), "Command", "Command should map to Command") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Bridge"), "Command", "Bridge should map to Command") + + // Test autonamed service areas + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Kitchen"), "Service", "Kitchen should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Bar"), "Service", "Bar should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Cafeteria"), "Service", "Cafeteria should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Diner"), "Service", "Diner should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Hydroponics"), "Service", "Hydroponics should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Botany"), "Service", "Botany should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Janitor"), "Service", "Janitor should map to Service") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Custodial"), "Service", "Custodial should map to Service") + + // Test autonamed medical areas + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Pharmacy"), "Medical", "Pharmacy should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Chemistry"), "Medical", "Chemistry should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Chem"), "Medical", "Chem should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Morgue"), "Medical", "Morgue should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Virology"), "Medical", "Virology should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Surgery"), "Medical", "Surgery should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Operating"), "Medical", "Operating should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Cryo"), "Medical", "Cryo should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Patients"), "Medical", "Patients should map to Medical") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Exam"), "Medical", "Exam should map to Medical") + + // Test autonamed engineering areas + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Atmospherics"), "Engineering", "Atmospherics should map to Engineering") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Atmos"), "Engineering", "Atmos should map to Engineering") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Supermatter"), "Engineering", "Supermatter should map to Engineering") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Gravity"), "Engineering", "Gravity should map to Engineering") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Telecomm"), "Engineering", "Telecomm should map to Engineering") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Tcomm"), "Engineering", "Tcomm should map to Engineering") + + // Test autonamed science areas + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Xenobiology"), "Science", "Xenobiology should map to Science") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Xenobio"), "Science", "Xenobio should map to Science") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Robotics"), "Science", "Robotics should map to Science") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Genetics"), "Science", "Genetics should map to Science") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Ordnance"), "Science", "Ordnance should map to Science") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Cytology"), "Science", "Cytology should map to Science") + + // Test autonamed security areas + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Brig"), "Security", "Brig should map to Security") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Holding"), "Security", "Holding should map to Security") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Armory"), "Security", "Armory should map to Security") + TEST_ASSERT_EQUAL(reta_get_user_department_by_name("Checkpoint"), "Security", "Checkpoint should map to Security") + +/datum/unit_test/reta_id_card_access + +/datum/unit_test/reta_id_card_access/Run() + // Initialize RETA system for testing + initialize_reta_system() + + var/obj/item/card/id/test_card = allocate(/obj/item/card/id) + test_card.registered_name = "Test User" + + // Test temporary access granting + TEST_ASSERT(!test_card.has_reta_access(ACCESS_ENGINEERING), "ID card should not have temp access initially") + TEST_ASSERT(!(ACCESS_ENGINEERING in test_card.access), "ID card should not have engineering access initially") + + test_card.grant_reta_access("Engineering", 100) + TEST_ASSERT(test_card.has_reta_access(ACCESS_ENGINEERING), "ID card should have temp access after granting") + TEST_ASSERT(ACCESS_ENGINEERING in test_card.access, "ID card should have engineering access in main access list") + + // Test access clearing + test_card.clear_reta_access() + TEST_ASSERT(!test_card.has_reta_access(ACCESS_ENGINEERING), "ID card should not have temp access after clearing") + TEST_ASSERT(!(ACCESS_ENGINEERING in test_card.access), "ID card should not have engineering access in main access list after clearing") + + // Test that permanent access is not affected + test_card.access += ACCESS_ENGINEERING // Simulate HoP giving permanent access + test_card.grant_reta_access("Engineering", 100) + TEST_ASSERT(!test_card.has_reta_access(ACCESS_ENGINEERING), "ID card should not add temp access if already has permanent") + TEST_ASSERT(ACCESS_ENGINEERING in test_card.access, "ID card should retain permanent access") + + test_card.clear_reta_access() + TEST_ASSERT(ACCESS_ENGINEERING in test_card.access, "ID card should still have permanent access after clearing temp access") + +/datum/unit_test/reta_paramedic_access + +/datum/unit_test/reta_paramedic_access/Run() + // Initialize RETA system for testing + initialize_reta_system() + + var/datum/id_trim/job/paramedic/paramedic_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/paramedic] + + // Test that paramedic no longer has broad access + TEST_ASSERT(!(ACCESS_CARGO in paramedic_trim.minimal_access), "Paramedic should not have cargo access") + TEST_ASSERT(!(ACCESS_SCIENCE in paramedic_trim.minimal_access), "Paramedic should not have science access") + TEST_ASSERT(!(ACCESS_CONSTRUCTION in paramedic_trim.minimal_access), "Paramedic should not have construction access") + TEST_ASSERT(!(ACCESS_HYDROPONICS in paramedic_trim.minimal_access), "Paramedic should not have hydroponics access") + TEST_ASSERT(!(ACCESS_MINING in paramedic_trim.minimal_access), "Paramedic should not have mining access") + + // Test that paramedic still has basic medical access + TEST_ASSERT(ACCESS_MEDICAL in paramedic_trim.minimal_access, "Paramedic should have medical access") + TEST_ASSERT(ACCESS_MAINT_TUNNELS in paramedic_trim.minimal_access, "Paramedic should have maintenance access") + TEST_ASSERT(ACCESS_MORGUE in paramedic_trim.minimal_access, "Paramedic should have morgue access") + TEST_ASSERT(ACCESS_MECH_MEDICAL in paramedic_trim.minimal_access, "Paramedic should have medical mech access") diff --git a/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png b/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png index 3907b46b8709..8fb16d008feb 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png and b/code/modules/unit_tests/screenshots/screenshot_digi_leg_test.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ghost.png similarity index 100% rename from code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit.png rename to code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ghost.png diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit_ghost.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit_ghost.png deleted file mode 100644 index c43c67f12a8b..000000000000 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit_ghost.png and /dev/null differ diff --git a/code/modules/unit_tests/strippable.dm b/code/modules/unit_tests/strippable.dm index 47a76a1ca75b..36083804b15c 100644 --- a/code/modules/unit_tests/strippable.dm +++ b/code/modules/unit_tests/strippable.dm @@ -25,7 +25,6 @@ var/handcuffs = allocate(/obj/item/restraints/handcuffs, user) user.forceMove(target.loc) user.set_handcuffed(handcuffs) - user.update_handcuffed() TEST_ASSERT_EQUAL(strip_menu.ui_status(user, ui_state), UI_UPDATE, "Being within range but cuffed was not update-only.") user.set_handcuffed(null) qdel(handcuffs) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 49ee85862bee..be08e4f82ae3 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -31,6 +31,9 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) return focused_tests.len > 0 ? focused_tests : null /datum/unit_test + /// Do not instantiate if type matches this + abstract_type = /datum/unit_test + //Bit of metadata for the future maybe var/list/procs_tested @@ -47,9 +50,6 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) var/list/allocated var/list/fail_reasons - /// Do not instantiate if type matches this - var/abstract_type = /datum/unit_test - /// List of atoms that we don't want to ever initialize in an agnostic context, like for Create and Destroy. Stored on the base datum for usability in other relevant tests that need this data. var/static/list/uncreatables = null diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 2e4b17717808..ed38ef0ac8e0 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -723,6 +723,7 @@ item = /obj/item/mod/module/injector cost = 2 purchasable_from = (UPLINK_ALL_SYNDIE_OPS | UPLINK_SPY) + uplink_item_flags = NONE /datum/uplink_item/suits/holster name = "MODsuit Holster Module" @@ -730,6 +731,7 @@ item = /obj/item/mod/module/holster cost = 2 purchasable_from = (UPLINK_ALL_SYNDIE_OPS | UPLINK_SPY) + uplink_item_flags = NONE /datum/uplink_item/device_tools/medgun_mod name = "Medbeam Gun Module" diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 5f80cf57e3d4..e039d97d0775 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -3,6 +3,7 @@ desc = "Yell at coderbus." icon = 'icons/mob/rideables/vehicles.dmi' icon_state = "error" + abstract_type = /obj/vehicle max_integrity = 300 armor_type = /datum/armor/obj_vehicle layer = VEHICLE_LAYER diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index 48d4127083b0..c90ff79e60bf 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -70,7 +70,7 @@ if(defense_mode) var/datum/action/action = LAZYACCESSASSOC(occupant_actions, M, /datum/action/vehicle/sealed/mecha/mech_defense_mode) if(action) - INVOKE_ASYNC(action, TYPE_PROC_REF(/datum/action, Trigger), FALSE) + INVOKE_ASYNC(action, TYPE_PROC_REF(/datum/action, Trigger), null, NONE, FALSE) return ..() ///Relays the signal from the action button to the shield, and creates a new shield if the old one is MIA. @@ -142,7 +142,7 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ name = "Toggle an energy shield that blocks all attacks from the faced direction at a heavy power cost." button_icon_state = "mech_defense_mode_off" -/datum/action/vehicle/sealed/mecha/mech_defense_mode/Trigger(trigger_flags, forced_state = FALSE) +/datum/action/vehicle/sealed/mecha/mech_defense_mode/Trigger(mob/clicker, trigger_flags, forced_state = FALSE) if(!..()) return if(!chassis || !(owner in chassis.occupants)) diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm index e4532f23f06c..5d28d2be6f62 100644 --- a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -5,6 +5,7 @@ /obj/item/mecha_parts/mecha_equipment name = "mecha equipment" icon = 'icons/obj/devices/mecha_equipment.dmi' + abstract_type = /obj/item/mecha_parts/mecha_equipment icon_state = "mecha_equip" force = 5 max_integrity = 300 diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index c3545fc0edfd..0cfc0712b59b 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -1,5 +1,6 @@ /obj/item/mecha_parts/mecha_equipment/weapon name = "mecha weapon" + abstract_type = /obj/item/mecha_parts/mecha_equipment/weapon range = MECHA_RANGED equipment_slot = MECHA_WEAPON destroy_sound = 'sound/vehicles/mecha/weapdestr.ogg' @@ -668,7 +669,6 @@ if(autocuff && iscarbon(target)) var/mob/living/carbon/carbontarget = target carbontarget.set_handcuffed(new cuff_type(carbontarget)) - carbontarget.update_handcuffed() return if(istype(target, /obj/machinery/door)) diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 482cd1116b36..1bdb7f3aa8de 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -239,7 +239,7 @@ say("Not enough resources. Processing stopped.") return FALSE - rmat.use_materials(D.materials, component_coeff, 1, "built", "[D.name]", user_data) + rmat.use_materials(D.materials, component_coeff, 1, "processed", "[D.name]", user_data) being_built = D build_finish = world.time + get_construction_time_w_coeff(initial(D.construction_time)) build_start = world.time diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index 47d4bc033367..8cd6918dc8be 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -154,7 +154,7 @@ name = "Toggle overclocking" button_icon_state = "mech_overload_off" -/datum/action/vehicle/sealed/mecha/mech_overclock/Trigger(trigger_flags, forced_state = null) +/datum/action/vehicle/sealed/mecha/mech_overclock/Trigger(mob/clicker, trigger_flags, forced_state = null) if(!..()) return if(!chassis || !(owner in chassis.occupants)) diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index 032b1d5ddcc8..02bc2c89953c 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -64,7 +64,7 @@ return //User sat on the selection window and things changed. AI.ai_restore_power()//So the AI initially has power. - AI.control_disabled = TRUE + AI.set_control_disabled(TRUE) AI.radio_enabled = FALSE AI.disconnect_shell() remove_occupant(AI) @@ -104,7 +104,7 @@ if((LAZYLEN(occupants) >= max_occupants) || dna_lock) //Normal AIs cannot steal mechs! to_chat(user, span_warning("Access denied. [name] is [LAZYLEN(occupants) >= max_occupants ? "currently fully occupied" : "secured with a DNA lock"].")) return - AI.control_disabled = FALSE + AI.set_control_disabled(FALSE) AI.radio_enabled = TRUE to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") card.AI = null diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 5bb9084c5500..3dcd5835b2e1 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -269,6 +269,8 @@ return part.try_attach_part(user, src, FALSE) if(is_wire_tool(tool) && (mecha_flags & PANEL_OPEN)) + if(user.combat_mode) + return if(wires.interact(user)) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index 57a3f6c04133..a8719eb1d4dd 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -6,6 +6,7 @@ name = "mecha part" icon = 'icons/mob/rideables/mech_construct.dmi' icon_state = "blank" + abstract_type = /obj/item/mecha_parts w_class = WEIGHT_CLASS_GIGANTIC obj_flags = CONDUCTS_ELECTRICITY diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index 5b7595da0ca4..76d57acb431c 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -183,7 +183,7 @@ var/obj/vehicle/sealed/mecha/ripley/paddy/secmech = chassis button_icon_state = "mech_siren_[secmech?.siren ? "on" : "off"]" -/datum/action/vehicle/sealed/mecha/siren/Trigger(trigger_flags, forced_state = FALSE) +/datum/action/vehicle/sealed/mecha/siren/Trigger(mob/clicker, trigger_flags, forced_state = FALSE) if(!..()) return var/obj/vehicle/sealed/mecha/ripley/paddy/secmech = chassis diff --git a/code/modules/vending/custom.dm b/code/modules/vending/custom.dm index 023ce8e0da1a..3637ff84a68f 100644 --- a/code/modules/vending/custom.dm +++ b/code/modules/vending/custom.dm @@ -289,7 +289,7 @@ return var/obj/item/card/id/id_card = user.get_idcard(TRUE) - if(!id_card || !id_card.registered_account || !id_card.registered_account.account_job) + if(QDELETED(id_card)) balloon_alert(user, "no card found!") flick(icon_deny, src) return diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index d8fadb9130f3..c94bc440663b 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -90,6 +90,8 @@ /obj/item/reagent_containers/cup/bottle/salglu_solution = 3, /obj/item/reagent_containers/cup/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6, + /obj/item/reagent_containers/medigel/libital = 2, + /obj/item/reagent_containers/medigel/aiuri = 2, /obj/item/reagent_containers/medigel/sterilizine = 3, ) contraband = list( @@ -101,6 +103,7 @@ /obj/item/reagent_containers/medigel/synthflesh = 2, /obj/item/storage/pill_bottle/psicodine = 2, /obj/item/storage/pill_bottle/sansufentanyl = 1, + /obj/item/inhaler/albuterol = 2, ) default_price = 50 extra_price = 100 diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 53027e5b7df5..0b7bc91aac26 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -6,19 +6,20 @@ panel_type = "wallmed-panel" density = FALSE products = list( - /obj/item/stack/medical/bandage = 1, - /obj/item/stack/medical/ointment = 1, - /obj/item/stack/medical/gauze = 1, - /obj/item/reagent_containers/hypospray/medipen/ekit = 1, - /obj/item/healthanalyzer/simple = 1, + /obj/item/stack/medical/bandage = 4, + /obj/item/stack/medical/ointment = 2, + /obj/item/reagent_containers/applicator/pill/multiver = 2, + /obj/item/stack/medical/gauze = 4, + /obj/item/reagent_containers/hypospray/medipen/ekit = 2, + /obj/item/healthanalyzer/simple = 2, ) contraband = list( /obj/item/storage/box/bandages = 1, /obj/item/storage/box/gum/happiness = 1, ) premium = list( - /obj/item/reagent_containers/applicator/patch/libital = 1, - /obj/item/reagent_containers/applicator/patch/aiuri = 1, + /obj/item/reagent_containers/applicator/patch/libital = 2, + /obj/item/reagent_containers/applicator/patch/aiuri = 2, ) refill_canister = /obj/item/vending_refill/wallmed default_price = PAYCHECK_CREW * 0.3 // Cheap since crew should be able to affort it in emergency situations diff --git a/code/modules/vending/subtype.dm b/code/modules/vending/subtype.dm index e9633c56cb93..d189435e18c3 100644 --- a/code/modules/vending/subtype.dm +++ b/code/modules/vending/subtype.dm @@ -22,7 +22,7 @@ ///Adds the subtype to the product list /obj/machinery/vending/subtype_vendor/RefreshParts() products.Cut() - for(var/type in typesof(type_to_vend)) + for(var/type in get_sane_item_types(type_to_vend)) LAZYADDASSOC(products, type, 50) //no refill canister so we fill the records with their max amounts directly diff --git a/code/modules/vending/vendor/_vending.dm b/code/modules/vending/vendor/_vending.dm index eec128f0f32c..1a97b034fa86 100644 --- a/code/modules/vending/vendor/_vending.dm +++ b/code/modules/vending/vendor/_vending.dm @@ -38,6 +38,7 @@ desc = "A generic vending machine." icon = 'icons/obj/machines/vending.dmi' icon_state = "generic" + abstract_type = /obj/machinery/vending layer = BELOW_OBJ_LAYER density = TRUE verb_say = "beeps" diff --git a/code/modules/vending/vendor/interaction.dm b/code/modules/vending/vendor/interaction.dm index 641dc84b111b..7796545b719d 100644 --- a/code/modules/vending/vendor/interaction.dm +++ b/code/modules/vending/vendor/interaction.dm @@ -1,3 +1,17 @@ +//===============================HAND INTERACTION=================================== +/obj/machinery/vending/interact(mob/user) + if(seconds_electrified && !(machine_stat & NOPOWER)) + if(shock(user, 100)) + return + + if(tilted && !user.buckled) + to_chat(user, span_notice("You begin righting [src].")) + if(do_after(user, 5 SECONDS, target = src)) + untilt(user) + return + + return ..() + //================================TOOL ACTS============================================== /obj/machinery/vending/crowbar_act(mob/living/user, obj/item/attack_item) if(!component_parts) diff --git a/code/modules/vending/vendor/inventory.dm b/code/modules/vending/vendor/inventory.dm index 0777ea2b160d..8955e1002ab5 100644 --- a/code/modules/vending/vendor/inventory.dm +++ b/code/modules/vending/vendor/inventory.dm @@ -168,6 +168,10 @@ if(isliving(user)) living_user = user card_used = living_user.get_idcard(TRUE) + if(QDELETED(card_used)) + speak("You do not possess an ID to purchase [item_record.name].") + return + if(age_restrictions && item_record.age_restricted && (!card_used.registered_age || card_used.registered_age < AGE_MINOR)) speak("You are not of legal age to purchase [item_record.name].") if(!(user in GLOB.narcd_underages)) @@ -190,7 +194,6 @@ purchase_message_cooldown = world.time + 5 SECONDS //This is not the best practice, but it's safe enough here since the chances of two people using a machine with the same ref in 5 seconds is fuck low last_shopper = REF(user) - use_energy(active_power_usage) if(icon_vend) //Show the vending animation if needed flick(icon_vend, src) @@ -226,16 +229,16 @@ var/obj/item/vended_item = null if(dispense_returned) vended_item = LAZYACCESS(item_record.returned_products, LAZYLEN(item_record.returned_products)) //first in, last out - if(!QDELETED(vended_item)) - vended_item.forceMove(spawn_location) + vended_item.forceMove(spawn_location) else if(item_record.amount) vended_item = new item_record.product_path(spawn_location) if(vended_item.type in contraband) ADD_TRAIT(vended_item, TRAIT_CONTRABAND, INNATE_TRAIT) item_record.amount-- - if(!QDELETED(vended_item)) - on_dispense(vended_item, dispense_returned) + on_dispense(vended_item, dispense_returned) + use_energy(active_power_usage) + return vended_item /** @@ -262,23 +265,23 @@ /obj/machinery/vending/proc/proceed_payment(obj/item/card/id/paying_id_card, mob/living/mob_paying, datum/data/vending_product/product_to_vend, price_to_use, discountless) PROTECTED_PROC(TRUE) - if(QDELETED(paying_id_card)) //not available(null) or somehow is getting destroyed - speak("You do not possess an ID to purchase [product_to_vend.name].") - return FALSE + //returned items are free + if(LAZYLEN(product_to_vend.returned_products)) + return TRUE + + //account to use. optional cause we handle cash on hand transfers as well var/datum/bank_account/account = paying_id_card.registered_account - if(account.account_job && account.account_job.paycheck_department == payment_department && !discountless) + + //deduct money from person + if(!discountless && account.account_job?.paycheck_department == payment_department) price_to_use = max(round(price_to_use * DEPARTMENT_DISCOUNT), 1) //No longer free, but signifigantly cheaper. - if(LAZYLEN(product_to_vend.returned_products)) - price_to_use = 0 //returned items are free - if(price_to_use && (attempt_charge(src, mob_paying, price_to_use) & COMPONENT_OBJ_CANCEL_CHARGE)) + if(attempt_charge(src, mob_paying, price_to_use) & COMPONENT_OBJ_CANCEL_CHARGE) speak("You do not possess the funds to purchase [product_to_vend.name].") flick(icon_deny,src) return FALSE - //actual payment here - var/datum/bank_account/paying_id_account = SSeconomy.get_dep_account(payment_department) - if(paying_id_account) - SSblackbox.record_feedback("amount", "vending_spent", price_to_use) - SSeconomy.track_purchase(account, price_to_use, name) - log_econ("[price_to_use] credits were inserted into [src] by [account.account_holder] to buy [product_to_vend].") + + //transfer money to machine + SSblackbox.record_feedback("amount", "vending_spent", price_to_use) + log_econ("[price_to_use] credits were inserted into [src] by [account.account_holder] to buy [product_to_vend].") credits_contained += round(price_to_use * VENDING_CREDITS_COLLECTION_AMOUNT) return TRUE diff --git a/code/modules/vending/vendor/ui_data.dm b/code/modules/vending/vendor/ui_data.dm index 3b5c5016d3d0..49e90b946dec 100644 --- a/code/modules/vending/vendor/ui_data.dm +++ b/code/modules/vending/vendor/ui_data.dm @@ -63,7 +63,6 @@ /obj/machinery/vending/ui_static_data(mob/user) var/list/data = list() - data["onstation"] = onstation if(ad_list.len) data["ad"] = ad_list[rand(1, ad_list.len)] data["all_products_free"] = all_products_free diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index ee35c89a461a..e9443490edab 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -46,6 +46,7 @@ GLOBAL_VAR_INIT(roaches_deployed, FALSE) products = list( /obj/item/clothing/head/beret/sec = 3, /obj/item/clothing/head/soft/sec = 3, + /obj/item/clothing/head/costume/ushanka/sec = 3, /obj/item/clothing/mask/bandana/striped/security = 3, /obj/item/clothing/under/rank/security/officer = 3, /obj/item/clothing/under/rank/security/officer/skirt = 3, diff --git a/code/modules/wiremod/components/action/mmi.dm b/code/modules/wiremod/components/action/mmi.dm index 3a8cc85b00b3..0a7b6a38ae8e 100644 --- a/code/modules/wiremod/components/action/mmi.dm +++ b/code/modules/wiremod/components/action/mmi.dm @@ -1,5 +1,18 @@ #define MMI_MESSAGE_COOLDOWN (0.1 SECONDS) +/datum/action/innate/mmi_comp_disconnect + name = "Disconnect from remote circuit" + desc = "Stop controlling an integrated circuit" + button_icon = 'icons/mob/actions/actions_AI.dmi' + button_icon_state = "ai_core" + +/datum/action/innate/mmi_comp_disconnect/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/circuit_component/mmi/mmi_comp = target + mmi_comp.remove_occupant() + /** * # Man-Machine Interface Component * @@ -7,7 +20,7 @@ */ /obj/item/circuit_component/mmi display_name = "Man-Machine Interface" - desc = "A component that allows MMI to enter shells to send output signals." + desc = "A component that allows an MMI or B.O.R.I.S. module to be inserted into the shell, allowing a brain or artificial intelligence to output signals." category = "Action" circuit_flags = CIRCUIT_FLAG_REFUSE_MODULE @@ -34,15 +47,36 @@ /// Called when the MMI right clicks. var/datum/port/output/secondary_attack - /// The current MMI card + /// The current MMI/posibrain var/obj/item/mmi/brain + /// The current B.O.R.I.S. module + var/obj/item/borg/upgrade/ai/boris + + /// The brainmob or AI currently controlling to the circuit + var/mob/living/occupant + + /// The action used to allow a connected AI to disconnect + var/datum/action/innate/mmi_comp_disconnect/disconnect_action + /// Maximum length of the message that can be sent to the MMI var/max_length = 300 /// Cooldown for when the next message can be sent to the MMI. COOLDOWN_DECLARE(message_cooldown) + /// These two component weakrefs are needed because GetComponent is not reliable for components that are DUPE_ALLOWED or DUPE_SELECTED + + /// A reference to the connect_containers component that handles making boris circuits and things containing them clickable by AIs to connect + var/datum/weakref/boris_circuit_container_connections + + /// A reference to the connect_containers component that handles when a connected AI or something containing it moves + var/datum/weakref/connected_ai_container_connections + +/obj/item/circuit_component/mmi/Initialize(mapload) + . = ..() + disconnect_action = new(src) + /obj/item/circuit_component/mmi/populate_ports() message = add_input_port("Message", PORT_TYPE_STRING) send = add_input_port("Send Message", PORT_TYPE_SIGNAL) @@ -58,90 +92,214 @@ clicked_atom = add_output_port("Target Entity", PORT_TYPE_ATOM) /obj/item/circuit_component/mmi/Destroy() - remove_current_brain() + remove_occupant_item() + QDEL_NULL(disconnect_action) return ..() /obj/item/circuit_component/mmi/input_received(datum/port/input/port) - if(!brain) + if(!brain && !boris) return if(COMPONENT_TRIGGERED_BY(eject, port)) - remove_current_brain() + remove_occupant_item() if(COMPONENT_TRIGGERED_BY(send, port)) if(!message.value || !COOLDOWN_FINISHED(src, message_cooldown)) return var/msg_str = copytext(html_encode(message.value), 1, max_length) - var/mob/living/target = brain.brainmob - if(!target) + if(!occupant) return - to_chat(target, "[span_bold("You hear a message in your ear: ")][msg_str]") + if(isAI(occupant)) + to_chat(occupant, "[span_boldnotice("Message from remote circuit: ")][span_notice(msg_str)]") + else + to_chat(occupant, "[span_bold("You hear a message: ")][msg_str]") COOLDOWN_START(src, message_cooldown, MMI_MESSAGE_COOLDOWN) - /obj/item/circuit_component/mmi/register_shell(atom/movable/shell) . = ..() - RegisterSignal(shell, COMSIG_ATOM_ATTACKBY, PROC_REF(handle_attack_by)) + RegisterSignal(shell, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(handle_interaction)) /obj/item/circuit_component/mmi/unregister_shell(atom/movable/shell) - UnregisterSignal(shell, COMSIG_ATOM_ATTACKBY) - remove_current_brain() + UnregisterSignal(shell, list(COMSIG_ATOM_ITEM_INTERACTION)) + remove_occupant_item() return ..() -/obj/item/circuit_component/mmi/proc/handle_attack_by(atom/movable/shell, obj/item/item, mob/living/attacker) +/obj/item/circuit_component/mmi/proc/handle_interaction(atom/movable/shell, mob/living/user, obj/item/item) SIGNAL_HANDLER + var/obj/item/mmi/target_mmi + var/mob/living/new_occupant + var/obj/item/borg/upgrade/ai/target_boris if(istype(item, /obj/item/mmi)) - var/obj/item/mmi/target_mmi = item + target_mmi = item if(!target_mmi.brainmob) - return - add_mmi(item) - return COMPONENT_NO_AFTERATTACK - -/obj/item/circuit_component/mmi/proc/add_mmi(obj/item/mmi/to_add) - remove_current_brain() - - to_add.forceMove(src) - if(to_add.brainmob) - update_mmi_mob(to_add, null, to_add.brainmob) - brain = to_add - RegisterSignal(to_add, COMSIG_QDELETING, PROC_REF(remove_current_brain)) - RegisterSignal(to_add, COMSIG_MOVABLE_MOVED, PROC_REF(mmi_moved)) - -/obj/item/circuit_component/mmi/proc/mmi_moved(atom/movable/mmi) + shell.balloon_alert(user, "no consciousness detected!") + return ITEM_INTERACT_FAILURE + new_occupant = target_mmi.brainmob + else if(istype(item, /obj/item/borg/upgrade/ai)) + target_boris = item + else + return + var/datum/component/shell/shell_comp = shell.GetComponent(/datum/component/shell) + if(shell_comp.locked) + shell.balloon_alert(user, "locked!") + return ITEM_INTERACT_FAILURE + if(brain || boris) + shell.balloon_alert(user, "already has brain!") + return ITEM_INTERACT_FAILURE + if(!user.transferItemToLoc(item, src)) + return ITEM_INTERACT_FAILURE + if(target_mmi) + brain = target_mmi + set_occupant(new_occupant) + if(target_boris) + boris = target_boris + register_boris_circuit(shell) + RegisterSignal(item, COMSIG_QDELETING, PROC_REF(remove_occupant_item)) + RegisterSignal(item, COMSIG_MOVABLE_MOVED, PROC_REF(occupant_item_moved)) + +/obj/item/circuit_component/mmi/proc/register_boris_circuit(atom/movable/shell) + var/static/list/connections = list(COMSIG_MOVABLE_MOVED = PROC_REF(boris_shell_or_container_moved)) + boris_circuit_container_connections = WEAKREF(AddComponent(/datum/component/connect_containers, src, connections)) + for(var/atom/movable/location as anything in get_nested_locs(shell) + shell) + location.AddComponentFrom(REF(src), /datum/component/boris_circuit_container) + AddComponentFrom(REF(location), /datum/component/shuttle_move_deferred_checks, PROC_REF(post_movement_checks)) + +/obj/item/circuit_component/mmi/proc/unregister_boris_circuit(atom/movable/shell) + QDEL_NULL(boris_circuit_container_connections) + for(var/atom/movable/location as anything in get_nested_locs(shell) + shell) + location.RemoveComponentSource(REF(src), /datum/component/boris_circuit_container) + RemoveComponentSource(REF(location), /datum/component/shuttle_move_deferred_checks) + +/obj/item/circuit_component/mmi/proc/boris_shell_or_container_moved(atom/movable/shell_or_container, atom/old_loc) + SIGNAL_HANDLER + if(isturf(old_loc) && isturf(shell_or_container.loc)) + return + var/list/old_locs = list() + if(ismovable(old_loc)) + old_locs = get_nested_locs(old_loc) + old_loc + var/list/new_locs = get_nested_locs(shell_or_container) + for(var/atom/movable/loc_exited as anything in old_locs - new_locs) + loc_exited.RemoveComponentSource(REF(src), /datum/component/boris_circuit_container) + RemoveComponentSource(REF(loc_exited), /datum/component/shuttle_move_deferred_checks) + for(var/atom/movable/loc_entered as anything in new_locs - old_locs) + loc_entered.AddComponentFrom(REF(src), /datum/component/boris_circuit_container) + AddComponentFrom(REF(loc_entered), /datum/component/shuttle_move_deferred_checks, PROC_REF(post_movement_checks)) + +/obj/item/circuit_component/mmi/proc/occupant_item_moved(atom/movable/occupant_item) SIGNAL_HANDLER - if(mmi.loc != src) - remove_current_brain() + if(occupant_item.loc != src) + remove_occupant_item(occupant_item) -/obj/item/circuit_component/mmi/proc/remove_current_brain() +/obj/item/circuit_component/mmi/proc/remove_occupant_item(obj/item/removing) SIGNAL_HANDLER - if(!brain) + if(!removing) + removing = brain + if(!removing) + removing = boris + if(!removing) return - - if(brain.brainmob) - update_mmi_mob(brain, brain.brainmob) - UnregisterSignal(brain, list( + if(istype(removing, /obj/item/mmi)) + brain = null + if(istype(removing, /obj/item/borg/upgrade/ai)) + boris = null + unregister_boris_circuit(parent.shell) + remove_occupant() + + UnregisterSignal(removing, list( COMSIG_QDELETING, COMSIG_MOVABLE_MOVED )) - if(brain.loc == src) - brain.forceMove(drop_location()) - brain = null + if(removing.loc == src) + removing.forceMove(drop_location()) -/obj/item/circuit_component/mmi/proc/update_mmi_mob(datum/source, mob/living/old_mmi, mob/living/new_mmi) +/obj/item/circuit_component/mmi/proc/confirm_ai_connect(mob/living/silicon/ai/user, atom/movable/shell) + var/confirmation = tgui_alert(user, "Connect to [shell]?", buttons = list("Yes", "No")) + if(confirmation != "Yes") + return + if(QDELETED(src) || QDELETED(user) || QDELETED(shell) || !parent?.shell || !user.can_interact_with(shell) || !boris) + return + do_ai_connect(user, shell) + +/obj/item/circuit_component/mmi/proc/do_ai_connect(mob/living/silicon/ai/user, atom/movable/shell) + if(occupant) + if(occupant != user) + shell.balloon_alert(user, "occupied!") + return + set_occupant(user) + +/obj/item/circuit_component/mmi/proc/set_occupant(mob/living/new_occupant) + new_occupant.remote_control = src + RegisterSignal(new_occupant, COMSIG_MOB_CLICKON, PROC_REF(handle_occupant_attack)) + RegisterSignal(new_occupant, COMSIG_QDELETING, PROC_REF(remove_occupant)) + occupant = new_occupant + if(!isAI(new_occupant)) + return + ADD_TRAIT(new_occupant, TRAIT_CONNECTED_TO_CIRCUIT, REF(src)) + var/mob/living/silicon/ai = new_occupant + ai.reset_perspective(src) + // Perspective gets reset whenever multicam is ended, which happens whenever an AI gets incapacitated or carded. + // This could change in the future, so we also register other signal handlers. + RegisterSignals(ai, list(COMSIG_MOB_RESET_PERSPECTIVE, SIGNAL_ADDTRAIT(TRAIT_INCAPACITATED)), PROC_REF(remove_occupant)) + RegisterSignal(ai, COMSIG_SILICON_AI_SET_CONTROL_DISABLED, PROC_REF(on_control_toggled)) + var/static/list/connections = list(COMSIG_MOVABLE_MOVED = PROC_REF(occupant_or_container_moved)) + connected_ai_container_connections = WEAKREF(AddComponent(/datum/component/connect_containers, ai, connections)) + for(var/atom/movable/location as anything in get_nested_locs(ai) + ai) + AddComponentFrom(REF(location), /datum/component/shuttle_move_deferred_checks, PROC_REF(post_movement_checks)) + disconnect_action.Grant(ai) + to_chat(ai, span_notice("Established connection with remote circuit.")) + +/obj/item/circuit_component/mmi/proc/occupant_or_container_moved(atom/movable/occupant_or_container, atom/old_loc) SIGNAL_HANDLER - if(old_mmi) - old_mmi.remote_control = null - UnregisterSignal(old_mmi, COMSIG_MOB_CLICKON) - if(new_mmi) - new_mmi.remote_control = src - RegisterSignal(new_mmi, COMSIG_MOB_CLICKON, PROC_REF(handle_mmi_attack)) + if(isturf(old_loc) && isturf(occupant_or_container.loc)) + return + var/list/old_locs = list() + if(ismovable(old_loc)) + old_locs = get_nested_locs(old_loc) + old_loc + var/list/new_locs = get_nested_locs(occupant_or_container) + for(var/atom/movable/loc_exited as anything in old_locs - new_locs) + RemoveComponentSource(REF(loc_exited), /datum/component/shuttle_move_deferred_checks) + for(var/atom/movable/loc_entered as anything in new_locs - old_locs) + AddComponentFrom(REF(loc_entered), /datum/component/shuttle_move_deferred_checks, PROC_REF(post_movement_checks)) + +/obj/item/circuit_component/mmi/proc/post_movement_checks() + SIGNAL_HANDLER + var/mob/living/silicon/ai/ai = occupant + if(!istype(ai)) + return + if(!ai.can_interact_with(parent.shell)) + remove_occupant() + +/obj/item/circuit_component/mmi/proc/on_control_toggled(datum/_source, control_disabled) + SIGNAL_HANDLER + if(control_disabled) + remove_occupant() + +/obj/item/circuit_component/mmi/proc/remove_occupant() + SIGNAL_HANDLER + if(!occupant) + return + if(isAI(occupant)) + REMOVE_TRAIT(occupant, TRAIT_CONNECTED_TO_CIRCUIT, REF(src)) + var/mob/living/silicon/ai/ai = occupant + if(!ai.eyeobj) + ai.create_eye() + disconnect_action.Remove(ai) + UnregisterSignal(ai, list(COMSIG_MOB_RESET_PERSPECTIVE, SIGNAL_ADDTRAIT(TRAIT_INCAPACITATED), COMSIG_SILICON_AI_SET_CONTROL_DISABLED)) + QDEL_NULL(connected_ai_container_connections) + for(var/atom/movable/location as anything in get_nested_locs(ai) + ai) + RemoveComponentSource(REF(location), /datum/component/shuttle_move_deferred_checks) + ai.reset_perspective(null) + to_chat(ai, span_notice("Disconnected from remote circuit.")) + occupant.remote_control = null + UnregisterSignal(occupant, list(COMSIG_MOB_CLICKON, COMSIG_QDELETING)) + occupant = null /obj/item/circuit_component/mmi/relaymove(mob/living/user, direct) - if(user != brain.brainmob) + if(user != occupant) return ..() if(direct & NORTH) @@ -155,7 +313,7 @@ return TRUE -/obj/item/circuit_component/mmi/proc/handle_mmi_attack(mob/living/source, atom/target, list/modifiers, list/attack_modifiers) +/obj/item/circuit_component/mmi/proc/handle_occupant_attack(mob/living/source, atom/target, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER if(modifiers[RIGHT_CLICK]) clicked_atom.set_output(target) @@ -174,7 +332,7 @@ /obj/item/circuit_component/mmi/removed_from(obj/item/integrated_circuit/removed_from) REMOVE_TRAIT(removed_from, TRAIT_COMPONENT_MMI, REF(src)) - remove_current_brain() + remove_occupant_item() return ..() #undef MMI_MESSAGE_COOLDOWN diff --git a/code/modules/wiremod/components/atom/hear.dm b/code/modules/wiremod/components/atom/hear.dm index c846c4c7f83d..4dc8812efc0c 100644 --- a/code/modules/wiremod/components/atom/hear.dm +++ b/code/modules/wiremod/components/atom/hear.dm @@ -53,6 +53,6 @@ if(message_language) language_port.set_output(initial(message_language.name)) speaker_port.set_output(speaker) - speaker_name.set_output(speaker.GetVoice()) + speaker_name.set_output(speaker.get_voice()) trigger_port.set_output(COMPONENT_SIGNAL) return TRUE diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index 343f0db5e6f4..c1f39f3d48d1 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -132,7 +132,7 @@ if (!materials.mat_container.has_materials(design.materials, efficiency_coeff)) return - materials.use_materials(design.materials, efficiency_coeff, 1, "printed", "[design.name]", user_data) + materials.use_materials(design.materials, efficiency_coeff, 1, "processed", "[design.name]", user_data) return new design.build_path(drop_location()) /obj/machinery/component_printer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -160,7 +160,7 @@ balloon_alert_to_viewers("printed [design.name]") - materials.use_materials(design.materials, efficiency_coeff, 1, "printed", "[design.name]", user_data) + materials.use_materials(design.materials, efficiency_coeff, 1, "processed", "[design.name]", user_data) var/atom/printed_design = new design.build_path(drop_location()) printed_design.pixel_x = printed_design.base_pixel_x + rand(-5, 5) printed_design.pixel_y = printed_design.base_pixel_y + rand(-5, 5) @@ -390,7 +390,7 @@ . = ..() if (.) return - var/obj/item/card/id/advanced/user_card = astype(usr, /mob/living)?.get_idcard() + var/alist/user_data = ID_DATA(usr) switch (action) if ("print") @@ -401,14 +401,14 @@ var/list/design = scanned_designs[design_id] - if (!materials.can_use_resource(user_card)) + if (!materials.can_use_resource(user_data = user_data)) return TRUE if (!materials.mat_container.has_materials(design["materials"], efficiency_coeff)) say("Not enough materials.") return TRUE - materials.use_materials(design["materials"], efficiency_coeff, 1, design["name"], design["materials"], user_card) + materials.use_materials(design["materials"], efficiency_coeff, 1, design["name"], design["materials"], user_data = user_data) print_module(design) balloon_alert_to_viewers("printed [design["name"]]") if ("remove_mat") diff --git a/code/modules/wiremod/dcs_components/component_boris_circuit_container.dm b/code/modules/wiremod/dcs_components/component_boris_circuit_container.dm new file mode 100644 index 000000000000..c64437d21c08 --- /dev/null +++ b/code/modules/wiremod/dcs_components/component_boris_circuit_container.dm @@ -0,0 +1,82 @@ +/datum/component/boris_circuit_container + dupe_mode = COMPONENT_DUPE_SOURCES + var/list/obj/item/circuit_component/mmi/mmi_components + var/datum/weakref/indicator_weakref + +/datum/component/boris_circuit_container/Initialize() + . = ..() + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + +/datum/component/boris_circuit_container/Destroy(force) + mmi_components = null + return ..() + +/datum/component/boris_circuit_container/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_ATOM_ATTACK_AI, PROC_REF(on_ai_click)) + var/atom/parent_atom = parent + var/image/indicator_image = image('icons/mob/huds/hud.dmi', parent_atom, "hudtracking", pixel_x = 8) + SET_PLANE_EXPLICIT(indicator_image, ABOVE_LIGHTING_PLANE, parent_atom) + indicator_weakref = WEAKREF(parent_atom.add_alt_appearance( + /datum/atom_hud/alternate_appearance/basic/ais, + "boris_circuit_container_[REF(src)]", + indicator_image, + NONE + )) + +/datum/component/boris_circuit_container/UnregisterFromParent() + QDEL_NULL(indicator_weakref) + return ..() + +/datum/component/boris_circuit_container/on_source_add(source) + . = ..() + var/obj/item/circuit_component/mmi/source_comp = locate(source) + if(!istype(source_comp)) + return COMPONENT_INCOMPATIBLE + LAZYADD(mmi_components, source) + +/datum/component/boris_circuit_container/on_source_remove(source) + var/obj/item/circuit_component/mmi/source_comp = locate(source) + if(source_comp) + LAZYREMOVE(mmi_components, source_comp) + return ..() + +/datum/component/boris_circuit_container/proc/on_ai_click(atom/movable/source, mob/user) + SIGNAL_HANDLER + if(!length(mmi_components)) + return + if(HAS_TRAIT(user, TRAIT_CONNECTED_TO_CIRCUIT)) + return + if(length(mmi_components) == 1) + var/obj/item/circuit_component/mmi/mmi_comp = mmi_components[1] + if(mmi_comp.parent.shell == source) + INVOKE_ASYNC(mmi_comp, TYPE_PROC_REF(/obj/item/circuit_component/mmi, confirm_ai_connect), user, source) + return COMPONENT_CANCEL_ATTACK_CHAIN + INVOKE_ASYNC(src, PROC_REF(select_circuit), source, user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/component/boris_circuit_container/proc/select_circuit(atom/movable/source, mob/user) + var/list/choices = list() + var/list/choice_map = list() + var/source_in_choices = FALSE + for(var/obj/item/circuit_component/mmi/mmi_component as anything in mmi_components) + if(mmi_component.occupant) + continue + var/atom/movable/shell = mmi_component.parent.shell + choices[shell] = shell + choice_map[shell] = mmi_component + if(shell == source) + source_in_choices = TRUE + if(!source_in_choices) + choices[source] = source + var/atom/movable/choice = show_radial_menu(user, source, choices, user_space = TRUE) + if(QDELETED(choice) || QDELETED(user) || !user.can_interact_with(choice)) + return + if(choice == source && !source_in_choices) + choice.attack_ai(user) + return + var/obj/item/circuit_component/mmi/choice_comp = choice_map[choice] + if(QDELETED(choice_comp) || choice_comp.parent?.shell != choice || !choice_comp.boris) + return + choice_comp.do_ai_connect(user, choice) diff --git a/code/modules/wiremod/shell/shell_items.dm b/code/modules/wiremod/shell/shell_items.dm index 0db08ab7bb81..eac5715f22b6 100644 --- a/code/modules/wiremod/shell/shell_items.dm +++ b/code/modules/wiremod/shell/shell_items.dm @@ -7,6 +7,7 @@ name = "assembly" desc = "A shell assembly that can be completed by screwdrivering it." icon = 'icons/obj/science/circuits.dmi' + abstract_type = /obj/item/shell var/shell_to_spawn var/screw_delay = 3 SECONDS diff --git a/config/config.txt b/config/config.txt index 0f946c67d46d..6fdff244c62b 100644 --- a/config/config.txt +++ b/config/config.txt @@ -109,6 +109,16 @@ ALLOW_ADMIN_ASAYCOLOR ## Job slot open/close by identification consoles delay in seconds ID_CONSOLE_JOBSLOT_DELAY 30 +## Request Emergency Temporary Access - RETA System +## Enables temporary department access when Requests Console emergency calls are made +RETA_ENABLED + +## Duration in deciseconds for how long temporary access lasts (default: 3000 = 5 minutes) +RETA_DURATION_DS 3000 + +## Cooldown in deciseconds between RETA calls from the same origin to the same target department (default: 150 = 15 seconds) +RETA_DEPT_COOLDOWN_DS 150 + ## allow players to initiate a restart vote #ALLOW_VOTE_RESTART @@ -145,8 +155,9 @@ RESPAWN_DELAY 0 ## set a hosted by name for unix platforms HOSTEDBY Yournamehere -## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting) -GUEST_BAN +## Uncomment this to stop people connecting to your server without a registered ckey. (i.e. guest-* are all blocked from connecting). +## You probably want this enabled for a production server. +#GUEST_BAN ## IPINTEL: ## This allows you to detect likely proxies by checking ips against getipintel.net diff --git a/dependencies.sh b/dependencies.sh index 910fc9d0281f..56596e18d399 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -17,7 +17,7 @@ export NODE_VERSION_LTS=22.11.0 export BUN_VERSION=1.2.16 # SpacemanDMM git tag -export SPACEMAN_DMM_VERSION=suite-1.10 +export SPACEMAN_DMM_VERSION=suite-1.11 # Python version for mapmerge and other tools export PYTHON_VERSION=3.9.0 diff --git a/html/changelogs/AutoChangeLog-pr-92609.yml b/html/changelogs/AutoChangeLog-pr-92609.yml deleted file mode 100644 index d8280c3a594c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-92609.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "timothymtorres" -delete-after: True -changes: - - bugfix: "Fixed move subsystem bypassing status checks" - - bugfix: "Fixed elastic arms mutation bypassing abstract object checks for picking up objects" - - bugfix: "Fixed species radiation bypassing hair checks for balding" - - bugfix: "Fixed damaged APC board screentips bypassing emagged and broken checks" - - bugfix: "Fixed shuttle cleanup code bypassing move contents of turfs" - - bugfix: "Fixed tram crossing signals bypassing north and east direction checks" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-92658.yml b/html/changelogs/AutoChangeLog-pr-92658.yml deleted file mode 100644 index 0eeb67f62101..000000000000 --- a/html/changelogs/AutoChangeLog-pr-92658.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "lelandkemble" -delete-after: True -changes: - - rscadd: "His Grace will now drink gender-change potions" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-92804.yml b/html/changelogs/AutoChangeLog-pr-92804.yml deleted file mode 100644 index f6ca47bc70fa..000000000000 --- a/html/changelogs/AutoChangeLog-pr-92804.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed a potential server crash caused by Mi-Gos" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-92813.yml b/html/changelogs/AutoChangeLog-pr-92813.yml deleted file mode 100644 index 108672f59039..000000000000 --- a/html/changelogs/AutoChangeLog-pr-92813.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "agudbrand" -delete-after: True -changes: - - qol: "shift+alt will open the tgui loot panel on any tile without being intercepted by items that may be on the tile" - - code_imp: "adds a shift+alt click on proc for living mobs to explicitly open the tgui loot panel in addition to the already existing alt bind" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-92815.yml b/html/changelogs/AutoChangeLog-pr-92815.yml deleted file mode 100644 index 272f172ca0e8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-92815.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheBoondock" -delete-after: True -changes: - - bugfix: "fixed null.ghostize() in split personality deletion" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-92996.yml b/html/changelogs/AutoChangeLog-pr-92996.yml new file mode 100644 index 000000000000..7829c0106edd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-92996.yml @@ -0,0 +1,5 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "ore vents have unique distribution of at most 4 minerals without rare ones being repeated" + - bugfix: "ore vents should no longer be produce 0 material boulders" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93012.yml b/html/changelogs/AutoChangeLog-pr-93012.yml new file mode 100644 index 000000000000..814af0edbfa2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93012.yml @@ -0,0 +1,4 @@ +author: "theselfish" +delete-after: True +changes: + - balance: "a ushanka no longer can protect brainy as much as a metal helmet" \ No newline at end of file diff --git a/html/changelogs/archive/2025-09.yml b/html/changelogs/archive/2025-09.yml index 2d6103da28a1..bb0e14210f37 100644 --- a/html/changelogs/archive/2025-09.yml +++ b/html/changelogs/archive/2025-09.yml @@ -19,3 +19,479 @@ anchored / pulled) - sound: added woosh.ogg as a low "wooshing" noise - image: added a wind turbine sprite +2025-09-02: + Hatterhat: + - balance: The mining MODsuit's ash accretion module now fully cancels the base + slowdown from activating the MOD. + SmArtKar: + - bugfix: Fixed a potential server crash caused by Mi-Gos + - bugfix: Fixed biogens bricking themselves, again + TheBoondock: + - bugfix: fixed null.ghostize() in split personality deletion + agudbrand: + - qol: shift+alt will open the tgui loot panel on any tile without being intercepted + by items that may be on the tile + - code_imp: adds a shift+alt click on proc for living mobs to explicitly open the + tgui loot panel in addition to the already existing alt bind + lelandkemble: + - rscadd: His Grace will now drink gender-change potions + timothymtorres: + - bugfix: Fixed move subsystem bypassing status checks + - bugfix: Fixed elastic arms mutation bypassing abstract object checks for picking + up objects + - bugfix: Fixed species radiation bypassing hair checks for balding + - bugfix: Fixed damaged APC board screentips bypassing emagged and broken checks + - bugfix: Fixed shuttle cleanup code bypassing move contents of turfs + - bugfix: Fixed tram crossing signals bypassing north and east direction checks +2025-09-03: + Rhials: + - bugfix: Pirates can sell minerals and other cargo exports on their bounty pad + again. +2025-09-04: + ATH1909: + - balance: NPC skeleton mobs are no longer hostile to players of the skeleton species. + Ghommie: + - bugfix: Examining most food items no longer tells you that you can make burned + mess by microwaving them. + - bugfix: Burned mess now has "bad food" in it more or less proportional to the + nutrients of the item you just overcooked. This also applies to decomposition + now. + Melbert: + - qol: 'Plant analyzer: Scanning a tray will regularly update the UI with the tray''s + information while you stand adjacent to it, no longer requiring you re-scan + the tray to update it.' + - qol: 'Plant analyzer: UI is now split between chems and stats - RMB will open + directly to the chem tab.' + - qol: 'Plant analyzer: UI received several UX changes - listing out more information + at a glance, rather than behind tooltips or icons' + - bugfix: 'Plant analyzer: Chem scanning plants now shows the plant''s current chemical + contents once again (on top of their genes)' + - bugfix: 'Plant analyzer: Unique seed data (kudzu mutation, replica pod dna) is + shown again' + - qol: Added hydroponics to runtime station + - qol: Added screentip to hydroponic trays for clearing reagents + - rscadd: 'Accounting Console: New UI!' + - rscadd: 'Accounting Console: Now can give advances to crewmembers' + - rscadd: 'Accounting Console: Can now give pay raises or pay cuts' + - rscadd: 'Accounting Console: Now only printable in the security lathe' + - rscadd: 'Accounting Console: A spare board is now now found in secure tech storage.' + - bugfix: Fix vending machines adding payments to audit log twice. + - bugfix: Non-crewmembers are no longer shown in the accounting console + Pickle-Coding: + - balance: Some gas reactions will prevent excited groups from breaking down. + SmArtKar: + - spellcheck: Fixed a missing period in Nutimov and Paladin lawsets + - bugfix: Fixed unconfigured pill presses manufacturing pills that claim to be bottles + - spellcheck: Decapitalized pill press suffixes for parity with the rest of pills/patches/bottles + SyncIt21: + - code_imp: adds some null checks against players without an ID card/valid account + vending an item + - code_imp: ensures dispensing an item always uses energy & not just when vending + lelandkemble: + - spellcheck: Made shuttle computer boards only say (Computer Board) once + - spellcheck: fixes double the on acid on floors + mcbalaam: + - bugfix: Now trying to light the fireplace will not make you attack it + - qol: Color coded and consistent material silo logs + - qol: Wrapping a crate while pulling it will now re-grab it for you + - qol: You can now open crates dragged by the H.A.U.L. gauntlets if you're the one + pulling + subject217: + - spellcheck: fixed a typo in the admin message about achievements cleanup +2025-09-05: + Ezel: + - bugfix: fixes kitchen plumbing not being connected to any water source + - map: Adds and expands plumbing systems around metastation + - map: Increased the dorms bathroom a little bit + SmArtKar: + - bugfix: Fixed constant runtimes and broken APC processing behavior on emagged + APCs + Y0SH1M4S73R: + - rscadd: B.O.R.I.S.es can be installed inside of integrated circuits with MMI components, + allowing an AI to remotely interface with them the same way an MMI or posibrain + could. + - refactor: The MMI component now uses item interaction behavior for inserting MMIs/B.O.R.I.S.es. + kittysmooch: + - image: 'modified old sprites for burritos, some tacos, chimichangas, chips and + salsa, and spanish rice. + + :cl:' + necromanceranne: + - balance: Restricts paramedic access down to their current medical access and maintenance + tunnel access. They retain their expanded access on lowpop. +2025-09-06: + Darkened-Earth: + - bugfix: NanoTrasen's atmospherics division has replaced an incorrectly supplied + HyperTorus Construction Cube(TM) with the correct variant on Catwalk-Class stations + Gboster-0: + - balance: baby slimes have slightly weaker melee damage + - bugfix: fugu gland's melee and HP buffs no longer wear off on slimes if they become + babies after dying as an adult + SmArtKar: + - bugfix: Fixed emissive overlays on neon carpets poking through objects + - bugfix: Fixed blood drunk miner's dash and some mecha actions not working + - bugfix: Made synthflesh patches not spam chat messages every tick + - bugfix: Water cooler explosions no longer runtime + SyncIt21: + - code_imp: improved code for vending machine payment process + - bugfix: stop logging 0 credit purchases when vending machines are dispensing returned + products +2025-09-07: + Hatterhat: + - rscadd: MOD status display modules (from Field Surgery Modules) now default to + boosting suit sensors to be multi-Z capable. This can be turned off, and defaults + to off for space ninjas' MODs. + SmArtKar: + - qol: Letting go of the pet command hotkey (Shift by default) will instantly close + the menu + - bugfix: Hovering over things on the same tile no longer closes the pet command + menu + lelandkemble: + - spellcheck: When failing to move up or down a Z-Level, you are now tied to the + present + - bugfix: prevents eaten remote signalers from following you between bodies + nikothedude: + - bugfix: Player-controlled medbots can now inject chloral on healthy targets +2025-09-08: + Aliceee2ch: + - bugfix: Fixed oversight from "Material tab for the autolathe" PR. You can now + eject BS crystals, allien alloy and mythril from autolathe. + - bugfix: Fixed wires interaction and fixed mech multitool/wirecutters interaction. + Krysonism: + - balance: vatbeasts, mega arachnids and butterbears now attack much quicker, in + line with their old player controlled attack speed. + Melber: + - balance: Advanced first aid kits in the bridge are back to being normal first + aid kids + - balance: Emergency Nanomed vendors have larger stocks and better supplies + - rscadd: Replaces a majority of Emergency Nanomeds on stations and shuttles with + Deforest First Aid Stations. Left clicking these stationary machines will heal + minor damage and blood loss over time - at a (small) price. Right clicking them + will provide gauze, also for a price. All costs are waived on shuttles, during + red alert, or for medical staff. You can also click-drag to have other mobs + use the machine. However, robotic limbs need not apply. + Melbert: + - rscdel: Golems which somehow manage to grow wings and somehow manage to equip + something that covers their jumpsuit can no longer fly. (Seriously, this will + not affect anyone) + - refactor: Refactored clothing obscurity entirely. Items should be a loooot more + consistent and what covers what, and should update a lot snappier. As always, + report any oddities, like mysteriously disappearing articles of clothing, hair, + or species parts + SmArtKar: + - bugfix: Fixed organ fishing blocking alternate material rod loot from spawning + - rscadd: Toilets now require plumbing or water reclaimers to function, and can + get clogged by small items. + - bugfix: Trying to use plungers on plumbing objects will no longer hit them after + finishing the interaction. + - code_imp: Updated toilet item interaction code + - bugfix: Fixed mobs without guaranteed butcher drops not dropping any crusher trophies + - admin: Clientless mobs no longer log their emotes + Stonetear: + - refactor: MODsuit module code now knows who clicked the activation button. + SyncIt21: + - bugfix: ore silo id restriction button in the UI now changes text & colour correctly + - bugfix: ore silo id restriction is now only enforced for station loaded silo and + is optional in other cases + - bugfix: no runtime for vendors using department cards + - bugfix: the map reader now reads null & 0 values into lists + - bugfix: the map reader now parses associative lists(maps/alists) correctly in + cases where = sign is embedded within a string + - bugfix: the map reader now parses associative lists(maps/alists) who's values + themselves can be lists + - bugfix: the map reader can now parse nested lists to any degree + - bugfix: Chemmaster highlights selected icon & has its window scaled up + - bugfix: zombie powder works through inhale(now faster acting)/ingest again + Webcomicartist: + - qol: The slot machine spins faster, allowing for more time-efficient gambling. + Xander3359: + - refactor: change some attack procs to use item interaction + arbuzik456: + - rscadd: Added tongue emote mechanic where you can stick out your tongue + lelandkemble: + - bugfix: Arcade machine experiment now succeeds on output rather than input of + tickets + - spellcheck: Fixes a bunch of manual's formatting, and updates Chef Recipes + - bugfix: Escape pods no longer have planetary gravity + - bugfix: tooltip for secure briefcases now shows correct button. + - qol: You can now hear heart attacks with a stethoscope + loganuk: + - bugfix: Stops coffee machines having melee god mode + - qol: Right clicking on coffee machine without coffee pot has correct message + necromanceranne: + - balance: The Multiphase X-01 has 12 lethal shots to match the capacity of the + standard energy gun. + - qol: Lets you rename the smoothbore disabler. + pebis36012: + - bugfix: Splattercasting touch spells no longer give infinite blood + sushi: + - bugfix: force say works again + - bugfix: crates and other objects causing elevation will no longer leave behind + magic elevating turfs upon destruction + - rscadd: recyclers will now deconstruct non-item objects that they eat instead + of just deleting them + uaioy: + - balance: wizard modsuit shield recharges slower + vinylspiders: + - bugfix: dead bodies in the morgue will no longer try to blink +2025-09-09: + Bisar: + - bugfix: The .tsx code for Ore Silo logs will now catch nulls instead of TBing. + - bugfix: Fixed ANOTHER place where user_data for an ore silo log wasn't set correctly. + JohnFulpWillard, sprites by PopLop: + - rscadd: Added a new pyroclastic anomaly locked item, the Space Furnace. Grants + space immunity to people nearby while active. + Xander3359: + - balance: Downgraded CE tools to T1 instead of T2 + lelandkemble: + - rscdel: you can't grill a bone into a steak anymore + loganuk: + - bugfix: Fixes using syndie graffiti spray/crayon writing while zero grav drifting + nikothedude: + - rscadd: 2 aiuri and 2 libital cans to nanodrug plus + - rscadd: Asthma quirk, based on IRL asthma + - rscadd: Inhalers, a new reagent administering method that uses INHALE + - rscadd: Albuterol, a new reagent that increases the amount of gas you inhale by + 40% + - balance: Inverse convermol now forms once the reaction is done, not on metabolize + sushi: + - rscadd: water vapor on a turf will now also wash radiation off of the items on + it +2025-09-10: + Ghommie: + - balance: sand is now made of sand and not glass. Get a welder if you plan to shove + it into a protolathe. + - rscdel: Removed now useless sand blocks. + - bugfix: Crafting recipes with tools such as wirecutters, wrenches, screwdrivers + etc. should take the right amount of time to complete. + SmArtKar: + - qol: Significantly improved MODtether behavior, they should be easier to work + with now. + - bugfix: Fixed multiple MODtethers bugs and a potential server crash related to + them. + - bugfix: Fixed foam sometimes passing through directional windows. + SyncIt21: + - bugfix: map export won't break exported gas strings & other that depend on semicolon + - code_imp: non ascii chars inside lists in map files can be read without error + loganuk: + - map: Catwalk lower Science changes [C.A.T] + massaheartsu: + - rscadd: Added meth, opium, and their production! Also added to black market uplink. + - rscadd: Added a craftable glass pipe. + - rscadd: Added to contraband spawners. + - qol: Can now insert any drug item into a pipe. + - bugfix: Spacemen can now smoke meth without exploding!! + timothymtorres: + - bugfix: Santa has put cargo in his very naughty list for spam producing his presents + by dumpster diving. This fixes Christmas presents (and other holiday items) + from spawning inside dumpsters. +2025-09-11: + Ezel: + - balance: CE now gets upgraded welders instead of normal + Hatterhat: + - qol: Mail bags can now hold bounty cubes. + - qol: You can now cut folders apart back into cardboard with wirecutters or a knife. + Melbert: + - bugfix: Fix held items with slowdown not working + - bugfix: Fix hair mask updating oddly + OrionTheFox: + - qol: made Autopsy Reports follow similar formatting to Health Scans, and adds + some information previously missing such as Missing Organs. + SyncIt21: + - qol: hand crafted air sensors now auto connect to input & output ports if they + are located within a 4 tile radius from it + - qol: atmos control monitors now locate all air sensors nearest to in on that same + z level meaning you can have multiple air sensors of the same type on the same + map + - refactor: refactored how air sensors & atmos monitors connect to each other. Please + report any atmos computers that have missing input valves/output ports on their + connected air sensors or those that don't list any air sensors at all on github + lelandkemble: + - qol: allows hitting empty light fixtures on combat mode + - bugfix: mice stored on your person will no longer disappear when killed + loganuk: + - rscadd: RETA System - Request Consoles give temporary access to responders when + used for some areas. Paramedics lose broad access but get external space access. + - qol: Request consoles now show name and job role on call message & Cooldown on + spamming calls + sound prompt + - qol: Medibot access no longer based on Paramedic trim ID - Still has original + access + - image: Added "lights_reta" for temporary door access when in effect + - admin: Gives admins "RETA door access" verb for giving department wide area access + on maps. + - config: New config settings for RETA + necromanceranne: + - balance: Jackets can carry personal firearms and holsters in their suit storage. + So can hawaiian shirts and comedian suits. + - balance: More 'assistant' attire can fit improvised weapons. + - balance: Justice suits can fit security items in their suit storage. + - bugfix: Imperium monk outfits now hold the true list of chaplain suit storage + items, and not just a limited list. +2025-09-12: + Aliceee2ch: + - map: Added shutters in Cargo bay on every station. + - map: Added firelocks on lower Cargo staircase on TramStation. Also added space + shutters in drone bay to prevent easy spacing. + - map: Windows in Meta and IceBox Cargo security outposts are now hotwired, like + every other security outpost does. + - map: Replaced blast doors on regular shutters in QM office on MetaStation. + Ben10Omintrix: + - bugfix: snails no longer crush glass tables when crawling over them + Bisar: + - code_imp: Heat capacity calculation for gas mixtures has been slightly optimized. + Iamgoofball: + - bugfix: Blocks mobs with players controlling them from breeding (ie. sentience + potion'd raptors) + Melbert: + - code_imp: Minor cleanup with species-weapon vulnerabilities (like moths vs flyswatters) + MintMetal: + - bugfix: fixed lost cable on Delta Station + SyncIt21: + - bugfix: Fixes random runtime for round start silo connections + - bugfix: Ore Silo UI works again + lelandkemble: + - bugfix: Station MODules no longer provide illegal technology + sushi: + - bugfix: implants can no longer be removed from the same mob (or other mobs!) multiple + times + timothymtorres: + - bugfix: Fix map z-level generation starting position. Z-levels used to cluster + together near the edges and will now instead be spread out evenly from the center. + - qol: The GPS debug tool will now spawn with the admin outfit apart of the debug + tools + - admin: Add GPS debug tool to admin debug box + tiramisuapimancer: + - bugfix: you can actually get the hat stabilizer modsuit module on the black market +2025-09-13: + FalloutFalcon: + - rscadd: Soda cans show up in the silver slime drink table. + - rscadd: Examine tag for items that are not mean to show up ingame. + - refactor: Standardizes how gifts rule out abstract types. + - bugfix: gifts no longer check if something has an inhand, massively expanding + the list of potential items. + JohnFulpWillard: + - rscdel: Merged ghosts and spirits into one species. + - balance: Spirit's passthrough ability is now tied down 7 tiles from a tombstone, + but is no longer affected by holy water nor does it make them drop their equipped + gear. + - balance: Ghosts can now be healed. + Melbert: + - rscdel: Captain's no longer sorted under Security in places such as the manifest + or job selection + - refactor: Refactored a lot of code relating to human face and voice, ie, what + shows up in examine and in say. Report anything odd when examining people, with + ID cards, when talking over radio, or when disguised + - refactor: Refactored ling mimic voice and traitor voice changer + - rscdel: Potted plants no longer hide voice. They still hide appearance, though + - qol: Honorifics now show in examine / in world, rather than only when speaking. + - rscadd: There's a 1/5 chance that Paradox Clone spawns a second clone if there + are enough candidates. Neither clone is aware of or on a team with the other + - There can only be one. + - rscadd: Paradox Clones are now tasked to `Be the only [x] alive`, meaning means + of identity cloning (such as Genetics or Changelings) may throw a wrench in + your plan. + lelandkemble: + - qol: Eating ice cream no longer curses you + loganuk: + - map: Catwalk - Atmos and Engineering split, new access hallway, new stairs to + AI sat, HFR re-located, space for passion projects, new lighting, So many changes + to document. [C.A.T] + necromanceranne: + - bugfix: Syndicate Tomes once again can be used to beat the shit out of people. + - image: The rebellion mask now renders beneath your hair. + - qol: The rebellion mask now lets you plug in internals. +2025-09-14: + ArcaneMusic: + - rscadd: Boulders from ore-vents can now be used on lava tiles, to create a temporary + bridge to cross. Just don't be standing on it when it sinks back into the lava! + - map: Re-added the gulag boulder-vent to the lavaland gulag. + - bugfix: Lava tiles will now properly burn its contents when a catwalk or similar + crossing disappears above itself. + LemonInTheDark: + - bugfix: Moving diagonally will no longer lead to stutter stepping (it's tickbound) +2025-09-15: + JohnFulpWillard: + - rscadd: Added a new PDA theme and 3 secret ones you may find in maintenance. + Melbert: + - bugfix: Food-tray-to-oven-tray transfer works again + lelandkemble: + - bugfix: Filled worn trashbags are no longer spriteless + necromanceranne: + - balance: Shortbows and divine bows do more damage. The divine bow also launches + arrows at a higher velocity than normal bows. + - image: Flaming arrows now have proper sprites. + - balance: Flaming arrows now deal BURN damage. And also deal an appropriate amount + of damage for an arrow. + - rscadd: Ashen bows and arrows, made from sinew and bone. And leather for the bow. + - rscadd: Ashen arrows deal significantly more damage to mining mobs. + - balance: Arrow quivers are made from wood rather than cardboard. + - qol: Shortbows and ashen bows have the ability to be renamed. +2025-09-16: + Ghommie: + - balance: Clocks, both mounted or tabletop, now improve room's beauty a little. + - balance: Buffed the torsion ratchet MOD module (from that bepis node with several + modsuit mod designs in it). You can also have more than one at a time. + - balance: The secondary action of the chain of command (the chained whip) also + boosts action speed and not just move speed. + - qol: The chain of command now has contextual tip for its secondary action, and + plays the whip attack animation when it's done. + - balance: Tree logs (not hydroponics towercaps) give more planks when cut. From + 1 -> 10. + - bugfix: The megaphone MOD module also has a TTS filter when active, just like + the handheld version. + - qol: Accessories other than the first are now displayed on worn clothing. + - refactor: Underwater basketweaving refactored so it doesn't show in the crafting + menu unless you've the skillchip active. + LemonInTheDark: + - balance: AIs viewing the crew monitor will no longer be told ahead of time if + they cannot jump to a player. + Melbert: + - bugfix: Things that recharge "all cells on your person" now avoid recharging Ethereal + stomachs, and thus, will no longer cause spontaneous overcharge or weird chat + messages + - bugfix: Spades work on trays again + - qol: Poppy seeds now give better feedback when unable to harvest + - qol: Poppy seeds now have an immutable gene indicating they can be sliced for + sap + - rscdel: Lilys and Geraniums can no longer be tapped for sap + Melbert, Toriate: + - rscdel: Removed ninja's EMP burst + - rscadd: Replaced ninja's throwing stars with energy throwing stars, which EMP + on hit and embed, and can't be caught. + - sound: Throwing stars now make stab sounds instead of thud sounds + RusselNotSCP: + - rscadd: You can now make 15 new classic (and some less classic) cocktails. Includes + old standards like the Old Fashioned, Daiquiri, Ramos Gin Fizz, and more! + SyncIt21: + - bugfix: vending machines now randomly shock if electrified & can be untilted again + by hand + WebcomicArtist: + - balance: EMPs now drain cells better, starting at 3 emps to drain a basic cell, + up to 8 for bluespace. + lelandkemble: + - balance: Poly talks less now + - balance: The "Bolt Lights" wire is now the "Feedback" wire, and controls both + lights and sounds for the airlock. +2025-09-17: + Aliceee2ch: + - qol: Added new helpful modules, such as decal painter for engineering and chembag + for medical borg. + - rscadd: Added miner cyborg shield module. In lavaland (low) pressure, it protects + you from 50% of incoming damage in exchange of your cell charge. + - rscadd: Added BS syringe upgrade for medical cyborg. + Ghommie: + - qol: fillets that you cut from fish will now inherit the name of the fish they + were cut from (eg. catfish fillet, char fillet etc.) + - bugfix: Material prefixes won't appear twice when processing items with custom + materials being processed with a tool. + SyncIt21: + - bugfix: ORM's smelt ores correctly when inserted by hand/bag +2025-09-18: + LT3: + - bugfix: '''a box full of shotgun darts with increased chemical storage capacity'' + now has a shorter name' + Pickle-Coding: + - code_imp: Caches individual gases for gas reactions. + RealWinterFrost & TheSelfish: + - rscadd: Multicolours ushankas, woo! + - rscadd: Security now has a hat to fight off the frost. diff --git a/icons/effects/fields.dmi b/icons/effects/fields.dmi index 1e4287078767..a9394b6ab065 100644 Binary files a/icons/effects/fields.dmi and b/icons/effects/fields.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index d308aea2e2f7..58aa910cb224 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/map_icons/clothing/head/_head.dmi b/icons/map_icons/clothing/head/_head.dmi index b05d7b9b050d..d0a44a1a796f 100644 Binary files a/icons/map_icons/clothing/head/_head.dmi and b/icons/map_icons/clothing/head/_head.dmi differ diff --git a/icons/mob/actions/actions_mecha.dmi b/icons/mob/actions/actions_mecha.dmi index 60df1b5ed1ae..82f094669951 100644 Binary files a/icons/mob/actions/actions_mecha.dmi and b/icons/mob/actions/actions_mecha.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index d73e28d1aec2..0f43a1b28507 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 023652ea9a33..1add3b190769 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi index f3f297889619..142319bbf81d 100644 Binary files a/icons/mob/clothing/head/costume.dmi and b/icons/mob/clothing/head/costume.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 7c2d6d324a5c..ed570225bdc1 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/effects/durand_shield.dmi b/icons/mob/effects/durand_shield.dmi index 8f9016ed74be..c4a18d1b5990 100644 Binary files a/icons/mob/effects/durand_shield.dmi and b/icons/mob/effects/durand_shield.dmi differ diff --git a/icons/mob/human/emote_visuals.dmi b/icons/mob/human/emote_visuals.dmi index 8a29603850f4..8880693066d4 100644 Binary files a/icons/mob/human/emote_visuals.dmi and b/icons/mob/human/emote_visuals.dmi differ diff --git a/icons/mob/human/species/ghost.dmi b/icons/mob/human/species/ghost.dmi index 42185e3db54b..f22d3fc386cc 100644 Binary files a/icons/mob/human/species/ghost.dmi and b/icons/mob/human/species/ghost.dmi differ diff --git a/icons/mob/inhands/equipment/shields_lefthand.dmi b/icons/mob/inhands/equipment/shields_lefthand.dmi index a19d5f46245e..033345c7d3d2 100644 Binary files a/icons/mob/inhands/equipment/shields_lefthand.dmi and b/icons/mob/inhands/equipment/shields_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/shields_righthand.dmi b/icons/mob/inhands/equipment/shields_righthand.dmi index b4d080345c53..66d8bf8a03fb 100644 Binary files a/icons/mob/inhands/equipment/shields_righthand.dmi and b/icons/mob/inhands/equipment/shields_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 82f46b35c6cc..0a0813ee8c2e 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index b2e2fc8033b8..9d1538bf5765 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/bows_lefthand.dmi b/icons/mob/inhands/weapons/bows_lefthand.dmi index 78e743932622..c04b8fbd23c8 100644 Binary files a/icons/mob/inhands/weapons/bows_lefthand.dmi and b/icons/mob/inhands/weapons/bows_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/bows_righthand.dmi b/icons/mob/inhands/weapons/bows_righthand.dmi index 04ea8cf0bc68..e91344d37e43 100644 Binary files a/icons/mob/inhands/weapons/bows_righthand.dmi and b/icons/mob/inhands/weapons/bows_righthand.dmi differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 7b155f732168..1b8a7f58af06 100644 Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ diff --git a/icons/obj/clothing/head/costume.dmi b/icons/obj/clothing/head/costume.dmi index 11c107f2cde6..e1a6c39a91df 100644 Binary files a/icons/obj/clothing/head/costume.dmi and b/icons/obj/clothing/head/costume.dmi differ diff --git a/icons/obj/devices/tool.dmi b/icons/obj/devices/tool.dmi index 035f73b0aca2..9075c0d20630 100644 Binary files a/icons/obj/devices/tool.dmi and b/icons/obj/devices/tool.dmi differ diff --git a/icons/obj/doors/airlocks/station/overlays.dmi b/icons/obj/doors/airlocks/station/overlays.dmi index 9ccec458ec83..17e9005042e4 100644 Binary files a/icons/obj/doors/airlocks/station/overlays.dmi and b/icons/obj/doors/airlocks/station/overlays.dmi differ diff --git a/icons/obj/drinks/mixed_drinks.dmi b/icons/obj/drinks/mixed_drinks.dmi index 4e0043695f8b..97b1d99979cd 100644 Binary files a/icons/obj/drinks/mixed_drinks.dmi and b/icons/obj/drinks/mixed_drinks.dmi differ diff --git a/icons/obj/food/mexican.dmi b/icons/obj/food/mexican.dmi index 772d6b2e3fc7..3ab4a6c6aa3a 100644 Binary files a/icons/obj/food/mexican.dmi and b/icons/obj/food/mexican.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index d5fc99935494..4d5ec8328270 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/wall_healer.dmi b/icons/obj/machines/wall_healer.dmi new file mode 100644 index 000000000000..f09ad6f7339d Binary files /dev/null and b/icons/obj/machines/wall_healer.dmi differ diff --git a/icons/obj/medical/chemical.dmi b/icons/obj/medical/chemical.dmi index 9b785b3ed606..a7e9cfa48c2a 100644 Binary files a/icons/obj/medical/chemical.dmi and b/icons/obj/medical/chemical.dmi differ diff --git a/icons/obj/medical/drugs.dmi b/icons/obj/medical/drugs.dmi index 21c52523ed19..8afa6d309d5c 100644 Binary files a/icons/obj/medical/drugs.dmi and b/icons/obj/medical/drugs.dmi differ diff --git a/icons/obj/ore.dmi b/icons/obj/ore.dmi index 7cc3b8820577..5346161a9e7b 100644 Binary files a/icons/obj/ore.dmi and b/icons/obj/ore.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index 58b67dc3779f..23e5a8428a3e 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/weapons/bows/arrows.dmi b/icons/obj/weapons/bows/arrows.dmi index b19c20187ebf..60bba40b93f7 100644 Binary files a/icons/obj/weapons/bows/arrows.dmi and b/icons/obj/weapons/bows/arrows.dmi differ diff --git a/icons/obj/weapons/bows/bows.dmi b/icons/obj/weapons/bows/bows.dmi index 57d423710426..280254b80044 100644 Binary files a/icons/obj/weapons/bows/bows.dmi and b/icons/obj/weapons/bows/bows.dmi differ diff --git a/icons/obj/weapons/guns/energy.dmi b/icons/obj/weapons/guns/energy.dmi index a6ea97006982..bbb4ff06316c 100644 Binary files a/icons/obj/weapons/guns/energy.dmi and b/icons/obj/weapons/guns/energy.dmi differ diff --git a/icons/obj/weapons/thrown.dmi b/icons/obj/weapons/thrown.dmi index e877d12d31b6..9c11cbaa1d2d 100644 Binary files a/icons/obj/weapons/thrown.dmi and b/icons/obj/weapons/thrown.dmi differ diff --git a/modular_meta/features/antagonists/bloodsuckers/code/powers/veil.dm b/modular_meta/features/antagonists/bloodsuckers/code/powers/veil.dm index 3c50a967c7bf..2dfc6e38dc29 100644 --- a/modular_meta/features/antagonists/bloodsuckers/code/powers/veil.dm +++ b/modular_meta/features/antagonists/bloodsuckers/code/powers/veil.dm @@ -89,7 +89,7 @@ SIGNAL_HANDLER identity[VISIBLE_NAME_FACE] = disguise_name - user.SetSpecialVoice(disguise_name) + user.override_voice = "[disguise_name]" /datum/action/cooldown/bloodsucker/veil/DeactivatePower() . = ..() @@ -97,7 +97,7 @@ return var/mob/living/carbon/human/user = owner // Revert Identity - user.UnsetSpecialVoice() + user.override_voice = "" // Revert Appearance user.gender = prev_gender diff --git a/modular_meta/features/uplink_items/code/uplink.dm b/modular_meta/features/uplink_items/code/uplink.dm index 694c84ea941b..02bfe35abe0a 100644 --- a/modular_meta/features/uplink_items/code/uplink.dm +++ b/modular_meta/features/uplink_items/code/uplink.dm @@ -19,7 +19,6 @@ name = "Backstabing Knife" desc = "Looking like basicaly folding knife, but have syndicate mark. \ Deals x4 damage bonus if you attack enemy from back." - population_minimum = TRAITOR_POPULATION_LOWPOP item = /obj/item/switchblade/backstab cost = 10 @@ -44,3 +43,39 @@ Small note from Gorlex's engineers: use with poison kit to achieve best effect!" cost = 8 item = /obj/item/knife/poison + +//Spy unique items. \ + In pr #92481 some few cool spy items were added, since spy is a quite disliked antagonist out here, \ + usually being either exchanged for an regular traitor or rather disabled by admins completely, we're going to add his items here. \ + editing whole category "spy_unique" would cause some issues, due it having rocket launcher, bulldog shotgun and other quite impressive items.\ + Genuinely, you do not want a traitor running around with an rocket launcher killing people \ + So, what're we going to do, is to add all the funny items down here one by one. + +//stealthy category +/datum/uplink_item/stealthy_weapons/daggerboot + name = "Boot Dagger" + desc = "A pair of boots with a dagger embedded into the sole. Kicks with these will stab the target, potentially causing bleeding." + item = /obj/item/clothing/shoes/jackboots/dagger + cost = 4 + +//role_restricted catergory +/datum/uplink_item/role_restricted/monster_cube_box + name = "Monster cube box" + desc = "A box containing a bunch of random monster cubes. Add water and see what you get!" + item = /obj/item/storage/box/monkeycubes/random + cost = 12 + restricted_roles = list(JOB_SCIENTIST, JOB_CLOWN, JOB_RESEARCH_DIRECTOR, JOB_CHIEF_MEDICAL_OFFICER) + +//dangerous category +/datum/uplink_item/dangerous/spider_bite_martial_arts + name = "Spider-bite Martial Arts Scroll" + desc = "A scroll teaching you the basics of the Spider Bite martial art." + item = /obj/item/book/granter/martial/spider_bite + cost = 10 // seems balanced to me. + +/datum/uplink_item/dangerous/nunchaku + name = "Syndie Fitness Nunchuks" + desc = "Heavyweight titanium nunchucks, quickly knocking opponents to the ground, then just as easily smashing the opponent afterward." + item = /obj/item/melee/baton/nunchaku + cost = 12 + uplink_item_flags = SYNDIE_ILLEGAL_TECH | SYNDIE_TRIPS_CONTRABAND diff --git a/strings/tips.txt b/strings/tips.txt index 6bd118ffb077..0eba101a1c07 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -317,3 +317,4 @@ As the Captain, your sabre deals extra damage to Assistants (as long as they hav You can automatically extract and retract arm implants by 'activating' the empty hand they're on. This includes integrated toolsets, cursed katanas, and vorpal scythes. You can combine the Carpet reagent with various different reagents, such as Oil and Cyanide, to create unique carpet types. You can bake a birthday cake and then microwave it to create a legendary cake hat. You can then combine it with an energy sword to create an energy cake. +You can quickly remove radiation from items in a room by releasing water vapor into the air around them (including worn items). diff --git a/tgstation.dme b/tgstation.dme index 7d4105b64cb2..9be99329733f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -473,6 +473,7 @@ #include "code\__HELPERS\qdel.dm" #include "code\__HELPERS\radiation.dm" #include "code\__HELPERS\radio.dm" +#include "code\__HELPERS\random_items.dm" #include "code\__HELPERS\randoms.dm" #include "code\__HELPERS\reagents.dm" #include "code\__HELPERS\ref.dm" @@ -545,6 +546,7 @@ #include "code\_globalvars\pipe_info.dm" #include "code\_globalvars\rcd.dm" #include "code\_globalvars\religion.dm" +#include "code\_globalvars\reta.dm" #include "code\_globalvars\silo.dm" #include "code\_globalvars\tgui.dm" #include "code\_globalvars\time_vars.dm" @@ -655,6 +657,7 @@ #include "code\controllers\configuration\entries\jobs.dm" #include "code\controllers\configuration\entries\lua.dm" #include "code\controllers\configuration\entries\resources.dm" +#include "code\controllers\configuration\entries\reta.dm" #include "code\controllers\subsystem\achievements.dm" #include "code\controllers\subsystem\addiction.dm" #include "code\controllers\subsystem\admin_verbs.dm" @@ -1272,6 +1275,7 @@ #include "code\datums\components\shovel_hands.dm" #include "code\datums\components\shrink.dm" #include "code\datums\components\shuttle_cling.dm" +#include "code\datums\components\shuttle_move_deferred_checks.dm" #include "code\datums\components\sign_language.dm" #include "code\datums\components\simple_access.dm" #include "code\datums\components\simple_bodycam.dm" @@ -1405,6 +1409,7 @@ #include "code\datums\diseases\adrenal_crisis.dm" #include "code\datums\diseases\anaphylaxis.dm" #include "code\datums\diseases\anxiety.dm" +#include "code\datums\diseases\asthma_attack.dm" #include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\chronic_illness.dm" @@ -1807,8 +1812,10 @@ #include "code\datums\proximity_monitor\field.dm" #include "code\datums\proximity_monitor\proximity_monitor.dm" #include "code\datums\proximity_monitor\fields\ai_target_tracking.dm" +#include "code\datums\proximity_monitor\fields\bubble.dm" #include "code\datums\proximity_monitor\fields\gravity.dm" #include "code\datums\proximity_monitor\fields\heretic_arena.dm" +#include "code\datums\proximity_monitor\fields\space_protection.dm" #include "code\datums\proximity_monitor\fields\timestop.dm" #include "code\datums\proximity_monitor\fields\void_storm.dm" #include "code\datums\proximity_monitor\fields\projectile_dampener\projectile_dampener.dm" @@ -1819,6 +1826,7 @@ #include "code\datums\quirks\negative_quirks\all_nighter.dm" #include "code\datums\quirks\negative_quirks\allergic.dm" #include "code\datums\quirks\negative_quirks\anosmia.dm" +#include "code\datums\quirks\negative_quirks\asthma.dm" #include "code\datums\quirks\negative_quirks\bad_back.dm" #include "code\datums\quirks\negative_quirks\bad_touch.dm" #include "code\datums\quirks\negative_quirks\big_hands.dm" @@ -2211,6 +2219,7 @@ #include "code\game\machinery\teambuilder.dm" #include "code\game\machinery\teleporter.dm" #include "code\game\machinery\transformer.dm" +#include "code\game\machinery\wall_healer.dm" #include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\wishgranter.dm" #include "code\game\machinery\camera\camera.dm" @@ -2444,6 +2453,7 @@ #include "code\game\objects\effects\spawners\random\techstorage.dm" #include "code\game\objects\effects\spawners\random\trash.dm" #include "code\game\objects\effects\spawners\random\vending.dm" +#include "code\game\objects\effects\spawners\random\weapon.dm" #include "code\game\objects\effects\temporary_visuals\cult.dm" #include "code\game\objects\effects\temporary_visuals\effect_trail.dm" #include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" @@ -2724,6 +2734,7 @@ #include "code\game\objects\items\kirby_plants\organic_plants.dm" #include "code\game\objects\items\kirby_plants\synthetic_plants.dm" #include "code\game\objects\items\melee\baton.dm" +#include "code\game\objects\items\melee\chainofcommand.dm" #include "code\game\objects\items\melee\energy.dm" #include "code\game\objects\items\melee\misc.dm" #include "code\game\objects\items\rcd\RCD.dm" @@ -4704,6 +4715,7 @@ #include "code\modules\library\skill_learning\generic_skillchips\musical.dm" #include "code\modules\library\skill_learning\generic_skillchips\point.dm" #include "code\modules\library\skill_learning\generic_skillchips\self_surgery.dm" +#include "code\modules\library\skill_learning\generic_skillchips\underwater_basketweaving.dm" #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" #include "code\modules\library\skill_learning\job_skillchips\clown.dm" @@ -6001,6 +6013,7 @@ #include "code\modules\reagents\reagent_containers\cooler_jug.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" +#include "code\modules\reagents\reagent_containers\inhaler.dm" #include "code\modules\reagents\reagent_containers\jerrycan.dm" #include "code\modules\reagents\reagent_containers\medigel.dm" #include "code\modules\reagents\reagent_containers\patch.dm" @@ -6150,6 +6163,9 @@ #include "code\modules\research\xenobiology\vatgrowing\samples\cell_lines\common.dm" #include "code\modules\research\xenobiology\vatgrowing\samples\cell_lines\organs.dm" #include "code\modules\research\xenobiology\vatgrowing\samples\viruses\_virus.dm" +#include "code\modules\reta\reta_debug.dm" +#include "code\modules\reta\reta_id_card.dm" +#include "code\modules\reta\reta_system.dm" #include "code\modules\security_levels\keycard_authentication.dm" #include "code\modules\security_levels\security_level_datums.dm" #include "code\modules\shuttle\shuttle.dm" @@ -6288,6 +6304,7 @@ #include "code\modules\station_goals\station_goal.dm" #include "code\modules\station_goals\vault_mutation.dm" #include "code\modules\surgery\amputation.dm" +#include "code\modules\surgery\asthmatic_bypass.dm" #include "code\modules\surgery\autopsy.dm" #include "code\modules\surgery\blood_filter.dm" #include "code\modules\surgery\bone_mending.dm" @@ -6701,6 +6718,7 @@ #include "code\modules\wiremod\datatypes\composite\composite.dm" #include "code\modules\wiremod\datatypes\composite\list.dm" #include "code\modules\wiremod\dcs_components\component_add_port.dm" +#include "code\modules\wiremod\dcs_components\component_boris_circuit_container.dm" #include "code\modules\wiremod\dcs_components\component_wirenet_connection.dm" #include "code\modules\wiremod\preset\hello_world.dm" #include "code\modules\wiremod\preset\speech_relay.dm" diff --git a/tgui/packages/tgui-say/TguiSay.tsx b/tgui/packages/tgui-say/TguiSay.tsx index 785891e9f410..fc3cdc2a34a6 100644 --- a/tgui/packages/tgui-say/TguiSay.tsx +++ b/tgui/packages/tgui-say/TguiSay.tsx @@ -27,13 +27,11 @@ export function TguiSay() { const chatHistory = useRef(new ChatHistory()); const messages = useRef(byondMessages); const scale = useRef(true); + const currentPrefix = useRef(null); // I initially wanted to make these an object or a reducer, but it's not really worth it. // You lose the granulatity and add a lot of boilerplate. const [buttonContent, setButtonContent] = useState(''); - const [currentPrefix, setCurrentPrefix] = useState< - keyof typeof RADIO_PREFIXES | null - >(null); const [lightMode, setLightMode] = useState(false); const [maxLength, setMaxLength] = useState(1024); const [size, setSize] = useState(WindowSize.Small); @@ -42,6 +40,10 @@ export function TguiSay() { const position = useRef([window.screenX, window.screenY]); const isDragging = useRef(false); + function setCurrentPrefix(prefix: keyof typeof RADIO_PREFIXES | null): void { + currentPrefix.current = prefix; + } + function handleArrowKeys(direction: KEY.Up | KEY.Down): void { const chat = chatHistory.current; const iterator = channelIterator.current; @@ -77,10 +79,10 @@ export function TguiSay() { // User is on a chat history message if (!chat.isAtLatest()) { chat.reset(); - setButtonContent(currentPrefix ?? iterator.current()); + setButtonContent(currentPrefix.current ?? iterator.current()); // Empty input, resets the channel - } else if (currentPrefix && iterator.isSay() && value?.length === 0) { + } else if (currentPrefix.current && iterator.isSay() && value?.length === 0) { setCurrentPrefix(null); setButtonContent(iterator.current()); } @@ -123,7 +125,7 @@ export function TguiSay() { function handleEnter(): void { const iterator = channelIterator.current; - const prefix = currentPrefix ?? ''; + const prefix = currentPrefix.current ?? ''; if (value?.length && value.length < maxLength) { chatHistory.current.add(value); @@ -138,15 +140,16 @@ export function TguiSay() { function handleForceSay(): void { const iterator = channelIterator.current; + const currentValue = innerRef.current?.value; // Only force say if we're on a visible channel and have typed something - if (!value || iterator.isVisible()) return; + if (!currentValue || !iterator.isVisible()) return; - const prefix = currentPrefix ?? ''; - const grunt = iterator.isSay() ? prefix + value : value; + const prefix = currentPrefix.current ?? ''; + const grunt = iterator.isSay() ? prefix + currentValue : currentValue; messages.current.forceSayMsg(grunt, iterator.current()); - unloadChat(); + handleClose(); } function handleIncrementChannel(): void { @@ -162,9 +165,9 @@ export function TguiSay() { const iterator = channelIterator.current; let newValue = event.currentTarget.value; - const newPrefix = getPrefix(newValue) || currentPrefix; + const newPrefix = getPrefix(newValue) || currentPrefix.current; // Handles switching prefixes - if (newPrefix && newPrefix !== currentPrefix) { + if (newPrefix && newPrefix !== currentPrefix.current) { setButtonContent(RADIO_PREFIXES[newPrefix]); setCurrentPrefix(newPrefix); newValue = newValue.slice(3); @@ -268,7 +271,7 @@ export function TguiSay() { const theme = (lightMode && 'lightMode') || - (currentPrefix && RADIO_PREFIXES[currentPrefix]) || + (currentPrefix.current && RADIO_PREFIXES[currentPrefix.current]) || channelIterator.current.current(); return ( diff --git a/tgui/packages/tgui/interfaces/AccountingConsole.tsx b/tgui/packages/tgui/interfaces/AccountingConsole.tsx deleted file mode 100644 index 11d1fbdd0c1c..000000000000 --- a/tgui/packages/tgui/interfaces/AccountingConsole.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { useState } from 'react'; -import { - Blink, - BlockQuote, - Collapsible, - Modal, - Section, - Stack, - Tabs, -} from 'tgui-core/components'; -import type { BooleanLike } from 'tgui-core/react'; - -import { useBackend } from '../backend'; -import { Window } from '../layouts'; - -type Data = { - PlayerAccounts: PlayerAccount[]; - AuditLog: AuditLog[]; - Crashing: BooleanLike; -}; - -type PlayerAccount = { - index: number; - name: string; - balance: number; - job: string; - modifier: number; -}; - -type AuditLog = { - index: number; - account: number; - cost: number; - vendor: string; -}; - -enum SCREENS { - users, - audit, -} - -export const AccountingConsole = (props) => { - const [screenmode, setScreenmode] = useState(SCREENS.users); - - return ( - - - - - - - setScreenmode(SCREENS.users)} - > - Users - - setScreenmode(SCREENS.audit)} - > - Audit - - - - - {screenmode === SCREENS.users && } - {screenmode === SCREENS.audit && } - - - - - ); -}; - -const UsersScreen = (props) => { - const { data } = useBackend(); - const { PlayerAccounts } = data; - - return ( -
    - {PlayerAccounts.map((account) => ( - - -
    - - {account.balance} credit balance - - - Employee has {account.modifier * 100}% pay modifier - -
    -
    -
    - ))} -
    - ); -}; - -const AuditScreen = (props) => { - const { data } = useBackend(); - const { AuditLog } = data; - - return ( -
    - {AuditLog.map((purchase) => ( -
    - {purchase.account} spent {purchase.cost} cr at{' '} - {purchase.vendor}. -
    - ))} -
    - ); -}; - -/** The modal menu that contains the prompts to making new channels. */ -const MarketCrashing = (props) => { - const { data } = useBackend(); - - const { Crashing } = data; - if (!Crashing) { - return null; - } - return ( - - OH GOD THE ECONOMY IS RUINED. - - ); -}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx new file mode 100644 index 000000000000..d6799d9291f4 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/AuditScreen.tsx @@ -0,0 +1,43 @@ +import { Blink, Modal, Section, Table } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { getRandomDoomMessage } from './helpers'; +import type { Data } from './types'; + +export const AuditScreen = () => { + const { data } = useBackend(); + const { crashing, audit_log } = data; + + return ( +
    + {!!crashing && ( + + + {getRandomDoomMessage()} + + + )} + + + Account + Cost + Location + Timestamp + + {audit_log.map((purchase, index) => ( + + {purchase.account} + + {purchase.cost} cr + + + {purchase.vendor} + + + {purchase.stationtime || '00:00'} ST + + + ))} +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/FakeDesktopButton.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/FakeDesktopButton.tsx new file mode 100644 index 000000000000..b429fa33d23d --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/FakeDesktopButton.tsx @@ -0,0 +1,35 @@ +import { Button, Stack } from 'tgui-core/components'; + +import { useBackend } from '../../backend'; +import type { SCREENS } from './types'; + +type FakeDesktopButtonProps = { + children: React.ReactNode; + name: string; + setScreenmode: (mode: SCREENS) => void; + ownerScreenMode: SCREENS; +}; + +export const FakeDesktopButton = (props: FakeDesktopButtonProps) => { + const { act } = useBackend(); + const { children, name, setScreenmode, ownerScreenMode } = props; + + return ( + <> + + + + + {name} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/FakeToolbarButton.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/FakeToolbarButton.tsx new file mode 100644 index 000000000000..edea840372e3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/FakeToolbarButton.tsx @@ -0,0 +1,34 @@ +import { Button } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import type { SCREENS } from './types'; + +type FakeToolbarButtonProps = { + name: string; + currentScreenMode: SCREENS; + setScreenmode: (mode: SCREENS) => void; + ownerScreenMode: SCREENS; +}; + +export const FakeToolbarButton = (props: FakeToolbarButtonProps) => { + const { act } = useBackend(); + const { name, currentScreenMode, setScreenmode, ownerScreenMode } = props; + + return ( + + ); +}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/FakeWindow.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/FakeWindow.tsx new file mode 100644 index 000000000000..da9ee0865bcd --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/FakeWindow.tsx @@ -0,0 +1,64 @@ +import { Box, Button, DmIcon, Stack } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { type Data, SCREENS } from './types'; + +type FakeWindowProps = { + name: string; + setScreenmode: (mode: SCREENS) => void; +}; +export const FakeWindowIan = (props: FakeWindowProps) => { + const { data } = useBackend(); + const { young_ian } = data; + + return ( + + + + ); +}; +export const FakeWindow = ( + props: FakeWindowProps & { + children: React.ReactNode; + }, +) => { + const { act } = useBackend(); + const { name, children, setScreenmode } = props; + + return ( + + + + + {name} + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/UsersScreen.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/UsersScreen.tsx new file mode 100644 index 000000000000..271ecfb014a3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/UsersScreen.tsx @@ -0,0 +1,151 @@ +import { + Blink, + Button, + Modal, + NumberInput, + Section, + Stack, + Table, +} from 'tgui-core/components'; +import { useBackend, useSharedState } from '../../backend'; +import { getRandomDoomMessage } from './helpers'; +import { SortButton } from './Sort'; +import { type Data, SORTING } from './types'; + +export const UsersScreen = () => { + const { act, data } = useBackend(); + const { crashing, accounts, max_pay_mod, min_pay_mod, max_advances } = data; + + const [accountNameSorting, setAccountNameSorting] = useSharedState( + 'sorting_account_name', + SORTING.ascending, + ); + const [balanceSorting, setBalanceSorting] = useSharedState( + 'sorting_balance', + SORTING.none, + ); + const [jobSorting, setJobSorting] = useSharedState( + 'sorting_job', + SORTING.none, + ); + + const accountsSorted = accounts.sort((a, b) => { + if (accountNameSorting === SORTING.ascending) { + return a.name > b.name ? 1 : -1; + } else if (accountNameSorting === SORTING.descending) { + return a.name > b.name ? -1 : 1; + } else if (balanceSorting === SORTING.ascending) { + return a.balance - b.balance; + } else if (balanceSorting === SORTING.descending) { + return b.balance - a.balance; + } else if (jobSorting === SORTING.ascending) { + return a.job > b.job ? 1 : -1; + } else if (jobSorting === SORTING.descending) { + return a.job > b.job ? -1 : 1; + } + return 0; + }); + + return ( +
    + {!!crashing && ( + + + {getRandomDoomMessage()} + + + )} + + + + + Account + + + + + + + + Balance + + + + + + + + Job + + + + + + Pay + Advances + + {accountsSorted.map((account, index) => ( + + {account.name} + + {account.balance} cr + + + {account.job} + + + + act('change_pay_mod', { + account_id: account.id, + pay_mod: value, + }) + } + /> + + + + {account.num_advances} + + + + + + + ))} +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/helpers.ts b/tgui/packages/tgui/interfaces/AccountingConsole/helpers.ts new file mode 100644 index 000000000000..6b75c73ffbac --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/helpers.ts @@ -0,0 +1,15 @@ +const doomMessages = [ + 'BUY GOLD!', + 'BUY LOW, SELL HIGH!', + 'INVEST IN CRYPTO!', + 'SELL EVERYTHING!', + 'THE ECONOMY IS COLLAPSING!', + 'THE ECONOMY IS RUINED!', + 'THE MARKET IS CRASHING!', + 'THE STATION IS GOING BANKRUPT!', +]; + +// Used when the economy is crashing to get a random funny message. +export function getRandomDoomMessage(): string { + return doomMessages[Math.floor(Math.random() * doomMessages.length)]; +} diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx b/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx new file mode 100644 index 000000000000..064e3eff952b --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/index.tsx @@ -0,0 +1,162 @@ +import { Button, DmIcon, Stack } from 'tgui-core/components'; + +import { useBackend, useSharedState } from '../../backend'; +import { Window } from '../../layouts'; +import { AuditScreen } from './AuditScreen'; +import { FakeDesktopButton } from './FakeDesktopButton'; +import { FakeToolbarButton } from './FakeToolbarButton'; +import { FakeWindow, FakeWindowIan } from './FakeWindow'; +import { type Data, SCREENS } from './types'; +import { UsersScreen } from './UsersScreen'; + +export const AccountingConsole = () => { + const { data } = useBackend(); + const { + station_time = '00:00', + pic_file_format = 'png', + young_ian = false, + } = data; + const [screenmode, setScreenmode] = useSharedState('screen', SCREENS.none); + + const ianFileName = young_ian + ? `Ian's first birthday.${pic_file_format}` + : `Ian.${pic_file_format}`; + + return ( + + + + + + + + + + + + + + + + + + + + + + + {screenmode === SCREENS.users && ( + + + + + + )} + {screenmode === SCREENS.audit && ( + + + + + + )} + {screenmode === SCREENS.ian && ( + + + + )} + + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/AccountingConsole/types.ts b/tgui/packages/tgui/interfaces/AccountingConsole/types.ts new file mode 100644 index 000000000000..5d714b180edd --- /dev/null +++ b/tgui/packages/tgui/interfaces/AccountingConsole/types.ts @@ -0,0 +1,42 @@ +import type { BooleanLike } from 'tgui-core/react'; + +export type Data = { + accounts: PlayerAccount[]; + audit_log: AuditLog[]; + crashing: BooleanLike; + pic_file_format: string; + max_pay_mod: number; + min_pay_mod: number; + max_advances: number; + station_time: string; + young_ian: BooleanLike; +}; + +type PlayerAccount = { + id: number; + name: string; + balance: number; + job: string; + modifier: number; + num_advances: number; +}; + +type AuditLog = { + account: number; + cost: number; + vendor: string; + stationtime: string; +}; + +export enum SCREENS { + none, + users, + audit, + ian, +} + +export enum SORTING { + ascending, + descending, + none, +} diff --git a/tgui/packages/tgui/interfaces/AchievementsAdminPanel.tsx b/tgui/packages/tgui/interfaces/AchievementsAdminPanel.tsx index 3c61c688bef4..17285852fdc5 100644 --- a/tgui/packages/tgui/interfaces/AchievementsAdminPanel.tsx +++ b/tgui/packages/tgui/interfaces/AchievementsAdminPanel.tsx @@ -9,7 +9,7 @@ type Data = { export const AchievementsAdminPanel = (props) => { const { act, data } = useBackend(); - const { orphaned_keys } = data; + const { orphaned_keys, archived_keys } = data; return ( @@ -49,7 +49,7 @@ export const AchievementsAdminPanel = (props) => {
    Archived achievements in the database. - {orphaned_keys.map((key) => ( + {archived_keys.map((key) => ( { {!data.wires.bolts && '[Wires have been cut!]'} act('light-toggle')} /> } > - {!data.wires.lights && '[Wires have been cut!]'} + {!data.wires.feedback && '[Wires have been cut!]'} { key={container.ref} content={`${capitalize(container.name)}\xa0(${container.volume}u)`} > - + /> ); }; diff --git a/tgui/packages/tgui/interfaces/CrewConsole.tsx b/tgui/packages/tgui/interfaces/CrewConsole.tsx index cd6c6ef86539..b89891ad9b8e 100644 --- a/tgui/packages/tgui/interfaces/CrewConsole.tsx +++ b/tgui/packages/tgui/interfaces/CrewConsole.tsx @@ -133,7 +133,6 @@ type CrewSensor = { brutedam: number; area: string | undefined; health: number; - can_track: BooleanLike; ref: string; }; @@ -234,7 +233,6 @@ const CrewTableEntry = (props: CrewTableEntryProps) => { burndam, brutedam, area, - can_track, } = sensor_data; return ( @@ -289,7 +287,6 @@ const CrewTableEntry = (props: CrewTableEntryProps) => { {!!link_allowed && ( ); @@ -251,26 +256,80 @@ const RestrictButton = () => { const LogsList = (props: LogsListProps) => { const { logs } = props; - return logs.length > 0 ? ( -
    - - - {logs.map((log, index) => ( - - ))} - -
    - ) : ( - No log entries currently present! + const searchableLogs = logs.map((log, index) => ({ + id: index, + log, + searchString: [ + log.action.toLowerCase(), + log.user_data.name.toLowerCase(), + log.user_data.assignment.toLowerCase(), + log.raw_materials.toLowerCase(), + log.machine_name.toLowerCase(), + log.area_name.toLowerCase(), + log.noun.toLowerCase(), + ].join(' '), + })); + + const { query, setQuery, results } = useFuzzySearch({ + searchArray: searchableLogs, + matchStrategy: 'smart', + getSearchString: (item) => item.searchString, + }); + + const filteredLogs = query ? results.map((result) => result.log) : logs; + + return ( + + +
    }> + + + setQuery(value)} + /> + + +
    +
    + +
    0} pr={1}> + {filteredLogs.length > 0 ? ( + + {filteredLogs.map((log, index) => ( + + ))} + + ) : ( + + {query + ? 'No logs seem to match your request.' + : 'Nothing here...'} + + )} +
    +
    +
    ); }; const UserItem = (props: UserData) => { const { - name, - age, - assignment, - account_id, + name = 'NAME_RES_FAIL', + age = 0, + assignment = 'ASSGN-RES_FAIL', + account_id = 0, account_holder, account_assignment, accesses, @@ -281,17 +340,18 @@ const UserItem = (props: UserData) => { const { act, data } = useBackend(); const { banned_users } = data; return ( - - {name} - {assignment} + + {name}, + {assignment} {!id_read_failure && !silicon_override && ( )} @@ -300,7 +360,7 @@ const UserItem = (props: UserData) => { }; const formatAmount = (action: string, amount: number) => { - const isSheetAction = action === 'EJECT' || action === 'DEPOSIT'; + const isSheetAction = action === 'WITHDRAWN' || action === 'DEPOSITED'; const rawAmount = Math.abs(amount); if (!isSheetAction) { return rawAmount; @@ -320,28 +380,77 @@ const LogEntry = (props: Log) => { noun, user_data, } = props; + const [expanded, setExpanded] = useState(false); + return ( - -
    - - {time} - - {capitalize(machine_name)} - - {area_name} - 0 ? 'good' : 'bad'} - > - {raw_materials} - - - - - -
    -
    + + setExpanded(!expanded)} + > + + + + + + + + + {` ${formatAmount(action, amount)} ${noun}`} + + + + + + + + {expanded && ( + + + + Time + {time} + + + Machine + {capitalize(machine_name)} + + + Location + {area_name} + + + Materials + 0 ? 'good' : 'bad'}> + {raw_materials} + + + + User + + + + +
    +
    + )} +
    ); }; diff --git a/tgui/packages/tgui/interfaces/PlantAnalyzer/Graft.tsx b/tgui/packages/tgui/interfaces/PlantAnalyzer/Graft.tsx index 83f4e2447798..87b14fe667b4 100644 --- a/tgui/packages/tgui/interfaces/PlantAnalyzer/Graft.tsx +++ b/tgui/packages/tgui/interfaces/PlantAnalyzer/Graft.tsx @@ -16,6 +16,11 @@ export function PlantAnalyzerGraft(props) { const { data } = useBackend(); const { graft_data } = data; + if (!graft_data) { + // This shouldn't be rendered if graft_data is null + return null; + } + return (
    (); - const { seed_data, tray_data } = data; + const { seed_data, tray_data, cycle_seconds, trait_db } = data; + + if (!seed_data) { + // This shouldn't be rendered if seed data is null + return null; + } + + const all_traits = [ + ...(seed_data.core_traits || []), + ...(seed_data.removable_traits || []), + ]; return ( -
    } - > +
    - - - {seed_data.product_icon && seed_data.product_icon_state && ( - - )} + + + + + + {seed_data.product_icon && seed_data.product_icon_state && ( + + + + )} + + + + {seed_data.mutatelist.length > 0 && ( + + + + {seed_data.mutatelist.map((mutation) => ( + + + + ))} + + + + )} + @@ -79,18 +138,25 @@ export function PlantAnalyzerSeed(props) { {tray_data && ( - - {tray_data.plant_age * data.cycle_seconds} /{' '} - {seed_data.lifespan * data.cycle_seconds} seconds - + {tray_data.is_dead ? ( + + + Dead + + ) : ( + + {tray_data.plant_age * cycle_seconds} /{' '} + {formatPerSecond(seed_data.lifespan, cycle_seconds, false)} + + )} )} @@ -98,30 +164,21 @@ export function PlantAnalyzerSeed(props) { label="Maturation" tooltip="The age at which the plant starts growing products." > - {seed_data.maturation * data.cycle_seconds} seconds + {formatPerSecond(seed_data.maturation, cycle_seconds)} - {seed_data.production * data.cycle_seconds} seconds + {formatPerSecond(seed_data.production, cycle_seconds)} - - {seed_data.lifespan} / 100 - + {formatPerSecond(seed_data.lifespan, cycle_seconds)} - - {seed_data.weed_chance && seed_data.weed_rate - ? seed_data.weed_chance + - '% chance to grow by ' + - seed_data.weed_rate - : 'No weed growth'} + + {`${seed_data.weed_chance}% chance to grow by + ${seed_data.weed_rate} every ${cycle_seconds} seconds`} + {seed_data.unique_labels.map((label) => ( + + {label.data} + + ))} + + + {all_traits.map((trait) => { + const traitInfo = getTraitInfo(trait, trait_db); + return ( + + + + ); + })} + + + {seed_data.unique_collapsibles.map((collapsible) => ( + + + {Object.entries(collapsible.data).map( + ([dataText, dataTooltip]) => ( + + + + ), + )} + + + ))}
    ); } -function SeedExtraData(props) { +export function PlantAnalyzerSeedChems(props) { const { data } = useBackend(); const { seed_data } = data; + if (!seed_data) { + // This shouldn't be rendered if seed data is null + return null; + } + + const totalPercentage = seed_data.reagents.reduce( + (sum, reagent) => sum + reagent.rate * 100, + 0, + ); + + const totalVolume = + seed_data.reagents.reduce( + (sum, reagent) => sum + expectedReagentVolume(reagent, seed_data), + 0, + ) || 0; + + return ( +
    + + + {seed_data.reagents.length === 0 ? ( + + No reagent genes + + ) : ( + + + Reagent + Percentage + + + + Expected Volume + + + + + {seed_data.reagents.map((reagent) => ( + + + {reagent.name} + + {reagent.rate * 100}% + + ~{expectedReagentVolume(reagent, seed_data)}u + + + ))} + + + Total + + + {totalPercentage}% + {totalPercentage > 100 && ( + +
    + )} +
    +
    +
    + ); +} + +export function PlantAnalyzerPlantChems(props) { + const { data } = useBackend(); + const { seed_data, plant_data } = data; + + if (!seed_data || !plant_data) { + // This shouldn't be rendered if seed or plant data is null + return null; + } + return ( - <> - {!!seed_data.graft_gene && ( - - )} - - {seed_data.removable_traits?.map((trait) => ( - - ))} - {seed_data.core_traits?.map((trait) => ( - - ))} - {!!seed_data.mutatelist.length && ( - - - - )} - {!!seed_data.juice_name && ( - - - - )} - {!!seed_data.distill_reagent && ( - - - - )} - {seed_data.reagents.length > 0 && ( - - } - > - - - )} - +
    + + + {plant_data.reagents.length === 0 ? ( + + No reagent genes + + ) : ( + + + Reagent + Volume + + {plant_data.reagents.map((reagent) => ( + + + {reagent.name} + + {reagent.volume} + + ))} + + + Total + + + {plant_data.reagents.reduce( + (sum, reagent) => sum + reagent.volume, + 0, + )} + u + + +
    + )} +
    +
    +
    ); } + +function expectedReagentVolume( + reagent: ReagentData, + seed_data: SeedData, +): number { + const baseVolume = seed_data.volume_units * seed_data.volume_mod; + return Math.round(reagent.rate * baseVolume * (seed_data.potency / 100)) || 0; +} + +function formatPerSecond( + value: number, + cycle_seconds: number, + simplify: boolean = true, +) { + if (!simplify) { + return `${value * cycle_seconds} second${value * cycle_seconds > 1 ? 's' : ''}`; + } + const seconds = Math.round(value * cycle_seconds); + if (seconds < 60) { + return `${seconds} second${seconds > 1 ? 's' : ''}`; + } + const minutes = Math.floor(seconds / 60); + const remainingSeconds = seconds % 60; + return `${minutes} minute${minutes > 1 ? 's' : ''}${ + remainingSeconds > 0 + ? `, ${remainingSeconds} second${remainingSeconds > 1 ? 's' : ''}` + : '' + }`; +} + +function getTraitInfo(trait: string, trait_db: PlantAnalyzerData['trait_db']) { + const traitData = trait_db.find((t) => t.path === trait); + return traitData; +} diff --git a/tgui/packages/tgui/interfaces/PlantAnalyzer/Tray.tsx b/tgui/packages/tgui/interfaces/PlantAnalyzer/Tray.tsx index 88dcd4f54cff..6b1c144a3b47 100644 --- a/tgui/packages/tgui/interfaces/PlantAnalyzer/Tray.tsx +++ b/tgui/packages/tgui/interfaces/PlantAnalyzer/Tray.tsx @@ -1,12 +1,13 @@ import { + Box, + Button, DmIcon, - Icon, LabeledList, + NoticeBox, ProgressBar, Section, Stack, Table, - Tooltip, } from 'tgui-core/components'; import { capitalizeFirst } from 'tgui-core/string'; @@ -14,42 +15,70 @@ import { useBackend } from '../../backend'; import { Fallback } from './Fallback'; import type { PlantAnalyzerData } from './types'; -export function PlantAnalyzerTray(props) { +export function PlantAnalyzerTrayStats(props) { const { data } = useBackend(); const { tray_data } = data; + if (!tray_data) { + // This shouldn't be rendered if tray_data is null + return null; + } + return ( -
    - {!!tray_data.self_sustaining && ( - - - - )} - {!!tray_data.being_pollinated && ( - - - - )} - {tray_data.yield_mod > 1 && ( - - - - )} - - } - > +
    - + + + + + + + + + + + + + +
    + {active_tab === PlantAnalyzerTabs.STATS || graft_data ? ( + <> + {graft_data && } + {tray_data && } + {seed_data && } + + ) : ( + <> + {/* grafts don't have any chems */} + {tray_data && } + {seed_data && } + {plant_data && } + + )} ); diff --git a/tgui/packages/tgui/interfaces/PlantAnalyzer/types.ts b/tgui/packages/tgui/interfaces/PlantAnalyzer/types.ts index a2dde935d69d..bd4e908f7069 100644 --- a/tgui/packages/tgui/interfaces/PlantAnalyzer/types.ts +++ b/tgui/packages/tgui/interfaces/PlantAnalyzer/types.ts @@ -1,36 +1,46 @@ +import type { BooleanLike } from 'tgui-core/react'; + +export enum PlantAnalyzerTabs { + STATS = 1, + CHEM = 2, +} + export type PlantAnalyzerData = { - graft_data: GraftData; - seed_data: SeedData; - tray_data: TrayData; + graft_data: GraftData | null; + seed_data: SeedData | null; + plant_data: PlantData | null; + tray_data: TrayData | null; // Static cycle_seconds: number; trait_db: TraitData[]; + active_tab: PlantAnalyzerTabs; }; type TrayData = { - being_pollinated: boolean; - icon_state: string; + being_pollinated: BooleanLike; icon: string; + icon_state: string; + is_dead: BooleanLike; light_level: number; name: string; - nutri_max: number; nutri: number; - pests_max: number; + nutri_max: number; pests: number; + pests_max: number; plant_age: number; plant_health: number; reagents: ReagentVolume[]; - self_sustaining: boolean; - toxins_max: number; + self_sustaining: BooleanLike; toxins: number; - water_max: number; + toxins_max: number; water: number; - weeds_max: number; + water_max: number; weeds: number; + weeds_max: number; yield_mod: number; }; -type SeedData = { +export type SeedData = { core_traits: string[]; distill_reagent: string; endurance: number; @@ -56,6 +66,23 @@ type SeedData = { weed_chance: number; weed_rate: number; yield: number; + unique_labels: UniqueSeedLabel[]; + unique_collapsibles: UniqueSeedCollapsible[]; +}; + +type UniqueSeedLabel = { + label: string; + data: string; +}; + +type UniqueSeedCollapsible = { + label: string; + // key is shown text, value is tooltip text + data: Record; +}; + +export type PlantData = { + reagents: ReagentVolume[]; }; type GraftData = { @@ -73,10 +100,11 @@ type GraftData = { type ReagentVolume = { name: string; - volume: string; + volume: number; + color: string; }; -type ReagentData = { +export type ReagentData = { name: string; rate: number; }; diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx index ff9561b87ba3..a17f4cdb371a 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx @@ -22,7 +22,7 @@ const EmergencyBox = (props) => { <> {!!emergency && ( - {emergency} has been dispatched to this location + {emergency} called! RETA may open doors in area to them. )} {!emergency && ( diff --git a/tgui/packages/tgui/interfaces/SelectEquipment.jsx b/tgui/packages/tgui/interfaces/SelectEquipment.jsx index 0a3ab0799e22..0b3716bef42e 100644 --- a/tgui/packages/tgui/interfaces/SelectEquipment.jsx +++ b/tgui/packages/tgui/interfaces/SelectEquipment.jsx @@ -1,5 +1,6 @@ import { sortBy, uniq } from 'es-toolkit'; import { filter, map } from 'es-toolkit/compat'; +import { atom, useAtom } from 'jotai'; import { useState } from 'react'; import { Box, @@ -12,27 +13,24 @@ import { Tabs, } from 'tgui-core/components'; import { createSearch } from 'tgui-core/string'; - -import { useBackend, useLocalState } from '../backend'; +import { useBackend } from '../backend'; import { Window } from '../layouts'; // here's an important mental define: // custom outfits give a ref keyword instead of path -const getOutfitKey = (outfit) => outfit.path || outfit.ref; +function getOutfitKey(outfit) { + return outfit.path || outfit.ref; +} -const useOutfitTabs = (categories) => { - return useLocalState('selected-tab', categories[0]); -}; +const outfitTabAtom = atom(''); -export const SelectEquipment = (props) => { +export function SelectEquipment(props) { const { act, data } = useBackend(); const { name, icon64, current_outfit, favorites } = data; - const isFavorited = (entry) => favorites?.includes(entry.path); - const outfits = map([...data.outfits, ...data.custom_outfits], (entry) => ({ ...entry, - favorite: isFavorited(entry), + favorite: favorites?.includes(entry.path), })); // even if no custom outfits were sent, we still want to make sure there's @@ -41,7 +39,7 @@ export const SelectEquipment = (props) => { ...outfits.map((entry) => entry.category), 'Custom', ]); - const [tab] = useOutfitTabs(categories); + const [tab] = useAtom(outfitTabAtom); const [searchText, setSearchText] = useState(''); const searchFilter = createSearch( @@ -61,10 +59,9 @@ export const SelectEquipment = (props) => { ], ); - const getOutfitEntry = (current_outfit) => - outfits.find((outfit) => getOutfitKey(outfit) === current_outfit); - - const currentOutfitEntry = getOutfitEntry(current_outfit); + const currentOutfitEntry = outfits.find( + (outfit) => getOutfitKey(outfit) === current_outfit, + ); return ( @@ -84,19 +81,19 @@ export const SelectEquipment = (props) => { - + - +
    - +
    { ); -}; +} -const DisplayTabs = (props) => { +function DisplayTabs(props) { const { categories } = props; - const [tab, setTab] = useOutfitTabs(categories); + + const [tab, setTab] = useAtom(outfitTabAtom); + return ( {categories.map((category) => ( @@ -129,12 +128,13 @@ const DisplayTabs = (props) => { ))} ); -}; +} -const OutfitDisplay = (props) => { +function OutfitDisplay(props) { const { act, data } = useBackend(); - const { current_outfit } = data; - const { entries, currentTab } = props; + const { current_outfit, categories } = data; + const { entries, currentTab = categories[0] } = props; + return (
    {entries.map((entry) => ( @@ -171,12 +171,13 @@ const OutfitDisplay = (props) => { )}
    ); -}; +} -const CurrentlySelectedDisplay = (props) => { +function CurrentlySelectedDisplay(props) { const { act, data } = useBackend(); const { current_outfit } = data; const { entry } = props; + return ( {entry?.path && ( @@ -194,7 +195,7 @@ const CurrentlySelectedDisplay = (props) => { /> )} - + Currently selected: { ); -}; +} diff --git a/tgui/packages/tgui/interfaces/Spellbook.tsx b/tgui/packages/tgui/interfaces/Spellbook.tsx deleted file mode 100644 index b349d36d1c46..000000000000 --- a/tgui/packages/tgui/interfaces/Spellbook.tsx +++ /dev/null @@ -1,792 +0,0 @@ -import type { ReactNode } from 'react'; -import { - Box, - Button, - Dimmer, - Divider, - Icon, - Input, - NoticeBox, - ProgressBar, - Section, - Stack, -} from 'tgui-core/components'; -import type { BooleanLike } from 'tgui-core/react'; - -import { useBackend, useLocalState } from '../backend'; -import { Window } from '../layouts'; - -enum SpellCategory { - Offensive = 'Offensive', - Defensive = 'Defensive', - Mobility = 'Mobility', - Assistance = 'Assistance', - Rituals = 'Rituals', - Perks = 'Perks', -} - -type byondRef = string; - -type SpellEntry = { - // Name of the spell - name: string; - // Description of what the spell does - desc: string; - // Byond REF of the spell entry datum - ref: byondRef; - // Whether the spell requires wizard clothing to cast - requires_wizard_garb: BooleanLike; - // Spell points required to buy the spell - cost: number; - // How many times the spell has been bought - times: number; - // Cooldown length of the spell once cast once - cooldown: number; - // Category of the spell - cat: SpellCategory; - // Whether the spell is refundable - refundable: BooleanLike; - // The verb displayed when buying - buyword: Buywords; -}; - -type Data = { - owner: string; - points: number; - semi_random_bonus: number; - full_random_bonus: number; - entries: SpellEntry[]; -}; - -type TabType = { - title: string; - blurb?: string; - component?: () => ReactNode; - locked?: boolean; - scrollable?: boolean; -}; - -const TAB2NAME: TabType[] = [ - { - title: 'Enscribed Name', - blurb: - "This book answers only to its owner, and of course, must have one. The permanence of the pact between a spellbook and its owner ensures such a powerful artifact cannot fall into enemy hands, or be used in ways that break the Federation's rules such as bartering spells.", - component: () => , - }, - { - title: 'Table of Contents', - component: () => , - }, - { - title: 'Offensive', - blurb: 'Spells and items geared towards debilitating and destroying.', - scrollable: true, - }, - { - title: 'Defensive', - blurb: - "Spells and items geared towards improving your survivability or reducing foes' ability to attack.", - scrollable: true, - }, - { - title: 'Mobility', - blurb: - 'Spells and items geared towards improving your ability to move. It is a good idea to take at least one.', - scrollable: true, - }, - { - title: 'Assistance', - blurb: - 'Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilities.', - scrollable: true, - }, - { - title: 'Challenges', - blurb: - 'The Wizard Federation is looking for shows of power. Arming the station against you will increase the danger, but will grant you more charges for your spellbook.', - locked: true, - scrollable: true, - }, - { - title: 'Rituals', - blurb: - 'These powerful spells change the very fabric of reality. Not always in your favour.', - scrollable: true, - }, - { - title: 'Loadouts', - blurb: - 'The Wizard Federation accepts that sometimes, choosing is hard. You can choose from some approved wizard loadouts here.', - component: () => , - }, - { - title: 'Randomize', - blurb: - "If you didn't like the loadouts offered, you can embrace chaos. Not recommended for newer wizards.", - component: () => , - }, - { - title: 'Perks', - blurb: - 'Perks are useful (and not so useful) improvements to the soul and body collected from all corners of the universe.', - scrollable: true, - }, - { - title: 'Table of Contents', - component: () => , - }, -]; - -enum Buywords { - Learn = 'Learn', - Summon = 'Summon', - Cast = 'Cast', -} - -const BUYWORD2ICON = { - Learn: 'plus', - Summon: 'hat-wizard', - Cast: 'meteor', -}; - -const EnscribedName = (props) => { - const { data } = useBackend(); - const { owner } = data; - return ( - <> - - {owner} - - - - ); -}; - -const lineHeightToc = '30.6px'; - -const TableOfContents = (props) => { - const [tabIndex, setTabIndex] = useLocalState('tab-index', 1); - return ( - -
    -
    - ))} -
    - ); -}; - -const CategoryDisplay = (props: { ActiveCat: TabType }) => { - const { data } = useBackend(); - const { entries } = data; - const { ActiveCat } = props; - - const TabSpells = entries.filter((entry) => entry.cat === ActiveCat.title); - - return ( - <> - {!!ActiveCat.locked && } - - {ActiveCat.blurb && ( - - - {ActiveCat.blurb} - - - )} - - {ActiveCat.component?.() || ( - - )} - - - - ); -}; - -const widthSection = '466px'; -const heightSection = '456px'; - -export const Spellbook = (props) => { - const { data } = useBackend(); - const { points } = data; - const [tabIndex, setTabIndex] = useLocalState('tab-index', 1); - const [spellSearch, setSpellSearch] = useLocalState('spell-search', ''); - const ActiveCat = TAB2NAME[tabIndex - 1]; - const ActiveNextCat = TAB2NAME[tabIndex]; - - // Has a chance of selecting a random funny verb instead of "Searching" - const SelectSearchVerb = () => { - const found = Math.random(); - if (found <= 0.03) { - return 'Seeking'; - } - if (found <= 0.06) { - return 'Contemplating'; - } - if (found <= 0.09) { - return 'Divining'; - } - if (found <= 0.12) { - return 'Scrying'; - } - if (found <= 0.15) { - return 'Peeking'; - } - if (found <= 0.18) { - return 'Pondering'; - } - if (found <= 0.21) { - return 'Divining'; - } - if (found <= 0.24) { - return 'Gazing'; - } - if (found <= 0.27) { - return 'Studying'; - } - if (found <= 0.3) { - return 'Reviewing'; - } - - return 'Searching'; - }; - - const SelectedVerb = SelectSearchVerb(); - - return ( - - - - - - {spellSearch.length > 1 ? ( - -
    setSpellSearch('')} - /> - } - > - -
    -
    - ) : ( - <> - -
    -
    -
    - -
    -
    -
    - - )} -
    -
    - -
    - - - - {`${points} points left to spend.`} - - - - - - -
    -
    -
    -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/Spellbook/CategoryDisplay.tsx b/tgui/packages/tgui/interfaces/Spellbook/CategoryDisplay.tsx new file mode 100644 index 000000000000..b090c4cb0876 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/CategoryDisplay.tsx @@ -0,0 +1,51 @@ +import { Box, Dimmer, Icon, Stack } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { SpellTabDisplay } from './SpellTabDisplay'; +import type { SpellbookData, TabType } from './types'; + +type Props = { + activeCat: TabType; +}; + +export function CategoryDisplay(props: Props) { + const { data } = useBackend(); + const { entries } = data; + const { activeCat } = props; + + const tabSpells = entries.filter((entry) => entry.cat === activeCat.title); + + return ( + <> + {!!activeCat.locked && } + + {activeCat.blurb && ( + + + {activeCat.blurb} + + + )} + + {activeCat.component?.() || ( + + )} + + + + ); +} + +function LockedPage(props) { + return ( + + + + + + + The Wizard Federation has locked this page. + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/EnscribedName.tsx b/tgui/packages/tgui/interfaces/Spellbook/EnscribedName.tsx new file mode 100644 index 000000000000..b512678c0ad7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/EnscribedName.tsx @@ -0,0 +1,24 @@ +import { Box, Divider } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import type { SpellbookData } from './types'; + +export function EnscribedName(props) { + const { data } = useBackend(); + const { owner } = data; + + return ( + <> + + {owner} + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/Loadouts.tsx b/tgui/packages/tgui/interfaces/Spellbook/Loadouts.tsx new file mode 100644 index 000000000000..a716d3a0f28f --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/Loadouts.tsx @@ -0,0 +1,113 @@ +import { Box, Button, Divider, Section, Stack } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { PointLocked } from './Locked'; +import type { SpellbookData } from './types'; + +export function Loadouts(props) { + const { data } = useBackend(); + const { points } = data; + // Future todo : Make these datums on the DM side + return ( + + {points < 10 && } + + + + + + + + + + + + + + ); +} + +type Props = { + author: string; + blurb: string; + icon: string; + loadoutColor: string; + loadoutId: string; + name: string; +}; + +function SingleLoadout(props: Props) { + const { act } = useBackend(); + const { author, name, blurb, icon, loadoutId, loadoutColor } = props; + + return ( + +
    + {blurb} + + + act('purchase_loadout', { + id: loadoutId, + }) + } + > + Purchase Loadout + + + Added by {author}. +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/Locked.tsx b/tgui/packages/tgui/interfaces/Spellbook/Locked.tsx new file mode 100644 index 000000000000..de584a7718cb --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/Locked.tsx @@ -0,0 +1,27 @@ +import { Dimmer, Icon, Stack } from 'tgui-core/components'; + +export function PointLocked(props) { + return ( + + + + +
    + + + You do not have enough points to use this page. + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/Randomize.tsx b/tgui/packages/tgui/interfaces/Spellbook/Randomize.tsx new file mode 100644 index 000000000000..0f769c2c4336 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/Randomize.tsx @@ -0,0 +1,51 @@ +import { Button, Divider, NoticeBox, Stack } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { PointLocked } from './Locked'; +import type { SpellbookData } from './types'; + +export function Randomize(props) { + const { act, data } = useBackend(); + const { points, semi_random_bonus, full_random_bonus } = data; + + return ( + + {points < 10 && } + + Semi-Randomize will ensure you at least get some mobility and lethality. + Guaranteed to have {semi_random_bonus} points worth of spells. + + + act('semirandomize')} + > + Semi-Randomize + + + + + Full Random will give you anything. There's no going back, either! + Guaranteed to have {full_random_bonus} points worth of spells. + + + + act('randomize')} + > + Full Random + + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/SearchSpells.tsx b/tgui/packages/tgui/interfaces/Spellbook/SearchSpells.tsx new file mode 100644 index 000000000000..334ab1855a95 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/SearchSpells.tsx @@ -0,0 +1,60 @@ +import { useAtom } from 'jotai'; +import { Box, NoticeBox, Stack } from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { spellSearchAtom } from '.'; +import { SpellTabDisplay } from './SpellTabDisplay'; +import type { SpellbookData, SpellEntry } from './types'; + +export function SearchSpells(props) { + const { data } = useBackend(); + const [spellSearch] = useAtom(spellSearchAtom); + const { entries } = data; + + const searchStatement = spellSearch.toLowerCase(); + + let filteredEntries: SpellEntry[] = []; + + if (searchStatement === 'robeless') { + // Lets you just search for robeless spells, you're welcome mindswap-bros + filteredEntries = entries.filter((entry) => !entry.requires_wizard_garb); + } else { + filteredEntries = entries.filter( + (entry) => + entry.name.toLowerCase().includes(searchStatement) || + // Unsure about including description. Wizard spell descriptions + // are painfully original and use the same verbiage often, + // which may both be a benefit and a curse + entry.desc + .toLowerCase() + .includes(searchStatement) || + // Also opting to include category + // so you can search "rituals" to see them all at once + entry.cat + .toLowerCase() + .includes(searchStatement), + ); + } + + if (filteredEntries.length === 0) { + return ( + + + No spells found! + + + + Search tip: Searching "Robeless" will only show you spells that + don't require wizard garb! + + + + ); + } + return ( + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/SpellResults.tsx b/tgui/packages/tgui/interfaces/Spellbook/SpellResults.tsx new file mode 100644 index 000000000000..424f96e458b9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/SpellResults.tsx @@ -0,0 +1,71 @@ +import { useAtom } from 'jotai'; +import { Box, Button, Section, Stack } from 'tgui-core/components'; +import { heightSection, tabAtom, widthSection } from '.'; +import { CategoryDisplay } from './CategoryDisplay'; +import { TAB2NAME } from './constants'; + +export function SpellResults() { + const [tabIndex, setTabIndex] = useAtom(tabAtom); + + const activeCat = TAB2NAME[tabIndex - 1]; + const activeNextCat = TAB2NAME[tabIndex]; + + return ( + <> + +
    + + + {tabIndex} + + + } + > + +
    +
    + +
    + + + {tabIndex + 1} + + + } + > + +
    +
    + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/SpellTabDisplay.tsx b/tgui/packages/tgui/interfaces/Spellbook/SpellTabDisplay.tsx new file mode 100644 index 000000000000..c3ccd0b046a6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/SpellTabDisplay.tsx @@ -0,0 +1,122 @@ +import { + Button, + Divider, + NoticeBox, + Section, + Stack, +} from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { BUYWORD2ICON } from './constants'; +import { + Buywords, + type SpellbookData, + SpellCategory, + type SpellEntry, +} from './types'; + +type Props = { + tabSpells: SpellEntry[]; + cooldownOffset?: number; + pointOffset?: number; +}; + +function getTimeOrCat(entry: SpellEntry) { + if (entry.cat === SpellCategory.Rituals) { + if (entry.times) { + return `Cast ${entry.times} times.`; + } else { + return 'Not cast yet.'; + } + } else { + if (entry.cooldown) { + return `${entry.cooldown}s Cooldown`; + } else { + return ''; + } + } +} + +export function SpellTabDisplay(props: Props) { + const { act, data } = useBackend(); + const { points } = data; + const { tabSpells, cooldownOffset, pointOffset } = props; + + return ( + + {tabSpells + .sort((a, b) => { + return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; + }) + .map((entry) => ( + + + + + {getTimeOrCat(entry)} + + + {entry.cost} points + + {entry.buyword === Buywords.Learn && ( + + +
    + {!entry.refundable ? ( + No refunds. + ) : ( + + )} +
    +
    +
    + + ))} + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/TableOfContents.tsx b/tgui/packages/tgui/interfaces/Spellbook/TableOfContents.tsx new file mode 100644 index 000000000000..8ab6fb902fe3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/TableOfContents.tsx @@ -0,0 +1,101 @@ +import { useAtom } from 'jotai'; +import { Box, Button, Divider } from 'tgui-core/components'; +import { tabAtom } from '.'; +import { Tab } from './types'; + +export const lineHeightToc = '30.6px'; + +export function TableOfContents(props) { + const [_tabIndex, setTabIndex] = useAtom(tabAtom); + + return ( + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/constants.ts b/tgui/packages/tgui/interfaces/Spellbook/constants.ts new file mode 100644 index 000000000000..7c3760d8e696 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/constants.ts @@ -0,0 +1,82 @@ +import { EnscribedName } from './EnscribedName'; +import { Loadouts } from './Loadouts'; +import { Randomize } from './Randomize'; +import { TableOfContents } from './TableOfContents'; +import type { TabType } from './types'; + +export const TAB2NAME: TabType[] = [ + { + title: 'Enscribed Name', + blurb: + "This book answers only to its owner, and of course, must have one. The permanence of the pact between a spellbook and its owner ensures such a powerful artifact cannot fall into enemy hands, or be used in ways that break the Federation's rules such as bartering spells.", + component: EnscribedName, + }, + { + title: 'Table of Contents', + component: TableOfContents, + }, + { + title: 'Offensive', + blurb: 'Spells and items geared towards debilitating and destroying.', + scrollable: true, + }, + { + title: 'Defensive', + blurb: + "Spells and items geared towards improving your survivability or reducing foes' ability to attack.", + scrollable: true, + }, + { + title: 'Mobility', + blurb: + 'Spells and items geared towards improving your ability to move. It is a good idea to take at least one.', + scrollable: true, + }, + { + title: 'Assistance', + blurb: + 'Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilities.', + scrollable: true, + }, + { + title: 'Challenges', + blurb: + 'The Wizard Federation is looking for shows of power. Arming the station against you will increase the danger, but will grant you more charges for your spellbook.', + locked: true, + scrollable: true, + }, + { + title: 'Rituals', + blurb: + 'These powerful spells change the very fabric of reality. Not always in your favour.', + scrollable: true, + }, + { + title: 'Loadouts', + blurb: + 'The Wizard Federation accepts that sometimes, choosing is hard. You can choose from some approved wizard loadouts here.', + component: Loadouts, + }, + { + title: 'Randomize', + blurb: + "If you didn't like the loadouts offered, you can embrace chaos. Not recommended for newer wizards.", + component: Randomize, + }, + { + title: 'Perks', + blurb: + 'Perks are useful (and not so useful) improvements to the soul and body collected from all corners of the universe.', + scrollable: true, + }, + { + title: 'Table of Contents', + component: TableOfContents, + }, +]; + +export const BUYWORD2ICON = { + Learn: 'plus', + Summon: 'hat-wizard', + Cast: 'meteor', +}; diff --git a/tgui/packages/tgui/interfaces/Spellbook/index.tsx b/tgui/packages/tgui/interfaces/Spellbook/index.tsx new file mode 100644 index 000000000000..7df956934883 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/index.tsx @@ -0,0 +1,102 @@ +import { sample } from 'es-toolkit'; +import { atom, useAtom } from 'jotai'; +import { useEffect, useState } from 'react'; +import { + Button, + Input, + ProgressBar, + Section, + Stack, +} from 'tgui-core/components'; +import { useBackend } from '../../backend'; +import { Window } from '../../layouts'; +import { SearchSpells } from './SearchSpells'; +import { SpellResults } from './SpellResults'; +import { type SpellbookData, Tab } from './types'; + +export const tabAtom = atom(Tab.TableOfContents); +export const spellSearchAtom = atom(''); + +export const widthSection = '466px'; +export const heightSection = '456px'; + +const searchVerbs = [ + 'Searching', + 'Seeking', + 'Contemplating', + 'Divining', + 'Scrying', + 'Peeking', + 'Pondering', + 'Gazing', + 'Studying', + 'Reviewing', +]; + +export function Spellbook(props) { + const { data } = useBackend(); + const { points } = data; + + const [selectedVerb, setSelectedVerb] = useState(searchVerbs[0]); + const [spellSearch, setSpellSearch] = useAtom(spellSearchAtom); + + useEffect(() => { + // Ensures it only changes on reset + if (spellSearch === '') { + setSelectedVerb(sample(searchVerbs)); + } + }, [spellSearch]); + + return ( + + + + + + {spellSearch.length > 1 ? ( + +
    setSpellSearch('')} + > + Stop {selectedVerb} + + } + > + +
    +
    + ) : ( + + )} +
    +
    + +
    + + + + {`${points} points left to spend.`} + + + + + + +
    +
    +
    +
    +
    + ); +} diff --git a/tgui/packages/tgui/interfaces/Spellbook/types.ts b/tgui/packages/tgui/interfaces/Spellbook/types.ts new file mode 100644 index 000000000000..ca480ee27014 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Spellbook/types.ts @@ -0,0 +1,71 @@ +import type { BooleanLike } from 'tgui-core/react'; + +export enum SpellCategory { + Offensive = 'Offensive', + Defensive = 'Defensive', + Mobility = 'Mobility', + Assistance = 'Assistance', + Rituals = 'Rituals', + Perks = 'Perks', +} + +export type SpellEntry = { + // Name of the spell + name: string; + // Description of what the spell does + desc: string; + // Byond REF of the spell entry datum + ref: string; + // Whether the spell requires wizard clothing to cast + requires_wizard_garb: BooleanLike; + // Spell points required to buy the spell + cost: number; + // How many times the spell has been bought + times: number; + // Cooldown length of the spell once cast once + cooldown: number; + // Category of the spell + cat: SpellCategory; + // Whether the spell is refundable + refundable: BooleanLike; + // The verb displayed when buying + buyword: Buywords; +}; + +export type SpellbookData = { + owner: string; + points: number; + semi_random_bonus: number; + full_random_bonus: number; + entries: SpellEntry[]; +}; + +export type TabType = { + title: string; +} & Partial<{ + blurb: string; + component: (props?: any) => React.JSX.Element; + locked: boolean; + scrollable: boolean; +}>; + +export enum Buywords { + Learn = 'Learn', + Summon = 'Summon', + Cast = 'Cast', +} + +export enum Tab { + EnscribedName = 0, + TableOfContents = 1, + Offensive = 2, + Defensive = 3, + Mobility = 4, + Assistance = 5, + Challenges = 6, + Rituals = 7, + Loadouts = 8, + Randomize = 9, + Perks = 10, + TableOfContents2 = 11, +} diff --git a/tgui/packages/tgui/interfaces/Vending.tsx b/tgui/packages/tgui/interfaces/Vending.tsx index 8ec94edeed96..a38687be7ef5 100644 --- a/tgui/packages/tgui/interfaces/Vending.tsx +++ b/tgui/packages/tgui/interfaces/Vending.tsx @@ -45,7 +45,6 @@ type Category = { type VendingData = { all_products_free: boolean; - onstation: boolean; ad: string; department: string; jobDiscount: number; @@ -66,7 +65,6 @@ export const Vending = () => { const { all_products_free, - onstation, ad, product_records = [], coin_records = [], @@ -112,7 +110,7 @@ export const Vending = () => { - {!!onstation && !all_products_free && ( + {!all_products_free && ( diff --git a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx index 4660017d6061..8991f40389c5 100644 --- a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx +++ b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx @@ -1,3 +1,4 @@ +import { atom, useAtom } from 'jotai'; import { type ReactNode, useState } from 'react'; import { Box, @@ -10,7 +11,7 @@ import { Tooltip, } from 'tgui-core/components'; -import { useBackend, useLocalState } from '../../backend'; +import { useBackend } from '../../backend'; /** * This describes something that influences a particular reaction @@ -43,16 +44,27 @@ type Gas = { name: string; description: string; specific_heat: number; - reactions: { [key: string]: string } | []; + reactions: Record | []; }; -const GasSearchBar = (props: { +type GasSearchProps = { title: ReactNode; onChange: (inputValue: string) => void; activeInput: boolean; setActiveInput: (toggle: boolean) => void; -}) => { +}; + +type Data = { + gasInfo: Gas[]; + reactionInfo: Reaction[]; +}; + +const activeGasAtom = atom(''); +const activeReactionAtom = atom(''); + +function GasSearchBar(props: GasSearchProps) { const { title, onChange, activeInput, setActiveInput } = props; + return ( @@ -73,18 +85,16 @@ const GasSearchBar = (props: { ); -}; +} -const GasHandbook = (props) => { - const { act, data } = useBackend<{ gasInfo: Gas[] }>(); +function GasHandbook(props) { + const { act, data } = useBackend(); const { gasInfo } = data; - const [activeGasId, setActiveGasId] = useLocalState('activeGasId', ''); - const [activeReactionId, setActiveReactionId] = useLocalState( - 'activeReactionId', - '', - ); + const [activeGasId, setActiveGasId] = useAtom(activeGasAtom); + const [activeReactionId, setActiveReactionId] = useAtom(activeReactionAtom); const [gasActiveInput, setGasActiveInput] = useState(false); const relevantGas = gasInfo.find((gas) => gas.id === activeGasId); + return (
    { )}
    ); -}; +} -const ReactionHandbook = (props) => { - const { data } = useBackend<{ reactionInfo: Reaction[] }>(); +function ReactionHandbook(props) { + const { data } = useBackend(); const { reactionInfo } = data; - const [activeGasId, setActiveGasId] = useLocalState('activeGasId', ''); - const [activeReactionId, setActiveReactionId] = useLocalState( - 'activeReactionId', - '', - ); + const [activeGasId, setActiveGasId] = useAtom(activeGasAtom); + const [activeReactionId, setActiveReactionId] = useAtom(activeReactionAtom); const [reactionActiveInput, setReactionActiveInput] = useState(false); const relevantReaction = reactionInfo?.find( (reaction) => reaction.id === activeReactionId, ); + return (
    { )}
    ); +} + +type HandbookContentProps = { + vertical?: boolean; }; -export const AtmosHandbookContent = (props: { vertical?: boolean }) => { +export function AtmosHandbookContent(props: HandbookContentProps) { return props.vertical ? ( <> @@ -214,13 +226,11 @@ export const AtmosHandbookContent = (props: { vertical?: boolean }) => {
    ); -}; +} + +export function atmosHandbookHooks() { + const [_activeGasId, setActiveGasId] = useAtom(activeGasAtom); + const [_activeReactionId, setActiveReactionId] = useAtom(activeReactionAtom); -export const atmosHandbookHooks = () => { - const [activeGasId, setActiveGasId] = useLocalState('activeGasId', ''); - const [activeReactionId, setActiveReactionId] = useLocalState( - 'activeReactionId', - '', - ); return [setActiveGasId, setActiveReactionId]; -}; +} diff --git a/tgui/packages/tgui/styles/interfaces/Accounting.scss b/tgui/packages/tgui/styles/interfaces/Accounting.scss new file mode 100644 index 000000000000..d48ef846d736 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Accounting.scss @@ -0,0 +1,42 @@ +.Accounting__Toolbar { + outline: solid 1px; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); + color: grey; +} + +.Accounting__Window { + flex-direction: column; + outline: solid 1px black; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); +} + +.Accounting__WindowContent { + background-color: white; + outline: solid; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); +} + +.Accounting__TableHeader { + border-style: solid; + border-width: 2px; + border-left: 0px; + border-right: 0px; + border-bottom: 0px; +} + +.Accounting__TableCellSides { + border-style: solid; + border-width: 1px; + border-top: 0px; + border-right: 0px; + border-bottom: 0px; +} diff --git a/tgui/packages/tgui/styles/interfaces/OreSilo.scss b/tgui/packages/tgui/styles/interfaces/OreSilo.scss deleted file mode 100644 index 024e95af3163..000000000000 --- a/tgui/packages/tgui/styles/interfaces/OreSilo.scss +++ /dev/null @@ -1,23 +0,0 @@ -.OreSilo { - .__LogEntry { - font-size: 1rem; - outline-style: ridge; - outline-width: 1px; - background-blend-mode: screen; - .__UserItem { - font-family: 'Helvetica'; - font-kerning: auto; - text-rendering: optimizeLegibility; - .__Name { - outline: ridge black; - outline-offset: 1.5px; - margin-right: 1.5px; - } - .__Assignment { - outline: ridge black; - outline-offset: 1.5px; - letter-spacing: 1.1px; - } - } - } -} diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index e810f5b5d780..67289ecb7476 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -16,6 +16,7 @@ @include meta.load-css('~tgui-core/styles/all-themes.scss'); // Interfaces +@include meta.load-css('./interfaces/Accounting.scss'); @include meta.load-css('./interfaces/AlertModal.scss'); @include meta.load-css('./interfaces/Changelog.scss'); @include meta.load-css('./interfaces/CrewManifest.scss'); @@ -34,7 +35,6 @@ @include meta.load-css('./interfaces/NtosNotepad.scss'); @include meta.load-css('./interfaces/NuclearBomb.scss'); @include meta.load-css('./interfaces/Orbit.scss'); -@include meta.load-css('./interfaces/OreSilo.scss'); @include meta.load-css('./interfaces/Paper.scss'); @include meta.load-css('./interfaces/PreferencesMenu.scss'); @include meta.load-css('./interfaces/RequestManager.scss'); diff --git a/tools/UpdatePaths/Scripts/92849_atmos_monitor_sensor_connect.txt b/tools/UpdatePaths/Scripts/92849_atmos_monitor_sensor_connect.txt new file mode 100644 index 000000000000..17dda3a68dba --- /dev/null +++ b/tools/UpdatePaths/Scripts/92849_atmos_monitor_sensor_connect.txt @@ -0,0 +1,3 @@ +/obj/machinery/atmospherics/components/unary/vent_pump/@SUBTYPES{chamber_id=@ANY} : /obj/machinery/atmospherics/components/unary/vent_pump/@SUBTYPES{@OLD;chamber_id=@SKIP} +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/@SUBTYPES{chamber_id=@ANY} : /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/@SUBTYPES{@OLD;chamber_id=@SKIP} + diff --git a/tools/pull_request_hooks/autoLabel.js b/tools/pull_request_hooks/autoLabel.js index 87a4d67d2388..7897862e55b4 100644 --- a/tools/pull_request_hooks/autoLabel.js +++ b/tools/pull_request_hooks/autoLabel.js @@ -48,7 +48,7 @@ function check_body_for_labels(body) { const labels_to_add = []; // detect "fixes #1234" or "resolves #1234" in body - const fix_regex = /\b(?:fix(?:es|ed)?|resolve[sd]?)\s*#\d+\b/gim; + const fix_regex = /\b(?:fix(?:es|ed)?|resolve[sd]?)\s*(?:#\d+|https:\/\/github\.com\/\S+\/issues\/\d+)/gim; if (fix_regex.test(body)) { labels_to_add.push("Чиним"); }