diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b2872dc2bffa..6f97d58eddf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ on: jobs: run_linters: name: Run Linters - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Setup Cache @@ -47,7 +47,7 @@ jobs: odlint: name: Lint with OpenDream - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Setup OD @@ -59,7 +59,7 @@ jobs: compile_all_maps: name: Compile All Maps - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Setup Cache @@ -76,7 +76,7 @@ jobs: unit_tests_and_sql: name: Unit Tests + SQL Validation - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: fail-fast: false # Let all map tests run to completion matrix: @@ -106,8 +106,8 @@ jobs: run: | sudo dpkg --add-architecture i386 sudo apt update || true - sudo apt install libssl1.1:i386 - ldd librust_g.so + sudo apt install zlib1g-dev:i386 + tools/ci/install_rustg.sh - name: Compile & Run Unit Tests run: | tools/ci/install_byond.sh '${{ matrix.byondtype }}' diff --git a/.gitignore b/.gitignore index b033c5b5cab4..075188c1d7c6 100644 --- a/.gitignore +++ b/.gitignore @@ -58,5 +58,12 @@ __pycache__/ dmm-tools.exe OpenDream paradise.json + +# Misc windows shenanigans $RECYCLE.BIN + +# Linux libs +/*.so + +# SS220 EDIT sound/tts_cache/* diff --git a/.tgs.yml b/.tgs.yml index 9602553bd3e6..6970078ff70d 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -1,6 +1,9 @@ -# This file is stolen from tg +# This file is used by TGS (https://github.com/tgstation/tgstation-server) clients to quickly initialize a server instance for the codebase +# The format isn't documented anywhere but hopefully we never have to change it. If there are questions, contact the TGS maintainer Cyberboss/@Dominion#0444 version: 1 -byond: "515.1619" +# The BYOND version to use +# Must be interpreted as a string, keep quoted +byond: "515.1620" # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static @@ -9,8 +12,7 @@ static_files: populate: true # Data directory must be static - name: data -# String dictionary. The value is the location of the file in the repo to upload to TGS. The key is the name of the file to upload to "/Configuration/EventScripts/" -# This one is for Linux hosted servers +# Scripts linux needs linux_scripts: PreCompile.sh: tools/tgs_scripts/PreCompile.sh WatchdogLaunch.sh: tools/tgs_scripts/WatchdogLaunch.sh diff --git a/_build_dependencies.sh b/_build_dependencies.sh index 8cded2a078a7..d146ad1c518d 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -6,10 +6,12 @@ export NODE_VERSION=18 # Stable Byond Major export STABLE_BYOND_MAJOR=515 # Stable Byond Minor -export STABLE_BYOND_MINOR=1619 +export STABLE_BYOND_MINOR=1620 # Beta Byond Major export BETA_BYOND_MAJOR=515 # Beta Byond Minor -export BETA_BYOND_MINOR=1619 +export BETA_BYOND_MINOR=1620 # Python version for mapmerge and other tools export PYTHON_VERSION=3.11.6 +# RUSTG version +export RUSTG_VERSION=v3.0.0-P diff --git a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm index 09f32f0d372b..9346dea8c35e 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm @@ -7,7 +7,7 @@ dir = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ac" = ( /obj/structure/sign/directions/medical{ pixel_x = -32; @@ -18,10 +18,10 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ad" = ( /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ae" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -32,14 +32,14 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "af" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/r_wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ag" = ( /turf/simulated/wall/r_wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ah" = ( /obj/structure/cable{ d1 = 1; @@ -50,24 +50,24 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ai" = ( /obj/structure/railing/corner, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aj" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ak" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "al" = ( /obj/structure/railing/cap{ dir = 10 @@ -75,7 +75,7 @@ /turf/simulated/floor/plasteel{ icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "am" = ( /obj/structure/window/reinforced, /obj/structure/chair{ @@ -86,14 +86,14 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ao" = ( /obj/structure/closet/crate, /obj/item/flashlight/flare, /obj/item/flashlight/flare, /obj/item/flashlight/flare, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ap" = ( /obj/machinery/shower{ dir = 8 @@ -101,7 +101,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/noslip, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/partial{ @@ -111,7 +111,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "as" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal, @@ -119,7 +119,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "at" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -131,7 +131,7 @@ pixel_y = 8 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "au" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -141,12 +141,12 @@ }, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "av" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid2" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -161,7 +161,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ax" = ( /obj/machinery/computer/arcade/recruiter{ dir = 1 @@ -170,7 +170,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ay" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -181,10 +181,10 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aA" = ( /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aB" = ( /obj/structure/railing, /obj/item/storage/toolbox/mechanical{ @@ -195,7 +195,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aC" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -204,7 +204,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aD" = ( /obj/structure/toilet{ pixel_y = 8 @@ -214,14 +214,14 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aE" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aF" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -232,7 +232,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aG" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -250,14 +250,14 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aH" = ( /obj/structure/railing/cap{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aI" = ( /obj/structure/railing{ dir = 4 @@ -272,7 +272,7 @@ pixel_x = -2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aJ" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, @@ -282,34 +282,34 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aK" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aL" = ( /turf/simulated/wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aM" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aN" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271"; name = "Storage Room" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aO" = ( /obj/structure/table/glass/reinforced/titanium, /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aP" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -318,7 +318,7 @@ dir = 1 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aQ" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -332,7 +332,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aR" = ( /obj/structure/railing/cap{ dir = 1 @@ -345,7 +345,7 @@ icon_state = "whitehall"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aS" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, @@ -355,7 +355,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aU" = ( /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) @@ -363,7 +363,7 @@ /obj/effect/decal/remains/human, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aW" = ( /obj/structure/window/reinforced{ dir = 1 @@ -376,7 +376,7 @@ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aX" = ( /obj/structure/railing{ dir = 8 @@ -387,7 +387,7 @@ icon_state = "black"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aY" = ( /obj/structure/chair/office/light{ dir = 1 @@ -395,7 +395,7 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "aZ" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" @@ -405,7 +405,7 @@ name = "Medical Ward" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ba" = ( /obj/machinery/door/airlock/multi_tile/glass{ req_access_txt = "271" @@ -413,14 +413,14 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bb" = ( /obj/machinery/door/airlock/multi_tile/glass, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bd" = ( /obj/structure/sign/nosmoking_1{ pixel_x = 32 @@ -430,7 +430,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "be" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -439,7 +439,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bf" = ( /obj/structure/window/reinforced{ dir = 4 @@ -449,7 +449,7 @@ dir = 5; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bh" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -457,39 +457,39 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bi" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/chair/sofa/bench/left, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bj" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/barricade/wooden/crude{ layer = 4 }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bk" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bl" = ( /obj/structure/chair/office{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bm" = ( /obj/structure/closet, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bp" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -503,7 +503,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bq" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, @@ -512,14 +512,14 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bs" = ( /obj/structure/table/glass, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bt" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -531,7 +531,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bu" = ( /obj/structure/railing{ dir = 4 @@ -539,11 +539,11 @@ /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bv" = ( /obj/structure/ore_box, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bw" = ( /obj/structure/window/reinforced{ dir = 1 @@ -552,7 +552,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bx" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/mineral/titanium, @@ -560,7 +560,7 @@ "bz" = ( /obj/structure/girder, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bB" = ( /obj/machinery/light/small{ dir = 4 @@ -573,7 +573,7 @@ dir = 4; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bC" = ( /obj/machinery/atmospherics/unary/cryo_cell, /obj/structure/window/reinforced{ @@ -584,7 +584,7 @@ }, /obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bD" = ( /obj/structure/railing{ dir = 1 @@ -594,7 +594,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bE" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/sign/vacuum{ @@ -609,7 +609,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bF" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/end{ @@ -620,7 +620,7 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, @@ -630,7 +630,7 @@ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bH" = ( /obj/structure/sign/restroom{ pixel_y = -32 @@ -638,7 +638,7 @@ /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bJ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -648,14 +648,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bK" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bN" = ( /obj/structure/window/reinforced{ dir = 1 @@ -668,15 +668,15 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bO" = ( /obj/item/cigbutt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bP" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bS" = ( /obj/effect/turf_decal/loading_area/white{ dir = 1 @@ -685,7 +685,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bU" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -693,7 +693,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -702,11 +702,11 @@ color = "red" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bY" = ( /obj/structure/railing, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "bZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -715,7 +715,7 @@ dir = 5 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ca" = ( /obj/structure/railing/cap{ dir = 8 @@ -723,30 +723,30 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cb" = ( /obj/structure/railing/corner, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cc" = ( /obj/structure/flora/tree/jungle/small, /obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ce" = ( /obj/structure/window/reinforced, /obj/machinery/light/small, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cf" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -761,13 +761,13 @@ icon_state = "whitehall"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ch" = ( /obj/structure/chair/office{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ci" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -778,22 +778,22 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cj" = ( /obj/structure/chair/office/dark{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cm" = ( /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cn" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "co" = ( /obj/structure/railing/cap{ dir = 1 @@ -805,11 +805,11 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cp" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cq" = ( /obj/structure/railing/corner{ dir = 4 @@ -817,17 +817,17 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cr" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cs" = ( /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ct" = ( /obj/structure/railing, /obj/machinery/optable, @@ -836,7 +836,7 @@ icon_state = "darkblue"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cv" = ( /obj/structure/table/glass/reinforced/titanium, /obj/machinery/door_control{ @@ -852,7 +852,7 @@ id = "awaycargogate" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cw" = ( /obj/machinery/sleeper, /obj/effect/turf_decal/delivery/white/hollow, @@ -860,7 +860,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cx" = ( /obj/machinery/door/airlock/security/glass{ req_access_txt = "271" @@ -872,14 +872,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cy" = ( /obj/structure/closet, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cA" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -888,7 +888,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cB" = ( /obj/structure/railing{ dir = 4 @@ -898,7 +898,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -906,7 +906,7 @@ /turf/simulated/floor/plasteel{ icon_state = "blackcorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cD" = ( /obj/structure/railing/cap{ dir = 5 @@ -919,7 +919,7 @@ }, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cF" = ( /obj/structure/barricade/wooden/crude{ layer = 4 @@ -929,7 +929,7 @@ req_access_txt = "271" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cI" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 32 @@ -940,7 +940,7 @@ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cJ" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, @@ -948,7 +948,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -957,13 +957,13 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cL" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -972,7 +972,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cN" = ( /obj/machinery/bodyscanner{ dir = 4 @@ -984,7 +984,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cR" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -997,7 +997,7 @@ dir = 5 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cS" = ( /obj/effect/decal/cleanable/cobweb2, /obj/structure/largecrate, @@ -1008,7 +1008,7 @@ dir = 1; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "cY" = ( /obj/structure/railing{ dir = 8 @@ -1021,7 +1021,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "da" = ( /obj/structure/chair{ dir = 8 @@ -1030,18 +1030,18 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "db" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dc" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dd" = ( /obj/structure/table/glass, /obj/machinery/light/small{ @@ -1055,7 +1055,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "df" = ( /obj/structure/railing{ dir = 1 @@ -1063,7 +1063,7 @@ /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dg" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 4 @@ -1080,7 +1080,7 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dj" = ( /obj/structure/closet/crate, /turf/simulated/floor/mineral/titanium, @@ -1088,26 +1088,26 @@ "dk" = ( /obj/structure/window/reinforced, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dm" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/flora/ausbushes/fullgrass, /obj/structure/railing/corner, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "do" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dp" = ( /obj/structure/window/reinforced{ dir = 8 @@ -1120,7 +1120,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ds" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -1132,7 +1132,7 @@ icon_state = "cautioncorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dt" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 @@ -1165,30 +1165,30 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dw" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dx" = ( /obj/machinery/suit_storage_unit/standard_unit, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dz" = ( /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/brflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dA" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1200,20 +1200,20 @@ dir = 9; icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dD" = ( /obj/structure/closet/walllocker/emerglocker{ pixel_y = 32 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dE" = ( /obj/effect/turf_decal/loading_area/white, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dG" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaycontlockdown" @@ -1223,7 +1223,7 @@ name = "Specimen Containtment Zone" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dH" = ( /obj/structure/window/reinforced{ dir = 8 @@ -1235,7 +1235,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, @@ -1245,18 +1245,18 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dL" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dM" = ( /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dN" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -1266,7 +1266,7 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dO" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/item/clipboard, @@ -1278,7 +1278,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dQ" = ( /obj/structure/table/glass, /obj/structure/railing{ @@ -1291,7 +1291,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -1302,20 +1302,20 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dS" = ( /obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dT" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dU" = ( /obj/machinery/computer/arcade/orion_trail{ dir = 1 @@ -1324,18 +1324,18 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dV" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dW" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dX" = ( /obj/structure/sign/security{ pixel_y = 32 @@ -1344,13 +1344,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "dY" = ( /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eb" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, @@ -1358,7 +1358,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ed" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1373,14 +1373,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ee" = ( /obj/structure/table/glass/reinforced/titanium, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eg" = ( /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eh" = ( /obj/effect/turf_decal/caution{ dir = 4 @@ -1393,7 +1393,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ek" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/decal/cleanable/dirt, @@ -1401,19 +1401,19 @@ dir = 8 }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "el" = ( /obj/machinery/door/airlock, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "em" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "blackcorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eo" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" @@ -1423,7 +1423,7 @@ name = "Medical Ward" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ep" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -1431,14 +1431,14 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eq" = ( /obj/effect/turf_decal/loading_area/white{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "er" = ( /obj/structure/window/reinforced{ dir = 8 @@ -1451,11 +1451,11 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "es" = ( /obj/structure/flora/ausbushes/fernybush, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ev" = ( /obj/structure/chair{ dir = 8 @@ -1464,7 +1464,7 @@ icon_state = "whitehall"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ew" = ( /obj/machinery/computer/security{ desc = "Used to access the various cameras on the outpost."; @@ -1475,7 +1475,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ey" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ @@ -1485,7 +1485,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ez" = ( /obj/structure/chair{ dir = 8 @@ -1500,16 +1500,16 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eA" = ( /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eC" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eE" = ( /obj/machinery/light/small{ dir = 8 @@ -1527,11 +1527,11 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eJ" = ( /obj/structure/flora/junglebush/large, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eK" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, @@ -1544,7 +1544,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eL" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -32 @@ -1557,13 +1557,13 @@ dir = 8; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eM" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eO" = ( /obj/structure/mirror{ pixel_x = -28 @@ -1577,7 +1577,7 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eR" = ( /obj/structure/railing{ dir = 8 @@ -1586,13 +1586,13 @@ dir = 8; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eU" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eW" = ( /obj/structure/railing/corner{ dir = 1 @@ -1600,7 +1600,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eX" = ( /obj/structure/barricade/wooden/crude{ layer = 4 @@ -1609,7 +1609,7 @@ req_access_txt = "271" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "eZ" = ( /obj/structure/window/reinforced{ dir = 1 @@ -1621,7 +1621,7 @@ /obj/effect/turf_decal/box, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fc" = ( /obj/structure/railing{ dir = 4 @@ -1643,7 +1643,7 @@ icon_state = "yellowcornersiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fd" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 @@ -1651,14 +1651,14 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fe" = ( /obj/structure/railing{ dir = 8 }, /obj/structure/closet/crate, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ff" = ( /obj/structure/chair/stool{ dir = 4 @@ -1679,7 +1679,7 @@ icon_state = "1-8" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fi" = ( /obj/structure/chair/wheelchair, /obj/effect/turf_decal/delivery/white, @@ -1687,11 +1687,11 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fl" = ( /obj/structure/closet/crate, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fm" = ( /obj/effect/decal/cleanable/cobweb, /obj/item/clothing/suit/storage/labcoat, @@ -1705,43 +1705,43 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fn" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fp" = ( /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fq" = ( /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fr" = ( /obj/structure/window/reinforced{ dir = 4 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fs" = ( /obj/structure/chair/sofa/bench, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fv" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fw" = ( /obj/structure/flora/ash/rock/style_random, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fx" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/stripes/corner{ @@ -1754,18 +1754,18 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fA" = ( /obj/structure/mopbucket, /obj/item/mop, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fB" = ( /obj/structure/railing{ dir = 1 @@ -1777,32 +1777,32 @@ dir = 4 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fC" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fD" = ( /obj/structure/chair, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fF" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fG" = ( /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ id_tag = "awaycargogate1" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fI" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter, @@ -1810,7 +1810,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fJ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -1830,26 +1830,26 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fK" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fM" = ( /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fP" = ( /obj/structure/railing{ dir = 4 }, /obj/structure/closet/l3closet/general, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1859,7 +1859,7 @@ name = "Cafeteria" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fR" = ( /obj/machinery/light/small{ dir = 4 @@ -1869,24 +1869,24 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fV" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fX" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "fY" = ( /obj/item/stack/sheet/mineral/titanium, /obj/effect/decal/cleanable/glass, /obj/effect/decal/cleanable/molten_object/large, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gb" = ( /obj/machinery/light/small{ dir = 4 @@ -1897,7 +1897,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gc" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -1909,7 +1909,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gd" = ( /obj/structure/sign/directions/science{ dir = 1; @@ -1918,34 +1918,34 @@ /obj/structure/chair, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ge" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gf" = ( /obj/structure/railing{ dir = 4 }, /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gg" = ( /obj/structure/flora/ausbushes/grassybush, /obj/machinery/light/small, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gh" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gi" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gj" = ( /obj/structure/railing, /obj/structure/railing/cap{ @@ -1954,14 +1954,14 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gk" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 }, /obj/machinery/atmospherics/portable/canister/oxygen, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gl" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1972,7 +1972,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gm" = ( /obj/effect/turf_decal/delivery/partial{ dir = 1 @@ -1985,7 +1985,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gn" = ( /obj/machinery/economy/vending/coffee, /obj/effect/decal/cleanable/cobweb, @@ -1993,7 +1993,7 @@ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "go" = ( /obj/structure/railing, /obj/structure/largecrate, @@ -2001,7 +2001,7 @@ icon_state = "caution"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gq" = ( /obj/structure/railing/corner{ dir = 1 @@ -2017,7 +2017,7 @@ pixel_x = 2 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gr" = ( /obj/effect/turf_decal/delivery/red/partial{ dir = 1 @@ -2026,22 +2026,22 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gs" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gt" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gv" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -2051,7 +2051,7 @@ icon_state = "yellowcornersiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gx" = ( /obj/structure/closet/secure_closet/freezer/kitchen, /obj/effect/decal/cleanable/dirt, @@ -2059,7 +2059,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gy" = ( /obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ pixel_y = 5 @@ -2073,7 +2073,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gz" = ( /obj/machinery/light{ active_power_consumption = 0; @@ -2084,21 +2084,21 @@ color = "red" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gA" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes, /obj/structure/flora/ausbushes/ywflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gB" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gC" = ( /obj/effect/decal/cleanable/greenglow, /obj/effect/landmark/damageturf, @@ -2108,11 +2108,11 @@ stat = 2 }, /turf/simulated/floor/plating/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gD" = ( /obj/structure/girder, /turf/simulated/floor/plating/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gE" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -2123,19 +2123,19 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gH" = ( /obj/structure/fans/tiny, /obj/machinery/door/airlock/external, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gJ" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/railing, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gL" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -2147,7 +2147,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gM" = ( /obj/machinery/shower{ dir = 4 @@ -2156,12 +2156,12 @@ dir = 8 }, /turf/simulated/floor/noslip, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gN" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gO" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 @@ -2175,28 +2175,28 @@ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gS" = ( /obj/structure/chair{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gT" = ( /obj/structure/flora/rock/pile, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gU" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gW" = ( /obj/effect/landmark/damageturf, /obj/machinery/door/airlock/titanium{ @@ -2204,7 +2204,7 @@ name = "Escape Pod Hatch" }, /turf/simulated/floor/mineral/titanium/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gX" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, @@ -2213,7 +2213,7 @@ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "gZ" = ( /obj/structure/railing{ dir = 1 @@ -2227,7 +2227,7 @@ pixel_y = 8 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hc" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, @@ -2235,7 +2235,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "he" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 @@ -2246,23 +2246,23 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hg" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hh" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hi" = ( /obj/structure/falsewall/rock_ancient, /obj/effect/decal/cleanable/blood/tracks{ @@ -2274,7 +2274,7 @@ pixel_y = 9 }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hj" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -2286,7 +2286,7 @@ icon_state = "caution"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hk" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -2302,7 +2302,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hl" = ( /obj/structure/window/reinforced{ dir = 1 @@ -2314,12 +2314,12 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hm" = ( /obj/structure/closet/cabinet, /obj/item/clothing/under/suit/navy, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hn" = ( /obj/structure/railing/corner{ dir = 8 @@ -2328,14 +2328,14 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ho" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ @@ -2345,7 +2345,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hq" = ( /obj/item/storage/toolbox/mechanical{ pixel_x = 2; @@ -2356,7 +2356,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hr" = ( /obj/structure/window/reinforced{ dir = 8 @@ -2366,14 +2366,14 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hs" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hu" = ( /turf/simulated/wall/mineral/titanium, /area/ruin/space/powered) @@ -2387,7 +2387,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hw" = ( /obj/structure/cable{ d1 = 4; @@ -2402,7 +2402,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hx" = ( /obj/machinery/light/small{ dir = 8 @@ -2418,7 +2418,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hy" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -2431,11 +2431,11 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hz" = ( /obj/structure/flora/junglebush, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hA" = ( /obj/structure/chair/sofa/bench{ dir = 4 @@ -2444,7 +2444,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hC" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -2453,7 +2453,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hD" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -2463,10 +2463,10 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hE" = ( /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hF" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -2477,33 +2477,33 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hG" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hH" = ( /obj/effect/decal/remains/xeno, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hI" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hK" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hL" = ( /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hN" = ( /obj/structure/railing, /obj/structure/railing{ @@ -2512,7 +2512,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hO" = ( /obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, @@ -2522,7 +2522,7 @@ color = "red" }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hQ" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 5 @@ -2533,7 +2533,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hR" = ( /obj/structure/window/reinforced{ dir = 1 @@ -2542,21 +2542,21 @@ dir = 4 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hS" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/closet, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hT" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hU" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -2571,7 +2571,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hV" = ( /obj/structure/railing, /obj/structure/closet/secure_closet, @@ -2587,12 +2587,12 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hW" = ( /obj/structure/bed, /obj/item/bedsheet, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hX" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -2603,30 +2603,30 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hY" = ( /obj/effect/decal/cleanable/blood/oil{ color = "black" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "hZ" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ia" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ib" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ic" = ( /obj/structure/railing{ dir = 4 @@ -2639,11 +2639,11 @@ dir = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "id" = ( /obj/structure/largecrate, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ie" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -2651,7 +2651,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "if" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -2659,14 +2659,14 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ig" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ii" = ( /obj/machinery/light/small{ dir = 1 @@ -2679,14 +2679,14 @@ dir = 1; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ij" = ( /obj/structure/fans/tiny, /obj/machinery/door/poddoor/multi_tile/impassable/four_tile_ver{ id_tag = "awaycargogate" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "il" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2696,7 +2696,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "im" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 4 @@ -2707,14 +2707,14 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "in" = ( /obj/structure/largecrate, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "io" = ( /obj/item/kirbyplants, /obj/structure/sign/directions/engineering{ @@ -2728,7 +2728,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iq" = ( /obj/structure/railing{ dir = 1 @@ -2738,7 +2738,7 @@ }, /obj/effect/turf_decal/stripes/asteroid/line, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ir" = ( /obj/structure/railing{ dir = 1 @@ -2750,7 +2750,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "is" = ( /obj/structure/railing/cap{ dir = 5 @@ -2759,7 +2759,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "it" = ( /obj/structure/railing/cap{ dir = 1 @@ -2768,20 +2768,20 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iu" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/table, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iv" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -2794,13 +2794,13 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ix" = ( /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iy" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -2812,13 +2812,13 @@ pixel_y = -1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iz" = ( /obj/structure/flora/ausbushes/stalkybush, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iA" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -2828,7 +2828,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -2836,7 +2836,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -2844,7 +2844,7 @@ dir = 8; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -2858,14 +2858,14 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iE" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /obj/effect/decal/remains/human, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iF" = ( /obj/machinery/door/window/reinforced/normal{ dir = 8 @@ -2873,13 +2873,13 @@ /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iG" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iI" = ( /obj/machinery/door/window/reinforced/normal{ dir = 4 @@ -2887,21 +2887,21 @@ /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iJ" = ( /obj/machinery/light/small, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iL" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iM" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iN" = ( /obj/effect/turf_decal/caution{ dir = 4 @@ -2913,21 +2913,21 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iO" = ( /obj/effect/turf_decal/delivery/white/partial, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iP" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iQ" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/cobweb, @@ -2935,7 +2935,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iR" = ( /obj/structure/railing{ dir = 1 @@ -2947,7 +2947,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iS" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -2964,11 +2964,11 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iT" = ( /obj/structure/fans/tiny, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iW" = ( /obj/structure/chair{ dir = 4 @@ -2977,19 +2977,19 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iX" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iY" = ( /obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/brflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "iZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -3002,24 +3002,24 @@ name = "Workshop" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ja" = ( /obj/machinery/economy/arcade/claw, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jb" = ( /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jc" = ( /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jf" = ( /obj/machinery/atmospherics/unary/cryo_cell, /obj/structure/window/reinforced{ @@ -3030,7 +3030,7 @@ }, /obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jg" = ( /obj/structure/railing{ dir = 9 @@ -3038,14 +3038,14 @@ /turf/simulated/floor/plasteel{ icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jh" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ji" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 @@ -3056,19 +3056,19 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jj" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jk" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ash/rock/style_random, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jl" = ( /obj/structure/table/reinforced, /obj/structure/railing/cap{ @@ -3083,7 +3083,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jm" = ( /obj/structure/railing{ dir = 1 @@ -3093,19 +3093,19 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jn" = ( /obj/machinery/door/airlock/centcom, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jo" = ( /obj/structure/closet/cabinet, /obj/item/clothing/under/misc/assistantformal, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jp" = ( /obj/structure/railing, /obj/item/kirbyplants, @@ -3113,24 +3113,24 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jq" = ( /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jr" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jt" = ( /obj/structure/railing/cap, /obj/structure/railing/cap{ dir = 5 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jw" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -3141,19 +3141,19 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jy" = ( /obj/effect/decal/cleanable/dirt, /obj/item/trash/candy, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -3165,7 +3165,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jB" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3177,22 +3177,22 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jC" = ( /obj/effect/landmark/damageturf, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jD" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jE" = ( /obj/structure/grille, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jF" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/end{ @@ -3202,13 +3202,13 @@ dir = 8 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jH" = ( /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jI" = ( /obj/structure/window/reinforced{ dir = 1 @@ -3221,7 +3221,7 @@ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jJ" = ( /obj/structure/window/reinforced, /obj/machinery/computer/security{ @@ -3233,7 +3233,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jK" = ( /obj/structure/railing{ dir = 4 @@ -3242,17 +3242,17 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jL" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jM" = ( /obj/structure/chair/office/dark{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jP" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, @@ -3260,7 +3260,7 @@ dir = 1 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jQ" = ( /obj/machinery/door/poddoor/shutters{ dir = 2 @@ -3272,24 +3272,24 @@ dir = 4; icon_state = "blackcorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jS" = ( /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jU" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ywflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jW" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jY" = ( /obj/structure/chair{ dir = 4 @@ -3304,7 +3304,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "jZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -3320,7 +3320,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ka" = ( /obj/structure/railing/corner{ dir = 4 @@ -3329,12 +3329,12 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kb" = ( /obj/structure/closet, /obj/item/storage/box/lights/mixed, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kc" = ( /obj/structure/railing{ dir = 1 @@ -3353,7 +3353,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kd" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -3364,7 +3364,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ke" = ( /obj/structure/window/reinforced, /obj/structure/chair{ @@ -3378,7 +3378,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kf" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -3386,7 +3386,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kg" = ( /obj/item/kirbyplants, /obj/effect/landmark/damageturf, @@ -3394,7 +3394,7 @@ dir = 6; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor/impassable{ @@ -3405,11 +3405,11 @@ name = "Research Division" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ki" = ( /obj/machinery/door/airlock/external, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kj" = ( /obj/structure/window/reinforced{ dir = 1 @@ -3420,13 +3420,13 @@ }, /obj/effect/turf_decal/box, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kk" = ( /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "km" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -3435,17 +3435,17 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ko" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kp" = ( /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kr" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -3455,7 +3455,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ks" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3474,7 +3474,7 @@ icon_state = "yellowsiding"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ku" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/portable/scrubber, @@ -3482,7 +3482,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kw" = ( /obj/structure/window/reinforced{ dir = 1 @@ -3495,14 +3495,14 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kx" = ( /obj/structure/table/glass, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ky" = ( /obj/structure/railing/cap{ dir = 9 @@ -3510,7 +3510,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kz" = ( /obj/structure/cable{ d2 = 2; @@ -3520,14 +3520,14 @@ id = "mo19rdoffice" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kB" = ( /obj/item/kirbyplants, /obj/structure/railing{ dir = 10 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kC" = ( /obj/machinery/light/small{ dir = 8 @@ -3542,7 +3542,7 @@ icon_state = "whitehall"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -3552,14 +3552,14 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kG" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kJ" = ( /obj/machinery/power/port_gen/pacman{ desc = "A portable generator for emergency backup power."; @@ -3569,13 +3569,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kM" = ( /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/ywflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kN" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -3590,7 +3590,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kO" = ( /obj/machinery/computer/security/telescreen{ desc = "Used for monitoring the research division and the labs within."; @@ -3599,7 +3599,7 @@ pixel_y = 32 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kQ" = ( /obj/structure/window/reinforced{ dir = 1 @@ -3612,11 +3612,11 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kR" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kW" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271" @@ -3625,7 +3625,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kX" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, @@ -3637,18 +3637,18 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "kZ" = ( /obj/structure/flora/rock/jungle, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "la" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lc" = ( /obj/machinery/shieldwallgen{ locked = 0; @@ -3660,7 +3660,7 @@ }, /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "li" = ( /obj/structure/railing{ dir = 1 @@ -3669,13 +3669,13 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lk" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lm" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/decal/cleanable/dirt, @@ -3683,20 +3683,20 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lo" = ( /obj/structure/barricade/wooden{ layer = 4 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lp" = ( /turf/simulated/floor/plasteel{ dir = 9; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lq" = ( /obj/machinery/door/airlock{ req_access_txt = "271" @@ -3708,20 +3708,20 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lv" = ( /obj/structure/largecrate, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lz" = ( /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lC" = ( /obj/item/reagent_containers/food/snacks/beans, /obj/item/reagent_containers/food/snacks/beans{ @@ -3741,7 +3741,7 @@ icon_state = "black"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lD" = ( /obj/item/kirbyplants, /obj/machinery/light/small, @@ -3749,7 +3749,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3763,7 +3763,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lH" = ( /obj/machinery/power/port_gen/pacman{ desc = "A portable generator for emergency backup power."; @@ -3778,7 +3778,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lI" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, @@ -3786,7 +3786,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lL" = ( /obj/structure/railing{ dir = 8 @@ -3797,39 +3797,39 @@ icon_state = "4-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lM" = ( /obj/structure/closet/firecloset, /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lQ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lS" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lT" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -3839,23 +3839,23 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "lY" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mb" = ( /obj/structure/closet/cabinet, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "md" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -3864,7 +3864,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -3878,7 +3878,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -3886,7 +3886,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -3899,7 +3899,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mm" = ( /obj/machinery/conveyor/east{ id = "awayfusrodah" @@ -3908,7 +3908,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -3920,14 +3920,14 @@ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mq" = ( /obj/machinery/atmospherics/unary/outlet_injector/on{ dir = 4; volume_rate = 200 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mr" = ( /obj/machinery/light/small{ dir = 8 @@ -3937,7 +3937,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ms" = ( /obj/machinery/door/window{ dir = 8 @@ -3948,7 +3948,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -3960,7 +3960,7 @@ /turf/simulated/floor/plasteel{ icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/partial{ @@ -3970,21 +3970,21 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mv" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mw" = ( /obj/structure/alien/resin/wall, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mx" = ( /obj/machinery/shieldwallgen{ locked = 0; @@ -3993,7 +3993,7 @@ /obj/structure/cable, /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "my" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4002,7 +4002,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -4011,7 +4011,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mB" = ( /obj/machinery/economy/vending/cigarette, /obj/machinery/light/small{ @@ -4026,7 +4026,7 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mC" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -4038,7 +4038,7 @@ icon_state = "whitehall"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mH" = ( /obj/machinery/light/small{ dir = 1 @@ -4053,26 +4053,26 @@ dir = 1; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mJ" = ( /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mK" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/alien/resin/wall, /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mM" = ( /obj/machinery/floodlight, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mS" = ( /obj/machinery/conveyor/east{ id = "awayfusrodah" @@ -4094,7 +4094,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mT" = ( /obj/item/kitchen/knife, /obj/item/kitchen/rollingpin, @@ -4103,7 +4103,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mU" = ( /obj/machinery/shieldwallgen{ locked = 0; @@ -4125,7 +4125,7 @@ }, /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4137,7 +4137,7 @@ }, /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mW" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/computer/security{ @@ -4147,7 +4147,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "mX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -4156,7 +4156,7 @@ dir = 4 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "na" = ( /obj/structure/sign/nosmoking_1{ pixel_x = -32 @@ -4176,7 +4176,7 @@ icon_state = "tracks" }, /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nc" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/small{ @@ -4187,28 +4187,28 @@ dir = 9; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nf" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ng" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkblue"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nk" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -4218,7 +4218,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -4235,23 +4235,23 @@ }, /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nn" = ( /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nt" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nu" = ( /obj/structure/lattice, /obj/item/stack/sheet/plasteel, @@ -4261,14 +4261,14 @@ /obj/machinery/door/airlock, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nx" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271"; name = "Engineering Division" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ny" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, @@ -4280,7 +4280,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nA" = ( /obj/structure/rack, /obj/item/flashlight/flare, @@ -4291,7 +4291,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nC" = ( /obj/structure/closet/secure_closet, /obj/machinery/camera{ @@ -4304,7 +4304,7 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nE" = ( /obj/structure/cable{ d1 = 1; @@ -4317,7 +4317,7 @@ icon_state = "2-8" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -4327,14 +4327,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nJ" = ( /obj/structure/railing/cap{ dir = 10 @@ -4349,7 +4349,7 @@ dir = 4; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nK" = ( /obj/structure/cable{ d1 = 1; @@ -4360,7 +4360,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nO" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/small{ @@ -4371,14 +4371,14 @@ icon_state = "black"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nQ" = ( /obj/structure/railing, /obj/structure/closet/cardboard, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -4387,7 +4387,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nW" = ( /obj/structure/railing{ dir = 10 @@ -4396,7 +4396,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -4406,14 +4406,14 @@ }, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "nZ" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -4428,13 +4428,13 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "od" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oh" = ( /obj/structure/sign/poster/contraband/lusty_xenomorph{ pixel_y = 32 @@ -4445,7 +4445,7 @@ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oi" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -4460,7 +4460,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ok" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4471,13 +4471,13 @@ }, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "on" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oo" = ( /obj/structure/chair/office/dark, /obj/effect/decal/cleanable/dirt, @@ -4485,14 +4485,14 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "op" = ( /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "or" = ( /obj/machinery/light/small{ dir = 4 @@ -4501,13 +4501,13 @@ /obj/structure/window/basic, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ot" = ( /obj/structure/railing{ dir = 8 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ov" = ( /obj/effect/turf_decal/caution/stand_clear/white{ dir = 4 @@ -4516,14 +4516,14 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ow" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oA" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -4536,7 +4536,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -4544,7 +4544,7 @@ /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oF" = ( /obj/structure/chair/sofa/bench/left, /obj/machinery/camera{ @@ -4556,7 +4556,7 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oH" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ @@ -4573,7 +4573,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -4585,7 +4585,7 @@ pixel_y = 9 }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oL" = ( /obj/structure/rack, /obj/structure/window/reinforced{ @@ -4593,7 +4593,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oM" = ( /obj/structure/chair{ dir = 1 @@ -4602,7 +4602,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light{ @@ -4615,12 +4615,12 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oS" = ( /obj/structure/railing{ dir = 8 @@ -4629,7 +4629,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4637,14 +4637,14 @@ dir = 4; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oU" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4652,7 +4652,7 @@ /turf/simulated/floor/plasteel{ icon_state = "greencorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "oZ" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -4667,14 +4667,14 @@ pixel_x = 10 }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pa" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -4691,13 +4691,13 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ph" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pi" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -4709,20 +4709,20 @@ /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pm" = ( /obj/structure/largecrate, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pn" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid3" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pp" = ( /obj/structure/cable{ d1 = 1; @@ -4737,7 +4737,7 @@ /obj/item/clothing/gloves/color/yellow, /obj/structure/table/reinforced, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pq" = ( /obj/structure/railing/cap{ dir = 5 @@ -4747,7 +4747,7 @@ dir = 4; icon_state = "blackcorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4758,7 +4758,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ps" = ( /obj/structure/window/reinforced{ dir = 1 @@ -4768,7 +4768,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pt" = ( /obj/structure/railing{ dir = 1 @@ -4776,7 +4776,7 @@ /obj/structure/rack, /obj/item/flashlight/flare/glowstick, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pu" = ( /obj/effect/decal/cleanable/greenglow, /obj/structure/railing/cap{ @@ -4786,19 +4786,19 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pz" = ( /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pB" = ( /obj/structure/rack, /obj/item/paicard{ pixel_x = -4 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pD" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -4807,12 +4807,12 @@ icon_state = "caution"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pE" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pF" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/decal/cleanable/dirt, @@ -4820,7 +4820,7 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -4829,17 +4829,17 @@ icon_state = "blackcorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pK" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pL" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ @@ -4850,7 +4850,7 @@ desc = "They look like the remains of something... alien. The front of skull appears to have been completely obliterated." }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -4860,7 +4860,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -4878,11 +4878,11 @@ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pR" = ( /obj/structure/closet/secure_closet/freezer/fridge, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pS" = ( /obj/machinery/light/small{ dir = 8 @@ -4892,7 +4892,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pV" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awayscilock" @@ -4902,7 +4902,7 @@ name = "Research Division" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pW" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ @@ -4914,12 +4914,12 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "pZ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/badrecipe, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qa" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -4934,7 +4934,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qb" = ( /obj/structure/railing/cap{ dir = 10 @@ -4946,7 +4946,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qc" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien/sentinel, @@ -4954,7 +4954,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qj" = ( /obj/structure/railing/cap{ dir = 9 @@ -4962,7 +4962,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qm" = ( /obj/structure/cable{ d1 = 1; @@ -4977,7 +4977,7 @@ id = "mo19rdoffice" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -4988,7 +4988,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qp" = ( /obj/structure/railing{ dir = 8 @@ -4997,7 +4997,7 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qq" = ( /obj/structure/table/reinforced, /obj/item/clipboard{ @@ -5012,7 +5012,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qr" = ( /obj/structure/window/reinforced{ dir = 8 @@ -5021,7 +5021,7 @@ dir = 8 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qt" = ( /obj/machinery/power/smes{ input_level = 10000; @@ -5031,14 +5031,14 @@ }, /obj/structure/cable, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qu" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qv" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; @@ -5050,14 +5050,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qx" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271"; name = "Cafeteria" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qA" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -5070,7 +5070,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -5083,7 +5083,7 @@ dir = 6; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qC" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -5097,7 +5097,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qD" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -5106,14 +5106,14 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qF" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qI" = ( /obj/structure/railing{ dir = 1 @@ -5122,7 +5122,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -5134,7 +5134,7 @@ icon_state = "1-2" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qQ" = ( /obj/machinery/kitchen_machine/grill, /obj/machinery/light/small{ @@ -5145,7 +5145,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, @@ -5155,14 +5155,14 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "qY" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "re" = ( /obj/structure/railing/cap{ dir = 8 @@ -5174,14 +5174,14 @@ icon_state = "darkblue"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rf" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb2, /obj/item/toy/plushie/lizardplushie, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ri" = ( /obj/item/radio/off{ pixel_x = -8 @@ -5201,7 +5201,7 @@ /obj/item/coin/antagtoken/syndicate, /obj/structure/table, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/damageturf, @@ -5212,7 +5212,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rl" = ( /obj/structure/sink{ dir = 8; @@ -5223,7 +5223,7 @@ icon_state = "darkblue"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rm" = ( /obj/structure/railing/cap, /obj/structure/railing/cap{ @@ -5236,7 +5236,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ro" = ( /obj/structure/railing/cap, /obj/structure/alien/resin/wall, @@ -5244,7 +5244,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rp" = ( /obj/effect/decal/cleanable/blood/xeno{ color = "green" @@ -5253,7 +5253,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rq" = ( /obj/structure/railing/cap{ dir = 6 @@ -5261,7 +5261,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/human, @@ -5277,27 +5277,27 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ru" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rv" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rx" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ry" = ( /obj/structure/table/reinforced, /obj/item/clothing/glasses/meson, @@ -5308,7 +5308,7 @@ }, /obj/item/paper/fluff/ruins/moonoutpost19/engineering, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -5318,7 +5318,7 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rC" = ( /obj/structure/railing/corner{ dir = 8 @@ -5326,7 +5326,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -5336,7 +5336,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rE" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -5346,26 +5346,26 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rH" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rJ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -5385,14 +5385,14 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rL" = ( /obj/structure/chair/sofa/bench/left, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5401,11 +5401,11 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rP" = ( /obj/structure/flora/ash/rock/style_random, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rQ" = ( /obj/structure/railing/cap, /obj/effect/decal/cleanable/blood/splatter{ @@ -5415,7 +5415,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rS" = ( /obj/structure/cable{ d1 = 1; @@ -5434,7 +5434,7 @@ stat = 2 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rT" = ( /obj/structure/window/reinforced{ dir = 8 @@ -5447,7 +5447,7 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rV" = ( /obj/machinery/door/airlock{ req_access_txt = "271"; @@ -5457,13 +5457,13 @@ dir = 8; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rW" = ( /turf/simulated/floor/plasteel{ icon_state = "escapecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rY" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -5472,13 +5472,13 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "rZ" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "271" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sa" = ( /obj/structure/sign/radiation/rad_area{ pixel_y = 32 @@ -5489,14 +5489,14 @@ /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "se" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 @@ -5504,7 +5504,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sg" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/railing, @@ -5512,7 +5512,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sh" = ( /obj/machinery/recharger{ pixel_y = 4 @@ -5524,7 +5524,7 @@ }, /obj/structure/table/reinforced, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "si" = ( /obj/structure/cable{ d1 = 1; @@ -5532,7 +5532,7 @@ icon_state = "1-2" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -5540,7 +5540,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -5557,7 +5557,7 @@ icon_state = "cautioncorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sl" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -5569,11 +5569,11 @@ }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sm" = ( /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sn" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -5586,7 +5586,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "so" = ( /obj/structure/railing/corner{ dir = 8 @@ -5594,7 +5594,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sp" = ( /obj/item/kirbyplants, /obj/structure/railing, @@ -5607,7 +5607,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sq" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -5617,7 +5617,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sv" = ( /obj/machinery/power/terminal{ dir = 1 @@ -5627,15 +5627,15 @@ icon_state = "0-2" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sy" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/wall/r_wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sF" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/indestructible/riveted, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sK" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -5644,34 +5644,34 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sL" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sR" = ( /obj/structure/chair/sofa/bench/left, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sV" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sY" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "sZ" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tb" = ( /obj/structure/sign/securearea{ pixel_x = -32 @@ -5683,14 +5683,14 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tc" = ( /obj/structure/railing{ dir = 4 }, /obj/item/kirbyplants, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "td" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -5698,7 +5698,7 @@ icon_state = "cautioncorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "te" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -5708,7 +5708,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tf" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -5720,20 +5720,20 @@ }, /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "th" = ( /obj/structure/chair/office/dark{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tj" = ( /obj/structure/railing/cap, /obj/structure/flora/ash/rock/style_random, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -5753,7 +5753,7 @@ pixel_x = 2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/tracks{ @@ -5765,21 +5765,21 @@ pixel_x = 2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "to" = ( /obj/structure/railing{ dir = 4 }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -5791,11 +5791,11 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tv" = ( /obj/structure/largecrate, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tw" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -5808,12 +5808,12 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tx" = ( /obj/structure/window/reinforced, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/noticeboard{ @@ -5822,12 +5822,12 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tE" = ( /obj/structure/closet/crate/secure/loot, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tG" = ( /obj/structure/cable{ d1 = 1; @@ -5841,7 +5841,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -5850,7 +5850,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tR" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -5863,7 +5863,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tV" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -5872,21 +5872,21 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tW" = ( /obj/structure/grille/broken, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tX" = ( /turf/simulated/wall/indestructible/rock, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tY" = ( /obj/machinery/economy/vending/dinnerware, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "tZ" = ( /obj/structure/railing/corner{ dir = 4 @@ -5898,7 +5898,7 @@ stat = 2 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ub" = ( /obj/structure/cable, /obj/machinery/power/smes{ @@ -5908,7 +5908,7 @@ outputting = 0 }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uf" = ( /obj/structure/window/reinforced, /mob/living/simple_animal/hostile/alien/drone, @@ -5916,14 +5916,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ug" = ( /obj/structure/railing{ dir = 6 }, /obj/structure/chair, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uh" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -5938,12 +5938,12 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uj" = ( /obj/effect/decal/remains/human, /obj/item/reagent_containers/hypospray/autoinjector/survival, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "up" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -5952,7 +5952,7 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ur" = ( /obj/machinery/light/small{ active_power_consumption = 0; @@ -5965,7 +5965,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uv" = ( /obj/structure/railing/cap{ dir = 9 @@ -5973,7 +5973,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uw" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -5983,14 +5983,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uA" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uG" = ( /obj/structure/railing{ dir = 4 @@ -5998,7 +5998,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6016,7 +6016,7 @@ }, /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uM" = ( /obj/machinery/light/small, /obj/structure/noticeboard{ @@ -6025,7 +6025,7 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uO" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/vials, @@ -6033,14 +6033,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uP" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uR" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -6050,7 +6050,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uS" = ( /obj/structure/railing{ dir = 8 @@ -6062,7 +6062,7 @@ icon_state = "black"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uT" = ( /obj/structure/railing/cap{ dir = 10 @@ -6071,26 +6071,26 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "uX" = ( /obj/structure/table/glass/reinforced/titanium, /obj/item/paper_bin, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "va" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vd" = ( /obj/structure/cable{ d1 = 1; @@ -6103,14 +6103,14 @@ icon_state = "4-8" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ve" = ( /obj/structure/window/reinforced{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vf" = ( /obj/machinery/light/small{ dir = 1 @@ -6120,7 +6120,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vh" = ( /obj/structure/rack, /obj/item/mecha_parts/core, @@ -6129,26 +6129,26 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vm" = ( /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vn" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vq" = ( /obj/structure/railing/cap{ dir = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vy" = ( /obj/structure/railing/cap{ dir = 1 @@ -6159,14 +6159,14 @@ /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vz" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vA" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -6182,7 +6182,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vB" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ @@ -6192,7 +6192,7 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vC" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -6201,26 +6201,26 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vD" = ( /obj/structure/railing{ dir = 1 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vF" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vH" = ( /obj/structure/railing/cap{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vL" = ( /obj/structure/noticeboard{ pixel_y = 32 @@ -6229,14 +6229,14 @@ dir = 1 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vO" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -6247,14 +6247,14 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vS" = ( /obj/structure/alien/resin/door, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vT" = ( /obj/structure/railing/cap{ dir = 6 @@ -6262,7 +6262,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vV" = ( /obj/structure/flora/ausbushes/pointybush, /obj/structure/flora/ausbushes/ppflowers, @@ -6270,7 +6270,7 @@ dir = 4 }, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "vY" = ( /obj/structure/railing, /obj/structure/railing{ @@ -6283,7 +6283,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wb" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -6295,7 +6295,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wc" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -6307,7 +6307,7 @@ icon_state = "darkbluecorners"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wd" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -6320,7 +6320,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "we" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/structure/sign/poster/contraband/donut_corp{ @@ -6331,7 +6331,7 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wh" = ( /obj/item/chair{ dir = 4; @@ -6342,17 +6342,17 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wj" = ( /obj/structure/railing/cap, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wk" = ( /obj/machinery/computer, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wl" = ( /obj/item/stack/ore/slag, /turf/simulated/floor/engine/vacuum, @@ -6367,14 +6367,14 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wp" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wq" = ( /obj/machinery/light/small, /obj/structure/closet/l3closet/general, @@ -6382,26 +6382,26 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wt" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wv" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wC" = ( /obj/structure/closet/cabinet, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/under/syndicate, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wD" = ( /obj/machinery/economy/vending/cola, /obj/effect/decal/cleanable/dirt, @@ -6409,7 +6409,7 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wF" = ( /obj/structure/window/reinforced{ dir = 4 @@ -6421,26 +6421,26 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wH" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wL" = ( /obj/item/reagent_containers/food/drinks/drinkingglass, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wP" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Engine Room" }, /obj/machinery/door/firedoor/closed, /turf/simulated/floor/plating/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wQ" = ( /obj/structure/railing{ dir = 4 @@ -6448,7 +6448,7 @@ /obj/structure/rack, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wR" = ( /obj/structure/sign/monkey_paint{ pixel_x = -28; @@ -6461,7 +6461,7 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wS" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -6470,7 +6470,7 @@ }, /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "wU" = ( /obj/structure/chair/office/dark, /obj/effect/turf_decal/delivery/red/partial, @@ -6479,7 +6479,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -6496,20 +6496,20 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xh" = ( /obj/structure/railing/cap, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xi" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xl" = ( /obj/structure/cable{ d1 = 4; @@ -6523,7 +6523,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xm" = ( /obj/structure/window/reinforced{ dir = 4 @@ -6537,7 +6537,7 @@ dir = 4; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xn" = ( /obj/structure/railing{ dir = 4 @@ -6545,13 +6545,13 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xo" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -6570,7 +6570,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xt" = ( /obj/structure/railing{ dir = 8 @@ -6582,7 +6582,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xu" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 @@ -6590,12 +6590,12 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xw" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xz" = ( /obj/structure/sign/lifestar{ pixel_y = 32 @@ -6611,7 +6611,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6619,7 +6619,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -6631,7 +6631,7 @@ dir = 1; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xE" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -6640,7 +6640,7 @@ dir = 6; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xF" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -6649,15 +6649,15 @@ dir = 5; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xG" = ( /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xL" = ( /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -6666,7 +6666,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xS" = ( /obj/structure/railing/cap{ dir = 10 @@ -6677,18 +6677,18 @@ icon_state = "yellowsiding"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xW" = ( /obj/machinery/door/airlock, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "xZ" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 @@ -6699,7 +6699,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ya" = ( /obj/structure/chair/sofa/bench{ dir = 8 @@ -6711,13 +6711,13 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yb" = ( /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yc" = ( /obj/machinery/computer{ dir = 8 @@ -6726,13 +6726,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yd" = ( /obj/structure/railing, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -6741,7 +6741,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yi" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -6750,7 +6750,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yj" = ( /obj/item/storage/belt/utility, /obj/structure/table, @@ -6758,7 +6758,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ym" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -6775,7 +6775,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ys" = ( /obj/structure/railing{ dir = 8 @@ -6783,7 +6783,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -6796,7 +6796,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -6819,7 +6819,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yx" = ( /obj/structure/window/reinforced{ dir = 8 @@ -6828,14 +6828,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -6843,7 +6843,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yD" = ( /obj/structure/rack, /obj/effect/turf_decal/delivery, @@ -6857,7 +6857,7 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yE" = ( /obj/item/stack/sheet/metal, /obj/effect/landmark/damageturf, @@ -6868,12 +6868,12 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yF" = ( /obj/structure/table/wood, /obj/item/toy/plushie/nianplushie, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -6882,7 +6882,7 @@ pixel_y = -3 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yI" = ( /obj/structure/railing/cap{ dir = 1 @@ -6891,7 +6891,7 @@ dir = 10 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yM" = ( /obj/structure/railing/cap{ dir = 4 @@ -6900,13 +6900,13 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yO" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yQ" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/machinery/door_control{ @@ -6933,7 +6933,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yR" = ( /obj/item/reagent_containers/food/snacks/xenomeatbreadslice, /obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ @@ -6952,12 +6952,12 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yU" = ( /obj/item/reagent_containers/food/snacks/candy, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yX" = ( /obj/structure/railing/cap{ dir = 4 @@ -6970,20 +6970,20 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "yZ" = ( /obj/structure/closet/cabinet, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zh" = ( /obj/item/reagent_containers/food/snacks/badrecipe, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7002,7 +7002,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7013,33 +7013,33 @@ icon_state = "1-2" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zl" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zm" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "escapecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zn" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/r_wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zr" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zu" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ @@ -7048,7 +7048,7 @@ icon_state = "1-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zv" = ( /obj/structure/rack, /obj/item/reagent_containers/food/snacks/cornchips, @@ -7056,14 +7056,14 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zw" = ( /obj/machinery/computer/aifixer, /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7083,7 +7083,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zz" = ( /obj/structure/window/reinforced, /obj/structure/chair/comfy/corp{ @@ -7092,11 +7092,11 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zG" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -7107,13 +7107,13 @@ icon_state = "caution"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zI" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zK" = ( /obj/item/kirbyplants, /obj/structure/sign/biohazard{ @@ -7131,7 +7131,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zL" = ( /obj/structure/window/reinforced{ dir = 8 @@ -7143,21 +7143,21 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zM" = ( /obj/machinery/cooker/deepfryer, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zP" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/effect/decal/cleanable/dirt, @@ -7165,7 +7165,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zQ" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -7180,12 +7180,12 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zT" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid3" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zV" = ( /obj/machinery/economy/vending/medical{ req_access_txt = "271" @@ -7194,24 +7194,24 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "zW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Aa" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ae" = ( /obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Af" = ( /obj/machinery/door/airlock/command/glass{ req_access_txt = "271"; @@ -7224,18 +7224,18 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Aj" = ( /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ak" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Al" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -7245,7 +7245,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Am" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 @@ -7253,7 +7253,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "An" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/delivery/hollow, @@ -7265,7 +7265,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ao" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -7274,7 +7274,7 @@ color = "red" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ap" = ( /obj/structure/chair{ dir = 1 @@ -7283,7 +7283,7 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ar" = ( /obj/effect/turf_decal/delivery, /obj/structure/railing{ @@ -7293,7 +7293,7 @@ /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "As" = ( /obj/structure/closet/secure_closet, /obj/item/clothing/gloves/color/latex, @@ -7306,7 +7306,7 @@ /obj/item/laser_pointer, /obj/item/clothing/suit/storage/labcoat, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Av" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -7320,7 +7320,7 @@ icon_state = "whitehall"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Aw" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -7333,37 +7333,37 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ay" = ( /obj/structure/railing{ dir = 5 }, /obj/structure/closet/l3closet/general, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Az" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AA" = ( /obj/structure/chair{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AH" = ( /obj/effect/decal/cleanable/dirt, /obj/item/chair{ pixel_y = -3 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AI" = ( /obj/structure/table, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AJ" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -7373,13 +7373,13 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7390,7 +7390,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AN" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, @@ -7399,7 +7399,7 @@ icon_state = "medium" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AO" = ( /obj/structure/railing/cap{ dir = 5 @@ -7412,10 +7412,10 @@ /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AP" = ( /turf/simulated/wall/indestructible/riveted, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AQ" = ( /obj/machinery/light/small{ dir = 1 @@ -7431,14 +7431,14 @@ icon_state = "yellowsiding"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AR" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AS" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -7448,7 +7448,7 @@ dir = 1; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AV" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/beaker{ @@ -7467,7 +7467,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "AZ" = ( /obj/machinery/atmospherics/unary/tank/air{ dir = 8 @@ -7478,7 +7478,7 @@ icon_state = "yellowsiding"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -7487,19 +7487,19 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Be" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bg" = ( /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -7512,14 +7512,14 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bk" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Br" = ( /obj/structure/railing{ dir = 4 @@ -7531,7 +7531,7 @@ icon_state = "black"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bt" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; @@ -7541,7 +7541,7 @@ /obj/structure/alien/resin/wall, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bu" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -7553,7 +7553,7 @@ pixel_x = 2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -7565,7 +7565,7 @@ dir = 6; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bw" = ( /obj/structure/railing/cap{ dir = 6 @@ -7577,7 +7577,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Bx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -7588,7 +7588,7 @@ icon_state = "1-2" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BA" = ( /obj/structure/railing{ dir = 4 @@ -7600,7 +7600,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BB" = ( /obj/structure/railing{ dir = 8 @@ -7610,11 +7610,11 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BC" = ( /obj/machinery/economy/vending/boozeomat, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BE" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -7628,7 +7628,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BF" = ( /obj/item/chair{ pixel_y = -6; @@ -7639,7 +7639,7 @@ icon_state = "yellowsiding"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BI" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awayscilock" @@ -7648,12 +7648,12 @@ req_access_txt = "271" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BK" = ( /obj/structure/railing, /obj/structure/chair, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BO" = ( /obj/machinery/door/airlock/engineering/glass{ req_access_txt = "271"; @@ -7671,13 +7671,13 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BQ" = ( /obj/structure/railing{ dir = 9 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BY" = ( /obj/structure/railing{ dir = 8 @@ -7687,7 +7687,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "BZ" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -7696,20 +7696,20 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cc" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cd" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ci" = ( /obj/structure/railing{ dir = 1 @@ -7718,7 +7718,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cm" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/item/paper/fluff/ruins/moonoutpost19/boreraccountant, @@ -7726,7 +7726,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cr" = ( /obj/structure/cable{ d1 = 4; @@ -7741,7 +7741,7 @@ name = "Specimen Containtment Zone" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/human, @@ -7749,7 +7749,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ct" = ( /obj/machinery/door/airlock/highsecurity{ req_access_txt = "271" @@ -7761,7 +7761,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7780,7 +7780,7 @@ name = "Engineering Division" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cw" = ( /obj/item/chair{ pixel_x = 4; @@ -7790,7 +7790,7 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Cy" = ( /obj/structure/rack, /obj/item/mop, @@ -7799,7 +7799,7 @@ dir = 9; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CB" = ( /obj/machinery/economy/vending/coffee, /obj/effect/decal/cleanable/dirt, @@ -7807,7 +7807,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CC" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -7817,25 +7817,25 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CE" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CH" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CI" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CJ" = ( /obj/structure/chair/stool/bar{ dir = 8 @@ -7850,14 +7850,14 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CL" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CM" = ( /obj/structure/cable{ d1 = 4; @@ -7868,7 +7868,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7881,18 +7881,18 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CS" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CV" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/atmospherics/portable/scrubber, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -7906,11 +7906,11 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CY" = ( /obj/structure/rack, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "CZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7920,10 +7920,10 @@ }, /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Da" = ( /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dc" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -7932,13 +7932,13 @@ dir = 10; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dd" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "De" = ( /obj/structure/closet/crate, /obj/item/reagent_containers/glass/beaker/waterbottle, @@ -7948,14 +7948,14 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Df" = ( /obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Di" = ( /obj/machinery/light{ dir = 8 @@ -7964,7 +7964,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dk" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 @@ -7974,12 +7974,12 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dl" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dn" = ( /obj/structure/railing{ dir = 9 @@ -7989,14 +7989,14 @@ }, /obj/machinery/light/small, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dp" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dr" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/railing{ @@ -8005,7 +8005,7 @@ /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ds" = ( /obj/effect/turf_decal/caution/stand_clear{ dir = 8 @@ -8017,7 +8017,7 @@ /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dt" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271" @@ -8032,14 +8032,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dw" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Dy" = ( /obj/item/kirbyplants, /obj/structure/sign/biohazard{ @@ -8052,7 +8052,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DA" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable{ @@ -8061,13 +8061,13 @@ icon_state = "2-4" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DB" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DG" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -8076,7 +8076,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DJ" = ( /obj/structure/window/reinforced{ dir = 4 @@ -8089,7 +8089,7 @@ dir = 4; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DK" = ( /obj/structure/railing/cap{ dir = 5 @@ -8098,7 +8098,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DM" = ( /obj/structure/rack, /obj/machinery/light/small{ @@ -8106,7 +8106,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DO" = ( /obj/machinery/light/small{ dir = 4 @@ -8119,12 +8119,12 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DR" = ( /obj/item/kitchen/utensil/spoon, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DU" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1; @@ -8134,18 +8134,18 @@ dir = 10 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "DV" = ( /obj/structure/closet/crate, /obj/item/reagent_containers/food/snacks/beans, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ef" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Eg" = ( /obj/effect/decal/cleanable/blood/xeno{ color = "green" @@ -8158,7 +8158,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "El" = ( /obj/machinery/light/small{ dir = 1 @@ -8178,7 +8178,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Em" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, @@ -8199,7 +8199,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Eo" = ( /obj/structure/filingcabinet, /obj/structure/sign/poster/official/fruit_bowl{ @@ -8207,7 +8207,7 @@ }, /obj/item/paper/fluff/ruins/moonoutpost19/rdnote, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ep" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, @@ -8215,7 +8215,7 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Er" = ( /obj/structure/railing/corner{ dir = 8 @@ -8229,7 +8229,7 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Es" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -8252,13 +8252,13 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Et" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ev" = ( /obj/structure/window/reinforced{ dir = 8 @@ -8266,7 +8266,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ex" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread{ @@ -8277,14 +8277,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ey" = ( /obj/machinery/shower{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/noslip, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EE" = ( /obj/item/stack/ore/slag, /turf/simulated/floor/plating/airless, @@ -8305,12 +8305,12 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EH" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/vomit/green, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -8320,7 +8320,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/greenglow, @@ -8328,18 +8328,18 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EP" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EQ" = ( /obj/structure/window/reinforced, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ER" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 @@ -8350,7 +8350,7 @@ /turf/simulated/floor/plasteel{ icon_state = "yellowsiding" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ET" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/table, @@ -8358,7 +8358,7 @@ dir = 9; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EV" = ( /obj/structure/closet, /obj/item/soap, @@ -8368,14 +8368,14 @@ dir = 6; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "EZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ color = "green" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fa" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 @@ -8387,13 +8387,13 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fb" = ( /obj/structure/chair/office/dark{ dir = 4 }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fc" = ( /obj/structure/cable{ d1 = 1; @@ -8404,7 +8404,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fd" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -8412,7 +8412,7 @@ }, /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fe" = ( /obj/structure/table/reinforced, /obj/item/stock_parts/cell/high, @@ -8422,7 +8422,7 @@ icon_state = "1-2" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ff" = ( /obj/machinery/computer{ dir = 1 @@ -8431,14 +8431,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fk" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fm" = ( /obj/structure/safe, /obj/machinery/light/small{ @@ -8451,7 +8451,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fo" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8461,7 +8461,7 @@ }, /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fp" = ( /obj/structure/sink{ dir = 4; @@ -8471,12 +8471,12 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fq" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/greenglow, @@ -8486,7 +8486,7 @@ stat = 2 }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ft" = ( /obj/effect/turf_decal/stripes/corner, /mob/living/simple_animal/hostile/alien/sentinel, @@ -8497,25 +8497,25 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Fz" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 }, /turf/simulated/wall/r_wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FC" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -8523,7 +8523,7 @@ icon_state = "caution"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -8532,7 +8532,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FM" = ( /obj/structure/railing{ dir = 8 @@ -8541,7 +8541,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FN" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/cobweb2, @@ -8549,7 +8549,7 @@ dir = 5; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FO" = ( /obj/item/kirbyplants, /obj/structure/railing{ @@ -8559,7 +8559,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FP" = ( /obj/structure/mopbucket, /obj/machinery/light/small{ @@ -8569,7 +8569,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FT" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -8577,7 +8577,7 @@ dir = 9; icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FV" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/cobweb, @@ -8585,7 +8585,7 @@ dir = 9; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FW" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/ywflowers, @@ -8593,20 +8593,20 @@ dir = 8 }, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FX" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/chair/sofa/bench, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FY" = ( /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "FZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -8617,7 +8617,7 @@ icon_state = "1-2" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gd" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -8627,14 +8627,14 @@ dir = 4 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ge" = ( /obj/structure/closet/crate/secure/loot, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gg" = ( /turf/simulated/mineral/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, @@ -8642,7 +8642,7 @@ icon_state = "darkbluecorners"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gk" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271"; @@ -8652,7 +8652,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gl" = ( /obj/structure/railing/cap{ dir = 9 @@ -8662,7 +8662,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -8673,7 +8673,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gq" = ( /obj/structure/cable{ d1 = 4; @@ -8681,7 +8681,7 @@ icon_state = "4-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gs" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -8702,7 +8702,7 @@ icon_state = "tracks" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8722,25 +8722,25 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gx" = ( /obj/structure/closet/crate/freezer, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /obj/item/stack/rods, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Gz" = ( /obj/structure/table/wood, /obj/item/toy/plushie/slimeplushie, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GC" = ( /obj/effect/turf_decal/caution/stand_clear/white{ dir = 8 @@ -8749,7 +8749,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GD" = ( /obj/structure/holosign/barrier/engineering, /obj/effect/landmark/damageturf, @@ -8762,7 +8762,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GH" = ( /obj/machinery/light/small{ dir = 8 @@ -8771,7 +8771,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GJ" = ( /obj/structure/railing{ dir = 1 @@ -8787,7 +8787,7 @@ dir = 8; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -8797,7 +8797,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GP" = ( /obj/machinery/computer, /obj/structure/window/reinforced{ @@ -8810,19 +8810,19 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GS" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/stack/rods, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GT" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "GX" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/decal/cleanable/dirt, @@ -8830,7 +8830,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hb" = ( /obj/structure/table/wood, /obj/item/toy/plushie/greyplushie{ @@ -8841,7 +8841,7 @@ pixel_y = 4 }, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hd" = ( /obj/machinery/light/small{ dir = 4 @@ -8851,7 +8851,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hg" = ( /obj/structure/table/reinforced, /obj/machinery/door/window{ @@ -8872,7 +8872,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hh" = ( /obj/structure/railing/cap{ dir = 10 @@ -8880,7 +8880,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hj" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -8889,7 +8889,7 @@ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hm" = ( /obj/structure/railing, /obj/effect/decal/cleanable/blood/splatter{ @@ -8899,14 +8899,14 @@ /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -8915,7 +8915,7 @@ icon_state = "whitehall"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hr" = ( /obj/structure/railing{ dir = 8 @@ -8928,13 +8928,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hu" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -8948,7 +8948,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Hx" = ( /obj/structure/window/reinforced{ dir = 4 @@ -8957,21 +8957,21 @@ dir = 4 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HA" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HE" = ( /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HL" = ( /obj/machinery/light{ active_power_consumption = 0; @@ -8985,7 +8985,7 @@ icon_state = "2-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HM" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -9004,7 +9004,7 @@ pixel_x = 6 }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HO" = ( /obj/machinery/door/airlock/highsecurity{ req_access_txt = "271"; @@ -9015,13 +9015,13 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HP" = ( /obj/item/chair{ pixel_y = -3 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HU" = ( /obj/structure/rack, /obj/item/stack/sheet/metal/fifty{ @@ -9035,7 +9035,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HV" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -9044,14 +9044,14 @@ icon_state = "yellowsiding"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/largecrate, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "HY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -9063,12 +9063,12 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ib" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid11" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ic" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing{ @@ -9076,15 +9076,15 @@ }, /obj/structure/table, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ie" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "If" = ( /turf/simulated/floor/bluegrid, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ij" = ( /obj/machinery/light/small{ dir = 1 @@ -9097,13 +9097,13 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Io" = ( /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ip" = ( /obj/structure/cable{ d1 = 1; @@ -9111,7 +9111,7 @@ icon_state = "1-4" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Iq" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -9119,7 +9119,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds/node, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ix" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -9128,11 +9128,11 @@ icon_state = "greencorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Iz" = ( /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IB" = ( /obj/machinery/light/small{ dir = 4 @@ -9142,7 +9142,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IC" = ( /obj/structure/railing{ dir = 4 @@ -9151,7 +9151,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ID" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -9160,7 +9160,7 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IE" = ( /obj/structure/window/reinforced{ dir = 1 @@ -9169,7 +9169,7 @@ dir = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IH" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, @@ -9177,7 +9177,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IJ" = ( /obj/structure/window/reinforced{ dir = 1 @@ -9194,7 +9194,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IM" = ( /obj/structure/chair{ dir = 8 @@ -9207,12 +9207,12 @@ icon_state = "tracks" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IO" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/small{ @@ -9223,7 +9223,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IS" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/filingcabinet/chestdrawer, @@ -9235,7 +9235,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IU" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/airlock/highsecurity{ @@ -9246,11 +9246,11 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IV" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "IW" = ( /turf/simulated/floor/engine/vacuum, /area/space/nearstation) @@ -9271,27 +9271,27 @@ id_tag = "awayscilock1" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jc" = ( /obj/structure/rack, /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ji" = ( /obj/structure/railing/cap, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jl" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jm" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/delivery/hollow, @@ -9299,20 +9299,20 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jo" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jr" = ( /obj/structure/alien/resin/wall, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ju" = ( /obj/machinery/autolathe, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jv" = ( /obj/effect/decal/cleanable/dirt, /obj/item/chair{ @@ -9324,7 +9324,7 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -9333,13 +9333,13 @@ /turf/simulated/floor/plasteel{ icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jy" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Jz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; @@ -9347,14 +9347,14 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JA" = ( /obj/structure/table/glass, /obj/item/storage/backpack/duffel/medical, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JB" = ( /obj/item/clothing/gloves/color/black, /obj/item/stack/tape_roll, @@ -9363,18 +9363,18 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JE" = ( /obj/machinery/door/airlock/external{ req_access_txt = "271" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JG" = ( /obj/structure/flora/ash/rock/style_random, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JI" = ( /obj/structure/railing/cap{ dir = 10 @@ -9383,14 +9383,14 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JJ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JK" = ( /obj/effect/turf_decal/delivery/partial, /obj/effect/turf_decal/caution{ @@ -9402,13 +9402,13 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JN" = ( /obj/structure/chair{ dir = 1 @@ -9419,28 +9419,28 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JP" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/newscaster{ pixel_y = 30 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JQ" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JR" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/sign/poster/official/nanotrasen_logo{ pixel_y = 32 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -9456,7 +9456,7 @@ icon_state = "whitecorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JU" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/power/apc/off_station/empty_charge{ @@ -9483,21 +9483,21 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JW" = ( /obj/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "JZ" = ( /obj/structure/table/wood, /obj/item/lighter/zippo, /obj/effect/decal/cleanable/dirt, /obj/item/toy/plushie/tabby_cat, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ka" = ( /obj/item/chair{ pixel_y = -3 @@ -9512,14 +9512,14 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kb" = ( /obj/structure/barricade/wooden/crude{ layer = 4 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kc" = ( /obj/structure/railing/cap, /obj/effect/decal/cleanable/dirt, @@ -9527,14 +9527,14 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kd" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ki" = ( /obj/machinery/light/small{ dir = 4 @@ -9543,7 +9543,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Km" = ( /obj/structure/railing{ dir = 6 @@ -9552,13 +9552,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kp" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -9573,7 +9573,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kt" = ( /obj/machinery/light/small{ dir = 4 @@ -9583,34 +9583,34 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ku" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kx" = ( /obj/structure/closet/toolcloset, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Kz" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KC" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ @@ -9627,7 +9627,7 @@ }, /obj/machinery/door/window/reinforced/normal, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KE" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -9636,7 +9636,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KG" = ( /obj/structure/railing/cap{ dir = 9 @@ -9650,7 +9650,7 @@ pixel_y = -1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KI" = ( /obj/structure/cable{ d2 = 8; @@ -9658,13 +9658,13 @@ }, /obj/effect/turf_decal/box, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KJ" = ( /obj/structure/railing{ dir = 4 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KN" = ( /obj/structure/railing{ dir = 4 @@ -9674,13 +9674,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KO" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KP" = ( /obj/machinery/light{ dir = 4 @@ -9703,7 +9703,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KQ" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -9712,14 +9712,14 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -9732,11 +9732,11 @@ icon_state = "escapecorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KW" = ( /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "KZ" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaycontlockdown" @@ -9747,7 +9747,7 @@ }, /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "La" = ( /obj/structure/closet/crate/freezer, /obj/item/clothing/mask/facehugger{ @@ -9758,12 +9758,12 @@ /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lb" = ( /obj/structure/rack, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ld" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -9776,7 +9776,7 @@ pixel_x = 2 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -9787,7 +9787,7 @@ stat = 2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lj" = ( /obj/effect/decal/cleanable/dirt, /obj/item/chair{ @@ -9799,7 +9799,7 @@ icon_state = "whitehall"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lk" = ( /obj/machinery/light/small{ dir = 1 @@ -9810,21 +9810,21 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ll" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ln" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lq" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -9833,7 +9833,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lw" = ( /obj/structure/railing{ dir = 4 @@ -9841,7 +9841,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Lz" = ( /obj/structure/railing{ dir = 4 @@ -9852,17 +9852,17 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LA" = ( /obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/wall/mineral/titanium, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LC" = ( /obj/structure/largecrate, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid3" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LD" = ( /obj/structure/window/reinforced{ dir = 8 @@ -9872,7 +9872,7 @@ icon_state = "whitecorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, @@ -9881,7 +9881,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -9895,7 +9895,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LK" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/stripes/corner{ @@ -9907,7 +9907,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LL" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -9919,7 +9919,7 @@ pixel_x = -7 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -9929,21 +9929,21 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LY" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "LZ" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/structure/disposaloutlet, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Me" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/railing, @@ -9953,7 +9953,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -9963,7 +9963,7 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -9973,20 +9973,20 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ml" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mn" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner{ @@ -9996,7 +9996,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mq" = ( /obj/structure/window/reinforced{ dir = 4 @@ -10010,7 +10010,7 @@ dir = 4; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10019,7 +10019,7 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mv" = ( /obj/structure/rack, /obj/item/storage/toolbox/mechanical{ @@ -10034,20 +10034,20 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mx" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "271" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "My" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Mz" = ( /obj/item/t_scanner, /obj/structure/table, @@ -10055,7 +10055,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster{ @@ -10070,7 +10070,7 @@ icon_state = "black"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MG" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -10083,21 +10083,21 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MH" = ( /obj/structure/closet/emcloset, /obj/structure/window/basic{ dir = 4 }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MI" = ( /obj/structure/chair/sofa/bench, /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -10106,7 +10106,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MK" = ( /obj/machinery/door_control{ id = "awaykitchen"; @@ -10117,7 +10117,7 @@ icon_state = "black"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MN" = ( /obj/effect/decal/cleanable/cobweb2, /obj/effect/turf_decal/stripes/corner{ @@ -10127,7 +10127,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MS" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/light/small, @@ -10144,7 +10144,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MT" = ( /obj/structure/lattice, /turf/template_noop, @@ -10154,7 +10154,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MY" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -10163,13 +10163,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "MZ" = ( /obj/structure/railing/corner{ dir = 8 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nb" = ( /obj/structure/chair/sofa/bench{ dir = 1 @@ -10177,7 +10177,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nc" = ( /obj/structure/cable{ d2 = 8; @@ -10185,7 +10185,7 @@ }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nd" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/decal/cleanable/dirt, @@ -10193,7 +10193,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ne" = ( /obj/structure/table/reinforced, /obj/machinery/flasher_button{ @@ -10216,11 +10216,11 @@ icon_state = "black"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ni" = ( /obj/structure/falsewall/rock_ancient, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -10236,7 +10236,7 @@ /turf/simulated/floor/plasteel{ icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nn" = ( /obj/machinery/camera{ c_tag = "South Cafeteria"; @@ -10250,7 +10250,7 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Np" = ( /obj/structure/chair/sofa/bench{ dir = 4 @@ -10262,7 +10262,7 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nu" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -10278,12 +10278,12 @@ dir = 5 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nv" = ( /obj/effect/decal/cleanable/cobweb2, /obj/structure/grille/broken, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Nx" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -10294,7 +10294,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ny" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ @@ -10306,7 +10306,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NC" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -10318,7 +10318,7 @@ pixel_x = 2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NE" = ( /obj/machinery/light/small{ active_power_consumption = 0; @@ -10329,7 +10329,7 @@ /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NF" = ( /obj/structure/railing, /obj/effect/turf_decal/delivery/red/partial{ @@ -10339,14 +10339,14 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NM" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10361,14 +10361,14 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NT" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, @@ -10384,14 +10384,14 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil{ color = "black" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "NZ" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -10407,7 +10407,7 @@ dir = 8; icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oa" = ( /obj/structure/chair/sofa/bench{ dir = 1 @@ -10416,13 +10416,13 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ob" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -10432,7 +10432,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Od" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/cobweb, @@ -10440,7 +10440,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oe" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -10450,18 +10450,18 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Of" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Og" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oi" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -10474,7 +10474,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oj" = ( /obj/structure/table/glass, /obj/item/storage/fancy/donut_box, @@ -10483,7 +10483,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ol" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -10497,7 +10497,7 @@ dir = 1 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Om" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -10507,7 +10507,7 @@ /turf/simulated/floor/plasteel{ icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "On" = ( /obj/structure/safe/floor{ known_by = list("captain") @@ -10519,7 +10519,7 @@ /obj/item/coin/mythril, /obj/item/coin/adamantine, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oo" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ @@ -10532,21 +10532,21 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Op" = ( /obj/structure/window/reinforced, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Oq" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Os" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10556,7 +10556,7 @@ icon_state = "1-2" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ot" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10566,13 +10566,13 @@ }, /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ou" = ( /obj/structure/rack, /turf/simulated/floor/plasteel{ icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ox" = ( /obj/machinery/light{ active_power_consumption = 0; @@ -10580,7 +10580,7 @@ status = 2 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10588,7 +10588,7 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -10598,10 +10598,10 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OG" = ( /turf/simulated/wall/mineral/titanium, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OL" = ( /obj/structure/railing/cap{ dir = 1 @@ -10611,7 +10611,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OM" = ( /obj/effect/decal/cleanable/cobweb, /obj/item/shard{ @@ -10621,7 +10621,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ON" = ( /turf/template_noop, /area/space/nearstation) @@ -10631,7 +10631,7 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OP" = ( /obj/machinery/light/small{ dir = 4 @@ -10642,7 +10642,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OR" = ( /obj/structure/railing{ dir = 10 @@ -10659,7 +10659,7 @@ icon_state = "darkblue"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OT" = ( /obj/effect/turf_decal/delivery/partial{ dir = 4 @@ -10673,13 +10673,13 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OW" = ( /obj/structure/railing{ dir = 10 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OX" = ( /obj/structure/cable{ d1 = 4; @@ -10691,7 +10691,7 @@ color = "green" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "OZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -10700,7 +10700,7 @@ dir = 8; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pa" = ( /obj/structure/table/glass, /obj/machinery/light/small{ @@ -10710,7 +10710,7 @@ /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pd" = ( /obj/machinery/light/small{ active_power_consumption = 0; @@ -10719,21 +10719,21 @@ status = 2 }, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pf" = ( /obj/structure/railing/cap{ dir = 1 }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ph" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -10745,7 +10745,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Po" = ( /obj/structure/alien/resin/wall, /obj/effect/decal/cleanable/dirt, @@ -10753,7 +10753,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -10761,10 +10761,10 @@ /obj/structure/alien/resin/wall, /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pr" = ( /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ps" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -10773,7 +10773,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pt" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -10782,7 +10782,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Pv" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -10791,18 +10791,18 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PA" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PE" = ( /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/badrecipe, @@ -10810,7 +10810,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PF" = ( /obj/machinery/door/airlock/security{ req_access_txt = "271"; @@ -10820,25 +10820,25 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PK" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PL" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PM" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -10851,20 +10851,20 @@ icon_state = "tracks" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PQ" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PS" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PT" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -10876,7 +10876,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PU" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -10885,7 +10885,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10906,19 +10906,19 @@ id_tag = "awayscilock1" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "PZ" = ( /obj/structure/railing{ dir = 8 }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qc" = ( /obj/structure/railing/cap{ dir = 10 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qe" = ( /obj/structure/railing/cap{ dir = 1 @@ -10928,14 +10928,14 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qf" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qh" = ( /obj/structure/cable{ d1 = 2; @@ -10943,7 +10943,7 @@ icon_state = "2-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qj" = ( /obj/machinery/light/small{ active_power_consumption = 0; @@ -10953,11 +10953,11 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qk" = ( /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ql" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -10971,12 +10971,12 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qm" = ( /obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qn" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -10988,7 +10988,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qt" = ( /obj/structure/window/reinforced{ dir = 8 @@ -11001,7 +11001,7 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qu" = ( /obj/structure/rack, /obj/item/stack/sheet/mineral/plasma{ @@ -11014,7 +11014,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qv" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -11022,7 +11022,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qx" = ( /obj/structure/table/reinforced, /obj/machinery/door/window{ @@ -11032,7 +11032,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11042,7 +11042,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Qz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ @@ -11052,7 +11052,7 @@ icon_state = "tracks" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QB" = ( /obj/structure/sign/biohazard{ pixel_y = 32 @@ -11060,7 +11060,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QD" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -11069,14 +11069,14 @@ dir = 10; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QE" = ( /obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QF" = ( /obj/structure/railing{ dir = 4 @@ -11087,7 +11087,7 @@ }, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QG" = ( /obj/structure/railing{ dir = 1 @@ -11096,7 +11096,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QI" = ( /obj/structure/railing/cap{ dir = 10 @@ -11105,11 +11105,11 @@ icon_state = "darkbluefull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QK" = ( /obj/machinery/light/small, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QL" = ( /obj/effect/decal/cleanable/glass, /obj/item/shard{ @@ -11117,7 +11117,7 @@ }, /obj/item/stack/rods, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QM" = ( /obj/structure/railing/cap{ dir = 1 @@ -11126,7 +11126,7 @@ dir = 1; icon_state = "blackcorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -11139,45 +11139,45 @@ name = "Cafeteria" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QP" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QQ" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /turf/simulated/floor/plating/asteroid/ancient, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QS" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QT" = ( /obj/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QW" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QX" = ( /obj/structure/alien/weeds/node, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "QZ" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ @@ -11186,7 +11186,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rc" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -11210,7 +11210,7 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rf" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -11223,7 +11223,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rg" = ( /obj/machinery/door/airlock/freezer{ req_access_txt = "271" @@ -11232,13 +11232,13 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rh" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ri" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/splatter{ @@ -11246,7 +11246,7 @@ }, /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11254,7 +11254,7 @@ dir = 8 }, /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ro" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -11272,7 +11272,7 @@ icon_state = "cautioncorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rr" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -11281,7 +11281,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ru" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -11290,14 +11290,14 @@ dir = 10 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Rv" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RA" = ( /obj/structure/flora/rock, /turf/simulated/floor/engine/vacuum, @@ -11306,7 +11306,7 @@ /obj/structure/table/reinforced, /obj/structure/alien/egg/burst, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RD" = ( /obj/machinery/door/airlock/multi_tile/glass{ req_access_txt = "271" @@ -11317,20 +11317,20 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RH" = ( /obj/machinery/kitchen_machine/oven, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RI" = ( /obj/structure/railing/cap{ dir = 8 @@ -11339,7 +11339,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RK" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -11348,7 +11348,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RN" = ( /obj/structure/sign/radiation/rad_area{ pixel_y = 32 @@ -11359,7 +11359,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RQ" = ( /obj/effect/turf_decal/delivery/hollow, /obj/machinery/porta_turret{ @@ -11368,35 +11368,35 @@ lethal = 1 }, /turf/simulated/floor/bluegrid, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "RU" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 8 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sa" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sb" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sc" = ( /obj/machinery/computer/monitor/secret{ dir = 4 }, /obj/structure/cable, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -11410,7 +11410,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sg" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -11423,7 +11423,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Si" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ @@ -11433,7 +11433,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sj" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -11442,28 +11442,28 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sk" = ( /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/grass, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sm" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sp" = ( /mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sq" = ( /turf/simulated/floor/plasteel{ icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "St" = ( /obj/structure/table/reinforced, /obj/machinery/door/window, @@ -11475,24 +11475,24 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Su" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sv" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sx" = ( /obj/effect/decal/cleanable/greenglow, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Sz" = ( /obj/effect/landmark/damageturf, /obj/structure/cable{ @@ -11504,7 +11504,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "SG" = ( /obj/structure/railing{ dir = 4 @@ -11514,7 +11514,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "SI" = ( /obj/structure/table/glass, /obj/effect/decal/cleanable/dirt, @@ -11524,14 +11524,14 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "SL" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "SO" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/railing, @@ -11539,7 +11539,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ST" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -11554,7 +11554,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "SV" = ( /obj/structure/chair/stool/bar{ dir = 8 @@ -11563,7 +11563,7 @@ dir = 8; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tc" = ( /obj/machinery/computer{ dir = 4 @@ -11572,7 +11572,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Td" = ( /obj/structure/weightmachine/stacklifter, /obj/effect/turf_decal/delivery/hollow, @@ -11580,7 +11580,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Te" = ( /obj/machinery/shieldwallgen{ locked = 0; @@ -11600,7 +11600,7 @@ }, /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -11611,7 +11611,7 @@ /turf/simulated/floor/plasteel{ icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ti" = ( /obj/machinery/door/airlock/command/glass{ req_access_txt = "271"; @@ -11626,7 +11626,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tm" = ( /obj/structure/railing/cap{ dir = 9 @@ -11636,7 +11636,7 @@ icon_state = "whitehall"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tn" = ( /obj/structure/cable{ d1 = 1; @@ -11651,7 +11651,7 @@ id = "mo19rdoffice" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tr" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, @@ -11659,7 +11659,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tu" = ( /obj/structure/railing/corner{ dir = 8 @@ -11668,7 +11668,7 @@ dir = 8; icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tv" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -11677,7 +11677,7 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tw" = ( /obj/machinery/light/small{ active_power_consumption = 0; @@ -11687,7 +11687,7 @@ }, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11696,14 +11696,14 @@ dir = 1; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Tz" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TB" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ @@ -11719,14 +11719,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TD" = ( /obj/structure/chair/comfy/corp, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TF" = ( /obj/structure/cable{ d1 = 1; @@ -11736,7 +11736,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -11753,14 +11753,14 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TK" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb, /obj/item/toy/plushie/voxplushie, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11770,7 +11770,7 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TS" = ( /obj/machinery/reagentgrinder, /obj/structure/table, @@ -11778,7 +11778,7 @@ icon_state = "whitecorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TW" = ( /obj/structure/railing/cap{ dir = 1 @@ -11788,7 +11788,7 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TY" = ( /obj/structure/sign/biohazard{ pixel_y = -32 @@ -11806,7 +11806,7 @@ icon_state = "1-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "TZ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -11815,7 +11815,7 @@ dir = 8; icon_state = "cautioncorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ua" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/office/dark{ @@ -11825,7 +11825,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ub" = ( /obj/structure/filingcabinet, /obj/structure/sign/poster/contraband/fun_police{ @@ -11835,7 +11835,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ue" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11847,7 +11847,7 @@ dir = 4; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ug" = ( /obj/structure/chair, /obj/machinery/light/small{ @@ -11857,7 +11857,7 @@ icon_state = "yellowsiding"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ul" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -11873,7 +11873,7 @@ color = "red" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Un" = ( /obj/item/shard{ icon_state = "medium" @@ -11883,14 +11883,14 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Up" = ( /obj/item/chair{ pixel_y = 1; dir = 4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ur" = ( /obj/structure/cable{ d1 = 2; @@ -11898,7 +11898,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ut" = ( /obj/item/chair{ dir = 4; @@ -11909,7 +11909,7 @@ icon_state = "black"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Uu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11922,7 +11922,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Uv" = ( /obj/machinery/flasher{ pixel_x = 28 @@ -11937,7 +11937,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Uz" = ( /obj/structure/barricade/wooden/crude{ layer = 4 @@ -11953,7 +11953,7 @@ req_access_txt = "271" }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UA" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/machinery/computer/id_upgrader, @@ -11961,7 +11961,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UB" = ( /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/delivery/hollow, @@ -11974,30 +11974,30 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UD" = ( /mob/living/simple_animal/hostile/alien/drone, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UG" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/item/stack/cable_coil, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UH" = ( /obj/structure/railing/cap{ dir = 6 }, /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UI" = ( /obj/structure/railing{ dir = 4 @@ -12013,7 +12013,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UK" = ( /obj/structure/railing{ dir = 10 @@ -12023,7 +12023,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UO" = ( /obj/structure/lattice, /obj/item/shard{ @@ -12036,7 +12036,7 @@ dir = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -12046,12 +12046,12 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UX" = ( /obj/structure/alien/resin/wall, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "UZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -12060,11 +12060,11 @@ dir = 6 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Va" = ( /obj/machinery/door/airlock/maintenance_hatch, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vf" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -12073,7 +12073,7 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vg" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -12082,7 +12082,7 @@ dir = 4; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -12091,7 +12091,7 @@ icon_state = "blackcorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vi" = ( /obj/effect/turf_decal/delivery/white/partial, /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -12106,18 +12106,18 @@ /turf/simulated/floor/plasteel{ icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vl" = ( /obj/structure/railing, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vm" = ( /obj/structure/railing/corner{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vo" = ( /obj/structure/closet/crate/can, /obj/effect/decal/cleanable/cobweb2, @@ -12126,13 +12126,13 @@ dir = 5; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vs" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kitchen/utensil/fork, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -12144,7 +12144,7 @@ }, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vx" = ( /obj/machinery/light/small{ dir = 1 @@ -12153,14 +12153,14 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Vy" = ( /obj/machinery/floodlight, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VC" = ( /obj/structure/window/reinforced{ dir = 8 @@ -12173,14 +12173,14 @@ icon_state = "yellowsiding"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VG" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 9 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VH" = ( /obj/structure/cable{ d1 = 1; @@ -12188,7 +12188,7 @@ icon_state = "1-2" }, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -12201,7 +12201,7 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VL" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -12212,7 +12212,7 @@ /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VM" = ( /obj/structure/rack, /obj/item/flashlight/flare, @@ -12222,18 +12222,18 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /turf/simulated/wall/r_wall, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VO" = ( /obj/machinery/computer, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VR" = ( /obj/structure/chair{ dir = 1 @@ -12242,7 +12242,7 @@ dir = 10; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VS" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; @@ -12255,12 +12255,12 @@ icon_state = "1-8" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VT" = ( /obj/structure/bed, /obj/structure/closet/crate/secure/loot, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ @@ -12270,7 +12270,7 @@ icon_state = "darkbluefull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VV" = ( /obj/structure/railing{ dir = 4 @@ -12283,7 +12283,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "VX" = ( /obj/machinery/shower{ dir = 8 @@ -12294,17 +12294,17 @@ dir = 4 }, /turf/simulated/floor/noslip, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wb" = ( /obj/effect/decal/cleanable/blood/xeno{ color = "green" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wd" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "We" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "271" @@ -12314,12 +12314,12 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wg" = ( /obj/structure/lattice, /obj/machinery/door/firedoor/closed, /turf/template_noop, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wi" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -12328,20 +12328,20 @@ icon_state = "black"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wl" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wn" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wo" = ( /obj/machinery/light/small{ dir = 4 @@ -12354,24 +12354,24 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/stairs, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wq" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ws" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wv" = ( /obj/structure/railing{ dir = 8 @@ -12381,7 +12381,7 @@ }, /obj/structure/table, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Wz" = ( /obj/machinery/light/small, /obj/structure/table, @@ -12389,7 +12389,7 @@ dir = 10; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WE" = ( /obj/structure/railing, /obj/item/cigbutt{ @@ -12404,7 +12404,7 @@ }, /obj/item/reagent_containers/food/drinks/cans/beer, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -12416,14 +12416,14 @@ icon_state = "caution"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WG" = ( /obj/machinery/door/airlock/vault{ locked = 1; req_access_txt = "271" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WH" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, @@ -12431,14 +12431,14 @@ icon_state = "whitecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WJ" = ( /obj/item/kirbyplants, /obj/structure/railing{ dir = 9 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WK" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 1 @@ -12456,18 +12456,18 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WS" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "escapecorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WU" = ( /obj/machinery/light{ active_power_consumption = 0; @@ -12482,7 +12482,7 @@ icon_state = "2-4" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WW" = ( /obj/structure/cable{ d1 = 1; @@ -12493,7 +12493,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "WX" = ( /obj/item/stack/rods, /turf/template_noop, @@ -12506,7 +12506,7 @@ color = "red" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xb" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; @@ -12517,14 +12517,14 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xc" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 6 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xd" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 @@ -12533,7 +12533,7 @@ icon_state = "whitehall"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xg" = ( /obj/structure/railing{ dir = 4 @@ -12543,7 +12543,7 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xi" = ( /obj/machinery/computer, /obj/structure/window/reinforced{ @@ -12553,7 +12553,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xl" = ( /obj/item/shard{ icon_state = "medium" @@ -12574,7 +12574,7 @@ dir = 8; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xp" = ( /obj/structure/chair{ dir = 8 @@ -12584,7 +12584,7 @@ dir = 6; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xq" = ( /obj/structure/cable{ d1 = 4; @@ -12595,7 +12595,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xr" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer/on{ dir = 1 @@ -12603,7 +12603,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -12615,7 +12615,7 @@ icon_state = "tracks" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xv" = ( /obj/machinery/reagentgrinder, /obj/item/reagent_containers/food/drinks/shaker{ @@ -12624,7 +12624,7 @@ }, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xw" = ( /obj/machinery/processor{ dir = 4 @@ -12633,7 +12633,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Xz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -12644,13 +12644,13 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XB" = ( /obj/structure/railing{ dir = 10 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XD" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -12659,13 +12659,13 @@ icon_state = "escape"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XF" = ( /obj/structure/table/reinforced, /obj/item/taperecorder{ @@ -12675,7 +12675,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XH" = ( /obj/structure/railing{ dir = 1 @@ -12690,7 +12690,7 @@ dir = 4; icon_state = "green" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XK" = ( /obj/machinery/camera{ c_tag = "Exterior Hangar"; @@ -12698,7 +12698,7 @@ network = list("MO19") }, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XL" = ( /obj/structure/window/reinforced{ dir = 4 @@ -12708,7 +12708,7 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XM" = ( /obj/structure/filingcabinet, /obj/structure/sign/mech{ @@ -12719,7 +12719,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XN" = ( /obj/machinery/reagentgrinder, /obj/machinery/light/small{ @@ -12734,7 +12734,7 @@ icon_state = "showroomfloor"; temperature = 273.15 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XO" = ( /obj/structure/railing/cap{ dir = 4 @@ -12742,7 +12742,7 @@ /turf/simulated/floor/plasteel/stairs{ dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XR" = ( /obj/structure/chair{ dir = 1 @@ -12755,7 +12755,7 @@ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XU" = ( /obj/item/airlock_electronics, /obj/item/stack/cable_coil, @@ -12763,14 +12763,14 @@ /turf/simulated/floor/plasteel{ icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XW" = ( /obj/structure/closet/l3closet/general, /turf/simulated/floor/plasteel{ icon_state = "whitecorner"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XX" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, @@ -12778,13 +12778,13 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "XY" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -12794,7 +12794,7 @@ icon_state = "blackcorner"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Ye" = ( /obj/structure/window/reinforced{ dir = 4 @@ -12805,11 +12805,11 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yh" = ( /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yi" = ( /obj/structure/railing/cap, /obj/effect/turf_decal/stripes/corner{ @@ -12825,7 +12825,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/engineering/glass{ @@ -12833,7 +12833,7 @@ name = "Engineering Division" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/white/partial, @@ -12841,7 +12841,7 @@ icon_state = "black"; dir = 1 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yl" = ( /obj/structure/mirror{ pixel_x = -28 @@ -12853,7 +12853,7 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -12866,7 +12866,7 @@ icon_state = "escapecorner"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yu" = ( /obj/structure/toilet{ pixel_y = 8 @@ -12876,7 +12876,7 @@ /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yw" = ( /obj/machinery/chem_master, /obj/effect/decal/cleanable/dirt, @@ -12884,13 +12884,13 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yy" = ( /obj/structure/chair/office/dark{ dir = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Yz" = ( /obj/machinery/light/small{ active_power_consumption = 0; @@ -12908,7 +12908,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YB" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" @@ -12919,7 +12919,7 @@ name = "Medical Ward" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -12934,18 +12934,18 @@ pixel_x = 2 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YJ" = ( /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YK" = ( /obj/structure/railing{ dir = 8 }, /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YL" = ( /obj/structure/railing{ dir = 4 @@ -12961,14 +12961,14 @@ icon_state = "yellowsiding"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YM" = ( /obj/machinery/door/airlock/engineering/glass{ req_access_txt = "271"; name = "Workshop" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YQ" = ( /obj/structure/railing{ dir = 8 @@ -12981,7 +12981,7 @@ icon_state = "yellowsiding"; dir = 4 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YS" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ @@ -12990,7 +12990,7 @@ icon_state = "1-2" }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YX" = ( /obj/structure/railing, /obj/effect/turf_decal/delivery/red/partial{ @@ -13002,7 +13002,7 @@ icon_state = "black"; dir = 10 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "YY" = ( /obj/structure/chair{ dir = 4 @@ -13017,18 +13017,18 @@ icon_state = "caution"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Za" = ( /obj/structure/holosign/barrier/engineering, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zb" = ( /obj/machinery/door/airlock/external/glass{ locked = 1 }, /turf/simulated/floor/catwalk, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zf" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien/queen/large{ @@ -13039,7 +13039,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -13054,7 +13054,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zh" = ( /obj/effect/decal/cleanable/molten_object/large, /obj/effect/decal/cleanable/glass, @@ -13066,14 +13066,14 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zj" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 @@ -13081,7 +13081,7 @@ /turf/simulated/floor/plasteel{ icon_state = "black" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zk" = ( /obj/machinery/atmospherics/unary/tank/air{ dir = 8 @@ -13095,7 +13095,7 @@ icon_state = "yellowsiding"; dir = 5 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zn" = ( /obj/machinery/light/small{ dir = 8 @@ -13103,7 +13103,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zp" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, @@ -13111,7 +13111,7 @@ dir = 10; icon_state = "escape" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zq" = ( /obj/structure/rack, /obj/item/taperecorder{ @@ -13119,7 +13119,7 @@ }, /obj/item/storage/secure/briefcase, /turf/simulated/floor/carpet/royalblue, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zu" = ( /obj/machinery/computer, /obj/structure/window/reinforced{ @@ -13132,7 +13132,7 @@ dir = 1; icon_state = "caution" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -13143,14 +13143,14 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "Zz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZA" = ( /obj/structure/railing{ dir = 1 @@ -13164,7 +13164,7 @@ /turf/simulated/floor/plasteel{ icon_state = "whitecorner" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZC" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, @@ -13173,21 +13173,21 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZE" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZI" = ( /obj/effect/decal/cleanable/cobweb2, /obj/structure/table, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZK" = ( /obj/machinery/light/small, /mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZL" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ @@ -13199,7 +13199,7 @@ dir = 5; icon_state = "cafeteria" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZN" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -13209,7 +13209,7 @@ icon_state = "darkfull"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZO" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -13221,7 +13221,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZP" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271" @@ -13233,7 +13233,7 @@ icon_state = "white"; dir = 8 }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, @@ -13241,7 +13241,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZU" = ( /obj/machinery/kitchen_machine/microwave{ pixel_x = -3; @@ -13249,13 +13249,13 @@ }, /obj/structure/table, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZV" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) "ZX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -13266,7 +13266,7 @@ pixel_y = -4 }, /turf/simulated/floor/plasteel, -/area/ruin/space/unpowered) +/area/ruin/space/moonbase19) (1,1,1) = {" aa diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm index d8e6c1eb9300..0afd68199276 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm @@ -1506,7 +1506,7 @@ /turf/simulated/floor/plating/asteroid/airless, /area/ruin/unpowered/syndicate_space_base/inner) "ig" = ( -/obj/structure/kitchenspike, +/obj/machinery/kitchen_machine/candy_maker, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -5033,8 +5033,8 @@ }, /area/ruin/unpowered/syndicate_space_base/dormitories) "BJ" = ( -/obj/machinery/kitchen_machine/candy_maker, /obj/machinery/light, +/obj/machinery/kitchen_machine/oven, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, diff --git a/_maps/map_files220/cyberiad/cyberiad.dmm b/_maps/map_files220/cyberiad/cyberiad.dmm index d747a5a859a2..c88278ac589b 100644 --- a/_maps/map_files220/cyberiad/cyberiad.dmm +++ b/_maps/map_files220/cyberiad/cyberiad.dmm @@ -26198,6 +26198,9 @@ /area/station/medical/sleeper) "caS" = ( /obj/structure/table, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -26985,6 +26988,11 @@ /area/station/hallway/primary/central/south) "cdP" = ( /obj/effect/turf_decal/stripes/corner, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -43674,6 +43682,9 @@ /area/station/turret_protected/aisat/interior) "dnY" = ( /obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "purple" @@ -52288,6 +52299,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint) +"ggx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplecorner" + }, +/area/station/science/hallway) "ggB" = ( /obj/machinery/light/directional/south, /turf/simulated/floor/plasteel{ @@ -55391,6 +55410,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/station/science/hallway) "hhz" = ( @@ -56697,6 +56717,9 @@ /obj/structure/table, /obj/item/reagent_containers/food/drinks/mug/sci, /obj/machinery/light/directional/west, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -62545,7 +62568,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/station/science/hallway) @@ -69081,7 +69106,9 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -71426,6 +71453,15 @@ icon_state = "darkyellow" }, /area/station/command/office/ce) +"ngB" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/station/science/hallway) "ngO" = ( /obj/structure/cable{ d1 = 1; @@ -72438,17 +72474,17 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -74590,6 +74626,22 @@ icon_state = "dark" }, /area/station/science/robotics) +"onv" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/science/hallway) "onE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -75725,6 +75777,15 @@ icon_state = "dark" }, /area/station/science/server) +"oIJ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurplecorner" + }, +/area/station/science/hallway) "oJc" = ( /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ @@ -77968,7 +78029,10 @@ "pwk" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/power/apc/directional/east, -/obj/structure/cable, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -84642,6 +84706,21 @@ icon_state = "browncorner" }, /area/station/hallway/primary/central/sw) +"rXa" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/station/science/hallway) "rXb" = ( /obj/structure/closet/wardrobe/white, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -85691,6 +85770,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -96179,13 +96259,20 @@ }, /area/station/security/brig) "wet" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" + icon_state = "white" }, /area/station/science/hallway) "wew" = ( @@ -96880,6 +96967,15 @@ icon_state = "white" }, /area/station/maintenance/aft) +"wsm" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" + }, +/area/station/science/hallway) "wsA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -99378,7 +99474,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/science/hallway) @@ -100920,7 +101018,6 @@ }, /area/station/science/xenobiology) "xRV" = ( -/obj/machinery/hologram/holopad, /obj/structure/disposalpipe/sortjunction{ dir = 2; name = "Sci RD Office 1"; @@ -101991,6 +102088,9 @@ }, /area/station/command/office/ce) "yku" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "purple" @@ -149533,7 +149633,7 @@ ctI eGm bNp bNp -bNp +ngB bNp bNp hLu @@ -149542,7 +149642,7 @@ cKT nXo cbq cEs -cbq +wsm cyI ctI nvq @@ -149553,7 +149653,7 @@ cbq cEs cbq lvJ -cbq +wsm cLa gVu cNx @@ -149790,7 +149890,7 @@ sqn xRV dAD aeJ -sbp +wet sbp sbp gqu @@ -149799,7 +149899,7 @@ sbp giy vXN sbp -sbp +wet aeJ aeJ ndQ @@ -149810,7 +149910,7 @@ aeJ aeJ fKW xKi -pmv +onv kyf pmv nkt @@ -150046,8 +150146,8 @@ uMa awK ctI wci -spl cgq +ggx spl keJ ufq @@ -150056,7 +150156,7 @@ spl uMa lvJ spl -uMa +oIJ uMa ctI spl @@ -150067,7 +150167,7 @@ spl spl lvJ spl -spl +ggx hug spl spl @@ -150813,7 +150913,7 @@ cZT xcO oOz vzI -sbp +rXa nwR cdP cbj @@ -151071,7 +151171,7 @@ lmS bWv bTe caS -wet +spl pwk cqc kHG diff --git a/_maps/map_files220/delta/delta.dmm b/_maps/map_files220/delta/delta.dmm index 6a4f09f475b9..b1f90a4751e3 100644 --- a/_maps/map_files220/delta/delta.dmm +++ b/_maps/map_files220/delta/delta.dmm @@ -27289,14 +27289,27 @@ /area/station/legal/courtroom) "cem" = ( /obj/structure/table/wood, -/obj/machinery/computer/secure_data/laptop{ - dir = 8 - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = 6 + }, +/obj/item/pen/multi{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/ashtray/glass{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/item/clothing/mask/cigarette/cigar/cohiba, +/obj/item/lighter/zippo/engraved{ + pixel_x = -5 + }, /turf/simulated/floor/carpet/royalblack, /area/station/legal/magistrate) "cen" = ( @@ -27873,8 +27886,13 @@ /area/station/turret_protected/aisat) "cgL" = ( /obj/structure/table/wood/fancy/black, -/obj/machinery/computer/secure_data/laptop{ - dir = 4 +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen/multi{ + pixel_x = -4; + pixel_y = 5 }, /turf/simulated/floor/carpet/royalblack, /area/station/legal/courtroom) @@ -50903,18 +50921,6 @@ /area/station/engineering/controlroom) "eMB" = ( /obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_y = 14; - pixel_x = -5 - }, -/obj/item/paper_bin{ - pixel_y = 4; - pixel_x = 6 - }, -/obj/item/pen/multi{ - pixel_y = 6; - pixel_x = 6 - }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -50925,14 +50931,6 @@ d2 = 4; icon_state = "1-4" }, -/obj/item/ashtray/glass{ - pixel_x = -8; - pixel_y = -4 - }, -/obj/item/clothing/mask/cigarette/cigar/cohiba, -/obj/item/lighter/zippo/engraved{ - pixel_x = -5 - }, /obj/structure/cable{ d1 = 2; d2 = 8; @@ -50943,6 +50941,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/computer/secure_data/laptop, /turf/simulated/floor/carpet/royalblack, /area/station/legal/magistrate) "eMP" = ( @@ -57387,7 +57386,6 @@ "gQg" = ( /obj/structure/table/wood, /obj/item/gavelblock, -/obj/item/gavelhammer, /obj/item/stamp/magistrate{ pixel_x = 7; pixel_y = 8 @@ -57397,6 +57395,11 @@ d2 = 2; icon_state = "1-2" }, +/obj/item/flashlight/lamp/green{ + pixel_y = 14; + pixel_x = -5 + }, +/obj/item/gavelhammer, /turf/simulated/floor/carpet/royalblack, /area/station/legal/magistrate) "gQm" = ( @@ -58942,7 +58945,7 @@ "hqM" = ( /obj/machinery/door/airlock{ name = "Bedroom"; - id_tag = "PrivateRoom1" + id_tag = "PrivateRoom2" }, /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -64403,13 +64406,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/table/wood/fancy/black, -/obj/item/paper_bin, -/obj/item/pen/multi, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/computer/secure_data/laptop, /turf/simulated/floor/carpet/royalblack, /area/station/legal/courtroom) "iYU" = ( diff --git a/_maps/map_files220/generic/Lavaland.dmm b/_maps/map_files220/generic/Lavaland.dmm index c77e3c86fe1c..e89914967193 100644 --- a/_maps/map_files220/generic/Lavaland.dmm +++ b/_maps/map_files220/generic/Lavaland.dmm @@ -953,16 +953,9 @@ }, /area/mine/laborcamp) "cj" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/marker_beacon/dock_marker, -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plating/lava/smooth/mapping_lava, -/area/lavaland/surface/outdoors/outpost/catwalk) +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/mine/outpost/maintenance/south) "ck" = ( /obj/machinery/firealarm/directional/south, /obj/structure/cable{ @@ -1301,10 +1294,9 @@ /area/mine/outpost/mechbay) "cZ" = ( /obj/structure/fans/tiny, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Main Airlock" - }, +/obj/machinery/door/airlock/multi_tile/supply/glass, /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, +/obj/effect/mapping_helpers/airlock/autoname, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ @@ -2225,7 +2217,7 @@ }, /area/mine/outpost/hallway/east) "eG" = ( -/obj/effect/spawner/window, +/obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/mine/outpost/storage) "eH" = ( @@ -2359,7 +2351,7 @@ }, /area/mine/outpost/storage) "eT" = ( -/obj/machinery/door/airlock/command/glass{ +/obj/machinery/door/airlock/command/qm/glass{ name = "Quartermaster's Office" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -2374,10 +2366,10 @@ }, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/effect/mapping_helpers/airlock/polarized{ id = "mining qm" }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -5705,16 +5697,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/mine/outpost/cafeteria) -"tf" = ( -/obj/structure/lattice/catwalk/mining, -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/simulated/floor/plating/lava/smooth/mapping_lava, -/area/lavaland/surface/outdoors/outpost/catwalk) "ti" = ( /obj/structure/stone_tile/slab/burnt, /obj/structure/fluff/drake_statue/falling{ @@ -7363,10 +7345,6 @@ icon_state = "darkredfull" }, /area/mine/outpost/hallway/west) -"CP" = ( -/obj/effect/spawner/window, -/turf/simulated/floor/plating, -/area/mine/outpost/maintenance/south) "CV" = ( /obj/structure/stone_tile/block/cracked{ dir = 8 @@ -7693,7 +7671,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/simulated/floor/plating/lava/smooth/mapping_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/outpost/catwalk) "Fp" = ( /obj/structure/bed, @@ -7890,7 +7868,7 @@ /obj/structure/railing/corner, /obj/effect/turf_decal/stripes/corner, /obj/structure/lattice/catwalk/mining, -/turf/simulated/floor/plating/lava/smooth/mapping_lava, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/outpost/catwalk) "GS" = ( /obj/structure/stone_tile, @@ -10593,14 +10571,14 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/machinery/door/airlock/command/glass{ +/obj/machinery/door/airlock/command/qm/glass{ name = "Quartermaster's Office" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/effect/mapping_helpers/airlock/polarized{ id = "mining qm" }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/catwalk, /area/mine/outpost/quartermaster) "YV" = ( @@ -18995,10 +18973,10 @@ aj ri LM sx -cj -tf -tf -tf +pB +HX +HX +HX HX pB Fl @@ -26717,7 +26695,7 @@ bi st Vm er -oc +cj Hf dT aj @@ -26971,10 +26949,10 @@ gK ct Wa ue -CP +oc Yc jJ -oc +cj Hf aj aj @@ -27230,8 +27208,8 @@ BH Dq eM eM -oc -oc +cj +cj Hf aj aj diff --git a/code/__DEFINES/_versions.dm b/code/__DEFINES/_versions.dm index cb1ed09e84fd..5086d8f8ae42 100644 --- a/code/__DEFINES/_versions.dm +++ b/code/__DEFINES/_versions.dm @@ -1,2 +1,2 @@ /// Version of RUST-G that this codebase wants -#define RUST_G_VERSION "1.2.0-P2" +#define RUST_G_VERSION "3.0.0-P" diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 3c9b1d1ec2d8..4be8046aecdc 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -564,6 +564,8 @@ ///from base of obj/item/pre_attack(): (atom/target, mob/user, params) #define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" #define COMPONENT_NO_ATTACK (1<<0) +///from base of obj/item/pre_attack(): (atom/target, mob/user, params) +#define COMSIG_ITEM_BEING_ATTACKED "item_being_attacked" ///from base of obj/item/afterattack(): (atom/target, mob/user, params) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" ///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 79df39c740ac..e2b9380850c4 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -26,6 +26,7 @@ #define DIAG_TRACK_HUD "21"// Mech tracking beacon #define DIAG_AIRLOCK_HUD "22" // Airlock shock overlay #define GLAND_HUD "23"//Gland indicators for abductors +#define JANI_HUD "24" // Sign overlay over cleanable decals //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior @@ -40,20 +41,21 @@ #define DATA_HUD_DIAGNOSTIC_BASIC 5 #define DATA_HUD_DIAGNOSTIC_ADVANCED 6 #define DATA_HUD_HYDROPONIC 7 +#define DATA_HUD_JANITOR 8 //antag HUD defines -#define ANTAG_HUD_CULT 8 -#define ANTAG_HUD_REV 9 -#define ANTAG_HUD_OPS 10 -#define ANTAG_HUD_WIZ 11 -#define ANTAG_HUD_SHADOW 12 -#define ANTAG_HUD_TRAITOR 13 -#define ANTAG_HUD_NINJA 14 -#define ANTAG_HUD_CHANGELING 15 -#define ANTAG_HUD_VAMPIRE 16 -#define ANTAG_HUD_ABDUCTOR 17 -#define DATA_HUD_ABDUCTOR 18 -#define ANTAG_HUD_EVENTMISC 19 -#define ANTAG_HUD_BLOB 20 +#define ANTAG_HUD_CULT 9 +#define ANTAG_HUD_REV 10 +#define ANTAG_HUD_OPS 11 +#define ANTAG_HUD_WIZ 12 +#define ANTAG_HUD_SHADOW 13 +#define ANTAG_HUD_TRAITOR 14 +#define ANTAG_HUD_NINJA 15 +#define ANTAG_HUD_CHANGELING 16 +#define ANTAG_HUD_VAMPIRE 17 +#define ANTAG_HUD_ABDUCTOR 18 +#define DATA_HUD_ABDUCTOR 19 +#define ANTAG_HUD_EVENTMISC 20 +#define ANTAG_HUD_BLOB 21 // Notification action types #define NOTIFY_JUMP "jump" diff --git a/code/__DEFINES/mob_defines.dm b/code/__DEFINES/mob_defines.dm index efd9a4d2991d..497c229f08dd 100644 --- a/code/__DEFINES/mob_defines.dm +++ b/code/__DEFINES/mob_defines.dm @@ -199,6 +199,8 @@ #define INVISIBILITY_ABSTRACT 101 #define UNHEALING_EAR_DAMAGE 100 +#define DIRECTION_LOCK_SLOWDOWN 3 + //Human sub-species #define isabductor(A) (is_species(A, /datum/species/abductor)) #define isgolem(A) (is_species(A, /datum/species/golem)) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 81d48274aa9d..b7138d067920 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -18,7 +18,6 @@ #define ROLE_PAI "pAI" #define ROLE_CULTIST "cultist" #define ROLE_BLOB "blob" -#define ROLE_NINJA "space ninja" #define ROLE_MONKEY "monkey" #define ROLE_GANG "gangster" #define ROLE_ABDUCTOR "abductor" @@ -30,12 +29,10 @@ // Role tags for EVERYONE! #define ROLE_DEMON "demon" #define ROLE_SENTIENT "sentient animal" -#define ROLE_POSIBRAIN "positronic brain" #define ROLE_GUARDIAN "guardian" #define ROLE_MORPH "morph" #define ROLE_ERT "emergency response team" #define ROLE_NYMPH "Dionaea" -#define ROLE_GSPIDER "giant spider" #define ROLE_TSPIDER "terror spider" #define ROLE_DRONE "drone" #define ROLE_DEATHSQUAD "deathsquad" @@ -55,18 +52,15 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_BLOB, // Blob ROLE_CHANGELING = /datum/game_mode/changeling, // Changeling ROLE_CULTIST = /datum/game_mode/cult, // Cultist - ROLE_GSPIDER, // Giant spider ROLE_GUARDIAN, // Guardian ROLE_MORPH, // Morph ROLE_OPERATIVE = /datum/game_mode/nuclear, // Operative ROLE_PAI, // PAI - ROLE_POSIBRAIN, // Positronic brain ROLE_REVENANT, // Revenant ROLE_REV = /datum/game_mode/revolution, // Revolutionary ROLE_SENTIENT, // Sentient animal ROLE_DEMON, // Slaguther demon ROLE_ELITE, // Lavaland Elite - ROLE_NINJA, // Space ninja ROLE_TRADER, // Trader ROLE_TRAITOR = /datum/game_mode/traitor, // Traitor ROLE_VAMPIRE = /datum/game_mode/vampire, // Vampire diff --git a/code/__DEFINES/rolebans.dm b/code/__DEFINES/rolebans.dm index ec5dd31daa8a..c400ddb5c3ee 100644 --- a/code/__DEFINES/rolebans.dm +++ b/code/__DEFINES/rolebans.dm @@ -8,13 +8,11 @@ GLOBAL_LIST_INIT(antag_roles, list( ROLE_ALIEN, ROLE_CULTIST, ROLE_BLOB, - ROLE_NINJA, ROLE_VAMPIRE, ROLE_DEMON, ROLE_REVENANT, ROLE_GUARDIAN, ROLE_MORPH, - ROLE_GSPIDER, ROLE_TSPIDER, )) diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index 23b11a55347e..8943239ae6cc 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -134,6 +134,12 @@ #define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")(fname) #define rustg_dmi_create_png(path, width, height, data) RUSTG_CALL(RUST_G, "dmi_create_png")(path, width, height, data) #define rustg_dmi_resize_png(path, width, height, resizetype) RUSTG_CALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype) +/** + * input: must be a path, not an /icon; you have to do your own handling if it is one, as icon objects can't be directly passed to rustg. + * + * output: json_encode'd list. json_decode to get a flat list with icon states in the order they're in inside the .dmi + */ +#define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) // File Operations // @@ -250,6 +256,45 @@ /proc/rustg_redis_get_messages() return RUSTG_CALL(RUST_G, "redis_get_messages")() #define rustg_redis_publish(channel, message) RUSTG_CALL(RUST_G, "redis_publish")(channel, message) +/** + * Connects to a given redis server. + * + * Arguments: + * * addr - The address of the server, for example "redis://127.0.0.1/" + */ +#define rustg_redis_connect_rq(addr) RUSTG_CALL(RUST_G, "redis_connect_rq")(addr) +/** + * Disconnects from a previously connected redis server + */ +/proc/rustg_redis_disconnect_rq() return RUSTG_CALL(RUST_G, "redis_disconnect_rq")() +/** + * https://redis.io/commands/lpush/ + * + * Arguments + * * key (string) - The key to use + * * elements (list) - The elements to push, use a list even if there's only one element. + */ +#define rustg_redis_lpush(key, elements) RUSTG_CALL(RUST_G, "redis_lpush")(key, json_encode(elements)) +/** + * https://redis.io/commands/lrange/ + * + * Arguments + * * key (string) - The key to use + * * start (string) - The zero-based index to start retrieving at + * * stop (string) - The zero-based index to stop retrieving at (inclusive) + */ +#define rustg_redis_lrange(key, start, stop) RUSTG_CALL(RUST_G, "redis_lrange")(key, start, stop) +/** + * https://redis.io/commands/lpop/ + * + * Arguments + * * key (string) - The key to use + * * count (string|null) - The amount to pop off the list, pass null to omit (thus just 1) + * + * Note: `count` was added in Redis version 6.2.0 + */ +#define rustg_redis_lpop(key, count) RUSTG_CALL(RUST_G, "redis_lpop")(key, count) + // SQL Operations // #define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options) @@ -265,8 +310,9 @@ #define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id)) #define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id) +/// Returns the timestamp as a string /proc/rustg_unix_timestamp() - return text2num(RUSTG_CALL(RUST_G, "unix_timestamp")()) + return RUSTG_CALL(RUST_G, "unix_timestamp")() // Toast Operations // @@ -324,3 +370,5 @@ */ #define rustg_worley_generate(region_size, threshold, node_per_region_chance, size, node_min, node_max) \ RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max) + + diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 402ba2c7e3bc..e8bbb9c728da 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -54,3 +54,6 @@ /proc/cmp_login_processor_priority(datum/client_login_processor/A, datum/client_login_processor/B) return A.priority - B.priority + +/proc/cmp_changeling_power_category_asc(datum/changeling_power_category/a, datum/changeling_power_category/b) + return initial(a.priority) - initial(b.priority) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 985217d56b9a..ac905dd1216a 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -207,6 +207,8 @@ return 'icons/mob/screen_operative.dmi' if("White") return 'icons/mob/screen_white.dmi' + if("Midnight") + return 'icons/mob/screen_midnight.dmi' // SS220 ADDITION START if("Vaporwave") return 'modular_ss220/aesthetics/skin/icons/screen_vaporwave.dmi' diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 6ceb6382b3b6..43afefb691ac 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1171,55 +1171,6 @@ GLOBAL_LIST_INIT(can_embed_types, typecacheof(list( if(is_type_in_typecache(W, GLOB.can_embed_types)) return 1 -/proc/is_hot(obj/item/W as obj) - if(W.tool_behaviour == TOOL_WELDER) - if(W.tool_enabled) - return 2500 - else - return 0 - if(istype(W, /obj/item/lighter)) - var/obj/item/lighter/O = W - if(O.lit) - return 1500 - else - return 0 - if(istype(W, /obj/item/match)) - var/obj/item/match/O = W - if(O.lit) - return 1000 - else - return 0 - if(istype(W, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/O = W - if(O.lit) - return 1000 - else - return 0 - if(istype(W, /obj/item/candle)) - var/obj/item/candle/O = W - if(O.lit) - return 1000 - else - return 0 - if(istype(W, /obj/item/flashlight/flare)) - var/obj/item/flashlight/flare/O = W - if(O.on) - return 1000 - else - return 0 - if(istype(W, /obj/item/gun/energy/plasmacutter)) - return 3800 - if(istype(W, /obj/item/melee/energy)) - var/obj/item/melee/energy/O = W - if(O.active) - return 3500 - else - return 0 - if(istype(W, /obj/item/assembly/igniter)) - return 20000 - else - return 0 - //Whether or not the given item counts as sharp in terms of dealing damage /proc/is_sharp(obj/O) if(!O) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 5a0c22cbdbae..5cbbc279a538 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -252,11 +252,9 @@ return var/face_dir = get_cardinal_dir(src, A) if(!face_dir || forced_look == face_dir || A == src) - forced_look = null - to_chat(src, "Cancelled direction lock.") + clear_forced_look() return - forced_look = face_dir - to_chat(src, "You are now facing [dir2text(forced_look)]. To cancel this, shift-middleclick yourself.") + set_forced_look(A, FALSE) /* Middle shift-control-click @@ -266,13 +264,13 @@ return /mob/living/MiddleShiftControlClickOn(atom/A) + if(incapacitated()) + return var/face_uid = A.UID() if(forced_look == face_uid || A == src) - forced_look = null - to_chat(src, "Cancelled direction lock.") + clear_forced_look() return - forced_look = face_uid - to_chat(src, "You are now facing [A]. To cancel this, shift-middleclick yourself.") + set_forced_look(A, TRUE) // In case of use break glass /* diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index fa915e6e58fb..bca000eac812 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -1,8 +1,10 @@ /obj/screen/movable/action_button + desc = "CTRL-Shift click on this button to bind it to a hotkey." var/datum/action/linked_action var/actiontooltipstyle = "" screen_loc = null var/ordered = TRUE + var/datum/keybinding/mob/trigger_action_button/linked_keybind /obj/screen/movable/action_button/MouseDrop(over_object) if(locked && could_be_click_lag()) // in case something bad happend and game realised we dragged our ability instead of pressing it @@ -32,6 +34,9 @@ /obj/screen/movable/action_button/Click(location,control,params) var/list/modifiers = params2list(params) + if(modifiers["ctrl"] && modifiers["shift"]) + INVOKE_ASYNC(src, PROC_REF(set_to_keybind), usr) + return TRUE if(usr.next_click > world.time) return FALSE usr.changeNext_click(1) @@ -58,9 +63,32 @@ animate(src, transform = matrix(), time = 0.4 SECONDS, alpha = 255) return TRUE +/obj/screen/movable/action_button/proc/set_to_keybind(mob/user) + var/keybind_to_set_to = uppertext(input(user, "What keybind do you want to set this action button to?") as text) + if(keybind_to_set_to) + if(linked_keybind) + clean_up_keybinds(user) + var/datum/keybinding/mob/trigger_action_button/triggerer = new + triggerer.linked_action = linked_action + user.client.active_keybindings[keybind_to_set_to] += list(triggerer) + linked_keybind = triggerer + triggerer.binded_to = keybind_to_set_to + to_chat(user, "[src] has been binded to [keybind_to_set_to]!") + else if(linked_keybind) + clean_up_keybinds(user) + to_chat(user, "Your active keybinding on [src] has been cleared.") + /obj/screen/movable/action_button/AltClick(mob/user) return linked_action.AltTrigger() +/obj/screen/movable/action_button/proc/clean_up_keybinds(mob/owner) + if(linked_keybind) + owner.client.active_keybindings[linked_keybind.binded_to] -= (linked_keybind) + if(!length(owner.client.active_keybindings[linked_keybind.binded_to])) + owner.client.active_keybindings[linked_keybind.binded_to] = null + owner.client.active_keybindings -= linked_keybind.binded_to + QDEL_NULL(linked_keybind) + //Hide/Show Action Buttons ... Button /obj/screen/movable/action_button/hide_toggle name = "Hide Buttons" @@ -121,7 +149,14 @@ /obj/screen/movable/action_button/MouseEntered(location, control, params) . = ..() if(!QDELETED(src)) - openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle) + if(!linked_keybind) + openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle) + else + var/list/desc_information = list() + desc_information += desc + desc_information += "This action is currently bound to the [linked_keybind.binded_to] key." + desc_information = desc_information.Join(" ") + openToolTip(usr, src, params, title = name, content = desc_information, theme = actiontooltipstyle) /obj/screen/movable/action_button/MouseExited() closeToolTip(usr) diff --git a/code/_onclick/hud/ai_hud.dm b/code/_onclick/hud/ai_hud.dm index 63783a04467d..8579060078bf 100644 --- a/code/_onclick/hud/ai_hud.dm +++ b/code/_onclick/hud/ai_hud.dm @@ -16,7 +16,7 @@ /obj/screen/ai/camera_list/Click() var/mob/living/silicon/ai/AI = usr - var/camera = input(AI, "Choose which camera you want to view", "Cameras") as null|anything in AI.get_camera_list() + var/camera = tgui_input_list(AI, "Choose which camera you want to view", "Cameras", AI.get_camera_list()) AI.ai_camera_list(camera) /obj/screen/ai/camera_track @@ -26,7 +26,7 @@ /obj/screen/ai/camera_track/Click() if(isAI(usr)) var/mob/living/silicon/ai/AI = usr - var/target_name = input(AI) as null|anything in AI.trackable_mobs() + var/target_name = tgui_input_list(AI, "Choose a target you want to track", "Tracking", AI.trackable_mobs()) if(target_name) AI.ai_camera_track(target_name) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 9d94e5f5ca60..0b70b7f28f08 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -337,6 +337,16 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." var/mob/living/L = usr return L.resist() +/obj/screen/alert/direction_lock + name = "Direction Lock" + desc = "You are facing only one direction, slowing your movement down. Click here to stop the direction lock." + icon_state = "direction_lock" + +/obj/screen/alert/direction_lock/Click() + if(isliving(usr)) + var/mob/living/L = usr + return L.clear_forced_look() + //Constructs /obj/screen/alert/holy_fire name = "Holy Fire" diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 45b2e9fbdbec..451e4270fe78 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -124,8 +124,9 @@ GLOBAL_LIST_EMPTY(radial_menus) /datum/radial_menu/proc/update_screen_objects() var/list/page_choices = page_data[current_page] var/angle_per_element = round(zone / page_choices.len) - pixel_x_difference = ((world.icon_size * anchor.x) + anchor.step_x + anchor.pixel_x) - ((world.icon_size * current_user.mob.x) + current_user.mob.step_x + current_user.mob.pixel_x) - pixel_y_difference = ((world.icon_size * anchor.y) + anchor.step_y + anchor.pixel_y) - ((world.icon_size * current_user.mob.y) + current_user.mob.step_y + current_user.mob.pixel_y) + if(current_user.mob.z && anchor.z) + pixel_x_difference = ((world.icon_size * anchor.x) + anchor.step_x + anchor.pixel_x) - ((world.icon_size * current_user.mob.x) + current_user.mob.step_x + current_user.mob.pixel_x) + pixel_y_difference = ((world.icon_size * anchor.y) + anchor.step_y + anchor.pixel_y) - ((world.icon_size * current_user.mob.y) + current_user.mob.step_y + current_user.mob.pixel_y) for(var/i in 1 to elements.len) var/obj/screen/radial/E = elements[i] var/angle = WRAP(starting_angle + (i - 1) * angle_per_element, 0, 360) @@ -225,7 +226,8 @@ GLOBAL_LIST_EMPTY(radial_menus) var/last_location = user.loc while(current_user && !finished && !selected_choice) if(require_near) - if(!user.Adjacent(get_turf(anchor))) + var/turf/our_turf = get_turf(user) + if(!our_turf.Adjacent(get_turf(anchor))) return if(last_location != user.loc) update_screen_objects() @@ -298,7 +300,7 @@ GLOBAL_LIST_EMPTY(radial_menus) if(!istype(possible_atom)) stack_trace("radial_menu_helper was passed a non-atom (\"[possible_atom]\", [possible_atom.type]) as a choice") continue - var/mutable_appearance/atom_appearance = mutable_appearance(possible_atom.icon, possible_atom.icon_state, possible_atom.layer, filters = possible_atom.filters) + var/mutable_appearance/atom_appearance = mutable_appearance(possible_atom.icon, possible_atom.icon_state, possible_atom.layer) var/hover_outline_index = possible_atom.get_filter("hover_outline") if(!isnull(hover_outline_index)) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index ea78bd776953..abde11138fa9 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -26,12 +26,17 @@ /obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby! if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE - if(is_hot(src) && A.reagents && !ismob(A)) + + if(SEND_SIGNAL(A, COMSIG_ITEM_BEING_ATTACKED, src, user, params) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + + var/temperature = get_heat() + if(temperature && A.reagents && !ismob(A) && !istype(A, /obj/item/clothing/mask/cigarette)) var/reagent_temp = A.reagents.chem_temp - var/time = (reagent_temp / 10) / (is_hot(src) / 1000) + var/time = (reagent_temp / 10) / (temperature / 1000) if(do_after_once(user, time, TRUE, user, TRUE, attempt_cancel_message = "You stop heating up [A].")) to_chat(user, "You heat [A] with [src].") - A.reagents.temperature_reagents(is_hot(src)) + A.reagents.temperature_reagents(temperature) return TRUE //return FALSE to avoid calling attackby after this proc does stuff // No comment diff --git a/code/datums/action.dm b/code/datums/action.dm index 52e96b4d63bd..0bdd5c4a0a36 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -26,8 +26,10 @@ button.linked_action = src button.name = name button.actiontooltipstyle = buttontooltipstyle - if(desc) - button.desc = desc + var/list/our_description = list() + our_description += desc + our_description += button.desc + button.desc = our_description.Join(" ") /datum/action/Destroy() if(owner) @@ -55,6 +57,7 @@ return if(M.client) M.client.screen -= button + button.clean_up_keybinds(M) button.moved = FALSE //so the button appears in its normal position when given to another owner. button.locked = FALSE M.actions -= src @@ -69,9 +72,6 @@ Trigger() return FALSE -/datum/action/proc/Process() - return - /datum/action/proc/override_location() // Override to set coordinates manually return @@ -113,7 +113,6 @@ else button.icon = button_icon button.icon_state = background_icon_state - button.desc = desc ApplyIcon(button) var/obj/effect/proc_holder/spell/S = target @@ -565,7 +564,10 @@ var/obj/effect/proc_holder/spell/S = target S.action = src name = S.name - desc = S.desc + var/list/our_description = list() + our_description += S.desc + our_description += button.desc + button.desc = our_description.Join(" ") button_icon = S.action_icon button_icon_state = S.action_icon_state background_icon_state = S.action_background_icon_state diff --git a/code/datums/atom_hud.dm b/code/datums/atom_hud.dm index ff924e697d1e..e79861e5877e 100644 --- a/code/datums/atom_hud.dm +++ b/code/datums/atom_hud.dm @@ -10,6 +10,7 @@ GLOBAL_LIST_INIT(huds, list( DATA_HUD_DIAGNOSTIC_BASIC = new/datum/atom_hud/data/diagnostic/basic(), DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(), DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(), + DATA_HUD_JANITOR = new/datum/atom_hud/data/janitor(), ANTAG_HUD_CULT = new/datum/atom_hud/antag(), ANTAG_HUD_REV = new/datum/atom_hud/antag(), ANTAG_HUD_OPS = new/datum/atom_hud/antag(), diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 27ee68f0189d..4c4ea93241a2 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -259,20 +259,6 @@ /datum/component/proc/InheritComponent(datum/component/C, i_am_original) return - -/** - * Called on a component when a component of the same type was added to the same parent with [COMPONENT_DUPE_SELECTIVE] - * - * See [/datum/component/var/dupe_mode] - * - * `C`'s type will always be the same of the called component - * - * return TRUE if you are absorbing the component, otherwise FALSE if you are fine having it exist as a duplicate component - */ -/datum/component/proc/CheckDupeComponent(datum/component/C, ...) - return - - /** * Callback Just before this component is transferred * @@ -443,12 +429,6 @@ var/list/arguments = raw_args.Copy() arguments[1] = new_comp var/make_new_component = TRUE - for(var/i in GetComponents(new_type)) - var/datum/component/C = i - if(C.CheckDupeComponent(arglist(arguments))) - make_new_component = FALSE - QDEL_NULL(new_comp) - break if(!new_comp && make_new_component) new_comp = new nt(raw_args) else if(!new_comp) diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index c6aefce9bf84..e0a5c1bfcc73 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -129,7 +129,7 @@ procedure = S break else - procedure = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries + procedure = tgui_input_list(user, "Begin which procedure?", "Surgery", available_surgeries) if(!procedure) return diff --git a/code/datums/keybindings/mob_keybinds.dm b/code/datums/keybindings/mob_keybinds.dm index c870739da56e..c2f782dd024d 100644 --- a/code/datums/keybindings/mob_keybinds.dm +++ b/code/datums/keybindings/mob_keybinds.dm @@ -224,3 +224,13 @@ /datum/keybinding/mob/target/l_foot name = "Target Left Foot" body_part = BODY_ZONE_PRECISE_L_FOOT + +/datum/keybinding/mob/trigger_action_button // Don't add a name to this, shouldn't show up in the prefs menu + var/datum/action/linked_action + var/binded_to // these are expected to actually get deleted at some point, to prevent hard deletes we need to know where to remove them from the clients list + +/datum/keybinding/mob/trigger_action_button/down(client/C) + . = ..() + if(C.mob.next_click > world.time) + return + linked_action.Trigger() diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm index 3ddadc138d1b..038471ec3652 100644 --- a/code/datums/mutable_appearance.dm +++ b/code/datums/mutable_appearance.dm @@ -10,7 +10,7 @@ // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var // Helper similar to image() -/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, alpha = 255, appearance_flags = NONE, color, filters) +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, alpha = 255, appearance_flags = NONE, color) var/mutable_appearance/MA = new() MA.icon = icon MA.icon_state = icon_state @@ -20,7 +20,6 @@ MA.appearance_flags |= appearance_flags if(color) MA.color = color - MA.filters = filters return MA /mutable_appearance/clean/New() diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm index f1e5ffc05b51..1cad3b52899f 100644 --- a/code/datums/position_point_vector.dm +++ b/code/datums/position_point_vector.dm @@ -23,7 +23,7 @@ return ATAN2((b.y - a.y), (b.x - a.x)) /// For positions with map x/y/z and pixel x/y so you don't have to return lists. Could use addition/subtraction in the future I guess. -/datum/position +/datum/position var/x = 0 var/y = 0 var/z = 0 @@ -68,7 +68,7 @@ return new /datum/point_precise(src) /// A precise point on the map in absolute pixel locations based on world.icon_size. Pixels are FROM THE EDGE OF THE MAP! -/datum/point_precise +/datum/point_precise var/x = 0 var/y = 0 var/z = 0 @@ -83,7 +83,7 @@ return p /// First argument can also be a /datum/position or /atom. -/datum/point_precise/New(_x, _y, _z, _pixel_x = 0, _pixel_y = 0) +/datum/point_precise/New(_x, _y, _z, _pixel_x = 0, _pixel_y = 0) if(istype(_x, /datum/position)) var/datum/position/P = _x _x = P.x @@ -134,11 +134,11 @@ /datum/point_precise/vector /// Pixels per iteration - var/speed = 32 + var/speed = 32 var/iteration = 0 var/angle = 0 /// Calculated x movement amounts to prevent having to do trig every step. - var/mpx = 0 + var/mpx = 0 /// Calculated y movement amounts to prevent having to do trig every step. var/mpy = 0 var/starting_x = 0 //just like before, pixels from EDGE of map! This is set in initialize_location(). @@ -158,7 +158,7 @@ starting_z = z /// Same effect as initiliaze_location, but without setting the starting_x/y/z -/datum/point_precise/vector/proc/set_location(tile_x, tile_y, tile_z, p_x = 0, p_y = 0) +/datum/point_precise/vector/proc/set_location(tile_x, tile_y, tile_z, p_x = 0, p_y = 0) if(!isnull(tile_x)) x = ((tile_x - 1) * world.icon_size) + world.icon_size * 0.5 + p_x + 1 if(!isnull(tile_y)) @@ -214,9 +214,6 @@ v.increment(multiplier * amount) return v -/datum/point_precise/vector/proc/on_z_change() - return - /datum/point_precise/vector/processed //pixel_speed is per decisecond. var/last_process = 0 var/last_move = 0 diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 3f5c82772e3f..a40432406b36 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) to_chat(user, "[user.ranged_ability.name] has been disabled.") user.ranged_ability.remove_ranged_ability(user) return TRUE //TRUE for failed, FALSE for passed. - user.changeNext_click(CLICK_CD_CLICK_ABILITY) user.face_atom(A) return FALSE @@ -114,7 +113,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) var/smoke_type = SMOKE_NONE var/smoke_amt = 0 - var/critfailchance = 0 var/centcom_cancast = TRUE //Whether or not the spell should be allowed on the admin zlevel /// Whether or not the spell functions in a holy place var/holy_area_cancast = TRUE @@ -160,6 +158,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) if(!can_cast(user, charge_check, TRUE)) return FALSE + user.changeNext_click(CLICK_CD_CLICK_ABILITY) if(ishuman(user)) var/mob/living/carbon/human/caster = user if(caster.remoteview_target) @@ -360,10 +359,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) if(sound) playMagSound() - if(prob(critfailchance)) - critfail(targets) - else - cast(targets, user = user) + cast(targets, user = user) after_cast(targets, user) if(action) action.UpdateButtonIcon() @@ -434,9 +430,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) /obj/effect/proc_holder/spell/proc/cast(list/targets, mob/user = usr) return -/obj/effect/proc_holder/spell/proc/critfail(list/targets) - return - /obj/effect/proc_holder/spell/proc/revert_cast(mob/user = usr) //resets recharge or readds a charge cooldown_handler.revert_cast() custom_handler?.revert_cast(user, src) diff --git a/code/datums/spell_cooldown/spell_cooldown.dm b/code/datums/spell_cooldown/spell_cooldown.dm index aa08e9491e48..3d320bdca8a7 100644 --- a/code/datums/spell_cooldown/spell_cooldown.dm +++ b/code/datums/spell_cooldown/spell_cooldown.dm @@ -29,16 +29,12 @@ /datum/spell_cooldown/proc/should_end_cooldown() return !is_on_cooldown() -/datum/spell_cooldown/proc/end_recharge() - return - /datum/spell_cooldown/process() if(!spell_parent.action) stack_trace("[spell_parent.type] ended up with a null action") return PROCESS_KILL spell_parent.action.UpdateButtonIcon() if(should_end_cooldown()) - end_recharge() return PROCESS_KILL diff --git a/code/datums/spell_targeting/matter_eater_targeting.dm b/code/datums/spell_targeting/matter_eater_targeting.dm index 9a672576d8f1..a9f33c676768 100644 --- a/code/datums/spell_targeting/matter_eater_targeting.dm +++ b/code/datums/spell_targeting/matter_eater_targeting.dm @@ -40,7 +40,7 @@ continue possible_targets += O - var/atom/movable/target = input("Choose the target of your hunger.", "Targeting") as null|anything in possible_targets + var/atom/movable/target = tgui_input_list(user, "Choose the target of your hunger", "Targeting", possible_targets) if(QDELETED(target)) return diff --git a/code/datums/spell_targeting/remoteview_targeting.dm b/code/datums/spell_targeting/remoteview_targeting.dm index f089ba285858..fce68b121810 100644 --- a/code/datums/spell_targeting/remoteview_targeting.dm +++ b/code/datums/spell_targeting/remoteview_targeting.dm @@ -16,7 +16,7 @@ if(!length(remoteviewers)) return - var/mob/target = input("Choose the target to spy on.", "Targeting") as null|anything in remoteviewers + var/mob/target = tgui_input_list(user, "Choose the target to spy on", "Targeting", remoteviewers) if(QDELETED(target)) return diff --git a/code/datums/spell_targeting/targeted.dm b/code/datums/spell_targeting/targeted.dm index 5ff208cf6d4b..2f6871324176 100644 --- a/code/datums/spell_targeting/targeted.dm +++ b/code/datums/spell_targeting/targeted.dm @@ -25,7 +25,7 @@ else if(max_targets == 1) // Only one target var/atom/target if(!random_target) - target = input("Choose the target for the spell.", "Targeting") as anything in possible_targets + target = tgui_input_list(user, "Choose the target for the spell", "Targeting", possible_targets) //Adds a safety check post-input to make sure those targets are actually in range. if(target in view_or_range(range, spell_location, selection_type)) targets += target diff --git a/code/datums/spell_targeting/telepathic.dm b/code/datums/spell_targeting/telepathic.dm index 618f9da80ca7..c6c739fe0f1a 100644 --- a/code/datums/spell_targeting/telepathic.dm +++ b/code/datums/spell_targeting/telepathic.dm @@ -28,7 +28,7 @@ if(!length(valid_targets)) return - var/target_name = input("Choose the target to listen to.", "Targeting") as null|anything in valid_targets + var/target_name = tgui_input_list(user, "Choose the target to listen to", "Targeting", valid_targets) var/mob/living/target = valid_targets[target_name] if(QDELETED(target)) diff --git a/code/datums/spells/mimic.dm b/code/datums/spells/mimic.dm index 6fe1fbfb1613..4d807f4baaff 100644 --- a/code/datums/spells/mimic.dm +++ b/code/datums/spells/mimic.dm @@ -94,7 +94,7 @@ forms += "Original Form" forms += available_forms.Copy() - var/what = input(user, "Which form do you want to become?", "Mimic") as null|anything in forms + var/what = tgui_input_list(user, "Which form do you want to become?", "Mimic", forms) if(!what) to_chat(user, "You decide against changing forms.") revert_cast(user) diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index 289e0e2c5c34..09d1439e951e 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -27,7 +27,7 @@ for(var/path in possible_shapes) var/mob/living/simple_animal/A = path animal_list[initial(A.name)] = path - shapeshift_type = input(M, "Choose Your Animal Form!", "It's Morphing Time!", null) as anything in animal_list + shapeshift_type = tgui_input_list(M, "Choose Your Animal Form!", "It's Morphing Time!", animal_list) if(!shapeshift_type) //If you aren't gonna decide I am! shapeshift_type = pick(animal_list) shapeshift_type = animal_list[shapeshift_type] diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index 82c9a5ad20c0..244ee44832db 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -174,7 +174,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "FK-69 Pistol Kit" reference = "SPI" desc = "A box containing a small, easily concealable handgun and two eight-round magazines chambered in 10mm auto rounds. Compatible with suppressors." - item = /obj/item/storage/box/syndie_kit/stechkin + item = /obj/item/gun/projectile/automatic/pistol cost = 20 /datum/uplink_item/dangerous/revolver @@ -258,7 +258,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) desc = "An additional 8-round 10mm magazine for use in the syndicate pistol, loaded with incendiary rounds which ignite the target." reference = "10MMFIRE" item = /obj/item/ammo_box/magazine/m10mm/fire - cost = 6 + cost = 9 surplus = 0 // Miserable /datum/uplink_item/ammo/pistolhp @@ -266,7 +266,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) desc = "An additional 8-round 10mm magazine for use in the syndicate pistol, loaded with rounds which are more damaging but ineffective against armour." reference = "10MMHP" item = /obj/item/ammo_box/magazine/m10mm/hp - cost = 6 + cost = 7 surplus = 0 // Miserable /datum/uplink_item/ammo/revolver diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index bcb22243315e..fde738f81a4e 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -558,9 +558,9 @@ /datum/uplink_item/bundles_TC/badass name = "Syndicate Bundle" - desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 100 telecrystals, but you do not know which specialisation you will receive." + desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 100 telecrystals. You can select one out of three specialisations after purchase." reference = "SYB" - item = /obj/item/storage/box/syndie_kit/bundle + item = /obj/item/radio/beacon/syndicate/bundle cost = 100 excludefrom = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) @@ -574,13 +574,6 @@ var/crate_value = 250 uses_special_spawn = TRUE -/datum/uplink_item/bundles_TC/surplus_crate/super - name = "Syndicate Super Surplus Crate" - desc = "A crate containing 625 telecrystals worth of random syndicate leftovers." - reference = "SYSS" - cost = 200 - crate_value = 625 - /datum/uplink_item/bundles_TC/surplus_crate/spawn_item(turf/loc, obj/item/uplink/U) if(..() != UPLINK_SPECIAL_SPAWNING) return FALSE diff --git a/code/game/area/areas/ruins/space_areas.dm b/code/game/area/areas/ruins/space_areas.dm index 7517a4152a5b..cc7f7eb2a99a 100644 --- a/code/game/area/areas/ruins/space_areas.dm +++ b/code/game/area/areas/ruins/space_areas.dm @@ -171,3 +171,7 @@ /area/ruin/space/abandoned_engi_sat name = "Abandoned NT Engineering Satellite" apc_starts_off = TRUE + +/area/ruin/space/moonbase19 + name = "Moon Base 19" + apc_starts_off = TRUE diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 46241823383d..0b7280021cec 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -169,6 +169,7 @@ glide_for(movetime) if(!(direct & (direct - 1))) //Cardinal move . = ..(newloc, direct) // don't pass up movetime + setDir(direct) else //Diagonal move, split it into cardinal moves moving_diagonally = FIRST_DIAG_STEP var/first_step_dir @@ -217,6 +218,7 @@ if(moving_diagonally == SECOND_DIAG_STEP) if(!.) setDir(first_step_dir) + Moved(oldloc, first_step_dir) else if(!inertia_moving) inertia_next_move = world.time + inertia_move_delay newtonian_move(direct) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 7adac734b9fb..6b019a4a91f3 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -57,6 +57,9 @@ /datum/atom_hud/data/hydroponic hud_icons = list (PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD) +/datum/atom_hud/data/janitor + hud_icons = list(JANI_HUD) + /* MED/SEC/DIAG HUD HOOKS */ /* @@ -492,6 +495,15 @@ else holder.icon_state = "" +/*~~~~~~~~~~~~~~ + JANI HUD +~~~~~~~~~~~~~~~*/ +/obj/effect/decal/cleanable/proc/jani_hud_set_sign() + var/image/holder = hud_list[JANI_HUD] + holder.icon_state = "hudjani" + holder.alpha = 130 + holder.plane = ABOVE_LIGHTING_PLANE + /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I'll just put this somewhere near the end... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm index f9e0b667e653..41a81a2ae2c2 100644 --- a/code/game/gamemodes/cult/blood_magic.dm +++ b/code/game/gamemodes/cult/blood_magic.dm @@ -51,7 +51,7 @@ possible_spells[cult_name] = J if(length(spells)) possible_spells += "(REMOVE SPELL)" - entered_spell_name = input(owner, "Pick a blood spell to prepare...", "Spell Choices") as null|anything in possible_spells + entered_spell_name = tgui_input_list(owner, "Pick a blood spell to prepare...", "Spell Choices", possible_spells) if(entered_spell_name == "(REMOVE SPELL)") remove_spell() return @@ -80,8 +80,8 @@ SSblackbox.record_feedback("tally", "cult_spells_prepared", 1, "[new_spell.name]") channeling = FALSE -/datum/action/innate/cult/blood_magic/proc/remove_spell(message = "Pick a spell to remove.") - var/nullify_spell = input(owner, message, "Current Spells") as null|anything in spells +/datum/action/innate/cult/blood_magic/proc/remove_spell() + var/nullify_spell = tgui_input_list(owner, "Pick a spell to remove", "Current Spells", spells) if(nullify_spell) qdel(nullify_spell) @@ -518,7 +518,7 @@ log_game("Teleport spell failed - user in away mission") return - var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked + var/input_rune_key = tgui_input_list(user, "Choose a rune to teleport to", "Rune to Teleport to", potential_runes) //we know what key they picked var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? if(QDELETED(src) || !user || user.l_hand != src && user.r_hand != src || user.incapacitated() || !actual_selected_rune) return diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 084ff4419573..ee9c00bfb532 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -782,7 +782,7 @@ to_chat(user, "You are not in the right dimension!") return - var/input_rune_key = input(user, "Choose a rune to make a portal to.", "Rune to make a portal to") as null|anything in potential_runes //we know what key they picked + var/input_rune_key = tgui_input_list(user, "Choose a rune to make a portal to", "Rune to make a portal to", potential_runes) //we know what key they picked var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? if(QDELETED(R) || QDELETED(actual_selected_rune) || !Adjacent(user) || user.incapacitated()) return diff --git a/code/game/gamemodes/cult/cult_mode.dm b/code/game/gamemodes/cult/cult_mode.dm index 86e8d4a82ff2..f2abcc0acedc 100644 --- a/code/game/gamemodes/cult/cult_mode.dm +++ b/code/game/gamemodes/cult/cult_mode.dm @@ -164,6 +164,7 @@ check_cult_size() cult_objs.study(cult_mind.current) to_chat(cult_mind.current, "For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Cultist)") + RegisterSignal(cult_mind.current, COMSIG_MOB_STATCHANGE, PROC_REF(cultist_stat_change)) return TRUE /datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = TRUE, remove_gear = FALSE, mob/target_mob) @@ -203,6 +204,7 @@ if(show_message) cultist.visible_message("[cultist] looks like [cultist.p_they()] just reverted to [cultist.p_their()] old faith!", "An unfamiliar white light flashes through your mind, cleansing the taint of [SSticker.cultdat ? SSticker.cultdat.entity_title1 : "Nar'Sie"] and the memories of your time as their servant with it.") + UnregisterSignal(cult_mind.current, COMSIG_MOB_STATCHANGE) /datum/game_mode/proc/add_cult_immunity(mob/living/target) ADD_TRAIT(target, TRAIT_CULT_IMMUNITY, CULT_TRAIT) @@ -246,23 +248,32 @@ /datum/game_mode/proc/get_cultists(separate = FALSE) var/cultists = 0 var/constructs = 0 - for(var/I in cult) - var/datum/mind/M = I + for(var/datum/mind/M as anything in cult) + if(QDELETED(M) || M.current?.stat == DEAD) + continue if(ishuman(M.current) && !M.current.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) cultists++ else if(isconstruct(M.current)) constructs++ if(separate) return list(cultists, constructs) - else - return cultists + constructs + return cultists + constructs + +/datum/game_mode/proc/cultist_stat_change(mob/target_cultist, new_stat, old_stat) + SIGNAL_HANDLER // COMSIG_MOB_STATCHANGE from cultists + if(new_stat == old_stat) // huh, how? whatever, we ignore it + return + if(new_stat != DEAD && old_stat != DEAD) + return // switching between alive and unconcious + // switching between dead and alive/unconcious + check_cult_size() /datum/game_mode/proc/check_cult_size() var/cult_players = get_cultists() if(cult_ascendant) // The cult only falls if below 1/2 of the rising, usually pretty low. e.g. 5% on highpop, 10% on lowpop - if(cult_players < rise_number / 2) + if(cult_players < (rise_number / 2)) cult_fall() return diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index cea7205c4125..f9690f5c683a 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -116,7 +116,7 @@ if(!length(possible_runes)) return - var/chosen_rune = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in possible_runes + var/chosen_rune = tgui_input_list(user, "Choose a rite to scribe.", "Sigils of Power", possible_runes) if(!chosen_rune) return var/obj/effect/rune/rune = possible_runes[chosen_rune] diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 5b7f2d6bd8f9..961fe5e48568 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -489,7 +489,7 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return - var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked + var/input_rune_key = tgui_input_list(user, "Choose a rune to teleport to.", "Rune to Teleport to", potential_runes) //we know what key they picked var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? if(QDELETED(src) || QDELETED(actual_selected_rune) ||!Adjacent(user) || user.incapacitated()) fail_invoke() @@ -631,7 +631,7 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return if(length(potential_revive_mobs) > 1) - mob_to_revive = input(user, "Choose a cultist to revive.", "Cultist to Revive") as null|anything in potential_revive_mobs + mob_to_revive = tgui_input_list(user, "Choose a cultist to revive.", "Cultist to Revive", potential_revive_mobs) else // If there's only one, no need for a menu mob_to_revive = potential_revive_mobs[1] if(!validness_checks(mob_to_revive, user)) @@ -753,7 +753,7 @@ structure_check() searches for nearby cultist structures required for the invoca for(var/datum/mind/M in SSticker.mode.cult) if(!(M.current in invokers) && M.current && M.current.stat != DEAD) cultists[M.current.real_name] = M.current - var/input = input(user, "Who do you wish to call to [src]?", "Acolytes") as null|anything in cultists + var/input = tgui_input_list(user, "Who do you wish to call to [src]?", "Acolytes", cultists) var/mob/living/cultist_to_summon = cultists[input] if(QDELETED(src) || !Adjacent(user) || user.incapacitated()) return diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 78d0d4c264b3..2d659b9818cb 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -106,9 +106,6 @@ return 1 return 0 -/datum/game_mode/proc/cleanup() //This is called when the round has ended but not the game, if any cleanup would be necessary in that case. - return - /datum/game_mode/proc/declare_completion() var/clients = 0 var/surviving_humans = 0 diff --git a/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm b/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm index 73f0e1de4989..e0a32fe54689 100644 --- a/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm +++ b/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm @@ -185,7 +185,7 @@ to_chat(usr, "There are no valid targets!") return - var/mob/living/target = input("Choose the target to talk to.", "Targeting") as null|mob in validtargets + var/mob/living/target = tgui_input_list(user, "Choose the target to talk to", "Targeting", validtargets) return target /datum/action/innate/demon/whisper/Activate() diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm index b2bcc1e5b37f..f5a0087f2342 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm @@ -656,7 +656,7 @@ /mob/living/simple_animal/demon/pulse_demon/proc/is_under_tile() var/turf/T = get_turf(src) - return T.transparent_floor || T.intact || HAS_TRAIT(T, TRAIT_TURF_COVERED) + return T.intact || HAS_TRAIT(T, TRAIT_TURF_COVERED) // cable (and hijacked APC) view helper /mob/living/simple_animal/demon/pulse_demon/proc/update_cableview() diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 07b0cc95ee59..5e478757e797 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -220,7 +220,7 @@ var/name = initial(T.name) item_names += name item_paths[name] = initial(T.typepath) - var/targetitem = input("Select item to search for.", "Item Mode Select","") as null|anything in item_names + var/targetitem = tgui_input_list(user, "Select item to search for", "Select Item", item_names) if(!targetitem) return @@ -492,7 +492,7 @@ user.visible_message("[user]'s pinpointer fails to detect a signal.", "Your pinpointer fails to detect a signal.") return - var/A = input(user, "Person to track", "Pinpoint") in names + var/A = tgui_input_list(user, "Person to track", "Pinpoint", names) if(!src || !user || (user.get_active_hand() != src) || user.incapacitated() || !A) return diff --git a/code/game/gamemodes/scoreboard.dm b/code/game/gamemodes/scoreboard.dm index e6627832b4aa..71106e0ee581 100644 --- a/code/game/gamemodes/scoreboard.dm +++ b/code/game/gamemodes/scoreboard.dm @@ -149,14 +149,14 @@ GLOBAL_VAR(scoreboard) // Variable to save the scoreboard string once it's been richest_cash = cash_score richest_name = H.real_name richest_job = H.job - richest_key = H.key + richest_key = (H.client?.prefs.toggles2 & PREFTOGGLE_2_ANON) ? "Anon" : H.key var/damage_score = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss() if(damage_score > damaged_health) damaged_health = damage_score damaged_name = H.real_name damaged_job = H.job - damaged_key = H.key + damaged_key = (H.client?.prefs.toggles2 & PREFTOGGLE_2_ANON) ? "Anon" : H.key /// A function to determine the cash plus the account balance of the wealthiest escapee /datum/scoreboard/proc/get_score_person_worth(mob/living/carbon/human/H) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 0e2c2cb5bbc8..74238dbda2b2 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -867,7 +867,7 @@ GLOBAL_LIST_EMPTY(multiverse) "Welder Fuel" = "a dark, pungent, oily substance", "Vomit" = "warm chunky vomit") - var/choice = show_radial_menu(user, src, options) + var/choice = show_radial_menu(user, src, options, require_near = TRUE) if(!choice || user.stat || !in_range(user, src) || QDELETED(src)) return to_chat(user, "The [name] fills to brimming with [options_to_descriptions[choice]].") diff --git a/code/game/jobs/job/science_jobs.dm b/code/game/jobs/job/science_jobs.dm index e8c6fad99846..ae8330fce9d5 100644 --- a/code/game/jobs/job/science_jobs.dm +++ b/code/game/jobs/job/science_jobs.dm @@ -122,3 +122,7 @@ l_ear = /obj/item/radio/headset/headset_sci id = /obj/item/card/id/roboticist pda = /obj/item/pda/roboticist + + backpack = /obj/item/storage/backpack/robotics + satchel = /obj/item/storage/backpack/satchel_robo + dufflebag = /obj/item/storage/backpack/duffel/robotics diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 42c909098c38..ae628528e58b 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -3,7 +3,6 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( // NT ROLES ROLE_PAI = 0, - ROLE_POSIBRAIN = 5, // Same as cyborg job. ROLE_SENTIENT = 5, ROLE_ERT = 40, // High, because they're team-based, and we want ERT to be robust ROLE_DEATHSQUAD = 50, // Higher, see ERT and also they're OP as heck @@ -17,14 +16,12 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( ROLE_VAMPIRE = 5, ROLE_BLOB = 20, ROLE_REVENANT = 3, - ROLE_NINJA = 20, ROLE_MORPH = 5, ROLE_DEMON = 5, ROLE_ELITE = 5, // DUO ANTAGS ROLE_GUARDIAN = 20, - ROLE_GSPIDER = 5, // TEAM ANTAGS // Higher numbers here, because they require more experience to be played correctly diff --git a/code/game/machinery/computer/atmos_controllers.dm b/code/game/machinery/computer/atmos_controllers.dm index 6ff44df86905..849ae9facf27 100644 --- a/code/game/machinery/computer/atmos_controllers.dm +++ b/code/game/machinery/computer/atmos_controllers.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_EMPTY(gas_sensors) "-SAVE TO BUFFER-" = "multitool" ) - var/temp_answer = input(user, "Select an option to adjust", "Options!", null) as null|anything in options + var/temp_answer = tgui_input_list(user, "Select an option to adjust", "Options!", options) if(!Adjacent(user)) break @@ -191,7 +191,7 @@ GLOBAL_LIST_EMPTY(gas_sensors) to_chat(user, "Successfully added a new sensor/meter with name [new_name]") if("Remove") - var/to_remove = input(user, "Select a sensor/meter to remove", "Sensor/Meter Removal") as null|anything in sensor_name_uid_map + var/to_remove = tgui_input_list(user, "Select a sensor/meter to remove", "Sensor/Meter Removal", sensor_name_uid_map) if(!to_remove) return diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index baf96d4111c8..f799538d9c0d 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -72,7 +72,7 @@ . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - var/choice = input(user, "Circuit Setting", "What would you change the board setting to?") as null|anything in monitor_names_paths + var/choice = tgui_input_list(user, "Circuit Setting", "What would you change the board setting to?", monitor_names_paths) if(!choice) return board_name = choice @@ -527,7 +527,7 @@ if(istype(I, /obj/item/card/id) || istype(I, /obj/item/pda)) if(allowed(user)) user.visible_message("[user] waves [user.p_their()] ID past [src]'s access protocol scanner.", "You swipe your ID past [src]'s access protocol scanner.") - var/console_choice = input(user, "What do you want to configure the access to?", "Access Modification", "R&D Core") as null|anything in access_types + var/console_choice = tgui_input_list(user, "What do you want to configure the access to?", "Access Modification", access_types) if(!console_choice) return switch(console_choice) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index abf956d90336..792ce397af4e 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -202,7 +202,7 @@ playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0) - var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T + var/camera = tgui_input_list(target, "Choose which camera you want to view", "Cameras", T) var/obj/machinery/camera/final = T[camera] playsound(origin, "terminal_type", 25, 0) if(final) diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index a55fed5f1e40..2bae6d59a0ca 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -185,7 +185,7 @@ . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - var/direction = input(user, "Which direction?", "Select direction!") as null|anything in list("North", "East", "South", "West", "Centre") + var/direction = tgui_input_list(user, "Which direction?", "Select direction", list("North", "East", "South", "West", "Centre")) if(!direction || !Adjacent(user)) return pixel_x = 0 diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index d35d03c84cda..558c13a5bef1 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -289,7 +289,7 @@ to destroy them and players will be able to make replacements. . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - var/choice = input(user, "Choose a new brand", "Select an Item") as null|anything in station_vendors + var/choice = tgui_input_list(user, "Choose a new brand", "Select an Item", station_vendors) if(!choice) return set_type(choice) @@ -569,7 +569,7 @@ to destroy them and players will be able to make replacements. . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - var/choice = input(user, "Circuit Setting", "What would you change the board setting to?") as null|anything in fridge_names_paths + var/choice = tgui_input_list(user, "Circuit Setting", "What would you change the board setting to?", fridge_names_paths) if(!choice) return set_type(user, choice) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 3b3aa9c76166..6c0a6bd9dff9 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -201,12 +201,12 @@ DA.update_name() qdel(src) -/obj/machinery/door/airlock/plasma/attackby(obj/C, mob/user, params) - if(is_hot(C) > 300) - message_admins("Plasma airlock ignited by [key_name_admin(user)] in ([x],[y],[z] - JMP)") +/obj/machinery/door/airlock/plasma/attackby(obj/item/C, mob/user, params) + if(C.get_heat() > 300) + message_admins("Plasma airlock ignited by [key_name_admin(user)] in ([x],[y],[z] - JMP)") log_game("Plasma airlock ignited by [key_name(user)] in ([x],[y],[z])") investigate_log("was ignited by [key_name(user)]","atmos") - ignite(is_hot(C)) + ignite(C.get_heat()) else return ..() diff --git a/code/game/machinery/tcomms/tcomms_core.dm b/code/game/machinery/tcomms/tcomms_core.dm index a072f9dd55c7..a4b85d853382 100644 --- a/code/game/machinery/tcomms/tcomms_core.dm +++ b/code/game/machinery/tcomms/tcomms_core.dm @@ -259,7 +259,7 @@ // Job Format if("nttc_job_indicator_type") - var/card_style = input(usr, "Pick a job card format.", "Job Card Format") as null|anything in nttc.job_card_styles + var/card_style = tgui_input_list(usr, "Pick a job card format", "Job Card Format", nttc.job_card_styles) if(!card_style) return nttc.job_indicator_type = card_style @@ -268,7 +268,7 @@ // Language Settings if("nttc_setting_language") - var/new_language = input(usr, "Pick a language to convert messages to.", "Language Conversion") as null|anything in nttc.valid_languages + var/new_language = tgui_input_list(usr, "Pick a language to convert messages to", "Language Conversion", nttc.valid_languages) if(!new_language) return if(new_language == "--DISABLE--") diff --git a/code/game/machinery/vendors/wardrobe_vendors.dm b/code/game/machinery/vendors/wardrobe_vendors.dm index f0f1ed336700..387c696929ef 100644 --- a/code/game/machinery/vendors/wardrobe_vendors.dm +++ b/code/game/machinery/vendors/wardrobe_vendors.dm @@ -391,7 +391,10 @@ /obj/item/clothing/gloves/fingerless = 3, /obj/item/clothing/shoes/laceup = 3, /obj/item/clothing/shoes/white = 3, - /obj/item/clothing/shoes/black = 3) + /obj/item/clothing/shoes/black = 3, + /obj/item/storage/backpack/robotics = 2, + /obj/item/storage/backpack/satchel_robo = 2, + /obj/item/storage/backpack/duffel/robotics = 2) contraband = list(/obj/item/toy/figure/crew/roboticist = 1, /obj/item/toy/figure/crew/borg = 1) @@ -406,7 +409,10 @@ /obj/item/clothing/gloves/fingerless = 20, /obj/item/clothing/shoes/laceup = 30, /obj/item/clothing/shoes/white = 20, - /obj/item/clothing/shoes/black = 20) + /obj/item/clothing/shoes/black = 20, + /obj/item/storage/backpack/robotics = 50, + /obj/item/storage/backpack/satchel_robo = 50, + /obj/item/storage/backpack/duffel/robotics = 50) refill_canister = /obj/item/vending_refill/robodrobe diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 981a4f3dedfa..f52dcec444c3 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1560,11 +1560,11 @@ for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) if(!MT.selectable || selected == MT) continue - var/mutable_appearance/clean/MA = mutable_appearance(MT.icon, MT.icon_state, MT.layer, filters = MT.filters) + var/mutable_appearance/clean/MA = mutable_appearance(MT.icon, MT.icon_state, MT.layer) choices[MT.name] = MA choices_to_refs[MT.name] = MT - var/choice = show_radial_menu(L, src, choices, radius = 48, custom_check = CALLBACK(src, PROC_REF(check_menu), L)) + var/choice = show_radial_menu(L, L, choices, radius = 48, custom_check = CALLBACK(src, PROC_REF(check_menu), L)) if(!check_menu(L) || choice == "Cancel / No Change") return diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index b3457fc2149a..8e70132e6780 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -11,6 +11,14 @@ plane = FLOOR_PLANE ///for blood n vomit in zero G --- IN GRAVITY=TRUE; NO GRAVITY=FALSE var/gravity_check = TRUE + hud_possible = list(JANI_HUD) + +/obj/effect/decal/cleanable/Initialize(mapload) + . = ..() + var/datum/atom_hud/data/janitor/jani_hud = GLOB.huds[DATA_HUD_JANITOR] + prepare_huds() + jani_hud.add_to_hud(src) + jani_hud_set_sign() /obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal if(mergeable_decal) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 61f4e4b8656c..d6ba038494ce 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -133,7 +133,6 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons /// Holder var for the item outline filter, null when no outline filter on the item. var/outline_filter - /obj/item/New() ..() @@ -646,7 +645,7 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons if(w_class < WEIGHT_CLASS_BULKY) itempush = FALSE //too light to push anything if(isliving(hit_atom)) //Living mobs handle hit sounds differently. - if(is_hot(src)) + if(get_heat()) var/mob/living/L = hit_atom L.IgniteMob() var/volume = get_volume_by_throwforce_and_or_w_class() @@ -902,3 +901,6 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.regenerate_icons() + +/obj/item/proc/get_heat() + return diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 3dde2eb17be5..00ae37bb2b2a 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -42,7 +42,7 @@ return TRUE /obj/item/candle/attackby(obj/item/W, mob/user, params) - if(is_hot(W)) + if(W.get_heat()) light("[user] lights [src] with [W].") return return ..() @@ -152,6 +152,9 @@ infinite = FALSE wax = 1 // next process will burn it out +/obj/item/candle/get_heat() + return lit * 1000 + #undef TALL_CANDLE #undef MID_CANDLE #undef SHORT_CANDLE diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 069c77dac699..e9c21cd2107a 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -79,7 +79,7 @@ if(pushed_over) to_chat(user, "Right [src] first!") return - var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in possible_appearances + var/new_appearance = tgui_input_list(user, "Choose a new appearance for [src]", "26th Century Deception", possible_appearances) if(!Adjacent(usr)) user.visible_message("You need to be closer!") return diff --git a/code/game/objects/items/collar.dm b/code/game/objects/items/collar.dm index 6d58c8c2c536..1a1a40a6cb35 100644 --- a/code/game/objects/items/collar.dm +++ b/code/game/objects/items/collar.dm @@ -14,7 +14,7 @@ /obj/item/petcollar/attack_self(mob/user) var/option = "Change Name" if(access_id) - option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Remove ID") + option = tgui_input_list(user, "What do you want to do?", "[src]", list("Change Name", "Remove ID")) if(QDELETED(src) || !Adjacent(user)) return switch(option) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 5571328920a1..33510ccccf5d 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -49,45 +49,82 @@ . = ..() . += "It's current mode is: [mode]" -/obj/item/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user) - if(!istype(D)) - return +/obj/item/door_remote/afterattack(obj/target, mob/user) + if(istype(target, /obj/machinery/door/airlock)) + access_airlock(target, user) + if(istype(target, /obj/machinery/door/window)) + access_windoor(target, user) + +/obj/item/door_remote/proc/access_airlock(obj/machinery/door/airlock/D, mob/user) if(HAS_TRAIT(D, TRAIT_CMAGGED)) to_chat(user, "The door doesn't respond to [src]!") return + if(D.is_special) to_chat(user, "[src] cannot access this kind of door!") return + if(!(D.arePowerSystemsOn())) to_chat(user, "[D] has no power!") return + if(!D.requiresID()) to_chat(user, "[D]'s ID scan is disabled!") return - if(D.check_access(src.ID)) - D.add_hiddenprint(user) - switch(mode) - if(WAND_OPEN) - if(D.density) - D.open() - else - D.close() - if(WAND_BOLT) - if(D.locked) - D.unlock() - else - D.lock() - if(WAND_EMERGENCY) - if(D.emergency) - D.emergency = FALSE - else - D.emergency = TRUE - D.update_icon() - if(WAND_SPEED) - D.normalspeed = !D.normalspeed - to_chat(user, "[D] is now in [D.normalspeed ? "normal" : "fast"] mode.") - else + + if(!D.check_access(src.ID)) to_chat(user, "[src] does not have access to this door.") + return + + D.add_hiddenprint(user) + switch(mode) + if(WAND_OPEN) + if(D.density) + D.open() + else + D.close() + if(WAND_BOLT) + if(D.locked) + D.unlock() + else + D.lock() + if(WAND_EMERGENCY) + D.emergency = !D.emergency + D.update_icon() + if(WAND_SPEED) + D.normalspeed = !D.normalspeed + to_chat(user, "[D] is now in [D.normalspeed ? "normal" : "fast"] mode.") + +/obj/item/door_remote/proc/access_windoor(obj/machinery/door/window/D, mob/user) + if(HAS_TRAIT(D, TRAIT_CMAGGED)) + to_chat(user, "The door doesn't respond to [src]!") + return + + if(!D.has_power()) + to_chat(user, "[D] has no power!") + return + + if(!D.requiresID()) + to_chat(user, "[D]'s ID scan is disabled!") + return + + if(!D.check_access(ID)) + to_chat(user, "[src] does not have access to this door.") + return + + D.add_hiddenprint(user) + switch(mode) + if(WAND_OPEN) + if(D.density) + D.open() + else + D.close() + if(WAND_BOLT) + to_chat(user, "[D] has no bolting functionality.") + if(WAND_EMERGENCY) + to_chat(user, "[D] has no emergency access functionality.") + if(WAND_SPEED) + to_chat(user, "[D] has no speed change functionality.") /obj/item/door_remote/omni name = "omni door remote" @@ -145,8 +182,8 @@ var/hack_speed = 1.5 SECONDS var/busy = FALSE -/obj/item/door_remote/omni/access_tuner/afterattack(obj/machinery/door/airlock/D, mob/user) - if(!istype(D)) +/obj/item/door_remote/omni/access_tuner/afterattack(obj/machinery/door/D, mob/user) + if(!istype(D, /obj/machinery/door/airlock) && !istype(D, /obj/machinery/door/window)) return if(busy) to_chat(user, "[src] is alreading interfacing with a door!") @@ -186,16 +223,16 @@ playsound(src, 'sound/items/keyring_shake.ogg', 50) cooldown = world.time + JANGLE_COOLDOWN -/obj/item/door_remote/janikeyring/afterattack(obj/machinery/door/airlock/D, mob/user, proximity) +/obj/item/door_remote/janikeyring/afterattack(obj/machinery/door/D, mob/user, proximity) if(!proximity) return - if(!istype(D)) + if(!istype(D, /obj/machinery/door/airlock) && !istype(D, /obj/machinery/door/window)) return if(busy) - to_chat(user, "You are already using [src] on the [D] airlock's access panel!") + to_chat(user, "You are already using [src] on the [D]'s access panel!") return busy = TRUE - to_chat(user, "You fiddle with [src], trying different keys to open the [D] airlock...") + to_chat(user, "You fiddle with [src], trying different keys to open the [D]...") playsound(src, 'sound/items/keyring_unlock.ogg', 50) var/mob/living/carbon/human/H = user @@ -204,14 +241,11 @@ else hack_speed = rand(5, 20) SECONDS - if(!do_after(user, hack_speed, target = D, progress = 0)) - busy = FALSE - return + if(do_after(user, hack_speed, target = D, progress = 0)) + . = ..() busy = FALSE - if(!istype(D)) - return - +/obj/item/door_remote/janikeyring/access_airlock(obj/machinery/door/airlock/D, mob/user) if(HAS_TRAIT(D, TRAIT_CMAGGED)) to_chat(user, "[src] won't fit in the [D] airlock's access panel, there's slime everywhere!") return @@ -224,15 +258,30 @@ to_chat(user, "The [D] airlock has no power!") return - if(D.check_access(ID)) - D.add_hiddenprint(user) - if(D.density) - D.open() - else - to_chat(user, "The [D] airlock is already open!") + if(!D.check_access(ID)) + to_chat(user, "[src] does not seem to have a key for the [D] airlock's access panel!") + return + + D.add_hiddenprint(user) + if(D.density) + D.open() + else + to_chat(user, "The [D] airlock is already open!") +/obj/item/door_remote/janikeyring/access_windoor(obj/machinery/door/window/D, mob/user) + if(!(D.has_power())) + to_chat(user, "[D] has no power!") + return + + if(!D.check_access(ID)) + to_chat(user, "[src] does not seem to have a key for the [D]'s access panel!") + return + + D.add_hiddenprint(user) + if(D.density) + D.open() else - to_chat(user, "[src] does not seem to have a key for the [D] airlock's access panel!") + to_chat(user, "The [D] is already open!") #undef WAND_OPEN #undef WAND_BOLT diff --git a/code/game/objects/items/devices/enginepicker.dm b/code/game/objects/items/devices/enginepicker.dm index 215addfe81ed..46cd53485651 100644 --- a/code/game/objects/items/devices/enginepicker.dm +++ b/code/game/objects/items/devices/enginepicker.dm @@ -28,8 +28,7 @@ return locatebeacons() - var/default = null - var/E = input("Select the station's Engine:", "[src]", default) as null|anything in list_enginebeacons + var/E = tgui_input_list(user, "Select the station's Engine", "[src]", list_enginebeacons) if(E) processchoice(E, user) else @@ -51,8 +50,7 @@ var/turf/T = get_turf(choice) if(choice.enginetype.len > 1) //If the beacon has multiple engine types - var/default = null - var/E = input("You have selected a combined beacon, which option would you prefer?", "[src]", default) as null|anything in choice.enginetype + var/E = tgui_input_list(user, "You have selected a combined beacon, which option would you prefer?", "[src]", choice.enginetype) if(E) engtype = E issuccessful = TRUE diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index d471e918c6e6..62ac92441115 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -230,6 +230,9 @@ return TRUE return ..() +/obj/item/flashlight/flare/get_heat() + return produce_heat * on * 1000 + // GLOWSTICKS /obj/item/flashlight/flare/glowstick diff --git a/code/game/objects/items/devices/painter/airlock_painter.dm b/code/game/objects/items/devices/painter/airlock_painter.dm index 28d3863553e7..08fe5ffce164 100644 --- a/code/game/objects/items/devices/painter/airlock_painter.dm +++ b/code/game/objects/items/devices/painter/airlock_painter.dm @@ -23,7 +23,7 @@ "Standard" = /obj/machinery/door/airlock) /datum/painter/airlock/pick_color(mob/user) - var/choice = input(user, "Please select a paintjob.") as null|anything in available_paint_jobs + var/choice = tgui_input_list(user, "Please select a paintjob.", "Airlock painter", available_paint_jobs) if(!choice) return paint_setting = choice diff --git a/code/game/objects/items/devices/painter/pipe_painter.dm b/code/game/objects/items/devices/painter/pipe_painter.dm index 17c383809aac..fb254955d414 100644 --- a/code/game/objects/items/devices/painter/pipe_painter.dm +++ b/code/game/objects/items/devices/painter/pipe_painter.dm @@ -12,7 +12,10 @@ paint_setting = pick(modes) /datum/painter/pipe/pick_color(mob/user) - paint_setting = input("Which color do you want to use?", null, paint_setting) in modes + var/new_paint_setting = tgui_input_list(user, "Which color do you want to use?", "Pick color", modes) + if(!new_paint_setting) + return + paint_setting = new_paint_setting /datum/painter/pipe/paint_atom(atom/target, mob/user) if(!istype(target, /obj/machinery/atmospherics/pipe)) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index e4a969b1446f..f78588a832e1 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -59,6 +59,45 @@ user.drop_item() qdel(src) +/obj/item/radio/beacon/syndicate/bundle/ + name = "suspicious beacon" + desc = "A label on it reads: Activate to select a bundle." + var/list/static/bundles = list( + "Spy" = /obj/item/storage/box/syndie_kit/bundle/spy, + "Agent 13" = /obj/item/storage/box/syndie_kit/bundle/agent13, + "Thief" = /obj/item/storage/box/syndie_kit/bundle/thief, + "Agent 007" = /obj/item/storage/box/syndie_kit/bundle/bond, + "Infiltrator" = /obj/item/storage/box/syndie_kit/bundle/infiltrator, + "Bank Robber" = /obj/item/storage/box/syndie_kit/bundle/payday, + "Implanter" = /obj/item/storage/box/syndie_kit/bundle/implant, + "Hacker" = /obj/item/storage/box/syndie_kit/bundle/hacker, + "Dark Lord" = /obj/item/storage/box/syndie_kit/bundle/darklord, + "Sniper" = /obj/item/storage/box/syndie_kit/bundle/professional, + "Grenadier" = /obj/item/storage/box/syndie_kit/bundle/grenadier, + "Augmented" = /obj/item/storage/box/syndie_kit/bundle/metroid) + var/list/selected = list() + var/list/unselected = list() + +/obj/item/radio/beacon/syndicate/bundle/attack_self(mob/user) + if(!user) + return + if(!length(selected)) + unselected = bundles.Copy() + for(var/i in 1 to 3) + selected += pick_n_take(unselected) + selected += "Random" + var/bundle_name = tgui_input_list(user, "Available Bundles", "Bundle Selection", selected) + if(!bundle_name) + return + if(bundle_name == "Random") + bundle_name = pick(unselected) + var/bundle = bundles[bundle_name] + bundle = new bundle(user.loc) + to_chat(user, "Welcome to [station_name()], [bundle_name]") + user.drop_item() + qdel(src) + user.put_in_hands(bundle) + /obj/item/radio/beacon/syndicate/power_sink name = "suspicious beacon" desc = "A label on it reads: Warning: Activating this device will send a power sink to your location." diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 12951340306a..b7be56862103 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -5,7 +5,9 @@ icon_state = "headset" item_state = "headset" sprite_sheets = list( - "Vox" = 'icons/mob/clothing/species/vox/ears.dmi') //We read you loud and skree-er. + "Vox" = 'icons/mob/clothing/species/vox/ears.dmi', //We read you loud and skree-er. + "Kidan" = 'icons/mob/clothing/species/kidan/ears.dmi' + ) materials = list(MAT_METAL = 200) canhear_range = 0 // can't hear headsets from very far away diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 302b2703d958..665faa1d6d1b 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -13,7 +13,7 @@ /obj/item/flag/attackby(obj/item/W, mob/user, params) . = ..() - if(is_hot(W) && !(resistance_flags & ON_FIRE)) + if(W.get_heat() && !(resistance_flags & ON_FIRE)) user.visible_message("[user] lights [src] with [W].", "You light [src] with [W].", "You hear a low whoosh.") fire_act() @@ -259,7 +259,7 @@ log_game("[key_name(user)] has hidden [I] in [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") investigate_log("[key_name(user)] has hidden [I] in [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB) add_attack_logs(user, src, "has hidden [I] ready for detonation in", ATKLOG_MOST) - else if(is_hot(I) && !(resistance_flags & ON_FIRE) && boobytrap && trapper) + else if(I.get_heat() && !(resistance_flags & ON_FIRE) && boobytrap && trapper) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) log_game("[key_name_admin(user)] has lit [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index d936ec32227a..03415cbecf56 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -61,5 +61,5 @@ var/obj/item/tank/T = W blow(T, user) return - if(is_sharp(W) || is_hot(W) || is_pointed(W)) + if(is_sharp(W) || W.get_heat() || is_pointed(W)) burst() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 76b84dc8be67..38d1e025e46b 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -26,7 +26,7 @@ AddComponent(/datum/component/surgery_initiator/limb, forced_surgery = /datum/surgery/attach_robotic_limb) /obj/item/robot_parts/attack_self(mob/user) - var/choice = input(user, "Select the company appearance for this limb.", "Limb Company Selection") as null|anything in GLOB.selectable_robolimbs + var/choice = tgui_input_list(user, "Select the company appearance for this limb", "Limb Company Selection", GLOB.selectable_robolimbs) if(!choice) return if(loc != user) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 8aab03be8a57..a86d7010775d 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -41,6 +41,8 @@ GLOBAL_LIST_INIT(silver_recipes, list ( new /datum/stack_recipe("Monkey Statue", /obj/structure/statue/silver/monkey, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), new /datum/stack_recipe("Corgi Statue", /obj/structure/statue/silver/corgi, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), )), + null, + new /datum/stack_recipe("Silver Locket", /obj/item/clothing/accessory/necklace/locket/silver, 1), )) GLOBAL_LIST_INIT(diamond_recipes, list ( @@ -82,7 +84,13 @@ GLOBAL_LIST_INIT(gold_recipes, list ( new /datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE), )), null, - new /datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), + new /datum/stack_recipe_list("gold clothing", list( + new /datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), + null, + new /datum/stack_recipe("Simple Necklace", /obj/item/clothing/accessory/necklace, 1), + new /datum/stack_recipe("Large Necklace", /obj/item/clothing/accessory/necklace/long, 2), + new /datum/stack_recipe("Gold Locket", /obj/item/clothing/accessory/necklace/locket, 1), + )), )) GLOBAL_LIST_INIT(plasma_recipes, list ( @@ -264,7 +272,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( return TRUE /obj/item/stack/sheet/mineral/plasma/attackby(obj/item/I, mob/living/user, params) - if(is_hot(I)) + if(I.get_heat()) log_and_set_aflame(user, I) else return ..() diff --git a/code/game/objects/items/tools/welder.dm b/code/game/objects/items/tools/welder.dm index 60ec8bf0efc9..72f286458d94 100644 --- a/code/game/objects/items/tools/welder.dm +++ b/code/game/objects/items/tools/welder.dm @@ -207,6 +207,9 @@ if(reagents.check_and_add("fuel", maximum_fuel, 2 * coeff)) update_icon() +/obj/item/weldingtool/get_heat() + return tool_enabled * 2500 + /obj/item/weldingtool/largetank name = "industrial welding tool" desc = "A slightly larger welder with a larger tank." diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 9c54f803b836..6e2d363c319e 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -47,12 +47,19 @@ LIGHTERS ARE IN LIGHTERS.DM reagents.set_reacting(FALSE) // so it doesn't react until you light it if(list_reagents) reagents.add_reagent_list(list_reagents) + RegisterSignal(src, COMSIG_ITEM_BEING_ATTACKED, PROC_REF(can_light)) /obj/item/clothing/mask/cigarette/Destroy() QDEL_NULL(reagents) STOP_PROCESSING(SSobj, src) return ..() +/obj/item/clothing/mask/cigarette/proc/can_light(obj/item/cigarette, obj/item/lighting_item) + SIGNAL_HANDLER + if(lighting_item.get_heat()) + light() + return COMPONENT_CANCEL_ATTACK_CHAIN + /obj/item/clothing/mask/cigarette/decompile_act(obj/item/matter_decompiler/C, mob/user) if(isdrone(user)) C.stored_comms["wood"] += 1 @@ -250,6 +257,8 @@ LIGHTERS ARE IN LIGHTERS.DM STOP_PROCESSING(SSobj, src) qdel(src) +/obj/item/clothing/mask/cigarette/get_heat() + return lit * 1000 /obj/item/clothing/mask/cigarette/menthol list_reagents = list("nicotine" = 40, "menthol" = 20) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 1f740ef64b37..cea375da82b3 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -59,7 +59,7 @@ /obj/item/defibrillator/examine(mob/user) . = ..() - . += "Ctrl-click to remove the paddles from the defibrillator." + . += "Alt-Click to remove the paddles from the defibrillator." /obj/item/defibrillator/proc/update_power() if(cell) @@ -93,7 +93,7 @@ /obj/item/defibrillator/ui_action_click(mob/user) toggle_paddles(user) -/obj/item/defibrillator/CtrlClick(mob/user) +/obj/item/defibrillator/AltClick(mob/user) if(ishuman(user) && Adjacent(user)) toggle_paddles(user) @@ -106,13 +106,14 @@ if(C.maxcharge < paddles.revivecost) to_chat(user, "[src] requires a higher capacity cell.") return - user.drop_item() - W.loc = src - cell = W - to_chat(user, "You install a cell in [src].") + if(user.drop_item(C)) + W.forceMove(src) + cell = C + to_chat(user, "You install a cell in [src].") + if(W == paddles) + toggle_paddles(user) update_icon(UPDATE_OVERLAYS) - return /obj/item/defibrillator/screwdriver_act(mob/living/user, obj/item/I) if(!cell) @@ -249,11 +250,6 @@ /obj/item/defibrillator/compact/advanced/screwdriver_act(mob/living/user, obj/item/I) return // The cell is too strong roundstart and we dont want the adv defib to become useless -/obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params) - if(W == paddles) - toggle_paddles(user) - update_icon(UPDATE_OVERLAYS) - /obj/item/defibrillator/compact/advanced/loaded/Initialize(mapload) . = ..() cell = new /obj/item/stock_parts/cell/bluespace/charging(src) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 2f4fe5f67c86..c17e99f0f8ee 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -101,8 +101,6 @@ message_say = "FOR THE HIVE!" else if(role == ROLE_CULTIST) message_say = "FOR NARSIE!" - else if(role == ROLE_NINJA) - message_say = "FOR THE CLAN!" else if(role == ROLE_WIZARD) message_say = "FOR THE FEDERATION!" else if(role == ROLE_REV || role == "head revolutionary") diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 32ad45ba87c8..1d1570344a25 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -88,8 +88,9 @@ U.swap_hand() if(G && istype(G)) - if(improvised) // Improvised garrotes start you off with a passive grab, but keep you stunned like an agressive grab. - M.Stun(2 SECONDS) + if(improvised) // Improvised garrotes start you off with a passive grab, but will lock you in place. A quick stun to drop items but not to make it unescapable + M.Stun(1 SECONDS) + M.Immobilize(2 SECONDS) else G.state = GRAB_NECK G.hud.icon_state = "kill" @@ -153,7 +154,7 @@ return if(G.state < GRAB_NECK) // Only possible with improvised garrotes, essentially this will stun people as if they were aggressively grabbed. Allows for resisting out if you're quick, but not running away. - strangling.Stun(6 SECONDS) + strangling.Immobilize(3 SECONDS) if(improvised) strangling.Stuttering(6 SECONDS) diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm index 0eb76dbf86ae..e2a779b9374a 100644 --- a/code/game/objects/items/weapons/grenades/syndieminibomb.dm +++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm @@ -1,6 +1,6 @@ /obj/item/grenade/syndieminibomb - desc = "A syndicate manufactured explosive used to sow destruction and chaos" name = "syndicate minibomb" + desc = "A syndicate manufactured explosive used to sow destruction and chaos." icon = 'icons/obj/grenade.dmi' icon_state = "syndicate" item_state = "grenade" @@ -24,3 +24,15 @@ to_chat(user, "As you activate the bomb, it emits a substance that sticks to your hand! It won't come off!") to_chat(user, "Uh oh.") . = ..() + +/obj/item/grenade/syndieminibomb/pen + name = "pen" + desc = "It's a normal black ink pen." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + item_state = "pen" + +/obj/item/grenade/syndieminibomb/pen/attack_self(mob/user) + if(!active) + visible_message("[user] fumbles with [src]!") + . = ..() diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index bf720995b07b..235ec5816c9b 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -125,6 +125,9 @@ item_state = "[initial(item_state)][lit ? "-on" : ""]" return ..() +/obj/item/lighter/get_heat() + return lit * 1500 + // Zippo lighters /obj/item/lighter/zippo name = "zippo lighter" @@ -304,6 +307,9 @@ if(istype(mask_item, /obj/item/clothing/mask/cigarette)) return mask_item +/obj/item/match/get_heat() + return lit * 1000 + /obj/item/match/firebrand name = "firebrand" desc = "An unlit firebrand. It makes you wonder why it's not just called a stick." diff --git a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm index 92768750e7e7..2086e1677e07 100644 --- a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm +++ b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm @@ -85,6 +85,9 @@ add_fingerprint(user) return +/obj/item/melee/energy/get_heat() + return active * 3500 + /obj/item/melee/energy/axe name = "energy axe" desc = "An energised battle axe." diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index ddd1c7a220cf..bb7afcb69199 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -10,16 +10,26 @@ lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 60, ACID = 50) - var/maxWeightClass = 20 //The max weight of items that can fit into the cannon - var/loadedWeightClass = 0 //The weight of items currently in the cannon - var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things - var/gasPerThrow = 3 //How much gas is drawn from a tank's pressure to fire - var/list/loadedItems = list() //The items loaded into the cannon that will be fired out - var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws + ///The max weight of items that can fit into the cannon + var/max_weight_class = 20 + ///The weight of items currently in the cannon + var/loaded_weight_class = 0 + ///The gas tank that is drawn from to fire things + var/obj/item/tank/internals/tank = null + ///If the cannon needs a tank at all + var/requires_tank = TRUE + ///How many moles of gas is drawn from a tank's pressure to fire + var/gas_per_throw = 3 + ///The items loaded into the cannon that will be fired out + var/list/loaded_items = list() + ///How powerful the cannon is - higher pressure = more gas but more powerful throws + var/pressure_setting = 1 + ///In case we want a really strong cannon + var/max_pressure_setting = 3 /obj/item/pneumatic_cannon/Destroy() QDEL_NULL(tank) - QDEL_LIST_CONTENTS(loadedItems) + QDEL_LIST_CONTENTS(loaded_items) return ..() /obj/item/pneumatic_cannon/examine(mob/user) @@ -28,148 +38,127 @@ . += "You'll need to get closer to see any more." else if(tank) - . += "[bicon(tank)] It has \the [tank] mounted onto it." - for(var/obj/item/I in loadedItems) - . += "[bicon(I)] It has \the [I] loaded." + . += "[bicon(tank)] It has [tank] mounted onto it." + for(var/obj/item/I in loaded_items) + . += "[bicon(I)] It has [I] loaded." + +/** +* Arguments: +* * I - item to load into the cannon +* * user - the person loading the item in +* Returns: +* * True if item was loaded, false if it failed +*/ +/obj/item/pneumatic_cannon/proc/load_item(obj/item/I, mob/user) + if((loaded_weight_class + I.w_class) > max_weight_class) + to_chat(user, "[I] won't fit into [src]!") + return FALSE + if(I.w_class > w_class) + to_chat(user, "[I] is too large to fit into [src]!") + return FALSE + if(!user.unEquip(I) || I.flags & (ABSTRACT | NODROP | DROPDEL)) + to_chat(user, "You can't put [I] into [src]!") + return FALSE + to_chat(user, "You load [I] into [src].") + loaded_items.Add(I) + loaded_weight_class += I.w_class + I.forceMove(src) + return TRUE + +/obj/item/pneumatic_cannon/wrench_act(mob/living/user, obj/item/I) + adjust_setting(user) + return TRUE + +/obj/item/pneumatic_cannon/proc/adjust_setting(mob/living/user) + if(pressure_setting == max_pressure_setting) + pressure_setting = 1 + else + pressure_setting++ + to_chat(user, "You tweak [src]'s pressure output to [pressure_setting].") /obj/item/pneumatic_cannon/attackby(obj/item/W, mob/user, params) ..() - if(istype(W, /obj/item/tank/internals/) && !tank) + if(istype(W, /obj/item/tank/internals) && !tank) if(istype(W, /obj/item/tank/internals/emergency_oxygen)) - to_chat(user, "\The [W] is too small for \the [src].") + to_chat(user, "[W] is too small for [src].") return - updateTank(W, 0, user) + add_tank(W, user) return if(W.type == type) to_chat(user, "You're fairly certain that putting a pneumatic cannon inside another pneumatic cannon would cause a spacetime disruption.") return - if(istype(W, /obj/item/wrench)) - switch(pressureSetting) - if(1) - pressureSetting = 2 - if(2) - pressureSetting = 3 - if(3) - pressureSetting = 1 - to_chat(user, "You tweak \the [src]'s pressure output to [pressureSetting].") - return - if(loadedWeightClass >= maxWeightClass) - to_chat(user, "\The [src] can't hold any more items!") - return - if(isitem(W)) - var/obj/item/IW = W - if(IW.flags & (ABSTRACT | NODROP | DROPDEL)) - to_chat(user, "You can't put [IW] into [src]!") - return - if((loadedWeightClass + IW.w_class) > maxWeightClass) - to_chat(user, "\The [IW] won't fit into \the [src]!") - return - if(IW.w_class > src.w_class) - to_chat(user, "\The [IW] is too large to fit into \the [src]!") - return - if(!user.unEquip(W)) - return - to_chat(user, "You load \the [IW] into \the [src].") - loadedItems.Add(IW) - loadedWeightClass += IW.w_class - IW.loc = src - return + load_item(W, user) /obj/item/pneumatic_cannon/screwdriver_act(mob/living/user, obj/item/I) - if(!tank) - return - - updateTank(tank, 1, user) + remove_tank(user) return TRUE /obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params) if(isstorage(target)) //So you can store it in backpacks return ..() - if(istype(target, /obj/structure/closet)) //So you can store it in closets - return ..() if(istype(target, /obj/structure/rack)) //So you can store it on racks return ..() if(!istype(user)) return ..() - Fire(user, target) + fire(user, target) -/obj/item/pneumatic_cannon/proc/Fire(mob/living/carbon/human/user, atom/target) +/obj/item/pneumatic_cannon/proc/fire(mob/living/carbon/human/user, atom/target) if(!istype(user) && !target) return - var/discharge = 0 - if(!loadedItems || !loadedWeightClass) - to_chat(user, "\The [src] has nothing loaded.") - return - if(!tank) - to_chat(user, "\The [src] can't fire without a source of gas.") - return - if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting)) - to_chat(user, "\The [src] lets out a weak hiss and doesn't react!") + var/has_discharged = FALSE + if(!loaded_items || !loaded_weight_class) + to_chat(user, "[src] has nothing loaded.") return + if(requires_tank) + if(!tank) + to_chat(user, "[src] can't fire without a source of gas.") + return + if(!tank.air_contents.boolean_remove(gas_per_throw * pressure_setting)) + to_chat(user, "[src] lets out a weak hiss and doesn't react!") + return if(user && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(75)) user.visible_message("[user] loses [user.p_their()] grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") user.drop_item() + has_discharged = TRUE if(prob(10)) - target = get_turf(user) + target = user else var/list/possible_targets = range(3,src) target = pick(possible_targets) - discharge = 1 - if(!discharge) - user.visible_message("[user] fires \the [src]!", \ - "You fire \the [src]!") + if(!has_discharged) + user.visible_message("[user] fires [src]!", \ + "You fire [src]!") add_attack_logs(user, target, "Fired [src]") - playsound(src.loc, 'sound/weapons/sonic_jackhammer.ogg', 50, 1) - for(var/obj/item/ITD in loadedItems) //Item To Discharge - spawn(0) - loadedItems.Remove(ITD) - loadedWeightClass -= ITD.w_class - ITD.throw_speed = pressureSetting * 2 - ITD.loc = get_turf(src) - ITD.throw_at(target, pressureSetting * 5, pressureSetting * 2,user) - if(pressureSetting >= 3 && user) + playsound(loc, 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE) + for(var/obj/item/loaded_item in loaded_items) + loaded_items.Remove(loaded_item) + loaded_weight_class -= loaded_item.w_class + loaded_item.throw_speed = pressure_setting * 2 + loaded_item.forceMove(get_turf(src)) + loaded_item.throw_at(target, pressure_setting * 5, pressure_setting * 2, user) + if(pressure_setting >= 3 && user) user.visible_message("[user] is thrown down by the force of the cannon!", "[src] slams into your shoulder, knocking you down!") - user.Weaken(3) - + user.KnockDown(3 SECONDS) -/obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller - name = "improvised pneumatic cannon" - desc = "A gas-powered, object-firing cannon made out of common parts." - force = 5 - w_class = WEIGHT_CLASS_NORMAL - maxWeightClass = 7 - gasPerThrow = 5 - -/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but - name = "Pneumatic Cannon" - result = list(/obj/item/pneumatic_cannon/ghetto) - tools = list(TOOL_WELDER, TOOL_WRENCH) - reqs = list(/obj/item/stack/sheet/metal = 4, - /obj/item/stack/packageWrap = 8, - /obj/item/pipe = 2) - time = 300 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON +/obj/item/pneumatic_cannon/proc/add_tank(obj/item/tank/new_tank, mob/living/carbon/human/user) + if(tank) + to_chat(user, "[src] already has a tank.") + return + if(!user.unEquip(new_tank)) + return + to_chat(user, "You hook [new_tank] up to [src].") + new_tank.forceMove(src) + tank = new_tank + update_icons() -/obj/item/pneumatic_cannon/proc/updateTank(obj/item/tank/thetank, removing = 0, mob/living/carbon/human/user) - if(removing) - if(!src.tank) - return - to_chat(user, "You detach \the [thetank] from \the [src].") - src.tank.loc = get_turf(user) - user.put_in_hands(tank) - src.tank = null - if(!removing) - if(src.tank) - to_chat(user, "\The [src] already has a tank.") - return - if(!user.unEquip(thetank)) - return - to_chat(user, "You hook \the [thetank] up to \the [src].") - src.tank = thetank - thetank.loc = src - src.update_icons() +/obj/item/pneumatic_cannon/proc/remove_tank(mob/living/carbon/human/user) + if(!tank) + return FALSE + to_chat(user, "You detach [tank] from [src].") + user.put_in_hands(tank) + tank = null + update_icons() /obj/item/pneumatic_cannon/proc/update_icons() src.overlays.Cut() @@ -177,3 +166,17 @@ return src.overlays += image('icons/obj/pneumaticCannon.dmi', "[tank.icon_state]") src.update_icon() + +/obj/item/pneumatic_cannon/admin + name = "admin pnuematic cannon" + desc = "Infinite gas and infinite capacity, go crazy." + requires_tank = FALSE + max_weight_class = INFINITY + +/obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller + name = "improvised pneumatic cannon" + desc = "A gas-powered, object-firing cannon made out of common parts." + force = 5 + w_class = WEIGHT_CLASS_NORMAL + max_weight_class = 7 + gas_per_throw = 5 diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index abd1ca581ad6..fc6ccffb4606 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -32,9 +32,9 @@ to_chat(user, "[M] doesn't have a head!") return //facial hair - var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in H.generate_valid_facial_hairstyles() + var/f_new_style = tgui_input_list(user, "Select a facial hair style", "Grooming", H.generate_valid_facial_hairstyles()) //handle normal hair - var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in H.generate_valid_hairstyles() + var/h_new_style = tgui_input_list(user, "Select a hair style", "Grooming", H.generate_valid_hairstyles()) user.visible_message("[user] starts cutting [M]'s hair!", "You start cutting [M]'s hair!") //arguments for this are: 1. what others see 2. what the user sees. --Fixed grammar, (TGameCo) playsound(loc, 'sound/goonstation/misc/scissor.ogg', 100, 1) if(do_after(user, 50 * toolspeed, target = H)) //this is the part that adds a delay. delay is in deciseconds. --Made it 5 seconds, because hair isn't cut in one second in real life, and I want at least a little bit longer time, (TGameCo) diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index df58f7dc30ed..a66919d4e775 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -28,7 +28,7 @@ return var/picked_area - picked_area = input(user, "Area to jump to", "Teleport where?", picked_area) as null|anything in SSmapping.teleportlocs + picked_area = tgui_input_list(user, "Area to jump to", "Teleport where?", SSmapping.teleportlocs) if(!picked_area) return diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 2b0a631022af..cba3393e3b23 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -213,6 +213,13 @@ icon_state = "blueshieldpack" item_state = "blueshieldpack" +/obj/item/storage/backpack/robotics + name = "robotics backpack" + desc = "A specially designed backpack. It's fire resistant and smells vaguely of welding fuel." + icon_state = "robopack" + item_state = "robopack" + resistance_flags = FIRE_PROOF + /* * Satchel Types */ @@ -336,6 +343,13 @@ icon_state = "satchel-blueshield" item_state = "satchel-blueshield" +/obj/item/storage/backpack/satchel_robo + name = "bioengineer satchel" + desc = "A black satchel designed for holding repair equipment." + icon_state = "satchel-robo" + item_state = "satchel-robo" + resistance_flags = FIRE_PROOF + /obj/item/storage/backpack/satchel_flat name = "smuggler's satchel" desc = "A very slim satchel that can easily fit into tight spaces." @@ -862,6 +876,12 @@ icon_state = "duffel-blueshield" item_state = "duffel-blueshield" +/obj/item/storage/backpack/duffel/robotics + name = "roboticist duffelbag" + desc = "A duffelbag designed to hold tools." + icon_state = "duffel-robo" + item_state = "duffel-robo" + //ERT backpacks. /obj/item/storage/backpack/ert name = "emergency response team backpack" diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index e71d266c3d27..717b00c0bb8a 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -378,6 +378,15 @@ max_w_class = WEIGHT_CLASS_SMALL max_combined_w_class = 18 resistance_flags = FIRE_PROOF + use_item_overlays = TRUE // Will show the tools on the sprite + w_class_override = list( + /obj/item/crowbar, + /obj/item/screwdriver, + /obj/item/weldingtool, + /obj/item/wirecutters, + /obj/item/wrench, + /obj/item/multitool + ) /obj/item/storage/belt/military/sst icon_state = "assaultbelt" @@ -388,16 +397,7 @@ desc = "Can hold various tools. This model seems to have additional compartments and folds up rather nicely into a bag." icon_state = "utilitybelt" item_state = "utility" - use_item_overlays = TRUE // So it will still show tools in it in case sec get lazy and just glance at it. storable = TRUE - w_class_override = list( - /obj/item/crowbar, - /obj/item/screwdriver, - /obj/item/weldingtool, - /obj/item/wirecutters, - /obj/item/wrench, - /obj/item/multitool - ) /obj/item/storage/belt/military/traitor/hacker/populate_contents() new /obj/item/screwdriver(src, "red") @@ -406,6 +406,7 @@ new /obj/item/crowbar/small(src) new /obj/item/wirecutters(src, "red") new /obj/item/stack/cable_coil(src, 30, COLOR_RED) + new /obj/item/multitool/ai_detect(src) update_icon() /obj/item/storage/belt/grenade diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 52e11f4a208f..4496647127af 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -780,7 +780,7 @@ to_chat(user, "You can't modify [src] with items still inside!") return var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILE) - var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) as null|anything in designs + var/switchDesign = tgui_input_list(user, "Select a Design", "Paper Sack Design", designs) if(!switchDesign) return if(get_dist(usr, src) > 1 && !usr.incapacitated()) diff --git a/code/game/objects/items/weapons/storage/storage_base.dm b/code/game/objects/items/weapons/storage/storage_base.dm index 4511e5b807e2..c5de6b7bd3a1 100644 --- a/code/game/objects/items/weapons/storage/storage_base.dm +++ b/code/game/objects/items/weapons/storage/storage_base.dm @@ -546,7 +546,6 @@ handle_item_insertion(I) - /obj/item/storage/attack_hand(mob/user) if(ishuman(user)) var/mob/living/carbon/human/H = user diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 4b81c4ad8183..5dd3b61997cd 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -3,60 +3,79 @@ icon_state = "box_of_doom" /obj/item/storage/box/syndie_kit/bundle // Traitor bundles - - var/static/list/spy = list( // 37TC - /obj/item/clothing/under/chameleon, // 1TC - /obj/item/clothing/mask/chameleon, // 1TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/clothing/shoes/chameleon/noslip, // 2TC - /obj/item/clothing/glasses/hud/security/chameleon, // 2TC - /obj/item/implanter/storage, // 8TC - /obj/item/pen/edagger, // 2TC - /obj/item/pinpointer/advpinpointer, // 4TC - /obj/item/storage/fancy/cigarettes/cigpack_syndicate, // 2TC - /obj/item/flashlight/emp, // 4TC - /obj/item/chameleon, // 7TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/agent13 = list( // 36TC - /obj/item/clothing/under/chameleon, // 1TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/gun/projectile/automatic/pistol, // 4TC - /obj/item/suppressor, // 1TC - /obj/item/ammo_box/magazine/m10mm, // 1TC - /obj/item/ammo_box/magazine/m10mm/hp, // 2TC - /obj/item/garrote, // 6TC - /obj/item/door_remote/omni/access_tuner, // 6TC - /obj/item/clothing/glasses/chameleon/thermal, // 6TC - /obj/item/implanter/freedom, // 5TC + var/list/items = list() + +/obj/item/storage/box/syndie_kit/bundle/spy // 172TC + name = "Spy Bundle" + desc = "Complete your objectives quietly with this compilation of stealthy items." + items = list( + /obj/item/storage/box/syndie_kit/chameleon, // 20 TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/clothing/shoes/chameleon/noslip, // 10TC + /obj/item/clothing/glasses/hud/security/chameleon, // 10TC + /obj/item/implanter/storage, // 40TC + /obj/item/pen/edagger, // 10TC + /obj/item/pinpointer/advpinpointer, // 20TC + /obj/item/storage/fancy/cigarettes/cigpack_syndicate, // 7TC + /obj/item/flashlight/emp, // 20TC + /obj/item/chameleon, // 25TC + /obj/item/garrote, // 30 TC + /obj/item/door_remote/omni/access_tuner, // 30 TC + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/agent13 // 159 + name = "Agent 13 Bundle" + desc = "Find and eliminate your targets quietly and effectively with this kit." + items = list( + /obj/item/clothing/under/chameleon, // 5TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/storage/box/syndie_kit/stechkin, // 20TC + /obj/item/suppressor, // 5TC + /obj/item/ammo_box/magazine/m10mm, // 3TC + /obj/item/ammo_box/magazine/m10mm/hp, // 6TC + /obj/item/garrote, // 30TC + /obj/item/door_remote/omni/access_tuner, // 30TC + /obj/item/clothing/glasses/chameleon/thermal, // 15TC + /obj/item/storage/briefcase/false_bottomed, // 10 TC + /obj/item/implanter/freedom, // 25TC /obj/item/coin/gold, // 0TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/thief = list( // 37TC - /obj/item/gun/energy/kinetic_accelerator/crossbow, // 12TC - /obj/item/chameleon, // 7TC - /obj/item/clothing/glasses/chameleon/thermal, // 6TC - /obj/item/clothing/gloves/color/black/thief, // 6TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/storage/backpack/satchel_flat, // 2TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/bond = list( // 32TC - /obj/item/gun/projectile/automatic/pistol, // 4TC - /obj/item/suppressor, // 1TC - /obj/item/ammo_box/magazine/m10mm/ap, // 2TC - /obj/item/ammo_box/magazine/m10mm/ap, // 2TC + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/thief // 160TC + name = "Thief Bundle" + desc = "Steal from friends, enemies, and interstellar megacorporations alike!" + items = list( + /obj/item/gun/energy/kinetic_accelerator/crossbow, // 60TC + /obj/item/chameleon, // 25TC + /obj/item/clothing/glasses/chameleon/thermal, // 15TC + /obj/item/clothing/gloves/color/black/thief, // 30TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/storage/backpack/satchel_flat, // 10TC + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/bond // 137TC + name = "Agent 007 Bundle" + desc = "Shake your Martini and stir up trouble with this bundle of lethal equipment mixed with a spritz of gadgetry to keep things interesting." + items = list( + /obj/item/storage/briefcase/false_bottomed, // 20TC + /obj/item/suppressor, // 5TC + /obj/item/storage/box/syndie_kit/stechkin, // 20TC + /obj/item/ammo_box/magazine/m10mm/ap, // 6TC + /obj/item/ammo_box/magazine/m10mm/ap, // 6TC /obj/item/clothing/under/suit/really_black, // 0TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 0TC - /obj/item/storage/box/syndie_kit/emp, // 2TC - /obj/item/clothing/glasses/hud/security/chameleon, // 2TC - /obj/item/encryptionkey/syndicate, // 2TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 3TC + /obj/item/storage/box/syndie_kit/emp, // 10TC + /obj/item/clothing/glasses/hud/security/chameleon, // 10TC + /obj/item/encryptionkey/syndicate, // 10TC /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail, // 0TC - /obj/item/dnascrambler, // 2TC + /obj/item/storage/box/syndie_kit/pen_bomb, // 30 TC /obj/item/CQC_manual) // 13TC - var/static/list/infiltrator = list( // 34TC + RCD & Mesons Autoimplanter +/obj/item/storage/box/syndie_kit/bundle/infiltrator // 155TC + RCD & Mesons Autoimplanter + name = "Infiltration Bundle" + desc = "Use your teleporter, krav maga and other support tools to jump right into your desired location, quickly leaving as though you were never there." + items = list( /obj/item/storage/box/syndie_kit/teleporter, // 8TC /obj/item/clothing/gloves/color/black/krav_maga, // 10TC /obj/item/clothing/glasses/chameleon/thermal, // 6TC @@ -66,7 +85,10 @@ /obj/item/autosurgeon/organ/syndicate/meson_eyes, // 0TC /obj/item/encryptionkey/syndicate) // 2TC - var/static/list/payday = list( // 35TC +/obj/item/storage/box/syndie_kit/bundle/payday // 175TC + name = "Heist Bundle" + desc = "Alright guys, today we're performing a heist on a space station owned by a greedy corporation. Drain the vault of all its worth so we can get that pay dirt!11" + items = list( /obj/item/gun/projectile/revolver, // 13TC /obj/item/ammo_box/a357, // 3TC /obj/item/ammo_box/a357, // 3TC @@ -79,83 +101,103 @@ /obj/item/clothing/mask/gas/clown_hat, // 0TC /obj/item/grenade/plastic/c4, // 1TC /obj/item/thermal_drill/diamond_drill/syndicate, // 1TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/implant = list( // 40TC - /obj/item/implanter/freedom, // 5TC - /obj/item/implanter/uplink, // 14TC (ten free TC) - /obj/item/implanter/emp, // 1TC - /obj/item/implanter/adrenalin, // 8TC - /obj/item/implanter/explosive, // 2TC - /obj/item/implanter/storage, // 8TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/hacker = list( // 39TC + Toy AI Uploader - /obj/item/melee/energy/sword/saber/blue, // 8TC - /obj/item/card/emag, // 6TC - /obj/item/encryptionkey/syndicate, // 2TC - /obj/item/encryptionkey/binary, // 5TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/storage/box/syndie_kit/emp, // 2TC + /obj/item/implanter/freedom/prototype, // 10 TC + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/implant // 200TC + name = "Bio-chip Bundle" + desc = "A few useful bio-chips to give you some options for when you inevitably get captured by the Security." + items = list( + /obj/item/implanter/freedom, // 25TC + /obj/item/implanter/stealth, // 45 TC + /obj/item/implanter/emp, // 5TC (half of EMP kit) + /obj/item/implanter/adrenalin, // 40TC + /obj/item/implanter/explosive, // 10TC + /obj/item/implanter/storage, // 40TC + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/hacker // 180TC + name = "Hacker Bundle" + desc = "A kit with everything you need to hack into and disrupt the Station, AI, its cyborgs and the Security team. HACK THE PLANET!" + items = list( + /obj/item/melee/energy/sword/saber/blue, // 40TC + /obj/item/card/emag, // 30TC + /obj/item/door_remote/omni/access_tuner, // 30 TC, HACK EVERYTHING + /obj/item/encryptionkey/syndicate, // 10TC + /obj/item/encryptionkey/binary, // 25TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/storage/box/syndie_kit/emp, // 10TC /obj/item/aiModule/toyAI, // 0TC - /obj/item/clothing/glasses/chameleon/thermal, // 6TC - /obj/item/storage/belt/military/traitor/hacker, // 3TC - /obj/item/clothing/gloves/combat, // 0TC - /obj/item/multitool/ai_detect, // 1TC + /obj/item/aiModule/syndicate, // 15 TC + /obj/item/storage/box/syndie_kit/camera_bug, // 5 TC + /obj/item/implanter/freedom/prototype, // 10 TC + /obj/item/storage/belt/military/traitor/hacker, // 15TC + AI detector for 5 TC + /obj/item/clothing/gloves/combat, // accounted in belt + toolbox /obj/item/flashlight/emp) // 4TC - var/static/list/darklord = list( // 33TC + TK - /obj/item/melee/energy/sword/saber/red, // 8TC - /obj/item/melee/energy/sword/saber/red, // 8TC - /obj/item/clothing/gloves/color/yellow/power, // 10TC - /obj/item/dnainjector/telemut/darkbundle, // 0TC +/obj/item/storage/box/syndie_kit/bundle/darklord // 168TC + Telekinesis + name = "Dark Lord Bundle" + desc = "Turn your anger into hate and your hate into suffering with a mix of energy swords and magical powers. DO IT." + items = list( + /obj/item/melee/energy/sword/saber/red, // 40TC + /obj/item/melee/energy/sword/saber/red, // 40TC + /obj/item/clothing/gloves/color/yellow/power, // 50TC + /obj/item/dnainjector/telemut/darkbundle, // ?TC /obj/item/clothing/suit/hooded/chaplain_hoodie, // 0TC /obj/item/clothing/glasses/meson/engine/tray, // 0TC - /obj/item/clothing/mask/chameleon, // 1TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/clothing/shoes/chameleon/noslip, // 2TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/professional = list( // 38TC - /obj/item/gun/projectile/automatic/sniper_rifle/syndicate, // 16TC - /obj/item/ammo_box/magazine/sniper_rounds, // 4TC - /obj/item/ammo_box/magazine/sniper_rounds/penetrator, // 5TC - /obj/item/ammo_box/magazine/sniper_rounds/penetrator, // 5TC - /obj/item/clothing/glasses/chameleon/thermal, // 6TC - /obj/item/clothing/gloves/combat, // 0 TC - /obj/item/clothing/under/suit/really_black, // 0 TC - /obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 0TC - /obj/item/encryptionkey/syndicate) // 2TC + /obj/item/clothing/mask/chameleon, // 8TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/clothing/shoes/chameleon/noslip, // 10TC + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/professional // 164TC + name = "Sniper Bundle" + desc = "Suit up and handle yourself like a professional with a long-distance sniper rifle, additional .50 standard and penetrator rounds and thermal glasses to easily scope out your target." + items = list( + /obj/item/gun/projectile/automatic/sniper_rifle/syndicate, // 80TC + /obj/item/ammo_box/magazine/sniper_rounds, // 15TC + /obj/item/ammo_box/magazine/sniper_rounds/penetrator, // 20TC + /obj/item/ammo_box/magazine/sniper_rounds/penetrator, // 20TC + /obj/item/clothing/glasses/chameleon/thermal, // 15TC + /obj/item/clothing/gloves/combat, // ~1TC + /obj/item/clothing/under/suit/really_black, // 0TC + /obj/item/clothing/suit/storage/iaa/blackjacket/armored, // 3TC + /obj/item/encryptionkey/syndicate) // 15TC - var/static/list/grenadier = list( // 20TC + Tactical Grenadier Belt +/obj/item/storage/box/syndie_kit/bundle/grenadier // 133TC + Tactical Grenadier Belt + name = "Grenade Bundle" + desc = "A variety of grenades and pyrotechnics to ensure you can blast your way through any situation. " + items = list( /obj/item/storage/belt/grenade/tactical, // Contains 2 Frag and EMP grenades, 5 C4 Explosives, 5 Smoke and Gluon grenades and 1 Minibomb grenade ~20TC Estimate - /obj/item/gun/projectile/automatic/pistol, // 4TC - /obj/item/ammo_box/magazine/m10mm/fire, // 2TC - /obj/item/ammo_box/magazine/m10mm/fire, // 2TC - /obj/item/mod/control/pre_equipped/traitor, // 6TC - /obj/item/clothing/gloves/combat, // 0TC - /obj/item/card/id/syndicate, // 2TC - /obj/item/clothing/shoes/chameleon/noslip, // 2TC - /obj/item/encryptionkey/syndicate) // 2TC - - var/static/list/metroid = list( // 21 + modules + laser gun - /obj/item/mod/control/pre_equipped/traitor_elite, // 9TC - /obj/item/mod/module/visor/thermal, // 3 TC - /obj/item/mod/module/stealth, //0 TC but strong - /obj/item/mod/module/power_kick, //0 TC but funny - /obj/item/mod/module/sphere_transform, //0TC but should not be allowed to normally be installed - /obj/item/autosurgeon/organ/syndicate/laser_arm, //0 TC but otherwise not obtainable. - /obj/item/pinpointer/advpinpointer, //4 TC - /obj/item/storage/box/syndidonkpockets, //2TC, otherwise they will just die in the first combat to disabler. - /obj/item/storage/belt/utility/full/multitool, //0 TC - /obj/item/clothing/head/collectable/slime, //Priceless (0 TC) - /obj/item/encryptionkey/syndicate) //2 TC - - + /obj/item/storage/box/syndie_kit/stechkin, // 20TC + /obj/item/ammo_box/magazine/m10mm/fire, // 6TC + /obj/item/ammo_box/magazine/m10mm/fire, // 6TC + /obj/item/mod/control/pre_equipped/traitor, // 30TC + /obj/item/clothing/gloves/combat, // ~1TC + /obj/item/card/id/syndicate, // 10TC + /obj/item/clothing/shoes/chameleon/noslip, // 10TC + /obj/item/storage/box/syndidonkpockets, // 10 TC + /obj/item/storage/box/syndie_kit/frag_grenades, // One box, as a treat + /obj/item/encryptionkey/syndicate) // 10TC + +/obj/item/storage/box/syndie_kit/bundle/metroid // 115TC + modules + laser gun + name = "Modsuit Bundle" + desc = "Don the equipment of an intergalactic bounty hunter and blast your way through the station!" + items = list( + /obj/item/mod/control/pre_equipped/traitor_elite, // 45TC + /obj/item/mod/module/visor/thermal, // 15TC + /obj/item/mod/module/stealth, // ?TC + /obj/item/mod/module/power_kick, // ?TC + /obj/item/mod/module/sphere_transform, // ?TC + /obj/item/autosurgeon/organ/syndicate/laser_arm, // ?TC + /obj/item/pinpointer/advpinpointer, // 20TC + /obj/item/implanter/adrenalin, // 40TC + /obj/item/storage/belt/utility/full/multitool, // 15TC + /obj/item/clothing/head/collectable/slime, // 0TC priceless + /obj/item/encryptionkey/syndicate) // 10TC /obj/item/storage/box/syndie_kit/bundle/populate_contents() - var/list/bundle = pick(spy, agent13, thief, bond, infiltrator, payday, implant, hacker, darklord, professional, grenadier, metroid) - for(var/item in bundle) + for(var/obj/item/item as anything in items) new item(src) /obj/item/storage/box/syndie_kit/space @@ -390,3 +432,9 @@ new /obj/item/paper/camera_bug(src) for(var/i in 1 to 5) new /obj/item/wall_bug(src, camera) + +/obj/item/storage/box/syndie_kit/pen_bomb + name = "\improper Pen bomb" + +/obj/item/storage/box/syndie_kit/pen_bomb/populate_contents() + new /obj/item/grenade/syndieminibomb/pen(src) diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 0409a6004d3d..231a5586bcb1 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -59,7 +59,7 @@ turfs += T if(turfs.len) L["None (Dangerous)"] = pick(turfs) - var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") as null|anything in L + var/t1 = tgui_input_list(user, "Please select a teleporter to lock in on.", "Hand Teleporter", L) if(!t1 || (!user.is_in_active_hand(src) || user.stat || user.restrained())) return if(active_portals >= 3) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 0888040b8ae8..5ebf91d6272e 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -78,10 +78,10 @@ qdel(src) return if(is_pen(W)) - var/decalselection = input("Please select a decal") as null|anything in list("Atmospherics", "Bartender", "Barber", "Blueshield", "Captain", + var/decalselection = tgui_input_list(user, "Please select a decal", "Paint Box", list("Atmospherics", "Bartender", "Barber", "Blueshield", "Captain", "Cargo", "Chief Engineer", "Chaplain", "Chef", "Chemist", "Assistant", "Clown", "CMO", "Coroner", "Detective", "Engineering", "Genetics", "HOP", "HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Medical", "Mime", "Mining", "NT Representative", "Paramedic", - "Prisoner", "Research Director", "Security", "Syndicate", "Therapist", "Virology", "Warden", "Xenobiology") + "Prisoner", "Research Director", "Security", "Syndicate", "Therapist", "Virology", "Warden", "Xenobiology")) if(!decalselection) return if(user.incapacitated()) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index c4bf4779a2ea..73f75df0569a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -26,12 +26,12 @@ /obj/structure/closet/secure_closet/roboticist/populate_contents() new /obj/item/mod/core/standard(src) - new /obj/item/storage/backpack(src) - new /obj/item/storage/backpack(src) - new /obj/item/storage/backpack/satchel_norm(src) - new /obj/item/storage/backpack/satchel_norm(src) - new /obj/item/storage/backpack/duffel(src) - new /obj/item/storage/backpack/duffel(src) + new /obj/item/storage/backpack/robotics(src) + new /obj/item/storage/backpack/robotics(src) + new /obj/item/storage/backpack/satchel_robo(src) + new /obj/item/storage/backpack/satchel_robo(src) + new /obj/item/storage/backpack/duffel/robotics(src) + new /obj/item/storage/backpack/duffel/robotics(src) new /obj/item/clothing/suit/storage/labcoat/roboblack(src) new /obj/item/clothing/suit/storage/labcoat/robowhite(src) new /obj/item/radio/headset/headset_sci(src) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 3775ac87fb0b..5bc31b1d0502 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,7 +12,7 @@ if(ishuman(user) && anchored) var/mob/living/carbon/human/H = user - var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") + var/choice = tgui_input_list(user, "Underwear, Undershirt, or Socks?", "Changing", list("Underwear","Undershirt","Socks")) if(!Adjacent(user)) return @@ -24,7 +24,7 @@ if(!(H.dna.species.name in S.species_allowed)) continue valid_underwear[underwear] = GLOB.underwear_list[underwear] - var/new_underwear = input(user, "Choose your underwear:", "Changing") as null|anything in valid_underwear + var/new_underwear = tgui_input_list(user, "Choose your underwear:", "Changing", valid_underwear) if(new_underwear) H.underwear = new_underwear @@ -35,7 +35,7 @@ if(!(H.dna.species.name in S.species_allowed)) continue valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt] - var/new_undershirt = input(user, "Choose your undershirt:", "Changing") as null|anything in valid_undershirts + var/new_undershirt = tgui_input_list(user, "Choose your undershirt:", "Changing", valid_undershirts) if(new_undershirt) H.undershirt = new_undershirt @@ -46,7 +46,7 @@ if(!(H.dna.species.name in S.species_allowed)) continue valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle] - var/new_socks = input(user, "Choose your socks:", "Changing") as null|anything in valid_sockstyles + var/new_socks = tgui_input_list(user, "Choose your socks:", "Changing", valid_sockstyles) if(new_socks) H.socks = new_socks diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index d8203fe9fcd0..e6bd754e6e21 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -284,7 +284,7 @@ canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS) /obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params) - if(is_hot(W) > 300) + if(W.get_heat() > 300) var/turf/T = locate(user) message_admins("Plasma falsewall ignited by [key_name_admin(user)] in [ADMIN_VERBOSEJMP(T)]") log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]") diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 6a4eb718120a..20424ff6b732 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -177,8 +177,8 @@ sheetType = /obj/item/stack/sheet/mineral/plasma /obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user) - if(is_hot(W)) - message_admins("Plasma mineral door ignited by [key_name_admin(user)] in ([x], [y], [z] - JMP)", 0, 1) + if(W.get_heat()) + message_admins("Plasma mineral door ignited by [key_name_admin(user)] in ([x], [y], [z] - JMP)", 0, 1) log_game("Plasma mineral door ignited by [key_name(user)] in ([x], [y], [z])") investigate_log("was ignited by [key_name(user)]","atmos") TemperatureAct(100) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index a11a1de1dc17..eabccdf939a5 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -104,7 +104,7 @@ return var/mob/living/carbon/human/H = user - var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in options + var/choice = tgui_input_list(user, "Something to change?", "Magical Grooming", options) switch(choice) if("Name") @@ -139,7 +139,7 @@ AC.ui_interact(user) if("Voice") - var/voice_choice = input(user, "Perhaps...", "Voice effects") as null|anything in list("Comic Sans", "Wingdings", "Swedish", "Chav", "Mute") + var/voice_choice = tgui_input_list(user, "Perhaps...", "Voice effects", list("Comic Sans", "Wingdings", "Swedish", "Chav", "Mute")) var/voice_mutation switch(voice_choice) if("Comic Sans") diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 849b4cc1d59b..c7310b9141db 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -125,11 +125,11 @@ ..() /obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params) - if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite + if(W.get_heat() > 300)//If the temperature of the object is over 300, then ignite message_admins("[key_name_admin(user)] ignited a plasma statue at [COORD(loc)]") log_game("[key_name(user)] ignited plasma a statue at [COORD(loc)]") investigate_log("[key_name(user)] ignited a plasma statue at [COORD(loc)]", "atmos") - ignite(is_hot(W)) + ignite(W.get_heat()) return return ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 2c42680c6a3d..e6adf57c7626 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -139,7 +139,7 @@ choices += "Connect" choices += "Rotate" - var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices + var/response = tgui_input_list(user, "What do you want to do?", "[src]", choices) if(!Adjacent(user) || !response) //moved away or cancelled return switch(response) @@ -545,7 +545,7 @@ if(can_rotate) choices += "Rotate" - var/response = input(user, "What do you want to do?", "[src]") as null|anything in choices + var/response = tgui_input_list(user, "What do you want to do?", "[src]", choices) if(!Adjacent(user) || !response) //moved away or cancelled return switch(response) diff --git a/code/game/turfs/simulated/floor/mineral_floors.dm b/code/game/turfs/simulated/floor/mineral_floors.dm index fb75450a8a51..d33d5a8d2f3e 100644 --- a/code/game/turfs/simulated/floor/mineral_floors.dm +++ b/code/game/turfs/simulated/floor/mineral_floors.dm @@ -36,11 +36,11 @@ PlasmaBurn() /turf/simulated/floor/mineral/plasma/attackby(obj/item/W, mob/user, params) - if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma flooring was ignited by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) in ([x],[y],[z] - JMP)",0,1) + if(W.get_heat() > 300)//If the temperature of the object is over 300, then ignite + message_admins("Plasma flooring was ignited by [key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma flooring was ignited by [key_name(user)] in ([x],[y],[z])") investigate_log("was ignited by [key_name(user)]","atmos") - ignite(is_hot(W)) + ignite(W.get_heat()) return ..() diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 5f7bb041f3a2..57a7f7dbc043 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -106,12 +106,12 @@ smoothing_groups = list(SMOOTH_GROUP_SIMULATED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS) canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS) -/turf/simulated/wall/mineral/plasma/attackby(obj/item/W as obj, mob/user as mob) - if(is_hot(W) > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma wall ignited by [key_name_admin(user)] in ([x], [y], [z] - JMP)",0,1) +/turf/simulated/wall/mineral/plasma/attackby(obj/item/W, mob/user) + if(W.get_heat() > 300)//If the temperature of the object is over 300, then ignite + message_admins("Plasma wall ignited by [key_name_admin(user)] in ([x], [y], [z] - JMP)",0,1) log_game("Plasma wall ignited by [key_name(user)] in ([x], [y], [z])") investigate_log("was ignited by [key_name(user)]","atmos") - ignite(is_hot(W)) + ignite(W.get_heat()) return ..() diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 825e9c771e96..c72f5072f63a 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -275,7 +275,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") // Client closed the window? Some other error? This is unexpected behaviour, let's CRASH with some info. if(!sizes["paramapwindow.size"]) - CRASH("sizes does not contain paramapwindow.size key. This means a winget() failed to return what we wanted. --- sizes var: [sizes] --- sizes length: [length(sizes)]") + CRASH("sizes does not contain paramapwindow.size key. This means a winget() failed to return what we wanted. --- sizes var: [sizes] --- list contents:[list2params(sizes)] --- sizes length: [length(sizes)]") var/list/map_size = splittext(sizes["paramapwindow.size"], "x") diff --git a/code/game/world.dm b/code/game/world.dm index 3eb34e067be9..2b03f0ad2d1f 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -12,7 +12,7 @@ GLOBAL_DATUM(test_runner, /datum/test_runner) SSmetrics.world_init_time = REALTIMEOFDAY // Do sanity checks to ensure RUST actually exists - if(!fexists(RUST_G)) + if((!fexists(RUST_G)) && world.system_type == MS_WINDOWS) DIRECT_OUTPUT(world.log, "ERROR: RUSTG was not found and is required for the game to function. Server will now exit.") del(world) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 608f88d6ea5c..8fc385496e8e 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2678,8 +2678,8 @@ if(!paths) alert("The path list you sent is empty") return - if(length(paths) > 5) - alert("Select fewer object types, (max 5)") + if(length(paths) > 20) + alert("Select fewer object types, (max 20)") return var/list/offset = splittext(href_list["offset"],",") diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 5a34f372a8d4..a88759b54675 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -13,6 +13,8 @@ background_icon_state = "bg_changeling" /// A reference to the changeling's changeling antag datum. var/datum/antagonist/changeling/cling + /// Datum path used to determine the location and name of the power in changeling evolution menu UI + var/datum/changeling_power_category/category /// Determines whether the power is always given to the changeling or if it must be purchased. var/power_type = CHANGELING_UNOBTAINABLE_POWER /// A description of what the power does. @@ -31,8 +33,6 @@ var/active = FALSE /// If this power can be used while the changeling has the `TRAIT_FAKE_DEATH` trait. var/bypass_fake_death = FALSE - /// Where this ability should be stored in the changeling menu - var/menu_location /* * Changeling code relies on on_purchase to grant powers. diff --git a/code/modules/antagonists/changeling/changeling_power_category.dm b/code/modules/antagonists/changeling/changeling_power_category.dm new file mode 100644 index 000000000000..2d1ea2ee4d91 --- /dev/null +++ b/code/modules/antagonists/changeling/changeling_power_category.dm @@ -0,0 +1,21 @@ +/datum/changeling_power_category + /// The name of the category + var/name = "common" + /// The number used to determine category position in changeling evolution menu UI + var/priority = 0 + +/datum/changeling_power_category/offence + name = "Offence" + priority = 1 + +/datum/changeling_power_category/defence + name = "Defence" + priority = 2 + +/datum/changeling_power_category/utility + name = "Utility" + priority = 3 + +/datum/changeling_power_category/stings + name = "Stings" + priority = 4 diff --git a/code/modules/antagonists/changeling/datum_changeling.dm b/code/modules/antagonists/changeling/datum_changeling.dm index 81a1f9c8e566..173c5d012195 100644 --- a/code/modules/antagonists/changeling/datum_changeling.dm +++ b/code/modules/antagonists/changeling/datum_changeling.dm @@ -347,7 +347,7 @@ continue names[DNA.real_name] = DNA - var/chosen_name = input(message, title, null) as null|anything in names + var/chosen_name = tgui_input_list(owner.current, message, title, names) if(!chosen_name) return diff --git a/code/modules/antagonists/changeling/evolution_menu.dm b/code/modules/antagonists/changeling/evolution_menu.dm index f3e47bdfca21..cfc62411a7e3 100644 --- a/code/modules/antagonists/changeling/evolution_menu.dm +++ b/code/modules/antagonists/changeling/evolution_menu.dm @@ -3,11 +3,6 @@ /// The evolution menu will be shown in the expanded mode, with powers, costs, and power descriptions being displayed. #define EXPANDED_MODE 1 -#define CLING_MENU_ATTACK 1 -#define CLING_MENU_DEFENSE 2 -#define CLING_MENU_UTILITY 3 -#define CLING_MENU_STINGS 4 - /datum/action/changeling/evolution_menu name = "Evolution Menu" desc = "Choose our method of subjugation." @@ -17,29 +12,8 @@ var/view_mode = EXPANDED_MODE /// A list containing the typepaths of bought changeling abilities. For use with the UI. var/list/purchased_abilities = list() - /// A list containing every purchasable changeling power. Includes its name, description, helptext and cost. - var/static/list/ability_list = list() - -/datum/action/changeling/evolution_menu/Grant(mob/M) - ..() - if(length(ability_list)) - return // List is already populated. - - // This is a list of lists, each lower-level list corresponding to one of the CLING_MENU section - ability_list = list(list(), list(), list(), list()) - - for(var/power_path in cling.purchaseable_powers) - var/datum/action/changeling/C = power_path - if(!C.menu_location) - stack_trace("Cling power [C], [C.type] had no corresponding menu location!") - continue - ability_list[C.menu_location] += list(list( - "name" = initial(C.name), - "description" = initial(C.desc), - "helptext" = initial(C.helptext), - "cost" = initial(C.dna_cost), - "power_path" = power_path - )) + /// A list containing lists of category and abilities, related to this category. For each ability includes its name, description, helptext and cost. For use with the UI. + var/static/list/ability_tabs = list() /datum/action/changeling/evolution_menu/try_to_sting(mob/user, mob/target) ui_interact(user) @@ -62,7 +36,7 @@ /datum/action/changeling/evolution_menu/ui_static_data(mob/user) var/list/data = list( - "ability_list" = ability_list + "ability_tabs" = get_ability_tabs() ) return data @@ -92,6 +66,8 @@ return TRUE /datum/action/changeling/evolution_menu/proc/try_purchase_power(power_type) + PRIVATE_PROC(TRUE) + if(!(power_type in cling.purchaseable_powers)) return FALSE if(power_type in purchased_abilities) @@ -110,3 +86,55 @@ cling.give_power(new power_type) return TRUE + +/datum/action/changeling/evolution_menu/proc/get_ability_tabs() + PRIVATE_PROC(TRUE) + + if(!length(ability_tabs)) + ability_tabs = build_ability_tabs() + + return ability_tabs + +/datum/action/changeling/evolution_menu/proc/build_ability_tabs() + PRIVATE_PROC(TRUE) + + var/list/abilities_by_category_name = get_abilities_grouped_by_category_name() + if(!length(abilities_by_category_name)) + return list() + + var/list/sorted_ability_categories = sortTim(subtypesof(/datum/changeling_power_category), GLOBAL_PROC_REF(cmp_changeling_power_category_asc)) + + var/list/sorted_ability_tabs = list() + for(var/datum/changeling_power_category/category as anything in sorted_ability_categories) + var/list/abilities = abilities_by_category_name[initial(category.name)] + sorted_ability_tabs += list(list( + "category" = initial(category.name), + "abilities" = abilities)) + + return sorted_ability_tabs + +/datum/action/changeling/evolution_menu/proc/get_abilities_grouped_by_category_name() + PRIVATE_PROC(TRUE) + + var/list/abilities_by_category_name = list() + for(var/power_path in cling.purchaseable_powers) + var/datum/action/changeling/changeling_ability = power_path + + if(!changeling_ability.category) + stack_trace("Cling power [changeling_ability], [changeling_ability.type] had no assigned category!") + continue + + var/category_name = initial(changeling_ability.category.name) + var/list/abilities = abilities_by_category_name[category_name] + if(!islist(abilities)) + abilities_by_category_name[category_name] = abilities = list() + + abilities += list(list( + "name" = initial(changeling_ability.name), + "description" = initial(changeling_ability.desc), + "helptext" = initial(changeling_ability.helptext), + "cost" = initial(changeling_ability.dna_cost), + "power_path" = power_path + )) + + return abilities_by_category_name diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm index 8e443fdbf61f..a156a58467f9 100644 --- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm +++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm @@ -7,7 +7,7 @@ dna_cost = 4 active = FALSE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /datum/action/changeling/augmented_eyesight/on_purchase(mob/user, /datum/antagonist/changeling/C) //The ability starts inactive, so we should be protected from flashes. if(!..()) diff --git a/code/modules/antagonists/changeling/powers/become_headslug.dm b/code/modules/antagonists/changeling/powers/become_headslug.dm index ee8103520490..be1f1fdbfae6 100644 --- a/code/modules/antagonists/changeling/powers/become_headslug.dm +++ b/code/modules/antagonists/changeling/powers/become_headslug.dm @@ -9,7 +9,7 @@ req_stat = DEAD bypass_fake_death = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence /datum/action/changeling/headslug/try_to_sting(mob/user, mob/target) if(alert("Are you sure you wish to do this? This action cannot be undone.",,"Yes","No") == "No") diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm index 0d4fbfc0cd31..645c9189d104 100644 --- a/code/modules/antagonists/changeling/powers/biodegrade.dm +++ b/code/modules/antagonists/changeling/powers/biodegrade.dm @@ -7,7 +7,7 @@ dna_cost = 4 req_human = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence /// Type of acid hand we give to person var/hand = /obj/item/melee/changeling_corrosive_acid /// Current hand given to human, null is we did not give hand, object if hand is given diff --git a/code/modules/antagonists/changeling/powers/chameleon_skin.dm b/code/modules/antagonists/changeling/powers/chameleon_skin.dm index b69ee5c0add8..18229432573c 100644 --- a/code/modules/antagonists/changeling/powers/chameleon_skin.dm +++ b/code/modules/antagonists/changeling/powers/chameleon_skin.dm @@ -7,7 +7,7 @@ chemical_cost = 25 req_human = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /datum/action/changeling/chameleon_skin/sting_action(mob/user) var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = TRUE diff --git a/code/modules/antagonists/changeling/powers/contort_body.dm b/code/modules/antagonists/changeling/powers/contort_body.dm index 3c705db5345c..8d8e611ee85f 100644 --- a/code/modules/antagonists/changeling/powers/contort_body.dm +++ b/code/modules/antagonists/changeling/powers/contort_body.dm @@ -5,7 +5,7 @@ chemical_cost = 25 dna_cost = 4 power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /datum/action/changeling/contort_body/Remove(mob/M) REMOVE_TRAIT(M, TRAIT_CONTORTED_BODY, CHANGELING_TRAIT) diff --git a/code/modules/antagonists/changeling/powers/digitalcamo.dm b/code/modules/antagonists/changeling/powers/digitalcamo.dm index be29d8a42f69..4ce7480153ab 100644 --- a/code/modules/antagonists/changeling/powers/digitalcamo.dm +++ b/code/modules/antagonists/changeling/powers/digitalcamo.dm @@ -5,7 +5,7 @@ button_icon_state = "digital_camo" dna_cost = 2 power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /datum/action/changeling/digitalcamo/Remove(mob/M) REMOVE_TRAIT(M, TRAIT_AI_UNTRACKABLE, CHANGELING_TRAIT) diff --git a/code/modules/antagonists/changeling/powers/epinephrine.dm b/code/modules/antagonists/changeling/powers/epinephrine.dm index 070cc912064d..00e1f19e7b13 100644 --- a/code/modules/antagonists/changeling/powers/epinephrine.dm +++ b/code/modules/antagonists/changeling/powers/epinephrine.dm @@ -8,7 +8,7 @@ req_human = TRUE req_stat = UNCONSCIOUS power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence //Recover from stuns. /datum/action/changeling/epinephrine/sting_action(mob/living/user) diff --git a/code/modules/antagonists/changeling/powers/fleshmend.dm b/code/modules/antagonists/changeling/powers/fleshmend.dm index d5968b247cd0..a2d46914432c 100644 --- a/code/modules/antagonists/changeling/powers/fleshmend.dm +++ b/code/modules/antagonists/changeling/powers/fleshmend.dm @@ -7,7 +7,7 @@ dna_cost = 4 req_stat = UNCONSCIOUS power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence //Starts healing you every second for 10 seconds. Can be used whilst unconscious. /datum/action/changeling/fleshmend/sting_action(mob/living/user) diff --git a/code/modules/antagonists/changeling/powers/hivemind.dm b/code/modules/antagonists/changeling/powers/hivemind.dm index a2d21070cfd0..29079eaa61dd 100644 --- a/code/modules/antagonists/changeling/powers/hivemind.dm +++ b/code/modules/antagonists/changeling/powers/hivemind.dm @@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(hivemind_bank) chemical_cost = 10 dna_cost = 4 power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /datum/action/changeling/hivemind_pick/on_purchase(mob/user, datum/antagonist/changeling/C) if(!..()) @@ -50,7 +50,7 @@ GLOBAL_LIST_EMPTY(hivemind_bank) to_chat(user, "There's no new DNA to absorb from the air.") return - var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names + var/S = tgui_input_list(user, "Select a DNA absorb from the air", "Absorb DNA", names) if(!S) return diff --git a/code/modules/antagonists/changeling/powers/lesserform.dm b/code/modules/antagonists/changeling/powers/lesserform.dm index 85e960b8ce41..ea297fe802d6 100644 --- a/code/modules/antagonists/changeling/powers/lesserform.dm +++ b/code/modules/antagonists/changeling/powers/lesserform.dm @@ -7,7 +7,7 @@ dna_cost = 2 req_human = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility //Transform into a monkey. /datum/action/changeling/lesserform/sting_action(mob/living/carbon/human/user) diff --git a/code/modules/antagonists/changeling/powers/mimic_voice.dm b/code/modules/antagonists/changeling/powers/mimic_voice.dm index 558e54e92cdd..17347810c990 100644 --- a/code/modules/antagonists/changeling/powers/mimic_voice.dm +++ b/code/modules/antagonists/changeling/powers/mimic_voice.dm @@ -7,7 +7,7 @@ dna_cost = 2 req_human = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility // Fake Voice diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 50d92248b8bf..48c133b545b2 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -128,8 +128,8 @@ weapon_type = /obj/item/melee/arm_blade weapon_name_simple = "blade" power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_ATTACK recharge_slowdown = 0.75 + category = /datum/changeling_power_category/offence /obj/item/melee/arm_blade name = "arm blade" @@ -194,7 +194,7 @@ weapon_name_simple = "tentacle" silent = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_ATTACK + category = /datum/changeling_power_category/offence /obj/item/gun/magic/tentacle name = "tentacle" @@ -398,7 +398,7 @@ weapon_type = /obj/item/shield/changeling weapon_name_simple = "shield" power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence /datum/action/changeling/weapon/shield/sting_action(mob/user) var/obj/item/shield/changeling/S = ..(user) @@ -453,7 +453,7 @@ helmet_name_simple = "space helmet" recharge_slowdown = 0.5 blood_on_castoff = 1 - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /obj/item/clothing/suit/space/changeling name = "flesh mass" @@ -499,7 +499,7 @@ suit_name_simple = "armor" helmet_name_simple = "helmet" recharge_slowdown = 0.25 - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence /obj/item/clothing/suit/armor/changeling name = "chitinous mass" diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm index 69682dd18e13..231af7879598 100644 --- a/code/modules/antagonists/changeling/powers/panacea.dm +++ b/code/modules/antagonists/changeling/powers/panacea.dm @@ -7,7 +7,7 @@ dna_cost = 2 req_stat = UNCONSCIOUS power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence //Heals the things that the other regenerative abilities don't. /datum/action/changeling/panacea/sting_action(mob/living/user) diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm index f0c843b0aab5..90c98ab8e6c0 100644 --- a/code/modules/antagonists/changeling/powers/shriek.dm +++ b/code/modules/antagonists/changeling/powers/shriek.dm @@ -7,7 +7,7 @@ dna_cost = 2 req_human = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_ATTACK + category = /datum/changeling_power_category/offence //A flashy ability, good for crowd control and sowing chaos. /datum/action/changeling/resonant_shriek/sting_action(mob/user) @@ -44,7 +44,7 @@ chemical_cost = 30 dna_cost = 2 power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility //A flashy ability, good for crowd control and sewing chaos. /datum/action/changeling/dissonant_shriek/sting_action(mob/user) diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm index cca63a4f73d4..c3ff08b02937 100644 --- a/code/modules/antagonists/changeling/powers/strained_muscles.dm +++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm @@ -10,7 +10,7 @@ dna_cost = 2 req_human = TRUE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_DEFENSE + category = /datum/changeling_power_category/defence /datum/action/changeling/strained_muscles/Remove(mob/living/L) L.remove_status_effect(STATUS_EFFECT_SPEEDLEGS) diff --git a/code/modules/antagonists/changeling/powers/summon_spiders.dm b/code/modules/antagonists/changeling/powers/summon_spiders.dm index e4d37c51e4a4..3ef00c46c0ba 100644 --- a/code/modules/antagonists/changeling/powers/summon_spiders.dm +++ b/code/modules/antagonists/changeling/powers/summon_spiders.dm @@ -16,7 +16,7 @@ /// Checks if changeling is already spawning a spider var/is_operating = FALSE power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_UTILITY + category = /datum/changeling_power_category/utility /// Makes a spider. Good for setting traps and combat. /datum/action/changeling/spiders/sting_action(mob/user) diff --git a/code/modules/antagonists/changeling/powers/swap_form.dm b/code/modules/antagonists/changeling/powers/swap_form.dm index 9fec3a5e3d68..71a838c1fdc3 100644 --- a/code/modules/antagonists/changeling/powers/swap_form.dm +++ b/code/modules/antagonists/changeling/powers/swap_form.dm @@ -7,7 +7,7 @@ dna_cost = 2 req_human = TRUE //Monkeys can't grab power_type = CHANGELING_PURCHASABLE_POWER - menu_location = CLING_MENU_ATTACK + category = /datum/changeling_power_category/offence /datum/action/changeling/swap_form/can_sting(mob/living/carbon/user) if(!..()) diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 798dd999a385..504c568f8a31 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -2,7 +2,7 @@ name = "Tiny Prick" desc = "Stabby stabby" power_type = CHANGELING_UNOBTAINABLE_POWER - menu_location = CLING_MENU_STINGS + category = /datum/changeling_power_category/stings var/sting_icon = null /// A middle click override used to intercept changeling stings performed on a target. var/datum/middleClickOverride/callback_invoker/click_override diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 509d30e35b67..dd9c6f9ec053 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -59,3 +59,6 @@ if(!istype(loc, /obj/item/assembly_holder)) activate() add_fingerprint(user) + +/obj/item/assembly/igniter/get_heat() + return 2000 diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm index 5f6816fcf9ed..9400cb7438af 100644 --- a/code/modules/client/preference/link_processing.dm +++ b/code/modules/client/preference/link_processing.dm @@ -29,7 +29,7 @@ var/datum/job/job = locate(href_list["job"]) if(job) var/choices = list(job.title) + job.alt_titles - var/choice = input("Pick a title for [job.title].", "Character Generation", active_character.GetPlayerAltTitle(job)) as anything in choices | null + var/choice = tgui_input_list(user, "Pick a title for [job.title]", "Character Generation", choices) if(choice) active_character.SetPlayerAltTitle(job, choice) active_character.SetChoices(user) @@ -223,7 +223,9 @@ if(can_use_species(user, _species)) new_species += _species - active_character.species = input("Please select a species", "Character Generation", null) in sortTim(new_species, GLOBAL_PROC_REF(cmp_text_asc)) + active_character.species = tgui_input_list(user, "Please select a species", "Character Generation", sortList(new_species)) + if(!active_character.species) + return var/datum/species/NS = GLOB.all_species[active_character.species] if(!istype(NS)) //The species was invalid. Notify the user and fail out. active_character.species = prev_species @@ -309,14 +311,17 @@ if(!(lang.flags & RESTRICTED)) new_languages += lang.name - active_character.language = input("Please select a secondary language", "Character Generation", null) in sortTim(new_languages, GLOBAL_PROC_REF(cmp_text_asc)) + active_character.language = tgui_input_list(user, "Please select a secondary language", "Character Generation", sortList(new_languages)) + if(!active_character.language) + return if("autohiss_mode") if(S.autohiss_basic_map) var/list/autohiss_choice = list("Off" = AUTOHISS_OFF, "Basic" = AUTOHISS_BASIC, "Full" = AUTOHISS_FULL) - var/new_autohiss_pref = input(user, "Choose your character's auto-accent level:", "Character Preference") as null|anything in autohiss_choice - if(new_autohiss_pref) - active_character.autohiss_mode = autohiss_choice[new_autohiss_pref] + var/new_autohiss_pref = tgui_input_list(user, "Choose your character's auto-accent level", "Character Preference", autohiss_choice) + if(!new_autohiss_pref) + return + active_character.autohiss_mode = autohiss_choice[new_autohiss_pref] if("metadata") var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , active_character.metadata) as message|null @@ -324,9 +329,10 @@ active_character.metadata = sanitize(copytext_char(new_metadata,1,MAX_MESSAGE_LEN)) // SS220 EDIT - ORIGINAL: copytext if("b_type") - var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) - if(new_b_type) - active_character.b_type = new_b_type + var/new_b_type = tgui_input_list(user, "Choose your character's blood-type", "Character Preference", list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")) + if(!new_b_type) + return + active_character.b_type = new_b_type if("hair") if(!(S.bodyflags & BALD)) @@ -369,12 +375,12 @@ valid_hairstyles += hairstyle sortTim(valid_hairstyles, GLOBAL_PROC_REF(cmp_text_asc)) //this alphabetizes the list - var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles + var/new_h_style = tgui_input_list(user, "Choose your character's hair style:", "Character Preference", valid_hairstyles) if(new_h_style) active_character.h_style = new_h_style if("h_grad_style") - var/result = input(user, "Choose your character's hair gradient style:", "Character Preference") as null|anything in GLOB.hair_gradients_list + var/result = tgui_input_list(user, "Choose your character's hair gradient style", "Character Preference", GLOB.hair_gradients_list) if(result) active_character.h_grad_style = result @@ -414,7 +420,7 @@ valid_head_accessory_styles += head_accessory_style sortTim(valid_head_accessory_styles, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles + var/new_head_accessory_style = tgui_input_list(user, "Choose the style of your character's head accessory", "Character Preference", valid_head_accessory_styles) if(new_head_accessory_style) active_character.ha_style = new_head_accessory_style @@ -423,7 +429,6 @@ return if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads. var/list/valid_alt_heads = list() - valid_alt_heads["None"] = GLOB.alt_heads_list["None"] //The only null entry should be the "None" option for(var/alternate_head in GLOB.alt_heads_list) var/datum/sprite_accessory/alt_heads/head = GLOB.alt_heads_list[alternate_head] if(!(active_character.species in head.species_allowed)) @@ -431,7 +436,7 @@ valid_alt_heads += alternate_head - var/new_alt_head = input(user, "Choose your character's alternate head style:", "Character Preference") as null|anything in valid_alt_heads + var/new_alt_head = tgui_input_list(user, "Choose your character's alternate head style", "Character Preference", valid_alt_heads) if(new_alt_head) active_character.alt_head = new_alt_head if(active_character.m_styles["head"]) @@ -443,7 +448,6 @@ if("m_style_head") if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. var/list/valid_markings = list() - valid_markings["None"] = GLOB.marking_styles_list["None"] for(var/markingstyle in GLOB.marking_styles_list) var/datum/sprite_accessory/body_markings/head/M = GLOB.marking_styles_list[markingstyle] if(!(active_character.species in M.species_allowed)) @@ -472,7 +476,7 @@ valid_markings += markingstyle sortTim(valid_markings, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_marking_style = input(user, "Choose the style of your character's head markings:", "Character Preference", active_character.m_styles["head"]) as null|anything in valid_markings + var/new_marking_style = tgui_input_list(user, "Choose the style of your character's head markings:", "Character Preference", valid_markings) if(new_marking_style) active_character.m_styles["head"] = new_marking_style @@ -486,7 +490,6 @@ if("m_style_body") if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. var/list/valid_markings = list() - valid_markings["None"] = GLOB.marking_styles_list["None"] for(var/markingstyle in GLOB.marking_styles_list) var/datum/sprite_accessory/M = GLOB.marking_styles_list[markingstyle] if(!(active_character.species in M.species_allowed)) @@ -496,7 +499,7 @@ valid_markings += markingstyle sortTim(valid_markings, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_marking_style = input(user, "Choose the style of your character's body markings:", "Character Preference", active_character.m_styles["body"]) as null|anything in valid_markings + var/new_marking_style = tgui_input_list(user, "Choose the style of your character's body markings:", "Character Preference", valid_markings) if(new_marking_style) active_character.m_styles["body"] = new_marking_style @@ -510,7 +513,6 @@ if("m_style_tail") if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. var/list/valid_markings = list() - valid_markings["None"] = GLOB.marking_styles_list["None"] for(var/markingstyle in GLOB.marking_styles_list) var/datum/sprite_accessory/body_markings/tail/M = GLOB.marking_styles_list[markingstyle] if(M.marking_location != "tail") @@ -526,7 +528,7 @@ valid_markings += markingstyle sortTim(valid_markings, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_marking_style = input(user, "Choose the style of your character's tail markings:", "Character Preference", active_character.m_styles["tail"]) as null|anything in valid_markings + var/new_marking_style = tgui_input_list(user, "Choose the style of your character's tail markings:", "Character Preference", valid_markings) if(new_marking_style) active_character.m_styles["tail"] = new_marking_style @@ -553,7 +555,7 @@ else possible_body_accessories -= "None" // in case an admin is viewing it sortTim(possible_body_accessories, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories + var/new_body_accessory = tgui_input_list(user, "Choose your body accessory", "Character Preference", possible_body_accessories) if(new_body_accessory) active_character.m_styles["tail"] = "None" active_character.body_accessory = (new_body_accessory == "None") ? null : new_body_accessory @@ -601,7 +603,7 @@ if(active_character.species in SA.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. valid_facial_hairstyles += facialhairstyle sortTim(valid_facial_hairstyles, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facial_hairstyles + var/new_f_style = tgui_input_list(user, "Choose your character's facial-hair style", "Character Preference", valid_facial_hairstyles) if(new_f_style) active_character.f_style = new_f_style @@ -617,7 +619,7 @@ continue valid_underwear[underwear] = GLOB.underwear_list[underwear] sortTim(valid_underwear, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in valid_underwear + var/new_underwear = tgui_input_list(user, "Choose your character's underwear", "Character Preference", valid_underwear) ShowChoices(user) if(new_underwear) active_character.underwear = new_underwear @@ -633,7 +635,7 @@ continue valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt] sortTim(valid_undershirts, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in valid_undershirts + var/new_undershirt = tgui_input_list(user, "Choose your character's undershirt", "Character Preference", valid_undershirts) ShowChoices(user) if(new_undershirt) active_character.undershirt = new_undershirt @@ -650,7 +652,7 @@ continue valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle] sortTim(valid_sockstyles, GLOBAL_PROC_REF(cmp_text_asc)) - var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles + var/new_socks = tgui_input_list(user, "Choose your character's socks", "Character Preference", valid_sockstyles) ShowChoices(user) if(new_socks) active_character.socks = new_socks @@ -684,22 +686,22 @@ ooccolor = new_ooccolor if("bag") - var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist + var/new_backbag = tgui_input_list(user, "Choose your character's style of bag", "Character Preference", GLOB.backbaglist) if(new_backbag) active_character.backbag = new_backbag if("nt_relation") - var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") + var/new_relation = tgui_input_list(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference", list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed")) if(new_relation) active_character.nanotrasen_relation = new_relation if("physique") - var/new_physique = input(user, "Choose your descriptor for how built your character is on glance.", "Character Preference") as null|anything in GLOB.character_physiques + var/new_physique = tgui_input_list(user, "Choose your descriptor for how built your character is on glance.", "Character Preference", GLOB.character_physiques) if(new_physique) active_character.physique = new_physique if("height") - var/new_height = input(user, "Choose your descriptor for how tall your character is on glance.", "Character Preference") as null|anything in GLOB.character_heights + var/new_height = tgui_input_list(user, "Choose your descriptor for how tall your character is on glance.", "Character Preference", GLOB.character_heights) if(new_height) active_character.height = new_height @@ -726,7 +728,7 @@ var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") if(S.bodyflags & ALL_RPARTS) valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") - var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs + var/limb_name = tgui_input_list(user, "Which limb do you want to change?", "Limbs and Parts", valid_limbs) if(!limb_name) return var/limb = null @@ -775,7 +777,7 @@ if(!(S.bodyflags & ALL_RPARTS)) third_limb = "r_arm" - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states + var/new_state = tgui_input_list(user, "What state do you wish the limb to be in?", "[limb_name]", valid_limb_states) if(!new_state) return switch(new_state) @@ -808,7 +810,7 @@ robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. R = new() //Re-initialize R. - choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. + choice = tgui_input_list(user, "Which manufacturer do you wish to use for this limb?", "[limb_name] - Prosthesis", robolimb_companies) //Choose from a list of companies that offer the part the user wants. if(!choice) return R.company = choice @@ -824,7 +826,7 @@ if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. in_model = 1 if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. - subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models + subchoice = tgui_input_list(user, "Which model of [choice] [limb_name] do you wish to use?", "[limb_name] - Prosthesis - Model", robolimb_models) if(subchoice) choice = subchoice if(limb in list("head", "chest", "groin")) @@ -847,7 +849,7 @@ active_character.rlimb_data[second_limb] = choice active_character.organ_data[second_limb] = "cyborg" if("organs") - var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Eyes", "Ears", "Heart", "Lungs", "Liver", "Kidneys") + var/organ_name = tgui_input_list(user, "Which internal function do you want to change?", "Internal Organs", list("Eyes", "Ears", "Heart", "Lungs", "Liver", "Kidneys")) if(!organ_name) return @@ -866,7 +868,7 @@ if("Kidneys") organ = "kidneys" - var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal", "Cybernetic") + var/new_state = tgui_input_list(user, "What state do you wish the organ to be in?", "[organ_name]", list("Normal", "Cybernetic")) if(!new_state) return switch(new_state) @@ -890,7 +892,7 @@ else switch(href_list["preference"]) if("cbmode") - var/cb_mode = input(user, "Select a colourblind mode\nNote this will disable special screen effects such as the cursed heart warnings!") as null|anything in list(COLOURBLIND_MODE_NONE, COLOURBLIND_MODE_DEUTER, COLOURBLIND_MODE_PROT, COLOURBLIND_MODE_TRIT) + var/cb_mode = tgui_input_list(user, "Select a colourblind mode\nNote this will disable special screen effects such as the cursed heart warnings!", "Colorblind mode", list(COLOURBLIND_MODE_NONE, COLOURBLIND_MODE_DEUTER, COLOURBLIND_MODE_PROT, COLOURBLIND_MODE_TRIT)) if(cb_mode) colourblind_mode = cb_mode user.update_client_colour(0) @@ -905,7 +907,9 @@ if("gender") if(!S.has_gender) - var/newgender = input(user, "Choose Gender:") as null|anything in list("Male", "Female", "Genderless") + var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless")) + if(!newgender) + return switch(newgender) if("Male") active_character.gender = MALE @@ -923,29 +927,32 @@ if("hear_adminhelps") sound ^= SOUND_ADMINHELP if("ui") - switch(UI_style) + var/new_UI_style = tgui_input_list(user, "Choose your UI style", "UI style", list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "White")) + if(!new_UI_style) + return + switch(new_UI_style) if("Midnight") - UI_style = "Plasmafire" + UI_style = "Midnight" if("Plasmafire") - UI_style = "Retro" + UI_style = "Plasmafire" if("Retro") - UI_style = "Slimecore" + UI_style = "Retro" if("Slimecore") - UI_style = "Operative" + UI_style = "Slimecore" if("Operative") + UI_style = "Operative" + if("White") + UI_style = "White" // SS220 ADDITION START - UI_style = "Vaporwave" if("Vaporwave") - UI_style = "Detective" + UI_style = "Vaporwave" if("Detective") - UI_style = "Trasen" + UI_style = "Detective" if("Trasen") - UI_style = "Clockwork" + UI_style = "Trasen" if("Clockwork") + UI_style = "Clockwork" // SS220 ADDITION END - UI_style = "White" - else - UI_style = "Midnight" if(ishuman(usr)) //mid-round preference changes, for aesthetics var/mob/living/carbon/human/H = usr @@ -971,7 +978,9 @@ "19x15 (Ultrawide)" = "19x15" ) - var/new_range = input(user, "Select a view range") as anything in viewrange_options + var/new_range = tgui_input_list(user, "Select a view range", "View range", viewrange_options) + if(!new_range) + return var/actual_new_range = viewrange_options[new_range] viewrange = actual_new_range @@ -1105,7 +1114,10 @@ "High" = PARALLAX_HIGH, "Insane" = PARALLAX_INSANE ) - parallax = parallax_styles[input(user, "Pick a parallax style", "Parallax Style") as null|anything in parallax_styles] + var/new_parallax = tgui_input_list(user, "Pick a parallax style", "Parallax Style", parallax_styles) + if(!new_parallax) + return + parallax = parallax_styles[new_parallax] if(parent && parent.mob && parent.mob.hud_used) parent.mob.hud_used.update_parallax_pref() diff --git a/code/modules/client/preference/loadout/loadout_accessories.dm b/code/modules/client/preference/loadout/loadout_accessories.dm index 3ea92a98d263..864887d2e95f 100644 --- a/code/modules/client/preference/loadout/loadout_accessories.dm +++ b/code/modules/client/preference/loadout/loadout_accessories.dm @@ -147,10 +147,18 @@ display_name = "Cowboy shirt, short sleeved navy" path = /obj/item/clothing/accessory/cowboyshirt/navy/short_sleeved +/datum/gear/accessory/locket/silver + display_name = "Silver locket" + path = /obj/item/clothing/accessory/necklace/locket/silver + /datum/gear/accessory/locket display_name = "Gold locket" path = /obj/item/clothing/accessory/necklace/locket +/datum/gear/accessory/necklace/long + display_name = "Large necklace" + path = /obj/item/clothing/accessory/necklace/long + /datum/gear/accessory/necklace display_name = "Simple necklace" path = /obj/item/clothing/accessory/necklace diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 3ec58f7a7691..29f964014969 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -1,6 +1,5 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts to play these roles ROLE_PAI = 0, - ROLE_POSIBRAIN = 0, ROLE_GUARDIAN = 0, ROLE_TRAITOR = 7, ROLE_CHANGELING = 14, @@ -16,8 +15,6 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts ROLE_SENTIENT = 21, ROLE_ELITE = 21, // ROLE_GANG = 21, - ROLE_NINJA = 21, - ROLE_GSPIDER = 21, ROLE_ABDUCTOR = 30 )) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 1e31735ae2ea..9b1028c82a62 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -30,7 +30,7 @@ /datum/action/chameleon_outfit/proc/select_outfit(mob/user) if(!user || !IsAvailable()) return FALSE - var/selected = input("Select outfit to change into", "Chameleon Outfit") as null|anything in outfit_options + var/selected = tgui_input_list(user, "Select outfit to change into", "Chameleon Outfit", outfit_options) if(!IsAvailable() || QDELETED(src) || QDELETED(user)) return FALSE var/outfit_type = outfit_options[selected] @@ -110,7 +110,7 @@ /datum/action/item_action/chameleon/change/proc/select_look(mob/user) var/obj/item/picked_item var/picked_name - picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) as null|anything in chameleon_list + picked_name = tgui_input_list(user, "Select [chameleon_name] to change into", "Chameleon [chameleon_name]", chameleon_list) if(!picked_name) return picked_item = chameleon_list[picked_name] @@ -379,9 +379,10 @@ /obj/item/clothing/gloves/chameleon desc = "These gloves will protect the wearer from electric shock." name = "insulated gloves" + siemens_coefficient = 0 + permeability_coefficient = 0.05 icon_state = "yellow" item_state = "ygloves" - resistance_flags = NONE armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 50) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ed5f8178d20a..22b63fff7cb9 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -142,7 +142,9 @@ slot_flags = SLOT_FLAG_EARS resistance_flags = NONE sprite_sheets = list( - "Vox" = 'icons/mob/clothing/species/vox/ears.dmi') //We read you loud and skree-er. + "Vox" = 'icons/mob/clothing/species/vox/ears.dmi', //We read you loud and skree-er. + "Kidan" = 'icons/mob/clothing/species/kidan/ears.dmi' + ) /obj/item/clothing/ears/attack_hand(mob/user) if(!user) @@ -312,7 +314,6 @@ var/list/modes = list("Off", "Binary sensors", "Vitals tracker", "Tracking beacon") var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes - if(!user.Adjacent(src)) to_chat(user, "You have moved too far away!") return diff --git a/code/modules/clothing/glasses/hudglasses.dm b/code/modules/clothing/glasses/hudglasses.dm index 784eb833ba3c..a87eedd9ea8e 100644 --- a/code/modules/clothing/glasses/hudglasses.dm +++ b/code/modules/clothing/glasses/hudglasses.dm @@ -235,3 +235,32 @@ "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', "Kidan" = 'icons/mob/clothing/species/kidan/eyes.dmi' ) + +/obj/item/clothing/glasses/hud/janitor + name = "janitor HUD" + desc = "A heads-up display that scans for messes and alerts the user. Good for finding puddles hiding under catwalks." + icon_state = "janihud" + hud_types = DATA_HUD_JANITOR + + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', + "Drask" = 'icons/mob/clothing/species/drask/eyes.dmi', + "Grey" = 'icons/mob/clothing/species/grey/eyes.dmi', + "Kidan" = 'icons/mob/clothing/species/kidan/eyes.dmi' + ) + +/obj/item/clothing/glasses/hud/janitor/sunglasses + name = "janitor HUD sunglasses" + desc = "Sunglasses with a build-in filth scanner, scans for messes and alerts the user." + icon_state = "sunhudjani" + see_in_dark = 1 + flash_protect = FLASH_PROTECTION_FLASH + tint = FLASH_PROTECTION_FLASH + +/obj/item/clothing/glasses/hud/janitor/night + name = "night vision janitor HUD" + desc = "A janitorial filth scanner fitted with a light amplifier." + icon_state = "nvjanihud" + origin_tech = "magnets=4;biotech=4;plasmatech=4;engineering=5" + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index a4f8afdcf061..cc8c0cc27012 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -580,6 +580,14 @@ item_color = "necklace" slot_flags = SLOT_FLAG_TIE +/obj/item/clothing/accessory/necklace/long + name = "large necklace" + desc = "A large necklace." + icon_state = "necklacelong" + item_state = "necklacelong" + item_color = "necklacelong" + + /obj/item/clothing/accessory/necklace/dope name = "gold necklace" desc = "Damn, it feels good to be a gangster." @@ -608,9 +616,9 @@ /obj/item/clothing/accessory/necklace/locket name = "gold locket" desc = "A gold locket that seems to have space for a photo within." - icon_state = "locket" - item_state = "locket" - item_color = "locket" + icon_state = "locketgold" + item_state = "locketgold" + item_color = "locketgold" slot_flags = SLOT_FLAG_TIE var/base_icon var/open @@ -656,6 +664,13 @@ else return ..() +/obj/item/clothing/accessory/necklace/locket/silver + name = "silver locket" + desc = "A silver locket that seems to have space for a photo within." + icon_state = "locketsilver" + item_state = "locketsilver" + item_color = "locketsilver" + //Cowboy Shirts /obj/item/clothing/accessory/cowboyshirt name = "black cowboy shirt" diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index e7f85338775e..d61c901d1e5f 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -77,6 +77,17 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON +/datum/crafting_recipe/improvised_pneumatic_cannon + name = "Pneumatic Cannon" + result = list(/obj/item/pneumatic_cannon/ghetto) + tools = list(TOOL_WELDER, TOOL_WRENCH) + reqs = list(/obj/item/stack/sheet/metal = 4, + /obj/item/stack/packageWrap = 8, + /obj/item/pipe = 2) + time = 300 + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + /datum/crafting_recipe/throwing_croissant name = "Throwing croissant" reqs = list( diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm index 5415b415c22d..5ce8299daee3 100644 --- a/code/modules/crafting/tailoring.dm +++ b/code/modules/crafting/tailoring.dm @@ -194,6 +194,24 @@ reqs = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses = 1) category = CAT_CLOTHING +/datum/crafting_recipe/hudsunjani + name = "Janitor HUD sunglasses" + result = list(/obj/item/clothing/glasses/hud/janitor/sunglasses) + time = 20 + tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + reqs = list(/obj/item/clothing/glasses/hud/janitor = 1, + /obj/item/clothing/glasses/sunglasses = 1, + /obj/item/stack/cable_coil = 5) + category = CAT_CLOTHING + +/datum/crafting_recipe/hudsunjaniremoval + name = "Janitor HUD sunglasses removal" + result = list(/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/hud/janitor) + time = 20 + tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + reqs = list(/obj/item/clothing/glasses/hud/janitor/sunglasses = 1) + category = CAT_CLOTHING + /datum/crafting_recipe/beergoggles name = "Sunscanners" result = list(/obj/item/clothing/glasses/sunglasses/reagent) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index c72524f7638e..4cb0098abffb 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -704,7 +704,7 @@ "mask_flags" = HIDEMASK|HIDEFACE ) - var/choice = input(user, "How would you like to adjust the helmet?", "Adjust Helmet") as null|anything in options + var/choice = tgui_input_list(user, "How would you like to adjust the helmet?", "Adjust Helmet", options) if(choice && choice != state && !user.incapacitated() && Adjacent(user)) var/list/new_state = options[choice] @@ -771,7 +771,7 @@ options["lime"] ="shazjacket_lime" options["army green"] ="shazjacket_army" - var/choice = input(user, "What color do you wish your jacket to be?", "Change color") as null|anything in options + var/choice = tgui_input_list(user, "What color do you wish your jacket to be?", "Change color", options) if(choice && !user.stat && in_range(user, src)) if(suit_adjusted) @@ -1249,15 +1249,15 @@ var/list/plush_colors = list("red fox plushie" = "redfox", "black fox plushie" = "blackfox", "marble fox plushie" = "marblefox", "blue fox plushie" = "bluefox", "orange fox plushie" = "orangefox", "coffee fox plushie" = "coffeefox", "pink fox plushie" = "pinkfox", "purple fox plushie" = "purplefox", "crimson fox plushie" = "crimsonfox") -/obj/item/toy/plushie/fluff/fox/proc/change_color() +/obj/item/toy/plushie/fluff/fox/proc/change_color(mob/user) if(prompting_change) return prompting_change = TRUE - var/plushie_color = input("Select a color", "[src]") as null|anything in plush_colors + var/plushie_color = tgui_input_list(user, "Select a color", "[src]", plush_colors) prompting_change = FALSE if(!plushie_color) return - if(!Adjacent(usr)) + if(!Adjacent(user)) return name = plushie_color icon_state = plush_colors[plushie_color] @@ -1266,8 +1266,8 @@ var/datum/action/A = X A.UpdateButtonIcon() -/obj/item/toy/plushie/fluff/fox/ui_action_click() - change_color() +/obj/item/toy/plushie/fluff/fox/ui_action_click(mob/user) + change_color(user) // TheFlagbearer: Willow Walker @@ -1439,7 +1439,7 @@ options["Syndicate"] = "syndie_witch" options["Nanotrasen"] ="nt_witch" - var/choice = input(user, "To what form do you wish to Shapeshift this hat?", "Shapeshift Hat") as null|anything in options + var/choice = tgui_input_list(user, "To what form do you wish to Shapeshift this hat?", "Shapeshift Hat", options) if(choice && !user.stat && in_range(user, src)) icon_state = options[choice] diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index d2cde90e0220..3b2ac70a4d8b 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -319,7 +319,7 @@ var/count = length(fish_types[key]) var/fish_description = "[initial(fish_type.fish_name)][count > 1 ? " (x[count])" : ""]" fish_types_input[fish_description] = fish_type - var/caught_fish = input("Select a fish to catch.", "Fishing") as null|anything in fish_types_input //Select a fish from the tank + var/caught_fish = tgui_input_list(user, "Select a fish to catch.", "Fishing", fish_types_input) //Select a fish from the tank if(!caught_fish) return if(!Adjacent(user)) diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 55150c6e769f..10f1065f444f 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -375,7 +375,7 @@ if(href_list["process"]) var/list/choices = list("Glass Bottle" = 1, "Plastic Bottle" = 2, "Metal Can" = 3) - var/selection = input("Select a container for your beverage.", "Container") as null|anything in choices + var/selection = tgui_input_list(usr, "Select a container for your beverage.", "Container", choices) if(!selection) return else diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index b618c902a400..5307f00752dc 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -372,7 +372,7 @@ new /obj/effect/hotspot(get_turf(target)) /obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) - if(is_hot(I) && !active) + if(I.get_heat() && !active) active = TRUE var/turf/bombturf = get_turf(src) var/area/bombarea = get_area(bombturf) diff --git a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm index 680c32c7e012..c181349498b1 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -98,7 +98,7 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attackby(obj/item/W) ..() - if(is_hot(W)) + if(W.get_heat()) fire_act() /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack_hand(mob/user, pickupfireoverride = TRUE) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index b6a3a29835ec..9a64098491b4 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -174,7 +174,7 @@ players += player //players -= usr - var/mob/living/M = input("Who do you wish to deal a card to?") as null|anything in players + var/mob/living/M = tgui_input_list(usr, "Who do you wish to deal a card to?", "Deal Card", players) if(!usr || !src || !M) return deal_at(usr, M, 1) @@ -195,7 +195,7 @@ var/dcard = input("How many card(s) do you wish to deal? You may deal up to [maxcards] cards.") as num if(dcard > maxcards) return - var/mob/living/M = input("Who do you wish to deal [dcard] card(s)?") as null|anything in players + var/mob/living/M = tgui_input_list(usr, "Who do you wish to deal [dcard] card(s)?", "Deal Card", players) if(!usr || !src || !M || !Adjacent(usr)) return @@ -424,7 +424,7 @@ for(var/datum/playingcard/P in cards) pickablecards[P.name] = P if(!pickedcard) - pickedcard = input("Which card do you want to remove from the hand?") as null|anything in pickablecards + pickedcard = tgui_input_list(usr, "Which card do you want to remove from the hand?", "Remove Card", pickablecards) if(!pickedcard) return @@ -461,7 +461,7 @@ var/list/to_discard = list() for(var/datum/playingcard/P in cards) to_discard[P.name] = P - var/discarding = input("Which card do you wish to put down?") as null|anything in to_discard + var/discarding = tgui_input_list(usr, "Which card do you wish to put down?", "Discard", to_discard) if(!discarding) continue diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index f1f91d5a8e67..57a5eb504ed5 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -222,7 +222,7 @@ if(bees) visible_message("[user] disturbs the bees!") else - var/option = input(user, "What Action do you wish to perform?", "Apiary") as null|anything in list("Remove a Honey Frame","Remove the Queen Bee") + var/option = tgui_input_list(user, "What Action do you wish to perform?", "Apiary", list("Remove a Honey Frame", "Remove the Queen Bee")) if(!Adjacent(user) || !option) return switch(option) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 9303991005a4..43525465b328 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -137,7 +137,7 @@ to_chat(user, "You add a rod to [src].") var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16) underlays += U - if(is_hot(W)) + if(W.get_heat()) lighter = user.ckey user.create_log(MISC_LOG, "lit a bonfire", src) StartBurning() diff --git a/code/modules/input/keybindings_procs.dm b/code/modules/input/keybindings_procs.dm index 1d231127996e..8ae07693672c 100644 --- a/code/modules/input/keybindings_procs.dm +++ b/code/modules/input/keybindings_procs.dm @@ -12,5 +12,11 @@ movement_kb_dirs[key] = KBM.move_dir else active_keybindings[key] += list(KB) + if(!mob) // Clients can join before world/new is setup, so we gotta mob check em + return active_keybindings + for(var/datum/action/action as anything in mob.actions) + if(action.button?.linked_keybind?.binded_to) + var/datum/keybinding/mob/trigger_action_button/linked_bind = action.button.linked_keybind + active_keybindings[linked_bind.binded_to] += list(linked_bind) return active_keybindings diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 09dbb7de3323..5a1e9de918ac 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -210,7 +210,7 @@ if(protected) //we don't want people touching "special" books, especially ones that use iframes to_chat(user, "These pages don't seem to take the ink well. Looks like you can't modify it.") return - var/choice = input(user, "What would you like to edit?") as null|anything in list("Title", "Edit Current Page", "Author", "Summary", "Add Page", "Remove Page") + var/choice = tgui_input_list(user, "What would you like to edit?", "Book Edit", list("Title", "Edit Current Page", "Author", "Summary", "Add Page", "Remove Page")) switch(choice) if("Title") var/newtitle = reject_bad_text(stripped_input(user, "Write a new title:")) diff --git a/code/modules/library/library_equipment.dm b/code/modules/library/library_equipment.dm index b2ff2ce8493e..42a13d63fde1 100644 --- a/code/modules/library/library_equipment.dm +++ b/code/modules/library/library_equipment.dm @@ -56,7 +56,7 @@ if(!length(contents)) return - var/obj/item/book/choice = input(user, "Which book would you like to remove from [src]?") as null|anything in contents + var/obj/item/book/choice = tgui_input_list(user, "Which book would you like to remove from [src]?", "Bookcase", contents) if(!choice) return if(user.incapacitated() || !Adjacent(user)) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index fb2902e1ba99..5851382e0b12 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -115,6 +115,7 @@ log_world("[src] at [AREACOORD(src)] tried to bolt [airlock] but it's already locked!") else airlock.locked = TRUE + airlock.update_icon() /obj/effect/mapping_helpers/airlock/unres name = "airlock unresctricted side helper" diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index bf2709de325f..b9c3b8e5acd8 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/item/stack/marker_beacon/AltClick(mob/living/user) if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) return - var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors + var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", GLOB.marker_beacon_colors) if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) return if(input_color) @@ -137,7 +137,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( ..() if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) return - var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors + var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", GLOB.marker_beacon_colors) if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) return if(input_color) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index d4eee00156de..50b383571ce4 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) else var/A - A = input("Select a beacon to connect to", "Balloon Extraction Pack", A) as null|anything in possible_beacons + A = tgui_input_list(user, "Select a beacon to connect to", "Balloon Extraction Pack", possible_beacons) if(!A) return diff --git a/code/modules/mining/lavaland/loot/bubblegum_loot.dm b/code/modules/mining/lavaland/loot/bubblegum_loot.dm index 5ce83a191e53..6bd2a3e7ac03 100644 --- a/code/modules/mining/lavaland/loot/bubblegum_loot.dm +++ b/code/modules/mining/lavaland/loot/bubblegum_loot.dm @@ -109,7 +109,7 @@ return used = TRUE - var/choice = input(user,"Who do you want dead?","Choose Your Victim") as null|anything in GLOB.player_list + var/choice = tgui_input_list(user, "Who do you want dead?", "Choose Your Victim", GLOB.player_list) if(!choice) used = FALSE diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 0616f5e8d72f..8e03c2e1e749 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -242,7 +242,7 @@ /obj/machinery/mineral/equipment_vendor/proc/redeem_voucher(obj/item/mining_voucher/voucher, mob/redeemer) var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Plasma Cutter", "Jaunter Kit", "Mining Conscription Kit") - var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items + var/selection = tgui_input_list(redeemer, "Pick your equipment", "Mining Voucher Redemption", items) if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer) return diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm index 91200ba4e13c..e0970661ce3a 100644 --- a/code/modules/mob/dead/observer/observer_base.dm +++ b/code/modules/mob/dead/observer/observer_base.dm @@ -401,7 +401,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!QDELETED(mind.current)) // Could change while they're choosing mind.current.remove_status_effect(STATUS_EFFECT_REVIVABLE) SEND_SIGNAL(mind.current, COMSIG_LIVING_SET_DNR) - /mob/dead/observer/proc/dead_tele() set category = "Ghost" @@ -438,7 +437,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp names[name] = ruin_landmark - var/ruinname = input("Select ruin", "Jump to Ruin") as null|anything in names + var/ruinname = tgui_input_list(usr, "Select ruin", "Jump to Ruin", names) var/obj/effect/landmark/ruin/landmark = names[ruinname] diff --git a/code/modules/mob/living/brain/robotic_brain.dm b/code/modules/mob/living/brain/robotic_brain.dm index c53285084c42..507af8e32417 100644 --- a/code/modules/mob/living/brain/robotic_brain.dm +++ b/code/modules/mob/living/brain/robotic_brain.dm @@ -72,18 +72,6 @@ return TRUE return FALSE -/obj/item/mmi/robotic_brain/proc/question(client/C) - spawn(0) - if(!C) - return - var/response = alert(C, "Someone is requesting a personality for a [src]. Would you like to play as one?", "[src] request", "Yes", "No", "Never for this round") - if(!C || brainmob.key || !searching) - return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. - if(response == "Yes") - transfer_personality(C.mob) - else if(response == "Never for this round") - C.prefs.be_special -= ROLE_POSIBRAIN - // This should not ever happen, but let's be safe /obj/item/mmi/robotic_brain/dropbrain(turf/dropspot) CRASH("[src] at [loc] attempted to drop brain without a contained brain.") diff --git a/code/modules/mob/living/carbon/alien/alien_base.dm b/code/modules/mob/living/carbon/alien/alien_base.dm index d6556bf1b9b2..5ff5e60a581f 100644 --- a/code/modules/mob/living/carbon/alien/alien_base.dm +++ b/code/modules/mob/living/carbon/alien/alien_base.dm @@ -290,3 +290,22 @@ and carry the owner just to make sure*/ /mob/living/carbon/alien/on_lying_down(new_lying_angle) . = ..() ADD_TRAIT(src, TRAIT_IMMOBILIZED, LYING_DOWN_TRAIT) //Xenos can't crawl + +/mob/living/carbon/alien/consume_patch_or_pill(obj/item/reagent_containers/medicine, mob/user) + var/apply_method = "swallow" + var/how_many_reagents = medicine.reagents.total_volume + var/reagent_application = REAGENT_INGEST + if(ispatch(medicine)) + apply_method = "apply" + how_many_reagents = clamp(medicine.reagents.total_volume, 0.1, 2) + reagent_application = REAGENT_TOUCH + + visible_message("[user] attempts to force [src] to [apply_method] [medicine].") + if(!do_after(user, 5 SECONDS, TRUE, src)) // You try feeding a xenomorph a pill + return + + visible_message("[user] forces [src] to [apply_method] [medicine].") + var/fraction = min(1 / medicine.reagents.total_volume, 1) + medicine.reagents.reaction(src, reagent_application, fraction) + medicine.reagents.trans_to(src, how_many_reagents) + return TRUE diff --git a/code/modules/mob/living/carbon/alien/alien_life.dm b/code/modules/mob/living/carbon/alien/alien_life.dm index 4c25a4eadc80..4c13daa7af00 100644 --- a/code/modules/mob/living/carbon/alien/alien_life.dm +++ b/code/modules/mob/living/carbon/alien/alien_life.dm @@ -26,9 +26,6 @@ breath.toxins -= toxins_used breath.oxygen += toxins_used - //BREATH TEMPERATURE - handle_breath_temperature(breath) - /mob/living/carbon/alien/handle_status_effects() ..() //natural reduction of movement delay due to stun. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 43bd1f413064..09f263d90d9a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1244,11 +1244,10 @@ so that different stomachs can handle things in different ways VB*/ if(to_eat.reagents.total_volume) taste(to_eat.reagents) var/fraction = min(this_bite / to_eat.reagents.total_volume, 1) - if(fraction) - to_eat.reagents.reaction(src, REAGENT_INGEST, fraction) - to_eat.reagents.trans_to(src, this_bite) + to_eat.reagents.reaction(src, REAGENT_INGEST, fraction) + to_eat.reagents.trans_to(src, this_bite) -/mob/living/carbon/proc/consume_patch_or_pill(obj/item/reagent_containers/medicine, user) // medicine = patch or pill +/mob/living/carbon/proc/consume_patch_or_pill(obj/item/reagent_containers/medicine, mob/user) // medicine = patch or pill // The reason why this is bundled up is to avoid 2 procs that will be practically identical if(!medicine.reagents.total_volume) return TRUE // Doesn't have reagents, would be fine to use up @@ -1261,13 +1260,13 @@ so that different stomachs can handle things in different ways VB*/ var/reagent_application = REAGENT_INGEST var/requires_mouth = TRUE var/instant = FALSE - var/efficiency = 1 + var/how_many_reagents = medicine.reagents.total_volume if(ispatch(medicine)) apply_method = "apply" reagent_application = REAGENT_TOUCH requires_mouth = FALSE - efficiency = 0.5 // Patches aren't that good at transporting reagents into the bloodstream + how_many_reagents = clamp(medicine.reagents.total_volume, 0.1, 2) // Patches aren't that good at transporting reagents into the bloodstream var/obj/item/reagent_containers/patch/patch = medicine if(patch.instant_application) instant = TRUE @@ -1286,7 +1285,7 @@ so that different stomachs can handle things in different ways VB*/ var/fraction = min(1 / medicine.reagents.total_volume, 1) medicine.reagents.reaction(src, reagent_application, fraction) - medicine.reagents.trans_to(src, medicine.reagents.total_volume * efficiency) + medicine.reagents.trans_to(src, how_many_reagents) return TRUE /mob/living/carbon/get_access() diff --git a/code/modules/mob/living/carbon/carbon_life.dm b/code/modules/mob/living/carbon/carbon_life.dm index 176ac3043106..0a59c7b113b9 100644 --- a/code/modules/mob/living/carbon/carbon_life.dm +++ b/code/modules/mob/living/carbon/carbon_life.dm @@ -100,7 +100,7 @@ if(ishuman(src) && !internal && environment.temperature < 273 && environment.return_pressure() > 20) //foggy breath :^) new /obj/effect/frosty_breath(loc, src) -//Third link in a breath chain, calls handle_breath_temperature() +//Third and last link in a breath chain /mob/living/carbon/proc/check_breath(datum/gas_mixture/breath) if(status_flags & GODMODE) return FALSE @@ -181,15 +181,8 @@ if(prob(20)) emote(pick("giggle","laugh")) - //BREATH TEMPERATURE - handle_breath_temperature(breath) - return TRUE -//Fourth and final link in a breath chain -/mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath) - return - /mob/living/carbon/proc/get_breath_from_internal(volume_needed) if(internal) if(internal.loc != src) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 8c25fbbc94a4..12c3d77b9c77 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -119,7 +119,7 @@ msg += "[name]" // Show what you are - msg += examine_what_am_i() + msg += examine_what_am_i(skipgloves, skipsuitstorage, skipjumpsuit, skipshoes, skipmask, skipears, skipeyes, skipface) msg += "\n" // All the things wielded/worn that can be reasonably described with a common template: diff --git a/code/modules/mob/living/carbon/human/human_inventory.dm b/code/modules/mob/living/carbon/human/human_inventory.dm index 8e482ef37df9..d8bda565092f 100644 --- a/code/modules/mob/living/carbon/human/human_inventory.dm +++ b/code/modules/mob/living/carbon/human/human_inventory.dm @@ -168,9 +168,6 @@ update_inv_l_hand() update_action_buttons_icon() - - - //This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() // Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it /mob/living/carbon/human/equip_to_slot(obj/item/I, slot, initial = FALSE) diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index 645fffbefcb4..d5ba70c8bda6 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -302,127 +302,131 @@ var/list/obscured = check_obscured_slots() var/dat = {" - - + + "} - dat += "" - dat += "" + dat += "" var/obj/item/organ/internal/headpocket/C = get_int_organ(/obj/item/organ/internal/headpocket) if(C) if(SLOT_HUD_WEAR_MASK in obscured) - dat += "" + dat += "" else if(C.held_item) - dat += "" + dat += "" else - dat += "" + dat += "" if(SLOT_HUD_WEAR_MASK in obscured) - dat += "" + dat += "" else - dat += "" if(!issmall(src)) if(SLOT_HUD_GLASSES in obscured) - dat += "" + dat += "" else - dat += "" + dat += "" if(SLOT_HUD_LEFT_EAR in obscured) - dat += "" + dat += "" else - dat += "" + dat += "" if(SLOT_HUD_RIGHT_EAR in obscured) - dat += "" + dat += "" else - dat += "" + dat += "" dat += "" - dat += "" + dat += "" if(wear_suit) - dat += "" else - dat += "" + dat += "" if(SLOT_HUD_SHOES in obscured) - dat += "" + dat += "" else - dat += "" + dat += "" if(SLOT_HUD_GLOVES in obscured) - dat += "" + dat += "" else - dat += "" + dat += "" + + if(SLOT_HUD_BELT in obscured) + dat += "" + else + dat += "" if(SLOT_HUD_JUMPSUIT in obscured) - dat += "" + dat += "" else - dat += "" + dat += "" if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (SLOT_HUD_JUMPSUIT in obscured)) - dat += "" - dat += "" - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" + dat += "" else - dat += "" // Pockets - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" if(istype(w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = w_uniform - dat += "" + dat += "" if(U.accessories.len) - dat += "" + dat += "" if(handcuffed) - dat += "" + dat += "" if(legcuffed) dat += "" dat += {"
Left Hand:[(l_hand && !(l_hand.flags&ABSTRACT)) ? html_encode(l_hand) : "Empty"]
Right Hand:[(r_hand && !(r_hand.flags&ABSTRACT)) ? html_encode(r_hand) : "Empty"]
Left Hand:[(l_hand && !(l_hand.flags&ABSTRACT)) ? html_encode(l_hand) : "Empty"]
Right Hand:[(r_hand && !(r_hand.flags&ABSTRACT)) ? html_encode(r_hand) : "Empty"]
 
Back:[(back && !(back.flags&ABSTRACT)) ? html_encode(back) : "Empty"]" + dat += "
Back:[(back && !(back.flags&ABSTRACT)) ? html_encode(back) : "Empty"]" if(has_breathable_mask && istype(back, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
 
Head:[(head && !(head.flags&ABSTRACT)) ? html_encode(head) : "Empty"]
Head:[(head && !(head.flags&ABSTRACT)) ? html_encode(head) : "Empty"]
 ↳Headpocket:Obscured
 ↳Headpocket:Obscured
 ↳Headpocket:Dislodge Items
 ↳Headpocket:Dislodge Items
 ↳Headpocket:Empty
 ↳Headpocket:Empty
Mask:Obscured
Mask:Obscured
Mask:[(wear_mask && !(wear_mask.flags&ABSTRACT)) ? html_encode(wear_mask) : "Empty"]" + dat += "
Mask:[(wear_mask && !(wear_mask.flags&ABSTRACT)) ? html_encode(wear_mask) : "Empty"]" if(istype(wear_mask, /obj/item/clothing/mask/muzzle)) var/obj/item/clothing/mask/muzzle/M = wear_mask if(M.security_lock) - dat += " [M.locked ? "Disable Lock" : "Set Lock"]" + dat += " [M.locked ? "Disable Lock" : "Set Lock"]" dat += "
 
Eyes:Obscured
Eyes:Obscured
Eyes:[(glasses && !(glasses.flags&ABSTRACT)) ? html_encode(glasses) : "Empty"]
Eyes:[(glasses && !(glasses.flags&ABSTRACT)) ? html_encode(glasses) : "Empty"]
Left Ear:Obscured
Left Ear:Obscured
Left Ear:[(l_ear && !(l_ear.flags&ABSTRACT)) ? html_encode(l_ear) : "Empty"]
Left Ear:[(l_ear && !(l_ear.flags&ABSTRACT)) ? html_encode(l_ear) : "Empty"]
Right Ear:Obscured
Right Ear:Obscured
Right Ear:[(r_ear && !(r_ear.flags&ABSTRACT)) ? html_encode(r_ear) : "Empty"]
Right Ear:[(r_ear && !(r_ear.flags&ABSTRACT)) ? html_encode(r_ear) : "Empty"]
 
Exosuit:[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? html_encode(wear_suit) : "Empty"]
Exosuit:[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? html_encode(wear_suit) : "Empty"]
 ↳Suit Storage:[(s_store && !(s_store.flags&ABSTRACT)) ? html_encode(s_store) : "Empty"]" + dat += "
 ↳Suit Storage:[(s_store && !(s_store.flags&ABSTRACT)) ? html_encode(s_store) : "Empty"]" if(has_breathable_mask && istype(s_store, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
 ↳Suit Storage:
 ↳Suit Storage:
Shoes:Obscured
Shoes:Obscured
Shoes:[(shoes && !(shoes.flags&ABSTRACT)) ? html_encode(shoes) : "Empty"]
Shoes:[(shoes && !(shoes.flags&ABSTRACT)) ? html_encode(shoes) : "Empty"]
Gloves:Obscured
Gloves:Obscured
Gloves:[(gloves && !(gloves.flags&ABSTRACT)) ? html_encode(gloves) : "Empty"]
Gloves:[(gloves && !(gloves.flags&ABSTRACT)) ? html_encode(gloves) : "Empty"]
Belt:Obscured
Belt:[(belt && !(belt.flags&ABSTRACT)) ? html_encode(belt) : "Empty"]" + + if(has_breathable_mask && istype(belt, /obj/item/tank)) + dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += "
Uniform:Obscured
Uniform:Obscured
Uniform:[(w_uniform && !(w_uniform.flags&ABSTRACT)) ? html_encode(w_uniform) : "Empty"]
Uniform:[(w_uniform && !(w_uniform.flags&ABSTRACT)) ? html_encode(w_uniform) : "Empty"]
 ↳Pockets:
 ↳ID:
 ↳Belt:
 ↳Suit Sensors:
 ↳PDA:
 ↳Pockets:
 ↳ID:
 ↳Suit Sensors:
 ↳PDA:
 ↳Belt:[(belt && !(belt.flags&ABSTRACT)) ? html_encode(belt) : "Empty"]" - if(has_breathable_mask && istype(belt, /obj/item/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - dat += "
 ↳Pockets:" + dat += "
 ↳Pockets:" if(l_store && internal && l_store == internal) dat += "[l_store]" else if(l_store && !(l_store.flags&ABSTRACT)) dat += "Left (Full)" else dat += "Left (Empty)" - dat += " " + dat += " " if(r_store && internal && r_store == internal) dat += "[r_store]" else if(r_store && !(r_store.flags&ABSTRACT)) dat += "Right (Full)" else dat += "Right (Empty)" - dat += "
 ↳ID:[(wear_id && !(wear_id.flags&ABSTRACT)) ? html_encode(wear_id) : "Empty"]
 ↳PDA:[(wear_pda && !(wear_pda.flags&ABSTRACT)) ? "Full" : "Empty"]
 ↳ID:[(wear_id && !(wear_id.flags&ABSTRACT)) ? html_encode(wear_id) : "Empty"]
 ↳PDA:[(wear_pda && !(wear_pda.flags&ABSTRACT)) ? "Full" : "Empty"]
 ↳Suit Sensors:[U.has_sensor >= 2 ? "--SENSORS LOCKED--" : "Set Sensors"]
 ↳Suit Sensors:[U.has_sensor >= 2 ? "--SENSORS LOCKED--" : "Set Sensors"]
 ↳Remove Accessory
 ↳Remove Accessory
Handcuffed: Remove
Handcuffed: Remove
Legcuffed: Remove
- Close + Close "} var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 540) @@ -933,7 +937,7 @@ SEC_RECORD_STATUS_RELEASED, ) - var/new_status = input(user, "Set the new criminal status for [perpname].", "Security HUD", found_record.fields["criminal"]) as null|anything in possible_status + var/new_status = tgui_input_list(user, "Set the new criminal status for [perpname]", "Security HUD", possible_status) if(!new_status) return diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 1ce648e41bf2..33f874ff10b7 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -642,7 +642,7 @@ target.Stun(0.5 SECONDS) else var/obj/item/active_hand = target.get_active_hand() - if(target.IsSlowed() && active_hand && !IS_HORIZONTAL(user) && !HAS_TRAIT(active_hand, TRAIT_WIELDED)) + if(target.IsSlowed() && active_hand && !IS_HORIZONTAL(user) && !HAS_TRAIT(active_hand, TRAIT_WIELDED) && !istype(active_hand, /obj/item/grab)) target.drop_item() add_attack_logs(user, target, "Disarmed object out of hand", ATKLOG_ALL) else diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 55d7083777a9..84a9006f9e06 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -761,6 +761,6 @@ if(resistance_flags & ON_FIRE) return - if(is_hot(P)) + if(P.get_heat()) visible_message("[src] bursts into flames!") fire_act() diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm index 8e1f03b4e640..17e5ec1234cf 100644 --- a/code/modules/mob/living/carbon/human/species/machine.dm +++ b/code/modules/mob/living/carbon/human/species/machine.dm @@ -185,7 +185,9 @@ for(var/style in GLOB.configuration.custom_sprites.ipc_screen_map[H.ckey]) hair += style - var/new_style = input(H, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair + var/new_style = tgui_input_list(H, "Select a monitor display", "Monitor Display", hair) + if(!new_style) + return var/new_color = input("Please select hair color.", "Monitor Color", head_organ.hair_colour) as null|color if(H.incapacitated(TRUE, TRUE)) diff --git a/code/modules/mob/living/carbon/human/species/slimepeople.dm b/code/modules/mob/living/carbon/human/species/slimepeople.dm index 1344e663fba5..4af69cfe0c7b 100644 --- a/code/modules/mob/living/carbon/human/species/slimepeople.dm +++ b/code/modules/mob/living/carbon/human/species/slimepeople.dm @@ -153,7 +153,7 @@ to_chat(H, "You're not missing any limbs!") return - var/limb_select = input(H, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs + var/limb_select = tgui_input_list(H, "Choose a limb to regrow", "Limb Regrowth", missing_limbs) if(!limb_select) // If the user hit cancel on the popup, return return var/chosen_limb = missing_limbs[limb_select] diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 6c0f30035842..4be61f83bece 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -131,23 +131,19 @@ fire.Remove(H) var/datum/action/innate/ignite/ash_walker/fire = new() fire.Grant(H) - RegisterSignal(H, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(speedylegs)) - speedylegs(H) /datum/species/unathi/ashwalker/on_species_loss(mob/living/carbon/human/H) ..() for(var/datum/action/innate/ignite/ash_walker/fire in H.actions) fire.Remove(H) - UnregisterSignal(H, COMSIG_MOVABLE_Z_CHANGED) - speedylegs(H) + +/datum/species/unathi/ashwalker/movement_delay(mob/living/carbon/human/H) + . = ..() + var/turf/our_turf = get_turf(H) + if(!is_mining_level(our_turf.z)) + . -= speed_mod /datum/action/innate/ignite/ash_walker desc = "You form a fire in your mouth, fierce enough to... light a cigarette." cooldown_duration = 3 MINUTES welding_fuel_used = 0 // Ash walkers dont need welding fuel to use ignite - -/datum/species/unathi/ashwalker/proc/speedylegs(mob/living/carbon/human/H) - if(is_mining_level(H.z)) - speed_mod = initial(speed_mod) - else - speed_mod = 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3543ba03393d..20f7d90f3d8b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -577,7 +577,6 @@ if(.) step_count++ pull_pulled(old_loc, pullee, movetime) - pull_grabbed(old_loc, direct, movetime) if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1) //seperated from our puller and not in the middle of a diagonal move pulledby.stop_pulling() @@ -601,61 +600,6 @@ if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up stop_pulling() -/mob/living/proc/pull_grabbed(turf/old_turf, direct, movetime) - if(!Adjacent(old_turf)) - return - // We might not actually be grab pulled, but we are pretending that we are, so as to - // hackily work around issues arising from mutual grabs. - var/old_being_pulled = currently_grab_pulled - currently_grab_pulled = TRUE - // yes, this is four distinct `for` loops. No, they can't be merged. - var/list/grabbing = list() - for(var/mob/M in ret_grab()) - if(src == M) - continue - if(M.currently_grab_pulled) - // Being already pulled by something else up the call stack. - continue - grabbing |= M - for(var/mob/M in grabbing) - M.currently_grab_pulled = TRUE - M.animate_movement = SYNC_STEPS - for(var/i in 1 to length(grabbing)) - var/mob/M = grabbing[i] - if(QDELETED(M)) // old code warned me that M could go missing during a move, so I'm cargo-culting it here - continue - // compile a list of turfs we can maybe move them towards - // importantly, this should happen before actually trying to move them to either of those - // otherwise they can be moved twice (since `Move` returns TRUE only if it managed to - // *fully* move where you wanted it to; it can still move partially and return FALSE) - var/possible_dest = list() - for(var/turf/dest in orange(src, 1)) - if(dest.Adjacent(M)) - possible_dest |= dest - if(i == 1) // at least one of them should try to trail behind us, for aesthetics purposes - if(M.Move(old_turf, get_dir(M, old_turf), movetime)) - continue - // By this time the `old_turf` is definitely occupied by something immovable. - // So try to move them into some other adjacent turf, in a believable way - if(Adjacent(M)) - continue // they are already adjacent - for(var/turf/dest in possible_dest) - if(M.Move(dest, get_dir(M, dest), movetime)) - break - for(var/mob/M in grabbing) - M.currently_grab_pulled = null - M.animate_movement = SLIDE_STEPS - - for(var/obj/item/grab/G in src) - if(G.state == GRAB_NECK) - setDir(angle2dir((dir2angle(direct) + 202.5) % 365)) - G.adjust_position() - for(var/obj/item/grab/G in grabbed_by) - G.adjust_position() - - currently_grab_pulled = old_being_pulled - - /mob/living/proc/makeTrail(turf/turf_to_trail_on) if(!has_gravity(src)) return @@ -778,6 +722,8 @@ *///////////////////// /mob/living/proc/resist_grab() var/resisting = 0 + if(HAS_TRAIT(src, TRAIT_IMMOBILIZED)) + return TRUE //You can't move, so you can't resist for(var/X in grabbed_by) var/obj/item/grab/G = X resisting++ @@ -1034,7 +980,7 @@ if(S) . += S.slowdown_value if(forced_look) - . += 3 + . += DIRECTION_LOCK_SLOWDOWN if(ignorewalk) . += GLOB.configuration.movement.base_run_speed else @@ -1167,3 +1113,40 @@ C.take_organ_damage(damage) C.KnockDown(3 SECONDS) C.visible_message("[C] crashes into [src], knocking them both over!", "You violently crash into [src]!") + +/** + * Sets the mob's direction lock towards a given atom. + * + * Arguments: + * * a - The atom to face towards. + * * track - If TRUE, updates our direction relative to the atom when moving. + */ +/mob/living/proc/set_forced_look(atom/A, track = FALSE) + forced_look = track ? A.UID() : get_cardinal_dir(src, A) + to_chat(src, "You are now facing [track ? A : dir2text(forced_look)]. To cancel this, shift-middleclick yourself.") + throw_alert("direction_lock", /obj/screen/alert/direction_lock) + +/** + * Clears the mob's direction lock if enabled. + * + * Arguments: + * * quiet - Whether to display a chat message. + */ +/mob/living/proc/clear_forced_look(quiet = FALSE) + if(!forced_look) + return + forced_look = null + if(!quiet) + to_chat(src, "Cancelled direction lock.") + clear_alert("direction_lock") + +/mob/living/setDir(new_dir) + if(forced_look) + if(isnum(forced_look)) + dir = forced_look + else + var/atom/A = locateUID(forced_look) + if(istype(A)) + dir = get_cardinal_dir(src, A) + return + return ..() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index f1a8e960a155..4abf312b4f13 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -88,6 +88,9 @@ /// the type of holder that will be created when a mob gets scooped up var/holder_type + /// This can either be a numerical direction or a soft object reference (UID). It makes the mob always face towards the selected thing. + var/forced_look = null + var/datum/language/default_language var/datum/middleClickOverride/middleClickOverride = null diff --git a/code/modules/mob/living/living_life.dm b/code/modules/mob/living/living_life.dm index 197a7f084ced..39f9fd35f7eb 100644 --- a/code/modules/mob/living/living_life.dm +++ b/code/modules/mob/living/living_life.dm @@ -75,15 +75,18 @@ handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc if(stat != DEAD) + if(forced_look && !isnum(forced_look)) + var/atom/A = locateUID(forced_look) + if(istype(A)) + var/view = client ? client.maxview() : world.view + if(get_dist(src, A) > view || !(src in viewers(view, A))) + clear_forced_look(TRUE) + to_chat(src, "Your direction target has left your view, you are no longer facing anything.") + else + clear_forced_look(TRUE) + to_chat(src, "Your direction target has left your view, you are no longer facing anything.") + // Make sure it didn't get cleared if(forced_look) - if(!isnum(forced_look)) - var/atom/A = locateUID(forced_look) - if(istype(A)) - var/view = client ? client.maxview() : world.view - if(get_dist(src, A) > view || !(src in viewers(view, A))) - forced_look = null - to_chat(src, "Your direction target has left your view, you are no longer facing anything.") - return setDir() if(machine) diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm index 7394e6cd6ad2..71ae4ff228d9 100644 --- a/code/modules/mob/living/silicon/ai/ai_mob.dm +++ b/code/modules/mob/living/silicon/ai/ai_mob.dm @@ -931,7 +931,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( for(var/i in tempnetwork) cameralist[i] = i var/old_network = network - network = input(U, "Which network would you like to view?") as null|anything in cameralist + network = tgui_input_list(U, "Which network would you like to view?", "Jump To Network", cameralist) if(check_unable()) return @@ -1011,7 +1011,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = t.fields["photo"]//Pull names, rank, and id photo. if(personnel_list.len) - input = input("Select a crew member:") as null|anything in personnel_list + input = tgui_input_list(usr, "Select a crew member", "Change Hologram", personnel_list) var/icon/character_icon = personnel_list[input] if(character_icon) qdel(holo_icon)//Clear old icon so we're not storing it in memory. @@ -1054,7 +1054,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( "Roller-Monkey" ) - input = input("Please select a hologram:") as null|anything in icon_list + input = tgui_input_list(usr, "Please select a hologram", "Change Hologram", icon_list) if(input) qdel(holo_icon) switch(input) @@ -1141,7 +1141,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(custom_hologram) //insert custom hologram icon_list.Add("custom") - input = input("Please select a hologram:") as null|anything in icon_list + input = tgui_input_list(usr, "Please select a hologram", "Change Hologram", icon_list) if(input) qdel(holo_icon) switch(input) diff --git a/code/modules/mob/living/silicon/robot/misc_robot_items.dm b/code/modules/mob/living/silicon/robot/misc_robot_items.dm index 2079d157fe36..26d01c2c4806 100644 --- a/code/modules/mob/living/silicon/robot/misc_robot_items.dm +++ b/code/modules/mob/living/silicon/robot/misc_robot_items.dm @@ -8,7 +8,7 @@ /obj/item/pen/multi/robopen/attack_self(mob/user as mob) - var/choice = input("Would you like to change colour or mode?") as null|anything in list("Colour","Mode") + var/choice = tgui_input_list(user, "Would you like to change colour or mode?", name, list("Colour","Mode")) if(!choice) return switch(choice) diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm index 030afb783e28..a874776febc8 100644 --- a/code/modules/mob/living/silicon/robot/robot_mob.dm +++ b/code/modules/mob/living/silicon/robot/robot_mob.dm @@ -585,7 +585,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( if(!C.is_missing()) installed_components += V - var/toggle = input(src, "Which component do you want to toggle?", "Toggle Component") as null|anything in installed_components + var/toggle = tgui_input_list(src, "Which component do you want to toggle?", "Toggle Component", installed_components) if(!toggle) return @@ -939,7 +939,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( removable_components += V if(module) removable_components += module.custom_removals - var/remove = input(user, "Which component do you want to pry out?", "Remove Component") as null|anything in removable_components + var/remove = tgui_input_list(user, "Which component do you want to pry out?", "Remove Component", removable_components) if(!remove || !Adjacent(user) || !opened) return diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm index 606770c58b51..4b5249662bec 100644 --- a/code/modules/mob/living/silicon/silicon_mob.dm +++ b/code/modules/mob/living/silicon/silicon_mob.dm @@ -40,6 +40,7 @@ var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use var/d_hud = DATA_HUD_DIAGNOSTIC_BASIC //There is only one kind of diag hud + var/jani_hud = DATA_HUD_JANITOR /mob/living/silicon/New() GLOB.silicon_mob_list |= src @@ -350,9 +351,11 @@ var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] var/datum/atom_hud/medsensor = GLOB.huds[med_hud] var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] + var/datum/atom_hud/janisensor = GLOB.huds[jani_hud] secsensor.remove_hud_from(src) medsensor.remove_hud_from(src) diagsensor.remove_hud_from(src) + janisensor.remove_hud_from(src) /mob/living/silicon/proc/add_sec_hud() @@ -367,20 +370,18 @@ var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] diagsensor.add_hud_to(src) +/mob/living/silicon/proc/add_jani_hud() + var/datum/atom_hud/janisensor = GLOB.huds[jani_hud] + janisensor.add_hud_to(src) /mob/living/silicon/proc/toggle_sensor_mode() to_chat(src, "Please select sensor type.") var/static/list/sensor_choices = list("Security" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "securityhud"), "Medical" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "healthhud"), "Diagnostic" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "diagnostichud"), + "Janitor" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "janihud"), "None" = image(icon = 'icons/mob/screen_gen.dmi', icon_state = "x")) - var/user_loc - if(isAI(src)) - var/mob/living/silicon/ai/eyeloc = src - user_loc = eyeloc.eyeobj - else - user_loc = src - var/sensor_type = show_radial_menu(src, user_loc, sensor_choices) + var/sensor_type = show_radial_menu(src, src, sensor_choices) if(!sensor_type) return remove_med_sec_hud() @@ -394,6 +395,9 @@ if("Diagnostic") add_diag_hud() to_chat(src, "Robotics diagnostic overlay enabled.") + if("Janitor") + add_jani_hud() + to_chat(src, "Janitorial filth overlay enabled.") if("None") to_chat(src, "Sensor augmentations disabled.") diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm index d2032db0a902..527ad1e96c18 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm @@ -304,7 +304,7 @@ if(!found_mirror) to_chat(usr, "You are not close enough to a working mirror to teleport!") return - var/input_mirror = input(usr, "Choose a mirror to teleport to.", "Mirror to Teleport to") as null|anything in mirrors_to_use + var/input_mirror = tgui_input_list(usr, "Choose a mirror to teleport to.", "Mirror to Teleport to", mirrors_to_use) var/obj/chosen = mirrors_to_use[input_mirror] if(chosen == null) return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index ae452633beeb..fd4525657ecc 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -364,7 +364,7 @@ /mob/living/simple_animal/movement_delay() . = speed if(forced_look) - . += 3 + . += DIRECTION_LOCK_SLOWDOWN . += GLOB.configuration.movement.animal_delay /mob/living/simple_animal/Stat() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 94c694d28b07..adf774b46fdc 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -601,17 +601,6 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ client.screen = list() hud_used.show_hud(hud_used.hud_version) -/mob/setDir(new_dir) - if(forced_look) - if(isnum(forced_look)) - dir = forced_look - else - var/atom/A = locateUID(forced_look) - if(istype(A)) - dir = get_cardinal_dir(src, A) - return - . = ..() - /mob/proc/show_inv(mob/user) user.set_machine(src) var/dat = {" @@ -1188,7 +1177,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ continue if(L.npc_safe(src) && L.stat != DEAD && !L.key) creatures += L - var/picked = input("Please select an NPC to respawn as", "Respawn as NPC") as null|anything in creatures + var/picked = tgui_input_list(usr, "Please select an NPC to respawn as", "Respawn as NPC", creatures) switch(picked) if("Mouse") become_mouse() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 8848d66c45ca..5baa6c1f92af 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -45,6 +45,8 @@ return affecting.grabbed_by += src + RegisterSignal(affecting, COMSIG_MOVABLE_MOVED, PROC_REF(grab_moved)) + RegisterSignal(assailant, COMSIG_MOVABLE_MOVED, PROC_REF(pull_grabbed)) hud = new /obj/screen/grab(src) hud.icon_state = "reinforce" @@ -62,6 +64,92 @@ clean_grabbed_by(assailant, affecting) adjust_position() +/obj/item/grab/Destroy() + if(affecting) + UnregisterSignal(affecting, COMSIG_MOVABLE_MOVED) + if(!affecting.buckled) + affecting.pixel_x = 0 + affecting.pixel_y = 0 //used to be an animate, not quick enough for qdel'ing + affecting.layer = initial(affecting.layer) + affecting.grabbed_by -= src + affecting = null + if(assailant) + UnregisterSignal(assailant, COMSIG_MOVABLE_MOVED) + if(assailant.client) + assailant.client.screen -= hud + assailant = null + QDEL_NULL(hud) + return ..() + +/obj/item/grab/proc/pull_grabbed(mob/user, turf/old_turf, direct, forced) + SIGNAL_HANDLER + if(assailant.moving_diagonally == FIRST_DIAG_STEP) //we dont want to do anything in the middle of diagonal step + return + if(!assailant.Adjacent(old_turf)) + qdel(src) + return + var/list/grab_states_not_moving = list(GRAB_KILL, GRAB_NECK) //states of grab when we dont need affecting to be moved by himself + var/assailant_glide_speed = TICKS2DS(world.icon_size / assailant.glide_size) + if(state in grab_states_not_moving) + affecting.glide_for(assailant_glide_speed) + else if(get_turf(affecting) != old_turf) + var/possible_dest = list() + var/list/mobs_do_not_move = list() // those are mobs we shouldnt move while we're going to new position + var/list/dest_1_sort = list() // just better dest to be picked first + var/list/dest_2_sort = list() + if(old_turf.Adjacent(affecting)) + possible_dest |= old_turf + for(var/turf/dest in orange(1, assailant)) + if(assailant.loc == dest) // orange(1) is broken and returning central turf + continue + if(!dest.Adjacent(affecting)) + continue + if(dest.Adjacent(old_turf)) + dest_1_sort |= dest + continue + dest_2_sort |= dest + possible_dest |= dest_1_sort + possible_dest |= dest_2_sort + if(istype(assailant.l_hand, /obj/item/grab)) + var/obj/item/grab/grab = assailant.l_hand + mobs_do_not_move |= grab.affecting + if(istype(assailant.r_hand, /obj/item/grab)) + var/obj/item/grab/grab = assailant.r_hand + mobs_do_not_move |= grab.affecting + mobs_do_not_move |= assailant + mobs_do_not_move -= affecting + if(assailant.pulling) + possible_dest -= old_turf // pull code just WANTS THAT old_loc and wont allow anyone else in it + mobs_do_not_move |= assailant.pulling + for(var/mob/mob as anything in mobs_do_not_move) + possible_dest -= get_turf(mob) + affecting.grab_do_not_move = mobs_do_not_move + var/success_move = FALSE + for(var/turf/dest as anything in possible_dest) + if(QDELETED(src)) + return + if(get_turf(affecting) == dest) + success_move = TRUE + continue + if(affecting.Move(dest, get_dir(affecting, dest), assailant_glide_speed)) + success_move = TRUE + break + continue + affecting.grab_do_not_move = initial(affecting.grab_do_not_move) + if(!success_move) + qdel(src) + return + if(state == GRAB_NECK) + assailant.setDir(turn(direct, 180)) + adjust_position() + +/obj/item/grab/proc/grab_moved() + SIGNAL_HANDLER + if(affecting.moving_diagonally == FIRST_DIAG_STEP) //we dont want to do anything in the middle of diagonal step + return + if(!assailant.Adjacent(affecting)) + qdel(src) + /obj/item/grab/proc/clean_grabbed_by(mob/user, mob/victim) //Cleans up any nulls in the grabbed_by list. if(istype(user)) @@ -169,11 +257,6 @@ return if(!assailant.Adjacent(affecting)) // To prevent teleportation via grab return - if(IS_HORIZONTAL(affecting) && state != GRAB_KILL) - animate(affecting, pixel_x = 0, pixel_y = 0, 5, 1, LINEAR_EASING) - return //KJK - /* if(force_down) //THIS GOES ABOVE THE RETURN LABELED KJK - affecting.setDir(SOUTH)*///This shows how you can apply special directions based on a variable. //face up var/shift = 0 var/adir = get_dir(assailant, affecting) @@ -417,22 +500,6 @@ return EAT_TIME_FAT //if it doesn't fit into the above, it's probably a fat guy, take EAT_TIME_FAT to do it -/obj/item/grab/Destroy() - if(affecting) - if(!affecting.buckled) - affecting.pixel_x = 0 - affecting.pixel_y = 0 //used to be an animate, not quick enough for qdel'ing - affecting.layer = initial(affecting.layer) - affecting.grabbed_by -= src - affecting = null - if(assailant) - if(assailant.client) - assailant.client.screen -= hud - assailant = null - QDEL_NULL(hud) - return ..() - - #undef EAT_TIME_XENO #undef EAT_TIME_FAT diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 84f98dc5701d..5d77f2031a6d 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -16,8 +16,8 @@ return TRUE if(ismob(mover)) var/mob/moving_mob = mover - if((currently_grab_pulled && moving_mob.currently_grab_pulled)) - return FALSE + if(src in moving_mob.grab_do_not_move) + return TRUE if(mover in buckled_mobs) return TRUE return (!mover.density || !density || horizontal) @@ -180,8 +180,6 @@ if(prev_pulling_loc && mob.pulling?.face_while_pulling && (mob.pulling.loc != prev_pulling_loc)) mob.setDir(get_dir(mob, mob.pulling)) // Face welding tanks and stuff when pulling - else - mob.setDir(direct) moving = 0 if(mob && .) @@ -206,6 +204,8 @@ if(mob.grabbed_by.len) if(mob.incapacitated(FALSE, TRUE)) // Can't break out of grabs if you're incapacitated return TRUE + if(HAS_TRAIT(mob, TRAIT_IMMOBILIZED)) + return TRUE //You can't move, so you can't break it by trying to move. var/list/grabbing = list() if(istype(mob.l_hand, /obj/item/grab)) diff --git a/code/modules/mob/mob_vars.dm b/code/modules/mob/mob_vars.dm index 9ade73cb2853..f20d80240b2f 100644 --- a/code/modules/mob/mob_vars.dm +++ b/code/modules/mob/mob_vars.dm @@ -40,7 +40,7 @@ var/last_log = 0 var/obj/machinery/machine = null - var/currently_grab_pulled = null /// only set while the move is ongoing, to prevent shuffling between pullees + var/list/grab_do_not_move = list() /// other mobs we wont move when we're grab pulled. Not empty only when being grab pulled var/memory = "" var/notransform = FALSE //Carbon /// True for left hand active, otherwise for right hand active @@ -201,7 +201,6 @@ var/list/tkgrabbed_objects = list() // Assoc list of items to TK grabs - var/forced_look = null // This can either be a numerical direction or a soft object reference (UID). It makes the mob always face towards the selected thing. var/registered_z var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 6b29952fef35..29885c2809ad 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -334,7 +334,7 @@ if(!module.removable) continue removable_modules += module - var/obj/item/mod/module/module_to_remove = input(user, "Which module do you want to pry out?", "Module Removal") as null|anything in removable_modules + var/obj/item/mod/module/module_to_remove = tgui_input_list(user, "Which module do you want to pry out?", "Module Removal", removable_modules) if(!module_to_remove?.mod) return FALSE uninstall(module_to_remove) diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 2d4556fee478..7763f922d5f2 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -227,7 +227,7 @@ GLOBAL_LIST_EMPTY(fax_blacklist) for(var/obj/machinery/photocopier/faxmachine/F in GLOB.allfaxes) if(F.emagged)//we can contact emagged faxes on the station combineddepartments |= F.department - destination = input(usr, "To which department?", "Choose a department", "") as null|anything in combineddepartments + destination = tgui_input_list(usr, "To which department?", "Choose a department", combineddepartments) if(!destination) destination = lastdestination if("send") // actually send the fax diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 3ab6c5a21849..44b99c137209 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -344,7 +344,7 @@ var/const/station_text = "\[Station name\]" var/list/menu_list = list() //text items in the menu menu_list.Add(usr.real_name) //the real name of the character, even if it is hidden - if(usr.real_name != usr.name || usr.name != "unknown") //if the player is masked or the name is different a new answer option is added + if(usr.real_name != usr.name) //if the player is masked or the name is different a new answer option is added menu_list.Add("[usr.name]") menu_list.Add(usr.job, //current job num_text, //account number @@ -356,7 +356,7 @@ usr.gender, //current gender usr.dna.species //current species ) - var/input_element = input("Select the text you want to add:", "Select item") as null|anything in menu_list + var/input_element = tgui_input_list(usr, "Select the text you want to add", "Select item", menu_list) switch(input_element) //format selected menu items in pencode and internal data if(sign_text) input_element = "\[sign\]" @@ -460,7 +460,7 @@ to_chat(user, "You stamp the paper with your rubber stamp.") playsound(user, 'sound/items/handling/standard_stamp.ogg', 50, vary = TRUE) - if(is_hot(P)) + if(P.get_heat()) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites [user.p_themselves()]!", \ "You miss the paper and accidentally light yourself on fire!") diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 414354114ae9..1977326bcee4 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -53,7 +53,7 @@ to_chat(user, "You add [(W.name == "photo") ? "the photo" : W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].") user.unEquip(W) W.loc = src - else if(is_hot(W)) + else if(W.get_heat()) burnpaper(W, user) else if(istype(W, /obj/item/paper_bundle)) user.unEquip(W) @@ -85,7 +85,7 @@ user.visible_message("[user] holds [heating_object] up to [src], it looks like [user.p_theyre()] trying to burn it!", "You hold [heating_object] up to [src], burning it slowly.") - if(!do_after(user, 2 SECONDS, target = src) || !is_hot(heating_object)) + if(!do_after(user, 2 SECONDS, target = src) || !heating_object.get_heat()) return user.visible_message("[user] burns right through [src], turning it to ash. It flutters through the air before settling on the floor in a heap.", \ "You burn right through [src], turning it to ash. It flutters through the air before settling on the floor in a heap.") diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 16999baf0edd..e894c699d41f 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -70,7 +70,7 @@ internal_paper.attackby(P, user) //spoofed attack to update internal paper. update_icon() - else if(is_hot(P)) + else if(P.get_heat()) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites [user.p_themselves()]!", \ "You miss [src] and accidentally light yourself on fire!") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index a5d8a48717e1..44c94fc76bb6 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -69,7 +69,7 @@ update_icon() /obj/item/pen/multi/proc/select_colour(mob/user as mob) - var/newcolour = input(user, "Which colour would you like to use?", name, colour) as null|anything in colour_choices + var/newcolour = tgui_input_list(user, "Which colour would you like to use?", name, colour_choices) if(newcolour) colour = newcolour playsound(loc, 'sound/effects/pop.ogg', 50, 1) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index beb8b3a692b0..4c4476b84812 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -215,7 +215,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor change_size(user) /obj/item/camera/proc/change_size(mob/user) - var/nsize = input("Photo Size","Pick a size of resulting photo.") as null|anything in list(1,3,5,7) + var/nsize = tgui_input_list(user, "Photo Size", "Pick a size of resulting photo.", list(1,3,5,7)) if(nsize) size = nsize to_chat(user, "Camera will now take [size]x[size] photos.") @@ -536,7 +536,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor return var/datum/picture/picture - picture = input("Select image to print:", picture) as null|anything in saved_pictures + picture = tgui_input_list(user, "Select image to print", "Print image", saved_pictures) if(picture) printpicture(user, picture) pictures_left -- @@ -549,7 +549,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor to_chat(user, "No images saved") return var/datum/picture/picture - picture = input("Select image to delete:", picture) as null|anything in saved_pictures + picture = tgui_input_list(user, "Select image to delete", "Delete image", saved_pictures) if(picture) saved_pictures -= picture diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index e5231da3746d..7f2d6106a409 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -47,7 +47,7 @@ return for(var/datum/picture/t in cam.aipictures) nametemp += t.fields["name"] - find = input("Select image (numbered in order taken)") in nametemp + find = tgui_input_list(usr, "Select image (numbered in order taken)", "Pick Image", nametemp) for(var/datum/picture/q in cam.aipictures) if(q.fields["name"] == find) diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 75e999732af8..5b231a817017 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -214,7 +214,7 @@ /obj/item/ticket_machine_ticket/attackby(obj/item/P, mob/living/carbon/human/user, params) //Stolen from papercode ..() - if(is_hot(P)) + if(P.get_heat()) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites [user.p_themselves()]!", \ "You miss the paper and accidentally light yourself on fire!") diff --git a/code/modules/pda/ai_pda.dm b/code/modules/pda/ai_pda.dm index c83f15804ee1..ec8cdea837a5 100644 --- a/code/modules/pda/ai_pda.dm +++ b/code/modules/pda/ai_pda.dm @@ -25,7 +25,7 @@ to_chat(usr, "Cannot use messenger!") var/list/plist = M.available_pdas() if(plist) - var/c = input(usr, "Please select a PDA") as null|anything in sortList(plist) + var/c = tgui_input_list(usr, "Please select a PDA", "Send message", sortList(plist)) if(!c) // if the user hasn't selected a PDA file we can't send a message return var/selected = plist[c] diff --git a/code/modules/projectiles/guns/energy/special_eguns.dm b/code/modules/projectiles/guns/energy/special_eguns.dm index cced4f362f0d..51fbb3202639 100644 --- a/code/modules/projectiles/guns/energy/special_eguns.dm +++ b/code/modules/projectiles/guns/energy/special_eguns.dm @@ -190,6 +190,9 @@ /obj/item/gun/energy/plasmacutter/update_overlays() return list() +/obj/item/gun/energy/plasmacutter/get_heat() + return 3800 + /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index a61932cafdf0..815ad91cb347 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -105,9 +105,6 @@ qdel(dummy) return TRUE -/obj/item/gun/medbeam/proc/on_beam_hit(mob/living/target) - return - /obj/item/gun/medbeam/proc/on_beam_tick(mob/living/target) if(ishuman(target)) var/mob/living/carbon/human/H = target diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index a839563d6ac1..c7b860841ee7 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,9 +1,18 @@ #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites -#define MAX_MULTI_AMOUNT 20 // Max number of pills/patches that can be made at once #define MAX_UNITS_PER_PILL 100 // Max amount of units in a pill #define MAX_UNITS_PER_PATCH 30 // Max amount of units in a patch +#define MAX_UNITS_PER_BOTTLE 50 // Max amount of units in a bottle #define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever +#define CHEMMASTER_PRODUCTION_MODE_PILLS 1 +#define CHEMMASTER_PRODUCTION_MODE_PATCHES 2 +#define CHEMMASTER_PRODUCTION_MODE_BOTTLES 3 +#define CHEMMASTER_MIN_PRODUCTION_MODE 1 +#define CHEMMASTER_MAX_PRODUCTION_MODE 3 +#define CHEMMASTER_MAX_PILLS 20 +#define CHEMMASTER_MAX_PATCHES 20 +#define CHEMMASTER_MAX_BOTTLES 5 + #define TRANSFER_TO_DISPOSAL 0 #define TRANSFER_TO_BEAKER 1 @@ -23,11 +32,27 @@ var/useramount = 30 // Last used amount var/pillamount = 10 var/patchamount = 10 + var/bottleamount = 1 + var/pillname = "" + var/patchname = "" + var/bottlename = "" var/bottlesprite = 1 + var/production_mode = CHEMMASTER_PRODUCTION_MODE_PILLS var/pillsprite = 1 var/printing = FALSE - var/static/list/pill_bottle_wrappers - var/static/list/bottle_styles + var/static/list/pill_bottle_wrappers = list( + COLOR_RED = "Red", + COLOR_GREEN = "Green", + COLOR_PALE_BTL_GREEN = "Pale Green", + COLOR_BLUE = "Blue", + COLOR_CYAN_BLUE = "Light Blue", + COLOR_TEAL = "Teal", + COLOR_YELLOW = "Yellow", + COLOR_ORANGE = "Orange", + COLOR_PINK = "Pink", + COLOR_MAROON = "Brown" + ) + var/static/list/bottle_styles = list("bottle", "small_bottle", "wide_bottle", "round_bottle", "reagent_bottle") var/list/safe_chem_list = list("antihol", "charcoal", "epinephrine", "insulin", "teporone", "silver_sulfadiazine", "salbutamol", "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder", "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone", @@ -198,6 +223,74 @@ P.name = "Chemical Analysis - [R.name]" spawn(50) printing = FALSE + if("set_production_mode") + var/new_mode = text2num(params["mode"]) + if(isnull(new_mode)) + return + production_mode = clamp(new_mode, CHEMMASTER_MIN_PRODUCTION_MODE, CHEMMASTER_MAX_PRODUCTION_MODE) + + // Pills + if("set_pills_style") + var/new_style = text2num(params["style"]) + if(isnull(new_style)) + return + pillsprite = clamp(new_style, 1, MAX_PILL_SPRITE) + if("set_pills_amount") + var/new_amount = text2num(params["amount"]) + if(isnull(new_amount)) + return + pillamount = clamp(new_amount, 1, CHEMMASTER_MAX_PILLS) + if("set_pills_name") + var/new_name = sanitize(params["name"]) + // Allow name to be set to empty + if(length(new_name) < 0 || length(new_name) > MAX_CUSTOM_NAME_LEN) + return + pillname = new_name + + // Patches + if("set_patches_amount") + var/new_amount = text2num(params["amount"]) + if(isnull(new_amount)) + return + patchamount = clamp(new_amount, 1, CHEMMASTER_MAX_PATCHES) + if("set_patches_name") + var/new_name = sanitize(params["name"]) + // Allow name to be set to empty + if(length(new_name) < 0 || length(new_name) > MAX_CUSTOM_NAME_LEN) + return + patchname = new_name + + // Bottles + if("set_bottles_style") + var/new_style = text2num(params["style"]) + if(isnull(new_style)) + return + bottlesprite = clamp(new_style, 1, length(bottle_styles)) + if("set_bottles_amount") + var/new_amount = text2num(params["amount"]) + if(isnull(new_amount)) + return + bottleamount = clamp(new_amount, 1, CHEMMASTER_MAX_BOTTLES) + if("set_bottles_name") + var/new_name = sanitize(params["name"]) + // Allow name to be set to empty + if(length(new_name) < 0 || length(new_name) > MAX_CUSTOM_NAME_LEN) + return + bottlename = new_name + + // Container Customization + if("clear_container_style") + if(!loaded_pill_bottle) + return + loaded_pill_bottle.wrapper_color = null + loaded_pill_bottle.cut_overlays() + if("set_container_style") + if(!loaded_pill_bottle) // wat? + return + var/new_color = params["style"] + if(pill_bottle_wrappers[new_color]) + loaded_pill_bottle.wrapper_color = new_color + loaded_pill_bottle.apply_wrap() else . = FALSE @@ -236,6 +329,76 @@ return var/obj/item/reagent_containers/food/condiment/P = new(loc) reagents.trans_to(P, 50) + if("create_pills") + var/medicine_name = pillname + var/count = pillamount + var/amount_per_pill = clamp(reagents.total_volume / count, 0, MAX_UNITS_PER_PILL) + if(length(pillname) <= 0 || isnull(pillname)) + medicine_name = "[reagents.get_master_reagent_name()] ([amount_per_pill]u)" + + if(condi || !reagents.total_volume) + return + + for(var/i in 1 to count) + if(reagents.total_volume <= 0) + to_chat(ui.user, "Not enough reagents to create these pills!") + return + + var/obj/item/reagent_containers/pill/P = new(loc) + P.name = "[medicine_name] pill" + P.pixel_x = rand(-7, 7) // Random position + P.pixel_y = rand(-7, 7) + P.icon_state = "pill[pillsprite]" + reagents.trans_to(P, amount_per_pill) + // Load the pills in the bottle if there's one loaded + if(istype(loaded_pill_bottle) && loaded_pill_bottle.can_be_inserted(P, TRUE)) + P.forceMove(loaded_pill_bottle) + if("create_patches") + if(condi || !reagents.total_volume) + return + + var/medicine_name = patchname + var/count = patchamount + if(length(medicine_name) <= 0 || isnull(medicine_name)) + medicine_name = reagents.get_master_reagent_name() + var/amount_per_patch = clamp(reagents.total_volume / count, 0, MAX_UNITS_PER_PATCH) + var/is_medical_patch = chemical_safety_check(reagents) + for(var/i in 1 to count) + if(reagents.total_volume <= 0) + to_chat(ui.user, "Not enough reagents to create these patches!") + return + + var/obj/item/reagent_containers/patch/P = new(loc) + P.name = "[medicine_name] patch" + P.pixel_x = rand(-7, 7) // random position + P.pixel_y = rand(-7, 7) + reagents.trans_to(P, amount_per_patch) + if(is_medical_patch) + P.instant_application = TRUE + P.icon_state = "bandaid_med" + // Load the patches in the bottle if there's one loaded + if(istype(loaded_pill_bottle) && loaded_pill_bottle.can_be_inserted(P, TRUE)) + P.forceMove(loaded_pill_bottle) + if("create_bottles") + if(condi || !reagents.total_volume) + return + + var/medicine_name = bottlename + var/count = bottleamount + if(length(medicine_name) <= 0 || isnull(medicine_name)) + medicine_name = reagents.get_master_reagent_name() + var/amount_per_bottle = clamp(reagents.total_volume / count, 0, MAX_UNITS_PER_BOTTLE) + for(var/i in 1 to count) + if(reagents.total_volume <= 0) + to_chat(ui.user, "Not enough reagents to create these bottles!") + return + + var/obj/item/reagent_containers/glass/bottle/reagent/P = new(loc) + P.name = "[medicine_name] bottle" + P.pixel_x = rand(-7, 7) // random position + P.pixel_y = rand(-7, 7) + P.icon_state = length(bottle_styles) && bottle_styles[bottlesprite] || "bottle" + reagents.trans_to(P, amount_per_bottle) else return FALSE @@ -256,7 +419,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "ChemMaster", name, 575, 500) + ui = new(user, src, ui_key, "ChemMaster", name, 575, 600) ui.open() /obj/machinery/chem_master/ui_data(mob/user) @@ -268,6 +431,7 @@ data["loaded_pill_bottle_name"] = loaded_pill_bottle.name data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots + data["loaded_pill_bottle_style"] = loaded_pill_bottle.wrapper_color data["beaker"] = beaker ? TRUE : FALSE if(beaker) @@ -283,6 +447,9 @@ data["beaker_reagents"] = list() data["buffer_reagents"] = list() + data["pillamount"] = pillamount + data["patchamount"] = patchamount + data["bottleamount"] = bottleamount data["pillsprite"] = pillsprite data["bottlesprite"] = bottlesprite data["mode"] = mode @@ -291,6 +458,56 @@ // Transfer modal information if there is one data["modal"] = ui_modal_data(src) + data["production_mode"] = production_mode + + data["pillname"] = pillname + data["patchname"] = patchname + data["bottlename"] = bottlename + + data["maxpills"] = CHEMMASTER_MAX_PILLS + data["maxpatches"] = CHEMMASTER_MAX_PATCHES + data["maxbottles"] = CHEMMASTER_MAX_BOTTLES + + if(reagents.total_volume) + var/amount_per_pill = clamp(reagents.total_volume / pillamount, 0, MAX_UNITS_PER_PILL) + data["pillplaceholdername"] = "[reagents.get_master_reagent_name()] ([amount_per_pill]u)" + var/amount_per_patch = clamp(reagents.total_volume / patchamount, 0, MAX_UNITS_PER_PATCH) + data["patchplaceholdername"] = "[reagents.get_master_reagent_name()] ([amount_per_patch]u)" + data["bottleplaceholdername"] = reagents.get_master_reagent_name() + + return data + +/obj/machinery/chem_master/ui_static_data(mob/user) + var/list/data = list() + + data["maxnamelength"] = MAX_CUSTOM_NAME_LEN + + var/pill_styles = list() + for(var/i in 1 to MAX_PILL_SPRITE) + pill_styles += list(list( + "id" = i, + "sprite" = "pill[i].png", + )) + data["pillstyles"] = pill_styles + + var/bottle_styles_with_sprite = list() + var/bottle_style_indexer = 0 + for(var/style in bottle_styles) + bottle_style_indexer++ + bottle_styles_with_sprite += list(list( + "id" = bottle_style_indexer, + "sprite" = "[style].png", + )) + data["bottlestyles"] = bottle_styles_with_sprite + + var/pill_bottle_styles[0] + for(var/style in pill_bottle_wrappers) + pill_bottle_styles += list(list( + "color" = style, + "name" = pill_bottle_wrappers[style], + )) + data["containerstyles"] = pill_bottle_styles + return data /** @@ -323,25 +540,6 @@ arguments["analysis"] = result ui_modal_message(src, id, "", null, arguments) - if("change_pill_bottle_style") - if(!loaded_pill_bottle) - return - if(!pill_bottle_wrappers) - pill_bottle_wrappers = list( - "CLEAR" = "Default", - COLOR_RED = "Red", - COLOR_GREEN = "Green", - COLOR_PALE_BTL_GREEN = "Pale green", - COLOR_BLUE = "Blue", - COLOR_CYAN_BLUE = "Light blue", - COLOR_TEAL = "Teal", - COLOR_YELLOW = "Yellow", - COLOR_ORANGE = "Orange", - COLOR_PINK = "Pink", - COLOR_MAROON = "Brown" - ) - var/current = pill_bottle_wrappers[loaded_pill_bottle.wrapper_color] || "Default" - ui_modal_choice(src, id, "Please select a wrapper color:", null, arguments, current, pill_bottle_wrappers) if("addcustom") if(!beaker || !beaker.reagents.total_volume) return @@ -354,78 +552,11 @@ if(!condi || !reagents.total_volume) return ui_modal_input(src, id, "Please name your new condiment pack:", null, arguments, reagents.get_master_reagent_name(), MAX_CUSTOM_NAME_LEN) - if("create_pill") - if(condi || !reagents.total_volume) - return - - var/num = arguments["num"] || 1 // Multi puts a string in `num`, single leaves it null - num = clamp(round(text2num(num)), 0, MAX_MULTI_AMOUNT) - if(!num) - return - arguments["num"] = num - - var/amount_per_pill = clamp(reagents.total_volume / num, 0, MAX_UNITS_PER_PILL) - var/default_name = "[reagents.get_master_reagent_name()] ([amount_per_pill]u)" - var/pills_text = num == 1 ? "new pill" : "[num] new pills" - ui_modal_input(src, id, "Please name your [pills_text]:", null, arguments, default_name, MAX_CUSTOM_NAME_LEN) - if("create_pill_multiple") - if(condi || !reagents.total_volume) - return - ui_modal_input(src, id, "Please enter the amount of pills to make (max [MAX_MULTI_AMOUNT] at a time):", null, arguments, pillamount, 5) - if("change_pill_style") - var/list/choices = list() - for(var/i = 1 to MAX_PILL_SPRITE) - choices += "pill[i].png" - ui_modal_bento(src, id, "Please select the new style for pills:", null, arguments, pillsprite, choices) - if("create_patch") - if(condi || !reagents.total_volume) - return - - var/num = arguments["num"] || 1 // Multi puts a string in `num`, single leaves it null - num = clamp(round(text2num(num)), 0, MAX_MULTI_AMOUNT) - if(!num) - return - arguments["num"] = num - - var/amount_per_patch = clamp(reagents.total_volume / num, 0, MAX_UNITS_PER_PATCH) - var/default_name = "[reagents.get_master_reagent_name()] ([amount_per_patch]u)" - var/patches_text = num == 1 ? "new patch" : "[num] new patches" - ui_modal_input(src, id, "Please name your [patches_text]:", null, arguments, default_name, MAX_CUSTOM_NAME_LEN) - if("create_patch_multiple") - if(condi || !reagents.total_volume) - return - ui_modal_input(src, id, "Please enter the amount of patches to make (max [MAX_MULTI_AMOUNT] at a time):", null, arguments, pillamount, 5) - if("create_bottle") - if(condi || !reagents.total_volume) - return - ui_modal_input(src, id, "Please name your bottle:", null, arguments, reagents.get_master_reagent_name(), MAX_CUSTOM_NAME_LEN) - if("change_bottle_style") - if(!bottle_styles) - bottle_styles = list("bottle", "small_bottle", "wide_bottle", "round_bottle", "reagent_bottle") - var/list/bottle_styles_png = list() - for(var/style in bottle_styles) - bottle_styles_png += "[style].png" - ui_modal_bento(src, id, "Please select the new style for bottles:", null, arguments, bottlesprite, bottle_styles_png) else return FALSE if(UI_MODAL_ANSWER) var/answer = params["answer"] switch(id) - if("change_pill_bottle_style") - if(!pill_bottle_wrappers || !loaded_pill_bottle) // wat? - return - var/color = "CLEAR" - for(var/col in pill_bottle_wrappers) - var/col_name = pill_bottle_wrappers[col] - if(col_name == answer) - color = col - break - if(length(color) && color != "CLEAR") - loaded_pill_bottle.wrapper_color = color - loaded_pill_bottle.apply_wrap() - else - loaded_pill_bottle.wrapper_color = null - loaded_pill_bottle.cut_overlays() if("addcustom") var/amount = isgoodnumber(text2num(answer)) if(!amount || !arguments["id"]) @@ -446,89 +577,6 @@ P.name = "[answer] pack" P.desc = "A small condiment pack. The label says it contains [answer]." reagents.trans_to(P, 10) - if("create_pill") - if(condi || !reagents.total_volume) - return - var/count = text2num(arguments["num"]) - if(!count) - return - - if(!length(answer)) - answer = reagents.get_master_reagent_name() - var/amount_per_pill = clamp(reagents.total_volume / count, 0, MAX_UNITS_PER_PILL) - while(count--) - if(reagents.total_volume <= 0) - to_chat(usr, "Not enough reagents to create these pills!") - return - - var/obj/item/reagent_containers/pill/P = new(loc) - P.name = "[answer] pill" - P.pixel_x = rand(-7, 7) // Random position - P.pixel_y = rand(-7, 7) - P.icon_state = "pill[pillsprite]" - reagents.trans_to(P, amount_per_pill) - // Load the pills in the bottle if there's one loaded - if(istype(loaded_pill_bottle) && loaded_pill_bottle.can_be_inserted(P, TRUE)) - P.forceMove(loaded_pill_bottle) - if("create_pill_multiple") - if(condi || !reagents.total_volume) - return - ui_act("modal_open", list("id" = "create_pill", "arguments" = list("num" = answer)), ui, state) - if("change_pill_style") - var/new_style = clamp(text2num(answer) || 0, 0, MAX_PILL_SPRITE) - if(!new_style) - return - pillsprite = new_style - if("create_patch") - if(condi || !reagents.total_volume) - return - var/count = text2num(arguments["num"]) - if(!count) - return - - if(!length(answer)) - answer = reagents.get_master_reagent_name() - var/amount_per_patch = clamp(reagents.total_volume / count, 0, MAX_UNITS_PER_PATCH) - var/is_medical_patch = chemical_safety_check(reagents) - while(count--) - if(reagents.total_volume <= 0) - to_chat(usr, "Not enough reagents to create these patches!") - return - - var/obj/item/reagent_containers/patch/P = new(loc) - P.name = "[answer] patch" - P.pixel_x = rand(-7, 7) // random position - P.pixel_y = rand(-7, 7) - reagents.trans_to(P, amount_per_patch) - if(is_medical_patch) - P.instant_application = TRUE - P.icon_state = "bandaid_med" - // Load the patches in the bottle if there's one loaded - if(istype(loaded_pill_bottle) && loaded_pill_bottle.can_be_inserted(P, TRUE)) - P.forceMove(loaded_pill_bottle) - if("create_patch_multiple") - if(condi || !reagents.total_volume) - return - ui_act("modal_open", list("id" = "create_patch", "arguments" = list("num" = answer)), ui, state) - if("create_bottle") - if(condi || !reagents.total_volume) - return - - if(!length(answer)) - answer = reagents.get_master_reagent_name() - var/obj/item/reagent_containers/glass/bottle/reagent/P = new(loc) - P.name = "[answer] bottle" - P.pixel_x = rand(-7, 7) // random position - P.pixel_y = rand(-7, 7) - P.icon_state = length(bottle_styles) && bottle_styles[bottlesprite] || "bottle" - reagents.trans_to(P, 50) - if("change_bottle_style") - if(!bottle_styles) - return - var/new_sprite = text2num(answer) || 1 - if(new_sprite < 1 || new_sprite > length(bottle_styles)) - return - bottlesprite = new_sprite else return FALSE else @@ -568,10 +616,19 @@ RefreshParts() #undef MAX_PILL_SPRITE -#undef MAX_MULTI_AMOUNT #undef MAX_UNITS_PER_PILL #undef MAX_UNITS_PER_PATCH +#undef MAX_UNITS_PER_BOTTLE #undef MAX_CUSTOM_NAME_LEN +#undef CHEMMASTER_PRODUCTION_MODE_PILLS +#undef CHEMMASTER_PRODUCTION_MODE_PATCHES +#undef CHEMMASTER_PRODUCTION_MODE_BOTTLES +#undef CHEMMASTER_MIN_PRODUCTION_MODE +#undef CHEMMASTER_MAX_PRODUCTION_MODE +#undef CHEMMASTER_MAX_PILLS +#undef CHEMMASTER_MAX_PATCHES +#undef CHEMMASTER_MAX_BOTTLES + #undef TRANSFER_TO_DISPOSAL #undef TRANSFER_TO_BEAKER diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 0ff9334db4ee..bac5f3c2ef10 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -53,7 +53,9 @@ //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! /obj/item/slime_extract = list(), - /obj/item/reagent_containers/food = list() + /obj/item/reagent_containers/food = list(), + /obj/item/reagent_containers/pill = list(), + /obj/item/reagent_containers/patch = list() ) var/list/juice_items = list ( diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index 89c1502e61ba..ed79318dbfa3 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -81,6 +81,26 @@ build_path = /obj/item/clothing/glasses/hud/skills category = list("Equipment") +/datum/design/jani_hud + name = "Janitor HUD" + desc = "A heads-up display that scans for messes and alerts the user. Good for finding puddles hiding under catwalks." + id = "jani_hud" + req_tech = list("biotech" = 2, "magnets" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/glasses/hud/janitor + category = list("Equipment", "Janitorial") + +/datum/design/jani_night_vision_goggles + name = "Night Vision Janitor HUD" + desc = "A janitorial filth scanner fitted with a light amplifier." + id = "night_vision_jani" + req_tech = list("biotech" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 6) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000) + build_path = /obj/item/clothing/glasses/hud/janitor/night + category = list("Equipment", "Janitorial") + /datum/design/mesons name = "Optical Meson Scanners" desc = "Used for seeing walls, floors, and stuff through anything." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index a82989c14039..91620b6e399a 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -386,6 +386,17 @@ build_path = /obj/item/organ/internal/cyberimp/arm/toolset_abductor category = list("Medical") +/datum/design/cyberimp_jani_hud + name = "Janitor HUD Implant" + desc = "These cybernetic eye implants will display a filth HUD over everything you see. Wiggle eyes to control." + id = "ci-janihud" + req_tech = list("materials" = 5, "engineering" = 4, "programming" = 4, "biotech" = 4) + build_type = PROTOLATHE | MECHFAB + construction_time = 5 SECONDS + materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_SILVER = 500, MAT_GOLD = 500) + build_path = /obj/item/organ/internal/cyberimp/eyes/hud/jani + category = list("Medical") + /datum/design/cyberimp_diagnostic_hud name = "Diagnostic HUD Implant" desc = "These cybernetic eye implants will display a diagnostic HUD over everything you see. Wiggle eyes to control." diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index cd26c0b1817d..6d69660f7818 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -503,7 +503,7 @@ backpack_contents = list( /obj/item/grenade/chem_grenade/antiweed = 2, - /obj/item/push_broom, + /obj/item/push_broom = 1, /obj/item/storage/box/lights/mixed = 1, /obj/item/melee/flyswatter = 1 ) @@ -512,7 +512,7 @@ name = "RT Janitor (Amber)" suit = /obj/item/clothing/suit/armor/vest/ert/janitor head = /obj/item/clothing/head/helmet/ert/janitor - glasses = /obj/item/clothing/glasses/sunglasses + glasses = /obj/item/clothing/glasses/hud/janitor/sunglasses r_pocket = /obj/item/flashlight/seclite suit_store = /obj/item/gun/energy/disabler @@ -523,12 +523,13 @@ /datum/outfit/job/centcom/response_team/janitorial/red name = "RT Janitor (Red)" suit = /obj/item/clothing/suit/space/hardsuit/ert/janitor - glasses = /obj/item/clothing/glasses/hud/security/sunglasses + glasses = /obj/item/clothing/glasses/hud/janitor/sunglasses shoes = /obj/item/clothing/shoes/galoshes/dry/lightweight r_pocket = /obj/item/scythe/tele suit_store = /obj/item/gun/energy/gun cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/hud/security, /obj/item/organ/internal/cyberimp/arm/janitorial/advanced, /obj/item/organ/internal/cyberimp/chest/nutriment/hardened ) @@ -540,7 +541,7 @@ /datum/outfit/job/centcom/response_team/janitorial/gamma name = "RT Janitor (Gamma)" - glasses = /obj/item/clothing/glasses/night + glasses = /obj/item/clothing/glasses/hud/janitor/night back = /obj/item/mod/control/pre_equipped/responsory/janitor r_pocket = /obj/item/scythe/tele shoes = /obj/item/clothing/shoes/magboots/elite diff --git a/code/modules/ruins/ghost_bar.dm b/code/modules/ruins/ghost_bar.dm index 9042475276b5..c957eb01dabf 100644 --- a/code/modules/ruins/ghost_bar.dm +++ b/code/modules/ruins/ghost_bar.dm @@ -19,7 +19,7 @@ our_characters_names += saves.real_name our_character_saves += list(saves.real_name = saves) - var/character_name = input("Select a character", "Character selection") as null|anything in our_characters_names + var/character_name = tgui_input_list(user, "Select a character", "Character selection", our_characters_names) if(!character_name) return if(QDELETED(user)) diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 9c37adbb8c0a..bc5d0dafa087 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -329,7 +329,7 @@ L[S.name] = S playsound(console, 'sound/machines/terminal_prompt.ogg', 25, 0) - var/selected = input("Choose location to jump to", "Locations", null) as null|anything in L + var/selected = tgui_input_list(target, "Choose location to jump to", "Locations", L) if(QDELETED(src) || QDELETED(target) || !isliving(target)) return playsound(src, "terminal_type", 25, 0) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index b60d8eab24c7..19c9da11ba97 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -166,7 +166,7 @@ var/list/choices = list() for(var/obj/I in items_list) choices["[I.name]"] = image(icon = I.icon, icon_state = I.icon_state) - var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, PROC_REF(check_menu), user)) + var/choice = show_radial_menu(user, user, choices, custom_check = CALLBACK(src, PROC_REF(check_menu), user)) if(!check_menu(user)) return var/obj/item/selected diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 3637f1f4f83d..5d7fb4d2bb57 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -61,3 +61,11 @@ aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..." HUD_type = DATA_HUD_SECURITY_ADVANCED examine_extensions = list(EXAMINE_HUD_SECURITY_READ) + +/obj/item/organ/internal/cyberimp/eyes/hud/jani + name = "Janitor HUD implant" + desc = "These cybernetic eye implants will display a filth HUD over everything you see." + implant_color = "#AF00AF" + origin_tech = "materials=4;engineering=4;biotech=4" + aug_message = "You scan for filth spots around you..." + HUD_type = DATA_HUD_JANITOR diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index dc77bae859c1..f20903ee0252 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -310,12 +310,6 @@ emagged = FALSE -/obj/item/organ/internal/heart/cybernetic/upgraded/emp_act(severity) - ..() - if(emp_proof) - return - necrotize() - /obj/item/organ/internal/heart/cybernetic/upgraded/proc/shock_heart(mob/living/carbon/human/source, intensity) SIGNAL_HANDLER_DOES_SLEEP diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index f4a897775589..a0e8fc686dc8 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -307,7 +307,7 @@ organs -= O organs[O.name] = O - var/obj/item/organ/internal/I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + var/obj/item/organ/internal/I = tgui_input_list(user, "Remove which organ?", "Surgery", organs) if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) extracting = organs[I] if(!extracting) diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 7200fbf1ec31..1aaa027b0221 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -68,7 +68,7 @@ for(var/i in 1 to list_size) names += "Subject [target.gender == MALE ? "I" : "O"]-[pick("A", "B", "C", "D", "E")]-[rand(10000, 99999)]" names += random_name(target.gender, species_names) //give one normal name in case they want to do regular plastic surgery - var/chosen_name = input(user, "Choose a new name to assign.", "Plastic Surgery") as null|anything in names + var/chosen_name = tgui_input_list(user, "Choose a new name to assign", "Plastic Surgery", names) if(!chosen_name) return var/oldname = target.real_name diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index def103bbb168..f1eb83d8f2ac 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -472,7 +472,7 @@ organs -= O organs[O.name] = O - I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + I = tgui_input_list(user, "Remove which organ?", "Surgery", organs) if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) I = organs[I] if(!I) @@ -644,7 +644,7 @@ return ..() /datum/surgery_step/robotics/external/customize_appearance/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - var/chosen_appearance = input(user, "Select the company appearance for this limb.", "Limb Company Selection") as null|anything in GLOB.selectable_robolimbs + var/chosen_appearance = tgui_input_list(user, "Select the company appearance for this limb.", "Limb Company Selection", GLOB.selectable_robolimbs) if(!chosen_appearance) return SURGERY_STEP_INCOMPLETE var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -701,7 +701,7 @@ to_chat(user, "The multitool is out of range! Please try again.") return SURGERY_STEP_INCOMPLETE var/static/list/gender_list = list("Male" = MALE, "Female" = FEMALE, "Genderless" = PLURAL, "Object" = NEUTER) - var/gender_key = input(user, "Choose a gender for this machine.", "Select Gender", target.gender) as null|anything in gender_list + var/gender_key = tgui_input_list(user, "Choose a gender for this machine", "Select Gender", gender_list) if(!gender_key) to_chat(user, "You must choose a gender! Please try again.") return SURGERY_STEP_INCOMPLETE diff --git a/code/modules/telesci/rcs.dm b/code/modules/telesci/rcs.dm index 28475ce55d8c..25825bb8d013 100644 --- a/code/modules/telesci/rcs.dm +++ b/code/modules/telesci/rcs.dm @@ -68,7 +68,7 @@ if(emagged) // Add an 'Unknown' entry at the end if it's emagged L += "**Unknown**" - var/select = input("Please select a telepad.", "RCS") in L + var/select = tgui_input_list(user, "Please select a telepad.", "RCS", L) if(select == "**Unknown**") // Randomise the teleport location pad = random_coords() else // Else choose the value of the selection diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index dd7f90950551..91d34bc8df56 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -95,7 +95,7 @@ if("hair_gradient") if(can_change(APPEARANCE_HAIR) && length(valid_hairstyles)) - var/new_style = input("Please select gradient style.", "Hair Gradient", head_organ.h_grad_style) as null|anything in GLOB.hair_gradients_list + var/new_style = tgui_input_list(usr, "Please select gradient style", "Hair Gradient", GLOB.hair_gradients_list) if(new_style) owner.change_hair_gradient(style = new_style) @@ -231,7 +231,7 @@ data["head_accessory_styles"] = head_accessory_styles data["head_accessory_style"] = head_organ ? head_organ.ha_style : "None" - if(!(user.dna.species.bodyflags & BALD)) + if(!(owner.dna.species.bodyflags & BALD)) data["change_hair"] = can_change(APPEARANCE_HAIR) if(data["change_hair"]) var/list/hair_styles = list() @@ -242,7 +242,7 @@ data["change_hair_color"] = can_change(APPEARANCE_HAIR_COLOR) data["change_secondary_hair_color"] = can_change(APPEARANCE_SECONDARY_HAIR_COLOR) - if(!(user.dna.species.bodyflags & SHAVED)) + if(!(owner.dna.species.bodyflags & SHAVED)) data["change_facial_hair"] = can_change(APPEARANCE_FACIAL_HAIR) if(data["change_facial_hair"]) var/list/facial_hair_styles = list() @@ -254,7 +254,7 @@ data["change_secondary_facial_hair_color"] = can_change(APPEARANCE_SECONDARY_FACIAL_HAIR_COLOR) data["change_hair_gradient"] = can_change(APPEARANCE_HAIR) && length(valid_hairstyles) - if(!ismachineperson(user)) + if(!ismachineperson(owner)) data["change_head_markings"] = can_change_markings("head") if(data["change_head_markings"]) var/m_style = owner.m_styles["head"] diff --git a/code/modules/tgui/modules/tgui_input_list.dm b/code/modules/tgui/modules/tgui_input_list.dm index c642ef6bc9d2..f9ede158930c 100644 --- a/code/modules/tgui/modules/tgui_input_list.dm +++ b/code/modules/tgui/modules/tgui_input_list.dm @@ -112,7 +112,7 @@ /datum/tgui_list_input/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "ListInput", title, 325, 330, master_ui, state) + ui = new(user, src, ui_key, "ListInput", title, 325, 355, master_ui, state) ui.set_autoupdate(FALSE) ui.open() diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm index 4ddfff35bcc0..9db8ede7fbcd 100644 --- a/goon/code/datums/browserOutput.dm +++ b/goon/code/datums/browserOutput.dm @@ -46,7 +46,9 @@ GLOBAL_LIST_EMPTY(bicon_cache) if(!winexists(owner, "browseroutput")) spawn() - alert(owner.mob, "Updated chat window does not exist. If you are using a custom skin file please allow the game to update.") + winset(usr, null, "command=.options") // Open their options and messages window + alert(owner.mob, "Updated chat window does not exist. Please post the contents of your 'Options and Messages' window that just opened to the #coding_chat channel on the Paradise Station discord. Please also upload skin.dmf to the same channel from the following folder in your Documents: BYOND/Skins/exadv1/spacestation13, then reconnect.") + stack_trace("[owner] had no browseroutput window! [owner]'s byond version is [owner.byond_version].[owner.byond_build]") broken = TRUE return 0 diff --git a/icons/_nanomaps/Cyberiad220_nanomap_z1.png b/icons/_nanomaps/Cyberiad220_nanomap_z1.png index 3596fa78cec1..f0602c98fa38 100644 Binary files a/icons/_nanomaps/Cyberiad220_nanomap_z1.png and b/icons/_nanomaps/Cyberiad220_nanomap_z1.png differ diff --git a/icons/_nanomaps/Delta220_nanomap_z1.png b/icons/_nanomaps/Delta220_nanomap_z1.png index 0d988f05b3da..8553d6bf01e4 100644 Binary files a/icons/_nanomaps/Delta220_nanomap_z1.png and b/icons/_nanomaps/Delta220_nanomap_z1.png differ diff --git a/icons/_nanomaps/MetaStation220_nanomap_z1.png b/icons/_nanomaps/MetaStation220_nanomap_z1.png index e65513e7f281..7aaa7ebafc5b 100644 Binary files a/icons/_nanomaps/MetaStation220_nanomap_z1.png and b/icons/_nanomaps/MetaStation220_nanomap_z1.png differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 016eec4eaf15..e9fb5b582b2d 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi index 585217a02ce4..92c2d1ee3fa4 100644 Binary files a/icons/mob/clothing/eyes.dmi and b/icons/mob/clothing/eyes.dmi differ diff --git a/icons/mob/clothing/modsuit/species/vox_modsuits.dmi b/icons/mob/clothing/modsuit/species/vox_modsuits.dmi index 6597922d3ad9..026b15502577 100644 Binary files a/icons/mob/clothing/modsuit/species/vox_modsuits.dmi and b/icons/mob/clothing/modsuit/species/vox_modsuits.dmi differ diff --git a/icons/mob/clothing/species/drask/eyes.dmi b/icons/mob/clothing/species/drask/eyes.dmi index bbe5ca72ad9a..38a7b628099a 100644 Binary files a/icons/mob/clothing/species/drask/eyes.dmi and b/icons/mob/clothing/species/drask/eyes.dmi differ diff --git a/icons/mob/clothing/species/grey/eyes.dmi b/icons/mob/clothing/species/grey/eyes.dmi index a17e4e2242ff..7760cca8f608 100644 Binary files a/icons/mob/clothing/species/grey/eyes.dmi and b/icons/mob/clothing/species/grey/eyes.dmi differ diff --git a/icons/mob/clothing/species/kidan/ears.dmi b/icons/mob/clothing/species/kidan/ears.dmi new file mode 100644 index 000000000000..0236591fb5f9 Binary files /dev/null and b/icons/mob/clothing/species/kidan/ears.dmi differ diff --git a/icons/mob/clothing/species/kidan/eyes.dmi b/icons/mob/clothing/species/kidan/eyes.dmi index 67901173d8d2..cc03d39fcdd5 100644 Binary files a/icons/mob/clothing/species/kidan/eyes.dmi and b/icons/mob/clothing/species/kidan/eyes.dmi differ diff --git a/icons/mob/clothing/species/vox/eyes.dmi b/icons/mob/clothing/species/vox/eyes.dmi index 103dca449d1e..ac19c03b436e 100644 Binary files a/icons/mob/clothing/species/vox/eyes.dmi and b/icons/mob/clothing/species/vox/eyes.dmi differ diff --git a/icons/mob/hud/hud_misc.dmi b/icons/mob/hud/hud_misc.dmi index 7e81764ab0a5..7e2d9c770438 100644 Binary files a/icons/mob/hud/hud_misc.dmi and b/icons/mob/hud/hud_misc.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index d09c2406376b..272e47b89b4c 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index b7f50b7f67cb..cf13a3e05107 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 66b7a42a8d89..599237fdadfa 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 04310be5f5c5..3eb8dfc83a79 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index bd519d6614ed..44b18e06c3f9 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/clothing/ties_overlay.dmi b/icons/obj/clothing/ties_overlay.dmi index d9df8c0547a8..e4c15f3ae0de 100644 Binary files a/icons/obj/clothing/ties_overlay.dmi and b/icons/obj/clothing/ties_overlay.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 06c7aa560835..768f5f64ed6f 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 4050124fb32e..a448deb6966d 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -77,7 +77,6 @@ menu "menu" elem name = "&Масштабирование" category = "&Вид" - saved-params = "is-checked;command" elem "NN" name = "&По соседним пикселям" command = ".winset \"paramapwindow.map.zoom-mode=distort\"" @@ -168,9 +167,9 @@ window "paramapwindow" font-size = 7 text-color = none is-default = true - saved-params = "icon-size" - zoom-mode = "normal" - style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie\t{color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080; font-style: italic;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }" + saved-params = "icon-size;zoom-mode" + zoom-mode = "distort" + style = ".center { text-align: center; } .maptext { font-family: 'MS Serif'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-family: 'Small Fonts'; font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie\t{color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080; font-style: italic;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }" .italics { font-family: 'Small Fonts'; }" on-show = ".winset \"menu.statusbar.is-checked=true?paramapwindow.status_bar.is-visible=true:paramapwindow.status_bar.is-visible=false\"" elem "title_browser" type = BROWSER @@ -318,7 +317,7 @@ window "rpane" command = "Changelog" elem "fullscreenb" type = BUTTON - pos = 464,7 + pos = 469,7 size = 70x16 saved-params = "is-checked" text = "Fullscreen" diff --git a/librust_g.so b/librust_g.so deleted file mode 100644 index d99a0236c068..000000000000 Binary files a/librust_g.so and /dev/null differ diff --git a/modular_ss220/aesthetics/floors/icons/floors.dmi b/modular_ss220/aesthetics/floors/icons/floors.dmi index 63c4f15f5b7d..73cf73061e31 100644 Binary files a/modular_ss220/aesthetics/floors/icons/floors.dmi and b/modular_ss220/aesthetics/floors/icons/floors.dmi differ diff --git a/modular_ss220/aesthetics/skin/code/darkmode.dm b/modular_ss220/aesthetics/skin/code/darkmode.dm index 16d6993cdae6..48e5f4c2ea9f 100644 --- a/modular_ss220/aesthetics/skin/code/darkmode.dm +++ b/modular_ss220/aesthetics/skin/code/darkmode.dm @@ -1,6 +1,6 @@ /client/activate_darkmode() . = ..() - winset(src, "rpane.fullscreenb", "background-color=#494949;text-color=#a4bad6") + winset(src, "rpane.fullscreenb", "background-color=#40628a;text-color=#ffffff") /client/deactivate_darkmode() . = ..() diff --git a/modular_ss220/awaymission_gun/code/items/awaymission_gun.dm b/modular_ss220/awaymission_gun/code/items/awaymission_gun.dm index d1a79a64a5b0..98913e4171b1 100644 --- a/modular_ss220/awaymission_gun/code/items/awaymission_gun.dm +++ b/modular_ss220/awaymission_gun/code/items/awaymission_gun.dm @@ -10,7 +10,6 @@ origin_tech = "combat=5;magnets=3;powerstorage=4" selfcharge = TRUE // Selfcharge is enabled and disabled, and used as the away mission tracker can_charge = 0 - emagged = FALSE /obj/item/gun/energy/laser/awaymission_aeg/Initialize(mapload) . = ..() @@ -18,17 +17,15 @@ onTransitZ(new_z = loc.z) /obj/item/gun/energy/laser/awaymission_aeg/onTransitZ(old_z, new_z) - if(emagged) - return if(is_away_level(new_z)) if(ismob(loc)) - to_chat(loc, span_notice("Ваш [name] активируется, начиная потреблять энергию от ближайшего беспроводного источника питания.")) + to_chat(loc, span_notice("Ваш [src] активируется, начиная аккумулировать энергию из материи сущего.")) selfcharge = TRUE else if(selfcharge) if(ismob(loc)) - to_chat(loc, span_danger("Ваш [name] деактивируется, так как он находится вне зоны действия источника питания.")) + to_chat(loc, span_danger("Ваш [src] деактивируется, так как он подавляется системами станции.")) cell.charge = 0 selfcharge = FALSE update_icon() @@ -38,54 +35,29 @@ var/mob/M = loc M.unEquip(src) -/obj/item/gun/energy/laser/awaymission_aeg/emag_act(mob/user) - . = ..() - if(emagged) - return - if(user) - if(prob(50)) - user.visible_message(span_warning("От [name] летят искры!"), span_notice("Вы взломали [name], что привело к перезаписи протоколов безопасности. Устройство может быть использовано вне ограничений")) - playsound(loc, 'sound/effects/sparks4.ogg', 30, 1) - do_sparks(5, 1, src) - emagged = TRUE - selfcharge = TRUE - else - user.visible_message(span_warning("От [name] летят искры... Он сейчас взорвётся!"), span_notice("Ой... Что-то пошло не так!")) - do_sparks(5, 1, src) - update_mob() - explosion(loc, -1, 0, 2) - qdel(src) - -/obj/item/gun/energy/laser/awaymission_aeg/emp_act(severity) - . = ..() - emag_act() - // GUNS /obj/item/gun/energy/laser/awaymission_aeg/rnd - name = "Exploreverse Mk I" - desc = "Первый прототип оружия с миниатюрным реактором для исследований в крайне отдаленных секторах. \ - \nДанную модель невозможно подключить к зарядной станции, во избежание истощения подключенных источников питания, \ - в связи с протоколами безопасности, опустошающие заряд при нахождении вне предназначенных мест использования устройств." - origin_tech = "combat=3;magnets=3;powerstorage=4" - force = 10 + name = "Exploreverse Mk.I" + desc = "Прототип оружия с миниатюрным реактором для исследований в крайне отдаленных секторах. \ + \n Данная модель использует экспериментальную систему обратного восполнения, работающую на принципе огромной аккумуляции энергии, но крайне уязвимую к радиопомехам, которыми кишит сектор станции, попростую не работая там." + origin_tech = "combat=2;powerstorage=3" /obj/item/gun/energy/laser/awaymission_aeg/rnd/mk2 - name = "Exploreverse Mk II" - desc = "Второй прототип оружия с миниатюрным реактором и ручным восполнением для исследований в крайне отдаленных секторах. \ - \nДанная модель оснащена системой ручного восполнения энергии типа \"Za.E.-8 A.L'sya\", \ - позволяющий в короткие сроки восполнить необходимую электроэнергию с помощью ручного труда, личной энергии и дергания за рычаг подключенного к системе зарядки. \ - \nСистему автозарядки невозможно использовать, в связи с протоколами безопасности, \ - опустошающие заряд при нахождении вне предназначенных мест использования устройств. \ + name = "Exploreverse Mk.II" + desc = "Второй прототип оружия с миниатюрным реактором и забавным рычагом для исследований в крайне отдаленных секторах. \ + \nДанная модель оснащена системой ручного восполнения энергии \"Za.E.-8 A.L'sya\", \ + позволяющей в короткие сроки восполнить необходимую электроэнергию с помощью ручного труда и конвертации личной энергии подключенного к системе зарядки. \ \nТеперь еще более нелепый дизайн с торчащими проводами!" icon_state = "laser_gate_mk2" - origin_tech = "combat=5;magnets=3;powerstorage=5;programming=3;engineering=5" - force = 10 + origin_tech = "combat=3;magnets=2;powerstorage=2;programming=3;" /obj/item/gun/energy/laser/awaymission_aeg/rnd/mk2/attack_self(mob/living/user) - var/msg_for_all = span_warning("[user.name] усердно давит на рычаг зарядки [name], но он не поддается!") - var/msg_for_user = span_notice("Вы пытаетесь надавить на рычаг зарядки [name], но он заблокирован.") + var/msg_for_all = span_warning("[user.name] усердно давит на рычаг зарядки [src], но он не поддается!") + var/msg_for_user = span_notice("Вы пытаетесь надавить на рычаг зарядки [src], но он заблокирован.") + var/msg_recharge_all = span_notice("[user.name] усердно давит на рычаг зарядки [src]...") + var/msg_recharge_user = span_notice("Вы со всей силы давите на рычаг зарядки [src], пытаясь зарядить её...") - if(!is_away_level(loc.z) && !emagged) + if(!is_away_level(loc.z)) user.visible_message(msg_for_all, msg_for_user) return FALSE @@ -93,14 +65,17 @@ user.visible_message(msg_for_all, msg_for_user) return FALSE - if(user.nutrition <= NUTRITION_LEVEL_HYPOGLYCEMIA) - user.visible_message(span_warning("[user.name] слабо давит на [name], но он ослаб!"), span_notice("Вы пытаетесь надавить на рычаг зарядки [name], но не можете из-за усталости!")) + if(user.nutrition <= NUTRITION_LEVEL_STARVING) + user.visible_message(span_warning("[user.name] слабо давит на [src], но бесполезно: слишком мало сил!"), span_notice("Вы пытаетесь надавить на рычаг зарядки [src], но не можете из-за голода и усталости!")) return FALSE + user.visible_message(msg_recharge_all, msg_recharge_user) playsound(loc, 'sound/effects/sparks3.ogg', 10, 1) do_sparks(1, 1, src) - cell.give(25) - user.adjust_nutrition(-2) - + if(!do_after_once(user, 3 SECONDS, target = src)) + return + cell.give(166) + on_recharge() + user.adjust_nutrition(-25) . = ..() diff --git a/modular_ss220/hairs/_hairs.dm b/modular_ss220/hairs/_hairs.dm index 9f082c589cac..2940bf0ff79b 100644 --- a/modular_ss220/hairs/_hairs.dm +++ b/modular_ss220/hairs/_hairs.dm @@ -1,4 +1,4 @@ /datum/modpack/hairs name = "Новые волосы" desc = "Добавляет новые типы волос" - author = "oricyUwU, FlutterSnedDraw" + author = "oricyUwU, FlutterSnedDraw, BR54FF" diff --git a/modular_ss220/hairs/_hairs.dme b/modular_ss220/hairs/_hairs.dme index 873e1c645e17..79396d10c85a 100644 --- a/modular_ss220/hairs/_hairs.dme +++ b/modular_ss220/hairs/_hairs.dme @@ -7,5 +7,8 @@ #include "_hairs.dm" #include "code/vulpkanin_hair.dm" #include "code/human_hair.dm" +#include "code/unathi_hair.dm" +#include "code/unathi_head_accessories.dm" +#include "code/unathi_facial_hair.dm" // END_INCLUDE diff --git a/modular_ss220/hairs/code/human_hair.dm b/modular_ss220/hairs/code/human_hair.dm index f481eb0cf9e1..cd3547a17c28 100644 --- a/modular_ss220/hairs/code/human_hair.dm +++ b/modular_ss220/hairs/code/human_hair.dm @@ -5,3 +5,453 @@ /datum/sprite_accessory/hair/crew icon = 'modular_ss220/hairs/icons/human_hair.dmi' icon_state = "crewcut" + +/datum/sprite_accessory/hair/short + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/cut + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/long + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longalt + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longer + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longeralt + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longest + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longfringe + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longestalt + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/halfbang + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/halfbangalt + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ponytail1 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ponytail2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ponytail3 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/sideponytail + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/highponytail + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/wisp + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/parted + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/pompadour + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/quiff + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bedhead + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bedhead2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bedhead3 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/beehive + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bobcurl + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bob + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bowl + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/braid2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/buzz + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/crew + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/combover + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/devillock + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/dreadlocks + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/curls + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/afro + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/afro2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/afro_large + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/sergeant + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/emo + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/flow + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/feather + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/hitop + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/mohawk + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/jensen + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/cia + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/mulder + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/gelled + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/spiky + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/kusanagi + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/kagami + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/himecut + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/braid + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/odango + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ombre + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/updo + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/skinhead + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/balding + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longemo + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +////////////////////////////// +//////START VG HAIRSTYLES///// +////////////////////////////// +/datum/sprite_accessory/hair/birdnest + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/unkept + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/modern + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/unshavenmohawk + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/drills + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/minidrills + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") +////////////////////////////// +//////END VG HAIRSTYLES/////// +////////////////////////////// + +/////////////////////////////////// +//////START POLARIS HAIRSTYLES///// +////////////////////////////////// + +/datum/sprite_accessory/hair/rosa + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/jade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/manbun + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/thinningback + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/thinningfront + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/thinning + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bowlcut2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ronin + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/topknot + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/regulationmohawk + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/rowbraid + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/rowdualbraid + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/rowbun + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/hightight + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/partfade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/undercut3 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/undercut2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/undercut1 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/tightbun + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/trimmed + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/trimflat + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/nofade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/baldfade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/highfade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/medfade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/lowfade + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/oxton + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/doublebun + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/halfshaved + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/shortbangs + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longeralt2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/nia + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/eighties + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/volaju + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/joestar + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/nitori + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/scully + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/vegeta + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/crono + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/poofy2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/poofy + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/fringetail + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/mahdrills + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/familyman + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/grandebraid + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/fringeemo + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/emo2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/rows2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/rows + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/reversemohawk + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/father + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/beehive2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/sleeze + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/tresshoulder + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/oneshoulder + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ponytail6 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ponytail5 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/ponytail4 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/country + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bedheadlong + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/flair + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/twintail + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/short2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bun2 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bun3 + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/shavehair + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/veryshortovereyealternate + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/veryshortovereye + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/shortovereye + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/longovereye + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/father + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/bun4 // Due to a vulp hairstyle called bun + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/////////////////////////////////// +//////END POLARIS HAIRSTYLES/////// +////////////////////////////////// + +////////////////////// +////Ume hairstyles//// +////////////////////// + +/datum/sprite_accessory/hair/eighties_ponytail + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/eighties_ponytailalt + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/big_bow + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/himecut_long + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/himecut_long_ponytail + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/amanita_short + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/long_curls + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") + +/datum/sprite_accessory/hair/long_curls_alt + species_allowed = list("Human", "Slime People", "Tajaran", "Vulpkanin") diff --git a/modular_ss220/hairs/code/unathi_facial_hair.dm b/modular_ss220/hairs/code/unathi_facial_hair.dm new file mode 100644 index 000000000000..6e790056d901 --- /dev/null +++ b/modular_ss220/hairs/code/unathi_facial_hair.dm @@ -0,0 +1,23 @@ +/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_short_alt + icon = 'modular_ss220/hairs/icons/unathi_facial_hair.dmi' + name = "Short Webbed Frills Alt" + icon_state = "shortfrillsalt" + secondary_theme = "webbing" + +/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_big + icon = 'modular_ss220/hairs/icons/unathi_facial_hair.dmi' + name = "Big Webbed Frills" + icon_state = "bigfrills" + secondary_theme = "webbing" + +/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_neckfull + icon = 'modular_ss220/hairs/icons/unathi_facial_hair.dmi' + name = "Neckfull Webbed Frills" + icon_state = "neckfullfrills" + secondary_theme = "webbing" + +/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_neck + icon = 'modular_ss220/hairs/icons/unathi_facial_hair.dmi' + name = "Neck Webbed Frills" + icon_state = "neckfrills" + secondary_theme = "webbing" diff --git a/modular_ss220/hairs/code/unathi_hair.dm b/modular_ss220/hairs/code/unathi_hair.dm new file mode 100644 index 000000000000..9b36a1829c49 --- /dev/null +++ b/modular_ss220/hairs/code/unathi_hair.dm @@ -0,0 +1,66 @@ +/datum/sprite_accessory/hair/unathi/knight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Knight" + icon_state = "knight_horns" + +/datum/sprite_accessory/hair/unathi/drake + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Drake" + icon_state = "drake_horns" + +/datum/sprite_accessory/hair/unathi/long + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Long" + icon_state = "long_horns" + +/datum/sprite_accessory/hair/unathi/largecurled + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Large curled" + icon_state = "largecurled_horns" + +/datum/sprite_accessory/hair/unathi/newcurly + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "New curly" + icon_state = "newcurly_horns" + +/datum/sprite_accessory/hair/unathi/guilmon + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Guimon" + icon_state = "guilmon_horns" + +/datum/sprite_accessory/hair/unathi/straight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight" + icon_state = "straight_horns" + +/datum/sprite_accessory/hair/unathi/straightdouble + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight double" + icon_state = "straight_double_horns" + +/datum/sprite_accessory/hair/unathi/broken + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken" + icon_state = "broken_horns" + +/datum/sprite_accessory/hair/unathi/brokenl + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken left" + icon_state = "brokenl_horns" + +/datum/sprite_accessory/hair/unathi/brokenr + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken right" + icon_state = "brokenr_horns" + +/datum/sprite_accessory/hair/unathi/una_cobra_ears + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Unathi Cobra Ears" + icon_state = "cobraears" + secondary_theme = "webbing" + +/datum/sprite_accessory/hair/unathi/una_cobra_hood_alt + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Unathi Cobra Hood Smooth" + icon_state = "cobrahood_alt" + secondary_theme = "webbing" diff --git a/modular_ss220/hairs/code/unathi_head_accessories.dm b/modular_ss220/hairs/code/unathi_head_accessories.dm new file mode 100644 index 000000000000..b4fd251c772d --- /dev/null +++ b/modular_ss220/hairs/code/unathi_head_accessories.dm @@ -0,0 +1,164 @@ +/datum/sprite_accessory/head_accessory/unathi/knight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Knight" + icon_state = "knight_horns" + +/datum/sprite_accessory/head_accessory/unathi/drake + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Drake" + icon_state = "drake_horns" + +/datum/sprite_accessory/head_accessory/unathi/long + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Long" + icon_state = "long_horns" + +/datum/sprite_accessory/head_accessory/unathi/largecurled + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Large curled" + icon_state = "largecurled_horns" + +/datum/sprite_accessory/head_accessory/unathi/newcurly + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "New curly" + icon_state = "newcurly_horns" + +/datum/sprite_accessory/head_accessory/unathi/guilmon + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Guimon" + icon_state = "guilmon_horns" + +/datum/sprite_accessory/head_accessory/unathi/straight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight" + icon_state = "straight_horns" + +/datum/sprite_accessory/head_accessory/unathi/straightdouble + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight double" + icon_state = "straight_double_horns" + +/datum/sprite_accessory/head_accessory/unathi/broken + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken" + icon_state = "broken_horns" + +/datum/sprite_accessory/head_accessory/unathi/brokenl + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken left" + icon_state = "brokenl_horns" + +/datum/sprite_accessory/head_accessory/unathi/brokenr + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken right" + icon_state = "brokenr_horns" + +/datum/sprite_accessory/head_accessory/unathi/knight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Knight" + icon_state = "knight_horns" + +/datum/sprite_accessory/head_accessory/unathi/drake + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Drake" + icon_state = "drake_horns" + +/datum/sprite_accessory/head_accessory/unathi/long + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Long" + icon_state = "long_horns" + +/datum/sprite_accessory/head_accessory/unathi/largecurled + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Large curled" + icon_state = "largecurled_horns" + +/datum/sprite_accessory/head_accessory/unathi/newcurly + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "New curly" + icon_state = "newcurly_horns" + +/datum/sprite_accessory/head_accessory/unathi/guilmon + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Guimon" + icon_state = "guilmon_horns" + +/datum/sprite_accessory/head_accessory/unathi/straight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight" + icon_state = "straight_horns" + +/datum/sprite_accessory/head_accessory/unathi/straightdouble + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight double" + icon_state = "straight_double_horns" + +/datum/sprite_accessory/head_accessory/unathi/broken + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken" + icon_state = "broken_horns" + +/datum/sprite_accessory/head_accessory/unathi/brokenl + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken left" + icon_state = "brokenl_horns" + +/datum/sprite_accessory/head_accessory/unathi/brokenr + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken right" + icon_state = "brokenr_horns" + +/datum/sprite_accessory/head_accessory/unathi/knight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Knight" + icon_state = "knight_horns" + +/datum/sprite_accessory/head_accessory/unathi/drake + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Drake" + icon_state = "drake_horns" + +/datum/sprite_accessory/head_accessory/unathi/long + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Long" + icon_state = "long_horns" + +/datum/sprite_accessory/head_accessory/unathi/largecurled + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Large curled" + icon_state = "largecurled_horns" + +/datum/sprite_accessory/head_accessory/unathi/newcurly + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "New curly" + icon_state = "newcurly_horns" + +/datum/sprite_accessory/head_accessory/unathi/guilmon + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Guimon" + icon_state = "guilmon_horns" + +/datum/sprite_accessory/head_accessory/unathi/straight + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight" + icon_state = "straight_horns" + +/datum/sprite_accessory/head_accessory/unathi/straightdouble + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Straight double" + icon_state = "straight_double_horns" + +/datum/sprite_accessory/head_accessory/unathi/broken + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken" + icon_state = "broken_horns" + +/datum/sprite_accessory/head_accessory/unathi/brokenl + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken left" + icon_state = "brokenl_horns" + +/datum/sprite_accessory/head_accessory/unathi/brokenr + icon = 'modular_ss220/hairs/icons/unathi_hair.dmi' + name = "Broken right" + icon_state = "brokenr_horns" diff --git a/modular_ss220/hairs/icons/unathi_facial_hair.dmi b/modular_ss220/hairs/icons/unathi_facial_hair.dmi new file mode 100644 index 000000000000..03f488a46217 Binary files /dev/null and b/modular_ss220/hairs/icons/unathi_facial_hair.dmi differ diff --git a/modular_ss220/hairs/icons/unathi_hair.dmi b/modular_ss220/hairs/icons/unathi_hair.dmi new file mode 100644 index 000000000000..39b83e328209 Binary files /dev/null and b/modular_ss220/hairs/icons/unathi_hair.dmi differ diff --git a/modular_ss220/objects/code/papershredder.dm b/modular_ss220/objects/code/papershredder.dm index b9bdc6566d78..fa12cc38edbc 100644 --- a/modular_ss220/objects/code/papershredder.dm +++ b/modular_ss220/objects/code/papershredder.dm @@ -114,7 +114,7 @@ if(resistance_flags & ON_FIRE) add_fingerprint(user) return - if(is_hot(shredp, user)) + if(shredp.get_heat()) add_fingerprint(user) user.visible_message(span_danger("\The [user] burns right through [src], turning it to ash. It flutters through the air before settling on the floor in a heap."), span_danger("You burn right through [src], turning it to ash. It flutters through the air before settling on the floor in a heap.")) fire_act() diff --git a/modular_ss220/sechailer/code/sechailer.dm b/modular_ss220/sechailer/code/sechailer.dm index 217f009b64aa..102f95e1b3b4 100644 --- a/modular_ss220/sechailer/code/sechailer.dm +++ b/modular_ss220/sechailer/code/sechailer.dm @@ -1,32 +1,36 @@ GLOBAL_LIST_EMPTY(sechailers) /datum/action/item_action/dispatch - name = "Signal dispatch" - desc = "Opens up a quick select wheel for reporting crimes, including your current location, to your fellow security officers." + name = "Signal Dispatch" + desc = "Открывает колесо быстрого выбора для сообщения о преступлениях, включая ваше текущее местоположение." button_icon_state = "dispatch" icon_icon = 'modular_ss220/sechailer/icons/sechailer.dmi' use_itemicon = FALSE /obj/item/clothing/mask/gas/sechailer - name = "\improper security gas mask" - var/obj/item/radio/radio //For engineering alerts. - var/dispatch_cooldown = 250 - var/last_dispatch = 0 + var/obj/item/radio/radio // For dispatch to work + var/dispatch_cooldown = 25 SECONDS + var/on_cooldown = FALSE + var/emped = FALSE + var/static/list/available_dispatch_messages = list( + "502 (Убийство)", + "101 (Сопротивление Аресту)", + "308 (Вторжение)", + "305 (Мятеж)", + "402 (Нападение на Офицера)") actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/adjust, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/hos - name = "\improper head of security's SWAT mask" - actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/adjust, /datum/action/item_action/selectphrase) + actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/warden - name = "\improper warden's SWAT mask" - actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/adjust, /datum/action/item_action/selectphrase) + actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/swat - actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/adjust, /datum/action/item_action/selectphrase) + actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/blue - actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/adjust, /datum/action/item_action/selectphrase) + actions_types = list(/datum/action/item_action/dispatch, /datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/Destroy() qdel(radio) @@ -41,25 +45,62 @@ GLOBAL_LIST_EMPTY(sechailers) radio.config(list("Security" = 0)) radio.follow_target = src - /obj/item/clothing/mask/gas/sechailer/proc/dispatch(mob/user) - var/area/A = get_area(src) - if(world.time < last_dispatch + dispatch_cooldown) - to_chat(user, "Dispatch radio broadcasting systems are recharging.") - return FALSE - var/list/options = list() - for(var/option in list("502 (Убийство)", "101 (Сопротивление Аресту)", "308 (Вторжение)", "305 (Мятеж)", "402 (Нападение на Офицера)")) //Just hardcoded for now! - options[option] = image(icon = 'modular_ss220/sechailer/icons/menu.dmi', icon_state = option) - var/message = show_radial_menu(user, src, options) + for(var/option in available_dispatch_messages) + available_dispatch_messages[option] = image(icon = 'modular_ss220/sechailer/icons/menu.dmi', icon_state = option) + var/message = show_radial_menu(user, src, available_dispatch_messages) + var/location_name = get_location_name(src, TRUE) // get_location_name works better as Affected says + if(!message) - return FALSE - radio.autosay("Диспетчер, [user], код [message] в [A], запрашивается помощь.", src, "Security", list(z)) - last_dispatch = world.time + return + if(on_cooldown) + var/list/cooldown_info = list("Ожидайте. Система оповещения ") + if(emped) + cooldown_info += "в защитном режиме, " + else + cooldown_info += "перезаряжается, " + // Cooldown not updating realtime, and i don't want to rewrite it just for the sake of it + cooldown_info += "примерное время восстановления: [dispatch_cooldown / 10] секунд." + to_chat(user, span_notice(cooldown_info.Join())) + return + + on_cooldown = TRUE + addtimer(CALLBACK(src, PROC_REF(reboot)), dispatch_cooldown) + // This code if fucking hell, but it works as intended for(var/atom/movable/hailer in GLOB.sechailers) - if(hailer.loc && ismob(hailer.loc)) - playsound(hailer.loc, "modular_ss220/sechailer/sound/dispatch_please_respond.ogg", 55, FALSE) + var/security_channel_found = FALSE + if(!hailer.loc || !ismob(hailer.loc)) + continue + // Check if mob has a radio, then check if the radio has the right channels + for(var/obj/item/radio/my_radio in user) + for(var/chan in 1 to length(my_radio.channels)) + var/channel_name = my_radio.channels[chan] + if(channel_name == DEPARTMENT_SECURITY) + security_channel_found = TRUE + break + if(security_channel_found) + radio.autosay("Центр, Код [message], офицер [user] запрашивает помощь в [location_name].", "Система Оповещения", DEPARTMENT_SECURITY, list(z)) + playsound(hailer.loc, 'modular_ss220/sechailer/sound/dispatch_please_respond.ogg', 55, FALSE) + break + else + to_chat(user, span_warning("Внимание: Невозможно установить соединение с каналом службы безопасности, требуется подключение!")) + playsound(hailer.loc, 'modular_ss220/sechailer/sound/radio_static.ogg', 30, TRUE) + +/obj/item/clothing/mask/gas/sechailer/proc/reboot() + on_cooldown = FALSE + emped = FALSE /obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, actiontype) . = ..() if(actiontype == /datum/action/item_action/dispatch) dispatch(user) + +/obj/item/clothing/mask/gas/sechailer/emp_act(severity) + if(on_cooldown) + return + on_cooldown = TRUE + emped = TRUE + addtimer(CALLBACK(src, PROC_REF(reboot)), dispatch_cooldown) + if(ishuman(loc)) + var/mob/living/carbon/human/user = loc + to_chat(user, span_userdanger("Обнаружен электромагнитный импульс, система оповещения отключена для сохранения работоспособности...")) diff --git a/modular_ss220/sechailer/sound/radio_static.ogg b/modular_ss220/sechailer/sound/radio_static.ogg new file mode 100644 index 000000000000..8bc2eebb26f1 Binary files /dev/null and b/modular_ss220/sechailer/sound/radio_static.ogg differ diff --git a/modular_ss220/verbs/code/verbs.dm b/modular_ss220/verbs/code/verbs.dm index 96951343c0a1..c68b15645012 100644 --- a/modular_ss220/verbs/code/verbs.dm +++ b/modular_ss220/verbs/code/verbs.dm @@ -36,3 +36,47 @@ M.key = key return + +// Pick darkness list +/mob/dead/observer/pick_darkness() + set name = "Pick Darkness" + set desc = "Choose how much darkness you want to see." + set category = "Ghost" + + if(!client) + return + + var/darkness_level = tgui_input_list(usr, "Choose your darkness", "Pick Darkness", list("Darkness", "Twilight", "Brightness", "Custom")) + if(!darkness_level) + return + + var/new_darkness + switch(darkness_level) + if("Darkness") + new_darkness = 255 + if("Twilight") + new_darkness = 210 + if("Brightness") + new_darkness = 0 + if("Custom") + new_darkness = input(usr, "Введите новое значение (0 - 255). Больше - темнее.", "Pick Darkness") as null|num + + if(isnull(new_darkness)) + return + + client.prefs.ghost_darkness_level = new_darkness + client.prefs.save_preferences(src) + lighting_alpha = client.prefs.ghost_darkness_level + update_sight() + +/mob/dead/observer/dead_tele() + set category = "Ghost" + set name = "Teleport" + set desc= "Teleport to a location" + + if(!isobserver(usr)) + to_chat(usr, "Ты ещё не мёртв!") + return + + var/target = tgui_input_list(usr, "Куда телепортируемся?", "Телепортация", SSmapping.ghostteleportlocs) + teleport(SSmapping.ghostteleportlocs[target]) diff --git a/paradise.dme b/paradise.dme index fee71a46eb22..c48fea192baa 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1360,6 +1360,7 @@ #include "code\modules\antagonists\_common\antag_spawner.dm" #include "code\modules\antagonists\_common\antag_team.dm" #include "code\modules\antagonists\changeling\changeling_power.dm" +#include "code\modules\antagonists\changeling\changeling_power_category.dm" #include "code\modules\antagonists\changeling\datum_changeling.dm" #include "code\modules\antagonists\changeling\evolution_menu.dm" #include "code\modules\antagonists\changeling\powers\absorb.dm" diff --git a/rust_g.dll b/rust_g.dll index a3807b502507..c77db3ec9c65 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/strings/tips.txt b/strings/tips.txt index 93aa54aa7596..1780b71740ce 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -1,195 +1,208 @@ -Space map levels' connections are randomized between rounds, but are otherwise kept consistent in the same round. -You can catch thrown items by toggling on your throw mode with an empty hand active. -To crack the safe in the vault, use a stethoscope or thermal drill. -You can climb onto a table by dragging yourself onto one. This takes some time. Clicking on a table that someone else is climbing onto will knock them down. -You can drag other players onto yourself to open the strip menu, letting you remove their equipment or force them to wear something. Note that exosuits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others. -Clicking on a windoor rather than bumping into it will keep it open. You can click it again to close it. -You can spray a fire extinguisher, throw items, or fire a gun while floating through space to change your direction. Simply fire in the opposite direction of where you want to go. -You can change the control scheme by pressing tab. One uses WASD for movement, while the other uses the arrow keys. Keep in mind that hotkeys are also changed with this. -Firesuits and winter coats offer mild protection from the cold, allowing you to spend longer periods of time near breaches and space than if wearing nothing at all. -Glass shards can be welded to make glass, and metal rods can be welded to make metal. Ores can be welded too, but this takes a lot of fuel. -If you need to drag multiple people either to safety or to space, bring a locker over and stuff them all in before hauling them off. -You can grab someone by clicking on them with the grab intent, then upgrade the grab by clicking on the grab itself. An aggressive grab will allow you to place them on a table by clicking on it, or throw them by toggling on throwing. -Holding alt and left clicking a tile will allow you to see its contents in the top right window panel, which is much faster than right clicking. -The resist button will allow you to resist out of handcuffs, being buckled to a chair or bed, out of locked lockers and more. Whenever you're stuck, try resisting! -You can move an item out of the way by dragging it and then clicking on an adjacent tile with an empty hand. -You can recolor certain items like jumpsuits and gloves in washing machines by also throwing in a crayon. -Maintenance is full of equipment that is randomized every round. Look around and see if anything is worth using. -Some roles cannot be antagonists by default, but antag selection is decided first. For instance, you can set Security Officer to High without affecting your chances of becoming an antag -- the game will just select a different role. -There are many places around the station to hide contraband. A few for starters: linen boxes, toilet cisterns, body bags. Experiment to find more! -When in doubt about technical issues, clear your cache (byond launcher > cogwheel > preferences > game prefs), update your BYOND, and relog. -Most things have special interactions with your middle mouse button, alt, shift, and control click. Experiment! -If you find yourself in a fistfight with another player, running away and calling for help is a perfectly viable option. -Different weapons have different strengths. Some weapons, such as spears, floor tiles, and throwing stars, deal more damage when thrown compared to when attacked normally. -Clicking on a tile on harm intent with a glass of water can make a slippery tile, allowing you to slow down your pursuers in a pinch. -When dealing with security, you can often get your sentence negated entirely through cooperation and deception. -We were all new once, be patient and guide new players in the right direction. -On most clothing items that go in the exosuit slot, you can put certain small items into your suit storage, such as a spraycan, your emergency oxygen tank, or a flashlight. -Most job-related exosuit clothing can fit job-related items into it. For example, the atmospheric technician's hardsuit/winter coat can hold an RPD, and labcoats can hold most medicine. -If there's something you need from another department, try asking! This game isn't singleplayer and you'd be surprised what you can get accomplished together! -You'll quickly lose your interest in the game if you play to win and kill. If you find yourself doing this, take a step back and talk to people - it's a much better experience! -Don't be afraid to ask for help, whether from your peers or from mentors. -As the Captain, you are one of the highest priority targets on the station. Everything from nuclear operatives to traitors that need to rob you of your unique lasergun or your life are things to worry about. -As the Captain, always take the nuclear disk and pinpointer with you every shift. It's a good idea to give one of these to another head or Blueshield you can trust with keeping it safe. -As the Captain, you have absolute access and control over the station, but this does not mean that being a horrible person won't result in mutiny and a ban. -As the Chief Medical Officer, your hypospray is like a refillable instant injection syringe that can hold 30 units and the unlike standard hypospray, yours is able to be filled with harmful reagents and can inject someone without telling anyone what you exactly injected the person with. -As the Chief Medical Officer, coordinate and communicate with your doctors, chemists, and geneticists during a nuclear emergency, blob infestation, or some other crisis to keep people alive and fighting. -As a Medical Doctor, you can surgically implant or extract things from people's chests. This can range from putting in a bomb to pulling out an alien larva. -As a Medical Doctor, you must target the correct limb and be on help intent when trying to perform surgery on someone. -As a Medical Doctor, corpses with the "...and their soul has departed" description no longer have a ghost attached to them and aren't revivable or clonable right now, but they might be clonable later. -As a Medical Doctor, remember to have either a shower or fire extinguisher at the ready when cloning plasmamen along with their envirosuit. -As a Chemist, there are dozens of chemicals that can heal, and even more that can cause harm. Experiment! -As a Chemist, some chemicals can only be synthesized by heating up the contents with a chemical heater or manually with lighters and similar tools. -As a Chemist, you will be expected to supply crew with certain chemicals. For example, cryoxadone and mannitol for the cryo tubes, unstable mutagen and saltpetre for botany as well as healing pills and patches for the front desk. -As a Chemist, Water and Potassium mixed together will create an explosion, with power scaling by amount used. Don't do it. -As a Geneticist, becoming a hulk makes you capable of dealing high melee damage, stunlocking people, and punching through walls. However, you can't fire guns and will lose your hulk status if you go into critical condition. Being hulk also does not allow you to break any server rules and go berserk as non-antagonist. -As the Virologist, your viruses can range from healing powers so great that you can heal out of critical status, to diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! -As the Research Director, you can take AIs out of their cores by loading them into an intelliCard, which lets you see their laws, even ion/syndicate ones. It can then be placed into an AI system integrity restorer computer to revive and/or repair them. -As the Research Director, you can lock down cyborgs instead of blowing them up. Then you can have their laws reset or if that doesn't work, safely dismantled. -As the Research Director, you can spy on and even forge PDA communications with the message monitor console! The key is in your office. -As a Scientist, you can maximize the number of uses you get out of a slime by feeding it slime steroid, created from purple slimes, while alive. You can then apply extract enhancer, created from cerulean slimes, on each extract. -As a Scientist, you can disable anomalies by scanning them with an analyzer, then send a signal on the frequency it gives you with a remote signaling device. This will leave behind an anomaly core, which can be used to construct nifty gadgets! -As a Scientist, researchable stock parts can seriously improve the efficiency and speed of machines around the station. In some cases, it can even unlock new functions. -As a Roboticist, keep an ear out for anomaly announcements. If you get your hands on a bluespace anomaly core, you can build a Phazon mech! -As a Roboticist, you can repair your cyborgs with a welding tool. If they have taken burn damage, you can remove their battery, expose the wiring with a screwdriver and replace their wires with a cable coil. -As a Roboticist, you can reset a cyborg's module by cutting and mending the reset wire with a wire cutter or using a cyborg reset module. -As a Roboticist, you can augment people with cyborg limbs. Augmented limbs can easily be repaired with cables and welders. -As the AI, you can click on people's names to look at them. This only works if there are cameras that can see them, they aren't wearing agent IDs, or aren't using digital camouflage as changelings. -As the AI, you can quickly open and close doors by holding shift while clicking them, bolt them when holding ctrl, and even shock them while holding alt. -As the AI, you can take pictures with your camera and upload them to newscasters. -As a Cyborg, choose your module carefully, as only a cyborg reset module will let you repick it. -As a Cyborg, you are immune to most forms of stunning, and excel at almost everything far better than humans. However, flashes can easily stunlock you and you cannot do any precision work as you lack hands. -As a Cyborg, you are impervious to fires and heat. If you are rogue, you can release plasma fires everywhere and walk through them without a care in the world! -As a Cyborg, you are extremely vulnerable to EMPs as EMPs both stun you and damage you. The ion rifle in the armory or a traitor with an EMP kit can kill you in seconds. -As an Engineering Cyborg, you can attach air alarm/fire alarm/APC frames to walls by using your magnetic gripper. -As a Medical Cyborg, the Hydrocodone in your Cyborg you can perform most surgery procedures even in the field with the help of your cyborg hypospray's Hydrocodone and roller bed rack module. -As a Janitor Cyborg, you are the bane of all slaughter demons. Cleaning up blood stains will severely hinder them. -As the Chief Engineer, you can rename areas or create entirely new ones using your station blueprints. -As the Chief Engineer, your hardsuit is significantly better than everybody else's. It has the best features of both engineering and atmospherics hardsuits, boasting nigh-invulnerability to radiation and all atmospheric conditions. It even has a built in jet-pack! -As the Chief Engineer, using the power monitor consoles gives you a good overview of all the station APC units and their status. You can also use your PDA to remotely view this by connecting to a monitor console. -As an Engineer, you can electrify grilles and fences by placing wire "nodes" beneath them: the big seemingly unconnected bulges from a half completed wiring job. The wire will be need to be connected to an active power source in order to function. -As an Engineer, return to Engineering once in a while to check on the engines and SMES cells. It's always a good idea to make sure containment isn't compromised or if the SM is still properly being cooled. -As an Engineer, you can power the station solely with the solar arrays. They will provide just enough electricity to power the station, however their output is still much worse compared to the true engine. -As an Engineer, you can cool a supermatter shard by spraying it with a fire extinguisher. Only for the brave! -As an Engineer, you can repair windows by using a welding tool on them while on help intent. -As an Engineer, you can lock APCs, fire alarms, emitters, and radiation collectors using your ID card to prevent others from disabling them. -As an Engineer, don't underestimate the humble P.A.C.M.A.N. generators. With upgraded parts, a couple units working in tandem are sufficient to take over for an exploded engine or shattered solars. -As an Engineer, you can pry open secure storage blast doors by turning off the secure storage APC's enviroment power channel. -As an Atmospheric Technician, look into replacing your gas pumps with volumetric gas pumps, as those move air in flat numerical amounts, rather than percentages which leave trace gases. -As an Atmospheric Technician, you are better suited to fighting fires than anyone else. As such, you have access to better firesuits, backpack firefighter tanks, and a completely heat and fire proof hardsuit. -As an Atmospheric Technician, your backpack firefighter tank can launch cryofrost. This resin will extinguish fires and very quickly; it's ideal for plasma fires! -As an Atmospheric Technician, your ATMOS holofan projector blocks gases while allowing objects to pass through. With it, you can quickly contain gas spills, fires and hull breaches. Or, use it to seal a plasmaman cloning room. -As the Head of Security, you are expected to coordinate your security force to handle any threat that comes to the station. Sometimes it means making use of the armory to handle a blob, sometimes it means being ruthless during a vampire or cult incursion. -As the Head of Security, don't let the power go to your head. You may have high access, great equipment, and a miniature army at your side, but being a terrible person without a good reason is grounds for banning. -As the Warden, your duty is to be the watchdog of the brig and handler of prisoners when little is happening, and to hand out equipment and weapons to the security officers when a crisis strikes. -As the Warden, keep a close eye on the armory at all times, as it is a favored strike point of nuclear operatives and cocky traitors. -As the Warden, if a prisoner's crimes are heinous enough you can put them in permabrig or the gulag. Make sure to check on them once in a while! -As the Warden, you can implant criminals you suspect might re-offend with devices that will track their location and allow you to remotely inject them with disabling chemicals. -As a Security Officer, communicate and coordinate with your fellow officers using the security channel (:s) to avoid confusion. -As a Security Officer, your sechuds or HUDsunglasses let you see crewmates' job assignments, their criminal status, and whether they have a mindshield or not. A flashing green border around their job icon means they are mindshielded. -As a Security Officer, mindshield implants can only prevent someone from being turned into a cultist. It will not de-cult them if they have already been converted. -As a Security Officer, examining someone while wearing sechuds or HUDsunglasses will let you set their arrest level, which will cause Beepsky and other security bots to chase after them. -As the Detective, keep in mind that people leave fingerprints everywhere and on everything. With the exception of white latex, gloves will hide them. All is not lost, however, as gloves leave fibers specific to their kind such as black or nitrile, pointing to a general department. -As the Detective, you can use your forensics scanner from a distance. -As the Detective, your energy revolver has a tracking mode. Shoot a fleeing suspect with it and use a crew pinpointer to track their position! -As the IAA, try to negotiate with the Warden if sentences seem too high for the crime. -As the IAA, you can try to convince the Captain and Head of Security to hold trials for prisoners in the courtroom. -As the Head of Personnel, you are not higher ranking than other heads of staff, even though you are expected to take the Captain's place first should he go missing. If the situation seems too rough for you, consider allowing another head to become temporary Captain. -As the Head of Personnel, you are just as large a target as the Captain because of the potential power your ID and computer can hand out. -As the Mime, your invisible wall power blocks people as well as projectiles. You can use it in a pinch to delay your pursuer. -As the Mime, your oath of silence is your source of power. Breaking it robs you of your powers and of your honor. -As the Clown, if you lose your banana peel, you can still slip people with your PDA! Honk! -As the Clown, your Grail is the mineral bananium, which can be given to the Roboticist to build you a fun and robust mech beloved by everyone. -As the Clown, you can use your stamp on a sheet of cardboard as the first step of making a honkbot. Fun for the whole crew! -As the Clown, spice your gimmicks up! Nobody likes a one-trick pony. -As the Chaplain, your null rod has anti magic functions: it can destroy cultist runes by hitting them, and it makes you immune to cult magic. -As the Chaplain, your bible is also a container that can store small items. -As the Chaplain, you are much more likely to get a response by praying to the gods than most people. To boost your chances, perform blessings, make altars with colorful crayon runes, lit candles, and wire art. -As a Botanist, you can hack the MegaSeed Vendor to get access to more exotic seeds. These seeds can alternatively be ordered from cargo. -As a Botanist, you can mutate the plants growing in your hydroponics trays with unstable mutagen or, as an alternative, crude radioactives from chemistry to get special variations. -As a Botanist, you should look into increasing the potency of your plants. This increases the size, amount of chemicals, points gained from grinding them in the biogenerator, and lets people know you are a proficient botanist. -As a Botanist, you can combine production trait chemicals just like a Chemist. Chlorine and plasma (blumpkin) + radium (glowshrooms) equals unstable mutagen! -As the Chef, you can create a very wide variety of food with the crafting menu. You can find it by looking for the hammer icon near your intents. -As the Chef, you can rename your custom made food with a pen. -As the Chef, if you are low on ingredients, consider making something that has several servings to last longer among the crew. -As the Bartender, you can use a circular saw on your shotgun to make it easier to store. -As a Janitor, if someone steals your janicart, you can instead use your space cleaner spray, grenades, water sprayer or order another from Cargo. -As a Janitor, mousetraps can be used to create bombs or booby-trap containers. -As the Librarian, be sure to keep the shelves stocked and the library clean for crew. -As a Cargo Technician, you can hack MULEbots to make them faster, run over people in their way, and even let you ride them! -As a Cargo Technician, you can order contraband items from the supply shuttle console by de-constructing it and using a multitool on the circuit board, the re-assembling it. -As a Cargo Technician, you can earn more cargo points by shipping back crates from maintenance, plasma sheets, rare seeds from hydroponics, technology disks from R&D, and more! -As a Shaft Miner, the north side of Lavaland has a lot more rare minerals than on the south, but is a lot more dangerous. -As a Shaft Miner, always have a GPS on you, so a fellow miner or cyborg can come to save you if you die. -As a Traitor, the cryptographic sequencer (emag) can not only open doors, but also lockers, crates, APCs and more. It can hack cyborgs, and even cause bots to go berserk. Use it on the right machines, and you can even order more traitor gear or contact the Syndicate. Experiment! -As a Traitor, subverting the AI to serve you can make it an extremely powerful ally. However, be careful of the wording in the laws you give it, as it may use your poorly written laws against you! -As a Traitor, the Captain and the Head of Security are two of the most difficult to kill targets on the station. If either one is your target, plan carefully. -As a Traitor, you can manufacture and recycle revolver bullets at a hacked autolathe, making the revolver an extremely powerful tool. -As a Traitor, you may sometimes be assigned to hunt other traitors, and in turn be hunted by others. -As a Traitor, the syndicate encryption key is very useful for coordinating plans with your fellow traitors -- or, of course, betraying them. -As a Traitor, plasma can be injected into many things to sabotage them. Power cells, light bulbs, cigars and e-cigs will all explode when used. -As a Traitor, if you can find another Traitor and pool your TC you can buy a mega surplus crate, which costs 200 TC but contains a lot of random syndicate gear. -As a Traitor, you can eject someone from cloning early by disabling power in genetics. Note that they will suffer more genetic damage and may lose vital organs from this. -As a Nuclear Operative, communication is key! Use ; to speak to your fellow operatives and coordinate an attack plan. -As a Nuclear Operative, you should look into purchasing a syndicate cyborg, as they can provide heavy fire support, full access, are immune to conventional stuns, and can easily take down the AI. -As a Nuclear Operative, stick together! While your equipment is robust, your fellow operatives are much better at saving your life: they can drag you away from danger while stunned and provide cover fire. -As a Nuclear Operative, you might end up in a situation where the AI has bolted you into a room. Having some spare C4 in your pocket can save your life. -As a Monkey, you can still wear a few human items, such as backpacks, gas masks, and hats, and still have two free hands. -As the Malfunctioning AI, you can shunt to an APC if the situation gets bad. -As the Malfunctioning AI, you should either order your cyborgs to dismantle the robotics console or blow it up yourself in order to protect them. -As an Alien, your melee prowess is unmatched, but your ranged abilities are sorely lacking. Make use of corners to force a melee confrontation! -As an Alien, you take double damage from all burn attacks, such as lasers, welding tools, and fires. Furthermore, fire can destroy your resin and eggs. Expose areas to space to starve away any flamethrower fires before they can do damage! -As an Alien, resin floors not only regenerate your plasma supply, but also passively heal you. Fight on resin floors to gain a home turf advantage! -As an Alien, the facehugger is by far your most powerful weapon because of its ability to instantly win a fight. Remember however that certain helmets, such as biohoods or space helmets will completely block facehugger attacks. -As an Alien, you are unable to pick up or use any human items or machinery. Instead, you should focus on sabotaging APCs, computers, cameras and either stowing, spacing, or melting any weapons you find. -As the Blob, keep your core some distance from space, as it is both expensive to expand onto space, easy to be attacked from, and does not count towards your win condition. Emitter platforms built in space are especially dangerous. -As the Blob, you can randomly repick your reagent type if the crew has adapted and protected themselves against your current one. -As the Blob, you fight a war of attrition: Take out medbay and fight in chokepoints to prevent continued assaults and coordinated burst damage attacks! -As the Blob, don't neglect the creation of factories. These create spores that carry your reagent and can chase crewmembers far further than you. Spores can also be rallied to swarm the crew and cause panic, and can even take over corpses to create much more dangerous blob zombies! -As the Blob, you can expand by clicking, create strong blobs with ctrl-click, rally spores with middle-click, and remove blobs with alt-click. You do not need to have your camera over the tile to do this. -As the Blob, removing strong blobs, resource nodes, factories, and nodes will give you some resources back as refund. -As the Blob, talking will send a message to all other overminds, allowing you to direct attacks and coordinate. -As a Changeling, the Extract DNA sting counts for your genome absorb objective, but does not let you respec your powers. -As a Changeling, you can absorb someone by strangling them and using the Absorb verb; this gives you the ability to rechoose your powers, the DNA of whoever you absorbed, the memory of the absorbed, and some samples of things the absorbed said. -As a Cultist, do not cause too much chaos before your objective is completed. If the shuttle gets called too soon, you may not have enough time to win. -As a Cultist, your team starts off very weak, but if necessary can quickly convert everything they have into raw power. Make sure you have the numbers and equipment to support going loud, or the cult will fall flat on its face. -As a Cultist, the Blood Boil rune will deal massive amounts of burn damage to non-cultists and set them on fire. However, two cultists have to be standing at the rune for its duration. -You can deconvert Cultists by feeding them large amounts of holy water. -The Chaplain can bless any container with water by hitting it with their bible. Holy water has a myriad of uses against cults and large amounts of it are a great contributor to success against them. -As a Wizard, you can turn people to stone, then animate the resulting statue with a staff of animation to create an extremely powerful minion, for all of 5 minutes at least. -As a Wizard, the fireball spell performs very poorly at close range, as it can easily catch you in the blast. It is best used as a form of artillery down long hallways. -As a Wizard, summoning guns will give everyone anything from a floral somatoray to a pulse rifle. Use at your own risk! -As a Wizard, the staff of chaos can fire any type of bolts from the magical wands. This can range from bolts of instant death to healing or reviving someone. -As a Wizard, most spells become unusable if you are not wearing your robe, hat, and sandals. -As an Abductor, you can select where your victims will be sent on the ship control console. -As an Abductor Agent, the combat mode vest has much higher resistance to every kind of weapon, and your helmet prevents the AI from tracking you. -As an Abductor, the baton can cycle between four modes: stun, sleep, cuff and probe. -As a Revenant, the Chaplain is your worst enemy, as they can damage you massively with the null rod and make large swaths of the station impassable with holy water. -As a Revenant, your essence is also your health, so revealing yourself in front of humans to harvest the essence of the living is much safer if you've already stocked up on essences from poorly guarded corpses. -As a Revenant, your Defile ability removes holy water from tiles in a small radius, allowing you to reclaim the station from the chaplain if they've been covering the station in holy water. -As a Revenant, your Overload Lights ability will only shock humans with lights if the lights are still on after a brief delay. -As a Revenant, your Malfunction ability in general damages machinery and mechanical objects, possibly even emagging some objects. Experiment! -As a Revenant, space is your friend. Breaking windows to space can cause massive damage and mayhem. -As a Ghost, you can double click on just about anything to follow it. Or just warp around! -As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time! -As a Security Officer, remember that you can attach a sec-lite to your disabler! -As a Terror Spider, leave wrapping of corpses to green spiders unless absolutely necessary. They need it to lay eggs! -As a Prince of Terror, you are powerful but usually on your own. Consider hit and run tactics to regenerate your health between engagements. -As a Brown Terror Spider, focus on smashing welded vents. You are weak in direct combat, but you can enable your comrades to go almost anywhere. -As a Terror Spider, protect the queen at all cost! -As a Terror Spider, don't forget you can move your nest if the crew is pressuring you too badly. -As a Terror Spider, try putting webs on white floor tiles, they are much harder to see there. -As a Terror Spider, sometimes quickly pulling an enemy into a web can ensure victory in melee combat. -You can swap floor tiles by holding a crowbar in one hand and a stack of tiles in the other. -When hacking doors, cutting and mending a "test light wire" will restore power to the door. -When crafting most items, you can either manually combine parts or use the crafting menu. -Suit storage units not only remove blood and dirt from clothing, but also radiation! -Sleeping in a bed can heal minor amounts of brute and burn damage. -The Experimentor has a chance to spawn hostile mobs. Be ready to run for your life when using it. -Space ruins can contain all kinds of interesting goodies, even a wand that can raise the dead! -Having a mindshield, or having an agent ID card will make officer Beepsky consider you less arrest-worthy. -You can make lasertag turrets, for the ultimate lasertag tournament. -Blob structures take half damage from brute damage. Use lasers. -You can hide paper in vents, but you have to use a screwdriver to open it first. -While the Standard Operating Procedures aren't fully rules, they are there for safety and professional reasons. -Killing the Wizard usually ends the round, unless they are a lich or Space Wizard Federation is RAGING. +Соединения уровней космоса рандомизируются в каждом новом раунде. +Вы можете ловить брошенные предметы, включив режим броска (R) при активной пустой руке. +Чтобы взломать сейф в хранилище, используйте стетоскоп или термобур. +Вы можете забраться на стол, перетащив себя на него. Это занимает некоторое время. Если щелкнуть по столу, на который забрался кто-то другой, то он упадет. +Вы можете перетащить игрока на себя, чтобы открыть меню экипировки, позволяющее снять их снаряжение или заставить их надеть что-то. Обратите внимание, что экзокостюмы или шлемы будут блокировать доступ к одежде под ними, и что некоторые предметы снимаются или надеваются дольше, чем другие. +Если щелкнуть по стеклянной двери, а не 'натолкнуться' на нее, то она останется открытой. Вы можете щелкнуть по ней еще раз, чтобы закрыть ее. +Вы можете распылять огнетушитель, бросать предметы или стрелять из пистолета, паря в пространстве, чтобы изменить направление движения. Просто стреляйте в направлении, противоположном тому, куда вы хотите попасть. +Вы можете изменить схему управления, нажав клавишу Tab. В одном случае для передвижения используется WASD, а в другом - клавиши со стрелками. Имейте в виду, что горячие клавиши также изменяются при этом. +Огнеупорные костюмы и зимние куртки обеспечивают легкую защиту от холода, позволяя вам проводить больше времени вблизи брешей и в космосе, чем если бы вы вообще ничего не носили. +Осколки стекла можно сварить, чтобы получить стекло, а металлические прутья - чтобы получить металл. Руды тоже можно сваривать, но для этого требуется много топлива. +Если вам нужно перетащить несколько человек в безопасное место, либо в космос, просто принесите шкафчик и засуньте их всех туда, а затем тащите. +Вы можете схватить кого-то, нажав на него в 'Grab' интенте (жёлтый), а затем усилить захват, нажав на кнопку 'Grab' в панели рук. Агрессивный захват позволит вам положить его на стол, нажав на стол, или бросить его, переключившись в режим броска (R). +Удерживая Alt и щелкая левой кнопкой мыши по тайлу, вы сможете увидеть его содержимое в правой верхней панели, что гораздо быстрее, чем щелчок правой кнопкой мыши. +Кнопка Resist позволяет предпринимать попытку освободиться от наручников, пристегивании к стулу или кровати, освобождаться из запертых шкафчиков и т.д. Как бы вы не застряли, у вас есть возможность сопротивляться! +Вы можете убрать предмет с дороги, нажав Ctrl + ЛКМ по нему, а затем щелкнув на соседнем тайле свободной рукой. +Некоторые вещи, например комбинезоны и перчатки, можно перекрасить в стиральных машинах, бросив туда мелок. +В технических тоннелях полно вещей, которые рандомизируются каждый раунд. Осмотритесь, может найдете что-нибудь полезное. +Некоторые роли не могут быть антагонистами по умолчанию, но выбор антага решается в первую очередь. Например, вы можете установить значение "Security Officer" на "High", и это не повлияет на ваши шансы стать антагом - игра просто выберет вам другую роль. +На станции есть много мест, где можно спрятать контрабанду. Например: ящики для белья, туалетные бачки, мешки для трупов. Экспериментируйте и найдете больше! +Если у вас возникли технические проблемы, очистите кэш (byond launcher > cogwheel > preferences > game prefs), обновите BYOND и зайдите заново. +Большинство вещей имеют особые виды взаимодействия со средней кнопкой мыши, Alt, Shift и Ctrl. Экспериментируйте! +Если вы окажетесь в драке с другим игроком, убежать и позвать на помощь - вполне приемлемый вариант. +Различные виды оружия имеют разную силу. Некоторые виды оружия, такие как копья, напольные плитки и сюрикены, наносят больше урона при броске по сравнению с обычной атакой. +Нажав на тайл со стаканом воды, можно сделать плитку скользкой, что позволит вам замедлить преследователей в случае необходимости. +При работе с службой безопасности часто можно добиться полной отмены приговора благодаря сотрудничеству и обману. +Все мы когда-то были новичками, будьте терпеливы и направляйте новых игроков в верном направлении. +В большинстве видов одежды, которые помещаются в слот костюма, вы можете положить в карманы некоторые мелкие предметы, такие как баллончик, аварийный кислородный баллон или фонарик. +В большинстве случаев в карманы одежды можно поместить предметы, связанные с работой. Например, в зимнее пальто можно поместить RPD, а в лабораторный халат - большинство медикаментов. +Если вам что-то нужно от другого отдела, попробуйте попросить! Эта игра не одиночная, и вы удивитесь, чего можно добиться вместе! +Вы быстро потеряете интерес к игре, если будете играть ради победы и убийств. Если вы обнаружили, что делаете это, сделайте шаг назад и поговорите с людьми - это гораздо лучший опыт! +Не бойтесь просить о помощи, как у своих коллег, так и у менторов. +Будучи капитаном, вы являетесь одной из самых приоритетных целей на станции. Беспокоиться стоит обо всем - от ядерных оперативников до предателей, которые хотят лишить вас уникального лазерного оружия, или жизни. +Будучи капитаном, всегда берите с собой диск аутентификации ядерной боеголовки и пинпоинтер на каждой смене. Неплохо было бы передать один из них другому главе или Блюшилду, которому вы можете доверить его сохранность. +Будучи капитаном, вы имеете абсолютный доступ и контроль над станцией, но это не означает, что если вы будете ужасным человеком, то это не приведет к мятежу и бану. +Будучи главным врачом, вы знаете, что ваш гипоспрей похож на перезаправляемый шприц для мгновенных инъекций, вмещающий 30 единиц, и в отличие от стандартного гипоспрея, ваш можно наполнять вредными реагентами и делать инъекции, не сообщая никому, что именно вы ввели человеку. +Будучи главным врачом, координируйте и направляйте врачей, химиков и генетиков во время чрезвычайной опасности, нашествия блобов или любого другого кризиса, чтобы сохранить жизнь и боеспособность людей. +Будучи медиком, вы можете хирургическим путем вживлять или извлекать предметы из груди людей. Это может варьироваться от установки бомбы до извлечения инопланетной личинки. +Будучи медиком, вы должны нацелиться на нужную конечность в 'Help' интенте (зелёный), когда пытаетесь сделать кому-то операцию. +Будучи медиком, вы знаете, что трупы с описанием "...and their soul has departed" больше не имеют прикрепленного игрока и не могут быть оживлены или клонированы сейчас, но могут быть клонированы позже, если игрок вернется в тело. +Будучи медиком, вы знаете, что лечение плазмаменов не является невозможным! Сальбутамол не дает им задохнуться, а душ не дает им сгореть заживо. Вы даже можете делать им операции, проводя процедуру на раскладываемой каталке под душем. +Будучи химиком, вы знаете, что существуют десятки химических веществ, которые могут исцелять, и еще больше тех, которые могут причинить вред. Экспериментируйте! +Будучи химиком, вы знаете, что некоторые химические вещества могут быть синтезированы только путем нагревания содержимого с помощью химического нагревателя или вручную с помощью зажигалок и подобных инструментов. +Будучи химиком, вы должны будете снабжать экипаж определенными химикатами. Например, криоксадоном и маннитолом для крио, нестабильным мутагеном и селитрой для ботаники, медикаментами и пластырями для медиков. +Будучи химиком, вы знаете, что вода и калий (потассиум), смешанные вместе, создают взрыв, мощность которого зависит от количества использованного вещества. Не делайте этого. +Будучи генетиком, став халком, вы сможете наносить большой урон в ближнем бою, оглушать людей и пробивать стены. Однако вы не можете стрелять из оружия и теряете силу халка, если впадаете в критическое состояние. Статус халка также не позволяет вам нарушать правила сервера и впадать в безумие, как неантагонист. +Будучи вирусологом, вы знаете, что ваши вирусы могут варьироваться от целительных способностей, настолько сильных, что вы можете исцелять из критического состояния, до болезней, настолько опасных, что могут убить весь экипаж самовозгоранием в воздухе. Экспериментируйте! +Будучи директором отдела исследований, вы можете вывести ИИ из ядер, загрузив его в карту intelliCard, которая позволяет вам видеть их законы, даже ионные и синдикатские. Затем их можно поместить в компьютер восстановления целостности систем ИИ, чтобы оживить и/или починить его. +Будучи директором отдела исследований, вы можете блокировать киборгов вместо того, чтобы взрывать их. Затем вы можете переустановить их законы или, если это не сработает, безопасно демонтировать. +Будучи директором отдела исследований, вы можете шпионить и даже подделывать сообщения ПДА с помощью консоли монитора сообщений! Ключ находится в вашем кабинете. +Будучи ученым, вы можете максимизировать количество использований слаймов, если будете кормить слаймов стероидами, созданными из фиолетовых слаймов, пока они живы. Затем вы можете применить усилитель экстракта, созданный из лазурных слаймов, к каждому экстракту. +Будучи ученым, вы можете отключать аномалии, просканировав их анализатором, а затем послать сигнал на частоту, которую он выдает, с помощью дистанционного сигнального устройства. После этого останется ядро аномалии, которое можно использовать для создания интересных гаджетов! +Будучи ученым, исследуемые запасные части могут серьезно повысить эффективность и скорость работы машин на станции. В некоторых случаях они могут даже открыть новые функции. +Будучи робототехником, следите за объявлениями об аномалиях. Если вам в руки попадет блюспейс ядро аномалии, вы сможете построить Фазона! +Будучи робототехником, вы можете ремонтировать своих киборгов с помощью сварки. Если они получили повреждения от ожогов, вы можете извлечь батарею, обнажить проводку с помощью отвертки и заменить провода витком кабеля. +Будучи робототехником, вы можете сбросить модуль киборга, перерезав и починив провод сброса кусачками, или используя модуль сброса киборга. +Будучи робототехником, вы можете устанавливать конечности киборга. Аугментированные конечности можно легко отремонтировать с помощью кабелей и сварки. +Будучи ИИ, вы можете нажимать на имена людей, чтобы посмотреть на них. Это работает только в том случае, если есть камеры, которые могут их видеть, на них нет удостоверений агентов или они не используют камуфляж, как Генокрады. +Будучи ИИ, вы можете быстро открывать и закрывать двери, удерживая Shift при нажатии на них, болтировать их, удерживая Ctrl, и даже ударять их током, удерживая Alt. +Будучи ИИ, вы можете делать снимки своей камерой и загружать их в новости. +Будучи киборгом, тщательно выбирайте модуль, так как только модуль сброса киборга позволит вам его перевыбрать. +Будучи киборгом, вы невосприимчивы к большинству форм оглушения и почти во всем превосходите людей. Однако вспышки могут легко оглушить вас, и вы не можете выполнять некоторую работу, поскольку у вас нет рук. +Будучи киборгом, вы невосприимчивы к огню и жару. Если вы сбойный, вы можете выпускать плазменный огонь повсюду и проходить сквозь него, не заботясь ни о чем на свете! +Будучи киборгом, вы чрезвычайно уязвимы для ЭМИ, поскольку ЭМИ одновременно оглушает и повреждает вас. Ионная винтовка в оружейной, или предатель с набором ЭМИ могут убить вас за несколько секунд. +Будучи инженерным киборгом, вы можете прикреплять корпус Air alarm/Fire alarm и APC к стенам с помощью магнитного манипулятора. +Будучи медицинским киборгом, вы можете частично проводить операции, поскольку не можете заменять органы, но вы не можете провалить ни один этап операции. +Будучи киборгом-уборщиком, вы знаете, что вы - зло всех демонов резни. Очищая пятна крови, вы сильно нагадите им. +Будучи главным инженером, вы можете переименовывать зоны или создавать совершенно новые, используя чертежи станции. +Будучи главным инженером, вы знаете, что ваш МОДсьют значительно лучше, чем у всех остальных. Он обладает лучшими характеристиками инженерного и атмосферного, и может похвастаться неуязвимостью к радиации и любым атмосферным условиям. +Будучи главным инженером, вы знаете, что консоль управления потоками энергии в вашем офисе покажет вам информацию о статусах APC и позволит управлять ими дистанционно. Вы так же можете использовать свой ПДА для этих целей. +Будучи главным инженером, вы можете электрифицировать решетку, разместив под ней "узел" провода: большие, кажущиеся неподключенными выпуклостями от наполовину завершенной проводки. Для работы провод должен быть подключен к активному источнику энергии. +Будучи инженером, время от времени возвращайтесь в инженерный отсек, чтобы проверить работу двигателя и ячеек SMES. Всегда полезно убедиться, что защитная оболочка не нарушена. +Будучи инженером, вы можете питать станцию исключительно с помощью солнечных батарей. Они дадут достаточно электроэнергии для питания станции, однако их производительность все равно намного хуже, чем у настоящего двигателя. +Будучи инженером, вы можете охладить осколок суперматерии, распылив его из огнетушителя. Только для смелых! +Будучи инженером, вы можете ремонтировать окна с помощью сварки, находясь в 'Help' интенте (зелёный). +Будучи инженером, вы можете заблокировать APC, Fire Alarm, эммитеры и коллекторы радиации с помощью своей карты, чтобы другие не смогли вывести их из строя. +Будучи инженером, не стоит недооценивать скромные генераторы P.A.C.M.A.N. При наличии модернизированных деталей, пары работающих в тандеме устройств достаточно, чтобы заменить взорвавшийся двигатель или разбитые соляры. +Будучи инженером, вы можете открывать защищенные двери хранилища, отключив канал питания APC. +Будучи инженером, не забывайте чинить повреждённую проводку в технических тоннелях, это уменьшит вероятность того, что кто-то на них наступит и получит бодрящий разряд. +Будучи атмосферным техником, рассмотрите возможность замены газовых насосов на объемные газовые насосы, так как они перемещают воздух в плоских численных количествах, а не в процентах, которые оставляют следы газов. +Будучи атмосферным техником, вы лучше других приспособлены к тушению пожаров. Поэтому у вас есть доступ к лучшим пожарным костюмам, ранцевым пожарным бакам и полностью термо-огнестойкому МОДсьюту. +Будучи атмосферным техником, вы знаете, что ваш ранцевый пожарный бак может запускать криосмолу. Эта смола тушит пожары, причем очень быстро; она идеально подходит для борьбы с возгоранием плазмы! +Будучи атмосферным техником, вы знаете, что ваш голопроектор ATMOS блокирует газы, пропуская через себя предметы. С его помощью вы можете быстро локализовать утечку газа, пожар или пробоину в корпусе. Или использовать его для герметизации комнаты для клонирования плазмамена. +Будучи главой службы безопасности, вы должны координировать действия своего отдела, чтобы справиться с любой угрозой, возникающей на станции. Иногда это означает использование оружейной для борьбы с блобом, иногда - безжалостность во время вторжения вампиров или культистов. +Будучи главой службы безопасности, не позволяйте власти захлестнуть вас с головой. Вы можете иметь высокий доступ, отличное снаряжение и миниатюрную армию на своей стороне, но быть ужасным человеком без уважительной причины - это основание для бана. +Будучи варденом, ваша обязанность - следить за порядком в бриге и заниматься заключенными и подозреваемыми, выдавать снаряжение и оружие сотрудникам службы безопасности, когда наступает кризис. +Будучи варденом, постоянно следите за оружейным складом, поскольку он является излюбленным местом нападения ядерных оперативников и дерзких предателей. +Будучи варденом, вы знаете, что если преступления заключенного достаточно ужасны, вы можете поместить его в пермабриг или ГУЛАГ. Обязательно проверяйте их время от времени! +Будучи варденом, вы можете вживить преступникам, которые, по вашим подозрениям, могут совершить повторное преступление, устройства, которые будут отслеживать их местоположение и позволят вам дистанционно вводить им обезвреживающие химические вещества. +Будучи варденом, вы можете заказывать любое обмундирование в оружейную, тем самым выбирая с чем будет ходить весь отдел в случае ЧП. Главное не забывайте, ваш бюджет ограничен! +Будучи офицером службы безопасности, общайтесь и координируйте свои действия с коллегами, используя канал СБ (:s), чтобы избежать путаницы. +Будучи офицером службы безопасности, вы знаете, что ваши sechud'ы и HUDsunglasses позволяют вам видеть должность членов экипажа, их криминальный статус, а также наличие или отсутствие у них импланта защиты разума. Мигающая зеленая рамка вокруг иконки задания означает, что они имплантированы щитом разума. +Будучи офицером службы безопасности, имплантаты щита разума могут только предотвратить превращение человека в культиста. Если человек уже был обращен в культ, то он не сможет его деконвертировать. +Будучи офицером службы безопасности, вы знаете, что осмотрев кого-либо в sechud'ах или HUDsunglasses, вы сможете установить уровень его ареста, что заставит Бипски и других охранных ботов преследовать его. +Будучи детективом, имейте в виду, что люди оставляют отпечатки пальцев везде и на всем. За исключением перчаток, которые их скрывают. Однако не все потеряно, поскольку перчатки оставляют волокна, характерные для их вида, например, черные или нитриловые, что указывает на общий отдел. +Будучи детективом, вы можете использовать свой сканер на расстоянии. +Будучи детективом, не забывайте, что ваш энергетический револьвер, имеет режим трекера. Выстрелив им в подозреваемого, вы можете отслеживать его позицию с помощью пинпоинтера! +Будучи агентом внутренних дел, попытайтесь договориться с Варденом, если приговор вам кажется слишком высоким для данного преступления. +Будучи агентом внутренних дел, вы можете попытаться убедить капитана и главой службы безопасности проводить судебные процессы над заключенными в зале суда. +Будучи главой персонала, вы не занимаете более высокое положение, чем другие начальники, хотя ожидается, что вы первым займете место капитана, если он пропадет без вести. Если ситуация кажется вам слишком тяжелой, подумайте о том, чтобы позволить другому начальнику временно стать капитаном. +Будучи главой персонала, вы являетесь такой же большой мишенью, как и капитан, из-за потенциальной власти, которую может раздать ваша ID карта и компьютер. +Будучи мимом, вы знаете, что ваша сила невидимой стены блокирует как людей, так и снаряды. Вы можете использовать ее, чтобы задержать преследователя. +Будучи мимом, вы знаете, что ваша клятва молчания - источник вашей силы. Нарушение клятвы лишает вас силы и чести. +Будучи клоуном, если вы потеряете банановую кожуру, вы все еще сможете поскользуть игрока на своем ПДА! Хонк! +Будучи клоуном, вы знаете, что ваш Грааль - минерал бананиум, который можно отдать Робототехнику, чтобы он построил вам веселый и прочный мех, любимый всеми. +Будучи клоуном, вы можете использовать свою печать на листе картона в качестве первого шага к созданию хонкбота. Веселье для всего экипажа! +Будучи клоуном, приправьте свои трюки! Никто не любит пони с одним фокусом. +Будучи священником, вы знаете, что ваш нулл род имеет антимагические функции: он может уничтожать руны культистов, ударяя по ним, и делает вас невосприимчивым к магии культа. +Будучи священником, вы знаете, что ваша библия также является контейнером, в котором можно хранить мелкие предметы. +Будучи священником, вы с гораздо большей вероятностью получите ответ, молясь богам, чем большинство людей. Чтобы повысить свои шансы, совершайте благословения, создавайте алтари с красочными рунами, зажженными свечами и искусством из проволоки. +Будучи ботаником, вы можете взломать MegaSeed Vendor, чтобы получить доступ к более экзотическим семенам. Эти семена можно также заказать в Карго. +Будучи ботаником, вы можете мутировать растения, растущие в ваших лотках гидропоники, с помощью нестабильного мутагена или, в качестве альтернативы, сырых радиоактивных веществ из химии, чтобы получить особые вариации. +Будучи ботаником, вам следует обратить внимание на повышение потенции ваших растений. Это увеличит их размер, количество химических веществ, очков, получаемых при измельчении в биогенераторе, и позволит людям узнать, что вы опытный ботаник. +Будучи ботаником, вы можете комбинировать химические вещества с производственными признаками так же, как и химик. Хлор и плазма (блампкин) + радий (светящиеся грибы) = нестабильный мутаген! +Будучи поваром, вы можете создавать самые разнообразные блюда с помощью меню крафта. Вы можете найти его, отыскав значок молотка рядом с вашими интентами. +Будучи поваром, вы можете переименовывать свои блюда, сделанные на заказ, с помощью ручки. +Будучи поваром, если у вас мало ингредиентов, подумайте о том, чтобы приготовить что-то на несколько порций, чтобы этого хватило надолго членам экипажа. +Будучи барменом, вы можете использовать циркулярную пилу на свой дробовик, чтобы обрезать его и облегчить хранение. +Будучи уборщиком, если кто-то украдет вашу тележку, вы можете вместо нее использовать спейсклинер для очистки пространства, гранаты, распылитель воды, или заказать еще один в Карго. +Будучи уборщиком, вы можете использовать мышеловки для создания бомб или контейнеров-ловушек. +Будучи библиотекарем, следите за тем, чтобы полки были заполнены, а библиотека была чистой. +Будучи карго техником, вы можете взломать MULEbots, чтобы сделать их быстрее, дать возможность переезжать людей и даже позволить вам оседлать их! +Будучи карго техником, вы можете заказать контрабандные товары с консоли шаттла снабжения, разобрав ее и использовав мультитул на печатной плате, а затем собрав заново. +Будучи карго техником, вы можете заработать больше денег для карго, отправляя ящики из технических помещений, листы плазмы, редкие семена из гидропоники, диски технологий из РнД и многое другое! +Будучи шахтёром, вы знаете, что в северной части Лаваленда гораздо больше редких минералов, чем в южной, но она гораздо опаснее. +Будучи шахтером, всегда имейте при себе GPS, чтобы товарищ шахтер или киборг мог прийти на помощь в случае вашей гибели. +Будучи предателем, вы знаете, что криптографический секвенсор (emag) может открывать не только двери, но и шкафчики, ящики, APC и многое другое. Он может взламывать киборгов и даже заставлять ботов сходить с ума. Используйте его на нужных машинах, и вы даже сможете заказать еще больше снаряжения предателей, или связаться с Синдикатом. Экспериментируйте! +Будучи предателем, подмяв под себя ИИ, вы можете сделать его чрезвычайно могущественным союзником. Однако будьте осторожны с формулировками законов, которые вы ему даете, так как он может использовать ваши плохо написанные законы против вас! +Будучи предателем, вы знаете, что капитан и главой службы безопасности - две самые трудноубиваемые цели на станции. Если любой из них является вашей целью, тщательно планируйте. +Будучи предателем, вы можете производить и перерабатывать револьверные пули на взломанном автолате, что делает револьвер чрезвычайно мощным инструментом. +Будучи предателем, вам иногда поручают охотиться на других предателей, а те, в свою очередь, могут охотиться на вас. +Будучи предателем, вы знаете, что ключ шифрования Синдиката очень полезен для согласования планов с вашими товарищами - или, конечно, для их предательства. +Будучи предателем, вы знаете, что плазму можно впрыскивать во многие предметы, чтобы саботировать их. Элементы питания, лампочки и сигары взрываются при использовании. +Будучи предателем, если вы сможете найти другого Предателя и объединить свои ТС, вы сможете купить мега-избыточный ящик, который стоит 200ТС, но содержит много случайного снаряжения Синдиката. +Для ядерного оперативника общение имеет ключевое значение! Используйте ; чтобы поговорить с коллегами-оперативниками, чтобы скоординировать план атаки. +Будучи ядерным оперативником, вы должны рассмотреть возможность приобретения киборга синдиката, поскольку они могут обеспечить мощную огневую поддержку, полный доступ, они невосприимчивы к обычному оглушению и могут легко уничтожить ИИ. +Будучи ядерным оперативником, держитесь вместе! Хотя ваше снаряжение надежно, ваши товарищи-оперативники гораздо лучше спасают вашу жизнь: они могут оттащить вас от опасности, пока вы оглушены, и прикрыть огнем. +Будучи ядерным оперативником, вы можете оказаться в ситуации, когда ИИ запер вас в комнате. Наличие в кармане запасного C4 может спасти вам жизнь. +Будучи обезьяной, вы можете носить несколько человеческих предметов, таких как рюкзаки, противогазы и шляпы, и при этом иметь две свободные руки. +Будучи сбойным ИИ, вы можете переместиться в APC, если ситуация станет плохой. +Будучи сбойным ИИ, вы должны либо приказать своим киборгам демонтировать консоль робототехники, либо взорвать ее сами, чтобы защитить их. +Будучи Чужим, вам нет равных в ближнем бою, а вот дальнобойных способностей очень не хватает. Используйте углы, чтобы спровоцировать противостояние в ближнем бою! +Будучи Чужим, вы получаете двойной урон от всего ожоговых атак, таких как лазеры, сварки и огонь. Кроме того, огонь может уничтожить вашу смолу и яйца. Освободите больше пространства, чтобы отвести огонь из огнемета до того, как он успеет нанести урон! +Будучи Чужим, смоляные полы не только восстанавливают запас плазмы, но и пассивно лечат вас. Сражайтесь на смоляных полах, чтобы получить преимущество! +Для Чужого лицехват - это, безусловно, самое мощное оружие, поскольку он способен мгновенно выиграть бой. Однако помните, что некоторые шлемы, например биошлемы или космические шлемы, полностью блокируют атаки лицехвата. +Будучи Чужим, вы не можете подбирать или использовать какие-либо человеческие предметы или механизмы. Вместо этого вам следует сосредоточиться на саботаже APC, компьютеров, камер, а также на укладке, расстановке или переплавке найденного оружия. +Будучи Блобом, держите свое ядро на некотором расстоянии от космоса, поскольку его расширение в космос обходится дорого, его легко атаковать, и оно не учитывается в условии победы. Особенно опасны эммитеры, построенные в космосе. +Будучи Блобом, вы можете случайным образом изменить тип реагента, если экипаж адаптировалась и защитилась от вашего текущего. +Будучи Блобом, вы ведете войну на истощение: Захватите медблок и сражайтесь в узловых точках, чтобы предотвратить продолжение штурма и скоординированные атаки с разрывным уроном! +Будучи Блобом, не пренебрегайте созданием фабрик. Они создают споры, которые переносят реагенты и могут преследовать членов экипажа гораздо дальше, чем вы. Споры также могут объединяться в рой и вызывать панику среди членов экипажа, и даже могут захватывать трупы, создавая гораздо более опасных зомби! +Будучи Блобом, вы можете расширяться с помощью щелчка мыши, создавать усиленные блобы с помощью Ctrl-щелчка, объединять споры с помощью среднего щелчка и удалять блобы с помощью Alt-щелчка. Для этого вам не нужно наводить камеру на тайл. +Будучи Блобом, вы можете удалять усиленных блобов, ресурсные узлы, фабрики и узлы, это вернет вам часть ресурсов в качестве компенсации. +Будучи Блобом, разговаривая, вы отправите сообщение всем подконтрольным, что позволит вам направлять атаки и координировать действия. +Для Генокрада, использование Extract DNA sting засчитывается за цель поглощения генома, но не позволяет вам изменить свои способности. +Будучи Генокрадом, вы можете поглотить кого-нибудь, задушив его и использовав способность 'Absorb'. Это дает вам возможность повторно выбрать свои способности, а также вы получаете ДНК того, кого вы поглотили, память поглощенного и некоторые образцы того, что он говорил. +Будучи культистом, не устраивайте слишком большой хаос до того, как ваша цель будет выполнена. Если шаттл будет вызван слишком рано, у вас может не хватить времени для победы. +Будучи культистом, ваша команда изначально слаба, но при необходимости может быстро превратить все, что у нее есть, в чистую силу. Убедитесь, что у вас достаточно численности и снаряжения, чтобы начать громко действовать, иначе культ падет на землю. +Будучи культистом, вы знаете, что руна 'Blood Boil' наносит некультистам огромный урон от ожогов и поджигает их. Однако в течение всего времени действия руны у нее должны стоять два культиста. +Вы можете деконвертировать культистов, напаив их большим количеством святой воды. +Священник может благословить любую емкость с водой, ударив по ней своей библией. Святая вода имеет огромное количество применений против культа, а большое ее количество способствует успеху в борьбе с ними. +Будучи магом, вы можете превращать людей в камень, а затем оживлять получившуюся статую с помощью посоха анимации, чтобы создать чрезвычайно мощного миньона, по крайней мере, на 5 минут. +Будучи магом, вы знаете, что заклинание огненного шара очень плохо работает на близком расстоянии, так как оно может легко зацепить вас взрывом. Лучше всего использовать его в качестве артиллерии в длинных коридорах. +Будучи магом, вы можете вызывать оружие, вы можете получить все, что угодно - от цветочного соматора до импульсной винтовки. Используйте на свой страх и риск! +Будучи магом, вы знаете, что посох хаоса может стрелять любыми видами болтов. Это могут быть как болты мгновенной смерти, так и исцеления или оживления. +Будучи магом, вы знаете, что большинство заклинаний становятся непригодными, если на вас нет мантии, шляпы и сандалий. +Будучи Абдуктором, вы можете выбрать, куда будут отправлены ваши жертвы, на консоли управления кораблем. +Будучи Абдуктором-агентом, вы знаете, что жилет в боевом режиме обладает гораздо большей устойчивостью к любому виду оружия, а шлем не позволяет ИИ следить за вами. +Будучи Абдуктором, вы знаете, что дубинка может переключаться между четырьмя режимами: оглушение, сон, наручники и метка. +Будучи Ревенантом, вы знаете, что священник - ваш злейший враг, поскольку он может нанести вам огромный урон с помощью нулл рода и сделать большие участки станции непроходимыми с помощью святой воды. +Будучи Ревенантом, ваша энергия - это также ваше здоровье, поэтому раскрываться перед людьми, чтобы собрать энергию живых, гораздо безопаснее, если вы уже запаслись ею из плохо охраняемых трупов. +Будучи Ревенантом, вы знаете, что ваша способность 'Defile' удаляет святую воду с плиток в небольшом радиусе, позволяя вам отвоевать станцию у капеллана, если он покрывал станцию святой водой. +Будучи Ревенантом, вы знаете, что ваша способность 'Overload Lights' поражает людей светом только в том случае, если свет продолжает гореть после небольшой задержки. +Будучи Ревенантом, вы знаете, что ваша способность 'Malfunction' в целом повреждает механизмы и механические объекты, возможно, даже разрушая некоторые. Экспериментируйте! +Будучи Ревенантом, вы знаете, что космос - ваш друг. Разбивая окна в космос, вы можете нанести огромный ущерб и вызвать хаос. +Будучи призраком, вы можете дважды щелкнуть по любой вещи, чтобы следить за ней. Или просто перемещаться! +Будучи офицером службы безопасности, помните, что корреляция не равна причинно-следственной связи. Возможно, кто-то просто оказался не в том месте и не в то время! +Будучи офицером службы безопасности, помните, что к большинству вооружения (доминаторы, электрошокеры и т.д.) можно прикрепить фонарик. +Будучи пауком Ужаса, оставьте обматывание трупов зеленым паукам, если это не является абсолютно необходимым. Им это нужно, чтобы откладывать яйца! +Будучи Принцом Ужаса, вы могущественны, но обычно действуете в одиночку. Подумайте о тактике "бей и беги", чтобы восстанавливать здоровье между схватками. +Будучи коричневым пауком Ужаса, сосредоточьтесь на разрушении заваренных вентиляций. Вы слабы в прямом бою, но можете дать возможность своим товарищам пройти почти везде. +Будучи пауком Ужаса, защитите королеву любой ценой! +Будучи пауком Ужаса, не забывайте, что вы можете переместить свое гнездо, если экипаж слишком сильно давит на вас. +Будучи пауком Ужаса, попробуйте накинуть паутину на белую плитку пола, так ее гораздо труднее заметить. +Будучи пауком Ужаса, вы можете затягивать врага в паутину, это может обеспечить победу в ближнем бою. +Вы можете менять местами плитки пола, держа лом в одной руке и стопку плиток в другой. +При взломе дверей, перерезание и соединение провода 'test light' восстановит питание двери. +При создании большинства предметов вы можете либо вручную комбинировать части, либо использовать меню крафта. +Хранилища костюмов не только удаляют кровь и грязь с одежды, но и радиацию! +Сон в кровати может исцелить незначительное количество повреждений от грубой силы и ожогов. +Экспериментатор имеет шанс породить враждебных мобов. При его использовании будьте готовы спасаться бегством. +Наличие импланта щита разума, или карта агента заставит офицера Бипски считать вас менее пригодным для ареста. +Вы можете сделать лазертаг турели, чтобы провести величайший турнир по лазертагу! +Строения Блоба получают половину от грубого (brute) урона. Лучше используйте лазеры. +Бумагу можно спрятать в вентиляции, но для этого нужно сначала открыть её с помощью отвертки. +Хотя Стандартные Рабочие Процедуры не являются в полной мере правилами, они существуют по соображениям безопасности и профессионализма. +Убийство мага обычно завершает раунд, если только это не лич, или ЯРОСТЬ Космической Федерации Магов! +Будучи ассистентом, у вас есть шансы найти работу. +Роль предназначенная для новичков может использоваться и опытными игроками для разнообразия геймплея. +Если вы не уверены в своих познаниях в профессии, вам следует сначала поиграть на роли для новичков. +Если у вас роль для новичков, не забывайте, у вас собственное СРП, не позволяющее пользоваться некоторыми вещами без разрешения. +На ролях для новичков вы можете эксплуатировать ваших старших коллег и наседать им на мозги. И Глава даже не уволит вас за это! +Если долго отыгрывать на роли для новичка, не заметишь как ты становишься опытнее. +Чем дольше учишься - тем лучше знаешь свою профессию. +Не всегда зубрежка вики дает лучший игровой опыт. Иногда стоит отдаться течению. +Если вы видите персонажа с ролью новичка - помогите ему освоиться. Даже если за него играет опытный игрок - это может быть интересная ролевая ситуация. +Если вы видите персонажа с ролью новичка - не забудьте показать ему собственное превосходство и надавать по рукам, за то что он трогает вещи без разрешения. +Если только ругать новичков, а не помогать им освоиться, то игроков никогда не будет. +Все когда-то были новичками. Проявите терпение. +Это ободряющий совет. diff --git a/tgui/packages/tgui/components/Button.js b/tgui/packages/tgui/components/Button.js index 33182aa03341..fc4bc3aa2d01 100644 --- a/tgui/packages/tgui/components/Button.js +++ b/tgui/packages/tgui/components/Button.js @@ -27,6 +27,7 @@ export const Button = (props) => { iconColor, iconSpin, iconRight, + iconStyle, children, onclick, onClick, @@ -95,6 +96,7 @@ export const Button = (props) => { color={iconColor} rotation={iconRotation} spin={iconSpin} + style={iconStyle} /> )} {content} @@ -105,6 +107,7 @@ export const Button = (props) => { color={iconColor} rotation={iconRotation} spin={iconSpin} + style={iconStyle} /> )} {tooltip && } diff --git a/tgui/packages/tgui/components/Input.js b/tgui/packages/tgui/components/Input.js index 19b57936097e..f82ae9cdf8cb 100644 --- a/tgui/packages/tgui/components/Input.js +++ b/tgui/packages/tgui/components/Input.js @@ -76,6 +76,8 @@ export class Input extends Component { const input = this.inputRef.current; if (input) { input.value = toInputValue(nextValue); + input.selectionStart = 0; + input.selectionEnd = input.value.length; } if (this.props.autoFocus || this.props.autoSelect) { diff --git a/tgui/packages/tgui/hotkeys.js b/tgui/packages/tgui/hotkeys.js index ac2fc6d9ff63..3522d1dabf4d 100644 --- a/tgui/packages/tgui/hotkeys.js +++ b/tgui/packages/tgui/hotkeys.js @@ -194,9 +194,10 @@ const handlePassthrough = (e, eventType) => { export const releaseHeldKeys = () => { for (let keyCode of Object.keys(keyState)) { if (keyState[keyCode]) { + const byondKey = keyCodeToByond(keyCode); logger.log(`releasing [${keyCode}] key`); keyState[keyCode] = false; - callByond('', { __keyup: keyCode }); + callByond('', { __keyup: byondKey }); } } }; diff --git a/tgui/packages/tgui/interfaces/ChemMaster.js b/tgui/packages/tgui/interfaces/ChemMaster.js index 9c5cc39f5395..2f7d8fe71f83 100644 --- a/tgui/packages/tgui/interfaces/ChemMaster.js +++ b/tgui/packages/tgui/interfaces/ChemMaster.js @@ -1,6 +1,16 @@ -import { Fragment } from 'inferno'; +import { Component, Fragment } from 'inferno'; import { useBackend } from '../backend'; -import { Box, Button, Flex, Icon, LabeledList, Section } from '../components'; +import { + Box, + Button, + Flex, + Icon, + Input, + LabeledList, + Section, + Slider, + Tabs, +} from '../components'; import { Window } from '../layouts'; import { BeakerContents } from './common/BeakerContents'; import { @@ -10,13 +20,6 @@ import { } from './common/ComplexModal'; const transferAmounts = [1, 5, 10]; -const bottleStyles = [ - 'bottle.png', - 'small_bottle.png', - 'wide_bottle.png', - 'round_bottle.png', - 'reagent_bottle.png', -]; const analyzeModalBodyOverride = (modal, context) => { const { act, data } = useBackend(context); @@ -103,8 +106,8 @@ const ChemMasterBeaker = (props, context) => { return (
{ return (
Transferring to  @@ -261,10 +264,16 @@ const ChemMasterBuffer = (props, context) => { const ChemMasterProduction = (props, context) => { const { act } = useBackend(context); - if (!props.bufferNonEmpty) { + if (!props.bufferNonEmpty && props.isCondiment) { return ( -
- +
+
@@ -276,7 +285,7 @@ const ChemMasterProduction = (props, context) => { } return ( -
+
{!props.isCondiment ? ( ) : ( @@ -288,82 +297,239 @@ const ChemMasterProduction = (props, context) => { const ChemMasterProductionChemical = (props, context) => { const { act, data } = useBackend(context); + const tabs = [ + { + 'name': 'Pills', + 'icon': 'pills', + }, + { + 'name': 'Patches', + 'icon': 'plus-square', + }, + { + 'name': 'Bottles', + 'icon': 'wine-bottle', + }, + ]; + const decideTab = (mode) => { + switch (mode) { + case 1: + return ; + case 2: + return ; + case 3: + return ; + default: + return 'UNKNOWN INTERFACE'; + } + }; + return ( + <> + + {tabs.map((t, i) => { + i += 1; + return ( + act('set_production_mode', { mode: i })} + /> + ); + })} + + {decideTab(data.production_mode)} + + ); +}; + +class ChemMasterNameInput extends Component { + constructor() { + super(); + + this.handleMouseUp = (e) => { + const { placeholder, onMouseUp } = this.props; + + // Middle-click button + if (e.button === 1) { + e.target.value = placeholder; + e.target.select(); + } + + if (onMouseUp) { + onMouseUp(e); + } + }; + } + + render() { + const { data } = useBackend(this.context); + const { maxnamelength } = data; + + return ( + + ); + } +} + +const ChemMasterProductionCommon = (props, context) => { + const { act, data } = useBackend(context); + const { + children, + maxQuantity, + medicineName, + placeholderName, + productionType, + quantity, + } = props; + const { buffer_reagents = [] } = data; return ( - - - - ); }; +const SpriteStyleButton = (props, context) => { + const { icon, imageTransform, ...restProps } = props; + return ( + + ); +}; + +const ChemMasterProductionPills = (props, context) => { + const { act, data } = useBackend(context); + const { + maxpills, + pillamount, + pillname, + pillplaceholdername, + pillsprite, + pillstyles, + } = data; + const style_buttons = pillstyles.map(({ id, sprite }) => ( + act('set_pills_style', { style: id })} + selected={pillsprite === id} + /> + )); + return ( + + {style_buttons} + + ); +}; + +const ChemMasterProductionPatches = (props, context) => { + const { act, data } = useBackend(context); + const { maxpatches, patchamount, patchname, patchplaceholdername } = data; + return ( + + ); +}; + +const ChemMasterProductionBottles = (props, context) => { + const { act, data } = useBackend(context); + const { + bottlesprite, + maxbottles, + bottleamount, + bottlename, + bottleplaceholdername, + bottlestyles, + } = data; + const style_buttons = bottlestyles.map(({ id, sprite }) => ( + act('set_bottles_style', { style: id })} + selected={bottlesprite === id} + /> + )); + return ( + + {style_buttons} + + ); +}; + const ChemMasterProductionCondiment = (props, context) => { const { act } = useBackend(context); return ( @@ -387,31 +553,82 @@ const ChemMasterProductionCondiment = (props, context) => { const ChemMasterCustomization = (props, context) => { const { act, data } = useBackend(context); - if (!data.loaded_pill_bottle) { + const { loaded_pill_bottle_style, containerstyles, loaded_pill_bottle } = + data; + + const style_button_size = { width: '20px', height: '20px' }; + const style_buttons = containerstyles.map(({ color, name }) => { + let selected = loaded_pill_bottle_style === color; return ( -
- No pill bottle or patch pack loaded. -
+ ); - } - + }); return ( -
-
); }; diff --git a/tgui/packages/tgui/interfaces/EvolutionMenu.js b/tgui/packages/tgui/interfaces/EvolutionMenu.js index 04e7c0c6e3f3..62ec6e8f5e8d 100644 --- a/tgui/packages/tgui/interfaces/EvolutionMenu.js +++ b/tgui/packages/tgui/interfaces/EvolutionMenu.js @@ -1,7 +1,10 @@ import { Fragment } from 'inferno'; +import { createSearch } from 'common/string'; import { useBackend, useLocalState } from '../backend'; -import { Box, Button, Flex, Icon, Section, Tabs } from '../components'; +import { Box, Button, Flex, Section, Tabs, Input } from '../components'; import { Window } from '../layouts'; +import { flow } from 'common/fp'; +import { filter, sortBy } from 'common/collections'; export const EvolutionMenu = (props, context) => { return ( @@ -48,14 +51,69 @@ const EvolutionPoints = (props, context) => { const Abilities = (props, context) => { const { act, data } = useBackend(context); - const { evo_points, ability_list, purchased_abilities, view_mode } = data; - const [tab, setTab] = useLocalState(context, 'tab', 0); + const { evo_points, ability_tabs, purchased_abilities, view_mode } = data; + const [selectedTab, setSelectedTab] = useLocalState( + context, + 'selectedTab', + ability_tabs[0] + ); + const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); + const [abilities, setAbilities] = useLocalState( + context, + 'ability_tabs', + ability_tabs[0].abilities + ); + + const selectAbilities = (abilities, searchText = '') => { + if (!abilities || abilities.length === 0) { + return []; + } + + const AbilitySearch = createSearch(searchText, (ability) => { + return ability.name + '|' + ability.description; + }); + + return flow([ + filter((ability) => ability?.name), + filter(AbilitySearch), + sortBy((ability) => ability?.name), + ])(abilities); + }; + + const handleSearch = (value) => { + setSearchText(value); + if (value === '') { + return setAbilities(selectedTab.abilities); + } + + setAbilities( + selectAbilities( + ability_tabs.map((ability_entry) => ability_entry.abilities).flat(), + value + ) + ); + }; + + const handleTabChange = (selectedTab) => { + setSelectedTab(selectedTab); + setAbilities(selectedTab.abilities); + setSearchText(''); + }; + return (
+ { + handleSearch(value); + }} + value={searchText} + />