diff --git a/.editorconfig b/.editorconfig index a25dbdfc85..df93ae3a16 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,3 +2,7 @@ insert_final_newline = true indent_style = tab indent_size = 4 + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.travis.yml b/.travis.yml index bef3a69ad7..ab3b1003c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,34 @@ language: generic -sudo: false dist: xenial +sudo: false + branches: except: - ___TGS3TempBranch - ___TGSTempBranch + matrix: include: - - env: - - BUILD_TOOLS=true - name: "Build Tools" + - name: "Run Linters" addons: apt: packages: - python3 - python3-pip - python3-setuptools - cache: - directories: - - tgui/node_modules - - env: - - BUILD_TESTING=true - - BUILD_TOOLS=false - name: "Build All Maps" + install: + - tools/travis/install_build_tools.sh + - tools/travis/install_dreamchecker.sh + script: + - tools/travis/check_filedirs.sh tgstation.dme + - tools/travis/check_changelogs.sh + - find . -name "*.php" -print0 | xargs -0 -n1 php -l + - find . -name "*.json" -not -path "./tgui/node_modules/*" -print0 | xargs -0 python3 ./tools/json_verifier.py + - tools/travis/build_tgui.sh + - tools/travis/check_grep.sh + - ~/dreamchecker + + - name: "Compile All Maps" addons: apt: packages: @@ -30,10 +36,15 @@ matrix: cache: directories: - $HOME/BYOND - - env: - - BUILD_TESTING=false - - BUILD_TOOLS=false - name: "Build and Run Unit Tests" + install: + - tools/travis/install_byond.sh + - source $HOME/BYOND/byond/bin/byondsetup + before_script: + - tools/travis/template_dm_generator.py + script: + - tools/travis/dm.sh -DTRAVISBUILDING -DTRAVISTESTING -DALL_MAPS tgstation.dme + + - name: "Compile and Run Tests" addons: mariadb: '10.2' apt: @@ -41,7 +52,6 @@ matrix: - ubuntu-toolchain-r-test packages: - libstdc++6:i386 - - libssl-dev:i386 - gcc-multilib - g++-7 - g++-7-multilib @@ -49,25 +59,19 @@ matrix: - libmariadbd-dev cache: directories: - - $HOME/.cargo - $HOME/BYOND - - $HOME/MariaDB - - $HOME/.rustup - -install: - - tools/travis/install_build_tools.sh - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root -e 'CREATE DATABASE tg_travis;'; fi - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root tg_travis < SQL/tgstation_schema.sql; fi - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root -e 'CREATE DATABASE tg_travis_prefixed;'; fi - - if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then mysql -u root tg_travis_prefixed < SQL/tgstation_schema_prefixed.sql; fi - -before_script: - - tools/travis/before_build_tools.sh - - tools/travis/before_build_byond.sh - -script: - - tools/travis/check_filedirs.sh tgstation.dme - - tools/travis/build_tools.sh || travis_terminate 1 - - tools/travis/build_dependencies.sh || travis_terminate 1 - - tools/travis/build_byond.sh - + - $HOME/libmariadb + install: + - tools/travis/install_byond.sh + - source $HOME/BYOND/byond/bin/byondsetup + - tools/travis/install_libmariadb.sh + - tools/travis/install_rust_g.sh + before_script: + - mysql -u root -e 'CREATE DATABASE tg_travis;' + - mysql -u root tg_travis < SQL/tgstation_schema.sql + - mysql -u root -e 'CREATE DATABASE tg_travis_prefixed;' + - mysql -u root tg_travis_prefixed < SQL/tgstation_schema_prefixed.sql + - tools/travis/build_bsql.sh + script: + - tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme || travis_terminate 1 + - tools/travis/run_server.sh diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm new file mode 100644 index 0000000000..6e44ec3197 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elite_tumor.dmm @@ -0,0 +1,111 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/lavaland/surface/outdoors) +"b" = ( +/obj/structure/elite_tumor, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"c" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(4,1,1) = {" +a +a +a +c +c +c +a +a +a +"} +(5,1,1) = {" +a +a +a +c +b +c +a +a +a +"} +(6,1,1) = {" +a +a +a +c +c +c +a +a +a +"} +(7,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(8,1,1) = {" +a +a +a +a +a +a +a +a +a +"} +(9,1,1) = {" +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm index 341dcf7b99..f64bfa8a4e 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm @@ -338,6 +338,9 @@ /obj/item/flashlight/lamp/bananalamp, /turf/open/floor/plating/asteroid, /area/ruin/unpowered) +"bt" = ( +/turf/closed/mineral/random/low_chance/earth_like, +/area/ruin/unpowered) (1,1,1) = {" aa @@ -474,13 +477,13 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab ab ab @@ -520,22 +523,22 @@ aA ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab ab aA @@ -569,27 +572,27 @@ aA aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -620,29 +623,29 @@ ab ab aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -666,36 +669,36 @@ aM aa aA ab +bt +bt +bt +bt ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -718,37 +721,37 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ae af ae -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -770,38 +773,38 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt af aq af -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -822,38 +825,38 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ae ae ao ae ae -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -874,39 +877,39 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt af an an an af -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -927,24 +930,24 @@ aA aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ae ae bh @@ -952,13 +955,13 @@ an an ae aZ -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -979,24 +982,24 @@ aA aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt af aY ao @@ -1004,13 +1007,13 @@ ao ao ak ba -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -1031,24 +1034,24 @@ aA aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt al aj ap @@ -1056,13 +1059,13 @@ an as aj aE -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -1083,24 +1086,24 @@ aA aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt af ak ao @@ -1109,12 +1112,12 @@ ao ak ba ac -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt ab aA aa @@ -1134,24 +1137,24 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ah az -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt aR ae ae @@ -1161,12 +1164,12 @@ an ae aZ ac -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt ab aA aM @@ -1186,24 +1189,24 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ac ac -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt aR ag ag @@ -1213,12 +1216,12 @@ af at bb ac -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt ab aA aa @@ -1238,24 +1241,24 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ad ac ac ac ac -ab +bt aH aJ aL -ab -ab +bt +bt aT ac ac @@ -1265,12 +1268,12 @@ ac ac ac aR -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt ab aA aa @@ -1289,14 +1292,14 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ad au ac @@ -1306,8 +1309,8 @@ ac ac ac ac -ab -ab +bt +bt ac ac ac @@ -1317,12 +1320,12 @@ ac ac ac bg -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt ab aA aa @@ -1341,14 +1344,14 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ad aw bs @@ -1358,9 +1361,9 @@ ac ac ac ac -ab -ab -ab +bt +bt +bt ac ac ac @@ -1368,13 +1371,13 @@ ac ac ac ac -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -1393,14 +1396,14 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ad ax ac @@ -1409,9 +1412,9 @@ aF ac ac ac -ab -ab -ab +bt +bt +bt aU bd ac @@ -1420,13 +1423,13 @@ bl bm ac ac -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -1445,14 +1448,14 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt ad ay ac @@ -1461,9 +1464,9 @@ ac aG ac ac -ab -ab -ab +bt +bt +bt av be ac @@ -1473,12 +1476,12 @@ bn bo bo bq -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt ab aA aa @@ -1496,16 +1499,16 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac ac ac @@ -1513,9 +1516,9 @@ ac ac ac ac -ab -ab -ab +bt +bt +bt bc bf ac @@ -1525,11 +1528,11 @@ ac ac ac br -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt ab aA aa @@ -1548,26 +1551,26 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac -ab +bt ac ac ac ac ac -ab -ab +bt +bt ac ac ac @@ -1577,11 +1580,11 @@ ac ac ac ac -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt ab aA aa @@ -1599,20 +1602,20 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac ac ac @@ -1628,11 +1631,11 @@ ac ac ac ac -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt ab aA aa @@ -1651,26 +1654,26 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac ac ac -ab -ab +bt +bt ac ac ac @@ -1682,9 +1685,9 @@ ac ac ac ac -ab -ab -ab +bt +bt +bt ab aa aa @@ -1703,26 +1706,26 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aK -ab -ab +bt +bt ac ac ac @@ -1734,8 +1737,8 @@ bp ac ac aR -ab -ab +bt +bt ab aA aa @@ -1756,25 +1759,25 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aP ac ac @@ -1786,8 +1789,8 @@ ac ac ac aR -ab -ab +bt +bt ab aA aa @@ -1808,25 +1811,25 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aQ aP ac @@ -1836,10 +1839,10 @@ ac ac ac ac -ab +bt ac -ab -ab +bt +bt ab aA aa @@ -1860,27 +1863,27 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac ac ac @@ -1888,10 +1891,10 @@ ac aP ac bg -ab -ab -ab -ab +bt +bt +bt +bt ab aa aa @@ -1913,26 +1916,26 @@ aa aA ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac ac ac @@ -1940,9 +1943,9 @@ ac ac ac aS -ab -ab -ab +bt +bt +bt ab aA aa @@ -1966,25 +1969,25 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt bg ac ac @@ -1992,9 +1995,9 @@ ac ac ac aS -ab -ab -ab +bt +bt +bt ab aA aa @@ -2018,25 +2021,25 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ac ac bj @@ -2044,9 +2047,9 @@ ac ac ac aS -ab -ab -ab +bt +bt +bt ab aA aa @@ -2071,24 +2074,24 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt aS bi ac @@ -2096,9 +2099,9 @@ ac ac aS aS -ab -ab -ab +bt +bt +bt ab aA aa @@ -2124,23 +2127,23 @@ aM aa aA ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt aS ac ac @@ -2148,8 +2151,8 @@ ac ac aS aS -ab -ab +bt +bt ab aA aa @@ -2176,20 +2179,20 @@ aa aa aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aS @@ -2229,18 +2232,18 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aA @@ -2282,17 +2285,17 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aA @@ -2335,16 +2338,16 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab aA aa @@ -2388,16 +2391,16 @@ aa aA aA ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt ab ab aa @@ -2448,9 +2451,9 @@ ab ab ab ab -ab -ab -ab +bt +bt +bt ab aa aa @@ -2933,7 +2936,7 @@ aa aa aa aa -ab +bt aa aa aa diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 53b12ca0bb..7bec217f62 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -3,44 +3,17 @@ /turf/open/space/basic, /area/space) "aab" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer{ - dir = 8 - }, -/obj/item/radio/intercom{ - pixel_y = 25 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/space/nearstation) "aac" = ( -/obj/machinery/requests_console{ - department = "Bar"; - departmentType = 2; - pixel_x = 30; - receive_ore_updates = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/obj/machinery/camera{ - c_tag = "Bar"; - dir = 8 - }, -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks{ - dir = 8 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/space/nearstation) "aad" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -113,40 +86,30 @@ "aan" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/ambrosia, -/obj/effect/turf_decal/tile/green{ - dir = 1 +/obj/machinery/newscaster{ + pixel_y = 32 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/plasteel, +/turf/open/floor/grass, /area/security/prison) "aao" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/turf/open/floor/plating, +/obj/machinery/hydroponics/soil, +/obj/item/seeds/carrot, +/turf/open/floor/grass, /area/security/prison) "aap" = ( /obj/machinery/hydroponics/soil, -/obj/item/seeds/carrot, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/prison) -"aaq" = ( +/obj/item/plant_analyzer, /obj/structure/sign/warning/electricshock{ pixel_y = 32 }, +/turf/open/floor/grass, +/area/security/prison) +"aaq" = ( /obj/machinery/hydroponics/soil, -/obj/item/plant_analyzer, +/obj/item/seeds/glowshroom, +/turf/open/floor/grass, +/area/security/prison) +"aar" = ( /obj/machinery/camera{ c_tag = "Prison Common Room"; network = list("ss13","prison") @@ -158,24 +121,20 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, -/turf/open/floor/plasteel, -/area/security/prison) -"aar" = ( -/obj/machinery/hydroponics/soil, -/obj/item/seeds/glowshroom, /obj/effect/turf_decal/tile/green{ - dir = 1 + dir = 8 }, -/obj/effect/turf_decal/tile/green{ - dir = 4 +/obj/structure/sink{ + pixel_y = 20 }, /turf/open/floor/plasteel, /area/security/prison) "aas" = ( -/obj/structure/sink{ - pixel_y = 20 +/obj/structure/sign/warning/electricshock{ + pixel_y = 32 }, -/turf/open/floor/plating, +/obj/machinery/seed_extractor, +/turf/open/floor/plasteel, /area/security/prison) "aat" = ( /turf/open/floor/plasteel, @@ -194,78 +153,64 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/grass, /area/security/prison) "aax" = ( -/mob/living/simple_animal/mouse/brown/Tom, -/turf/open/floor/plating, +/turf/open/floor/grass, /area/security/prison) "aay" = ( /turf/open/floor/plating, /area/security/prison) "aaz" = ( /obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plating, +/turf/open/floor/grass, /area/security/prison) "aaA" = ( -/obj/machinery/seed_extractor, +/obj/machinery/vr_sleeper{ + dir = 8 + }, /turf/open/floor/plasteel, /area/security/prison) "aaB" = ( -/obj/structure/window/reinforced, -/obj/machinery/hydroponics/soil, -/obj/item/seeds/potato, +/mob/living/simple_animal/mouse/brown/Tom, +/turf/open/floor/grass, +/area/security/prison) +"aaC" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, /obj/effect/turf_decal/tile/green{ dir = 1 }, /obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/green{ - dir = 8 + dir = 4 }, /turf/open/floor/plasteel, /area/security/prison) -"aaC" = ( -/obj/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/prison) "aaD" = ( /obj/structure/window/reinforced, /obj/machinery/hydroponics/soil, -/obj/item/seeds/grass, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/plasteel, +/obj/item/seeds/potato, +/turf/open/floor/grass, /area/security/prison) "aaE" = ( /obj/structure/window/reinforced, /obj/machinery/hydroponics/soil, -/obj/item/cultivator, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/plasteel, +/obj/item/seeds/grass, +/turf/open/floor/grass, /area/security/prison) "aaF" = ( -/obj/structure/window/reinforced, /obj/machinery/hydroponics/soil, -/obj/item/cultivator, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/plasteel, +/obj/structure/window/reinforced, +/obj/item/seeds/tower, +/turf/open/floor/grass, /area/security/prison) "aaG" = ( /obj/machinery/light{ dir = 4 }, -/obj/machinery/cryopod{ +/obj/machinery/vr_sleeper{ dir = 8 }, /turf/open/floor/plasteel, @@ -282,77 +227,54 @@ /turf/open/floor/plasteel, /area/security/prison) "aaK" = ( -/obj/machinery/washing_machine, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aaL" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) -"aaM" = ( /obj/machinery/computer/libraryconsole/bookmanagement, /obj/structure/table, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /turf/open/floor/plasteel, /area/security/prison) +"aaM" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/security/prison) "aaN" = ( -/obj/structure/table, -/obj/item/pen, -/turf/open/floor/plasteel, +/obj/structure/window/reinforced, +/obj/machinery/hydroponics/soil, +/obj/item/cultivator, +/turf/open/floor/grass, /area/security/prison) "aaO" = ( -/obj/structure/table, -/obj/item/storage/pill_bottle/dice, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, /turf/open/floor/plasteel, /area/security/prison) "aaP" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 }, +/turf/closed/wall, +/area/security/execution/transfer) +"aaQ" = ( /obj/machinery/computer/cryopod{ dir = 8; pixel_x = 26 }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) -"aaQ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/cryopod{ dir = 8 }, -/turf/open/floor/plasteel/cafeteria, +/turf/open/floor/plasteel, /area/security/prison) "aaR" = ( /obj/structure/lattice, @@ -372,50 +294,30 @@ /turf/open/space, /area/space/nearstation) "aaU" = ( -/obj/machinery/computer/arcade{ - icon_state = "arcade"; +/obj/machinery/computer/arcade/minesweeper{ dir = 4 }, /turf/open/floor/plasteel, /area/security/prison) "aaV" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, +/obj/structure/chair/sofa/right, /turf/open/floor/plasteel, /area/security/prison) "aaW" = ( -/obj/structure/table, -/obj/item/toy/cards/deck, +/obj/structure/chair/sofa/left, /turf/open/floor/plasteel, /area/security/prison) "aaX" = ( -/obj/machinery/washing_machine, /obj/structure/window/reinforced, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/cryopod{ dir = 8 }, -/turf/open/floor/plasteel/cafeteria, +/turf/open/floor/plasteel, /area/security/prison) "aaY" = ( -/obj/structure/window/reinforced, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/security/prison) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/security/execution/transfer) "aaZ" = ( /turf/closed/wall/r_wall, /area/ai_monitored/security/armory) @@ -450,11 +352,11 @@ /turf/open/floor/plasteel, /area/security/prison) "abg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/computer/arcade{ + dir = 4 }, -/turf/closed/wall/r_wall, -/area/security/execution/transfer) +/turf/open/floor/plasteel, +/area/security/prison) "abh" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -473,6 +375,7 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/machinery/washing_machine, /turf/open/floor/plasteel/freezer, /area/security/prison) "abk" = ( @@ -560,8 +463,7 @@ /area/security/execution/transfer) "abu" = ( /obj/machinery/door/poddoor{ - id = "executionspaceblast"; - name = "blast door" + id = "executionspaceblast" }, /turf/open/floor/plating, /area/security/execution/transfer) @@ -588,8 +490,9 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "abx" = ( -/obj/machinery/vending/cola/random, -/turf/open/floor/plasteel, +/obj/structure/bedsheetbin/color, +/obj/structure/table, +/turf/open/floor/plasteel/freezer, /area/security/prison) "aby" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -616,9 +519,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-24" - }, /turf/open/floor/plasteel, /area/security/prison) "abB" = ( @@ -655,7 +555,6 @@ "abG" = ( /obj/machinery/door/window/westleft{ base_state = "right"; - dir = 8; icon_state = "right"; name = "Unisex Showers" }, @@ -751,8 +650,7 @@ pixel_y = -3 }, /obj/machinery/camera/motion{ - c_tag = "Armory Motion Sensor"; - dir = 2 + c_tag = "Armory Motion Sensor" }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -921,7 +819,6 @@ /area/security/execution/transfer) "acb" = ( /obj/machinery/sparker{ - dir = 2; id = "executionburn"; pixel_x = 25 }, @@ -1009,8 +906,8 @@ /area/ai_monitored/security/armory) "acm" = ( /obj/machinery/power/apc/highcap/five_k{ - dir = 4; areastring = "/area/ai_monitored/security/armory"; + dir = 4; name = "Armory APC"; pixel_x = 24 }, @@ -1098,18 +995,14 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "acA" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 2 - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "acB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "acC" = ( @@ -1120,7 +1013,6 @@ }, /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; name = "Prison Intercom (General)"; pixel_y = 24; prison_radio = 1 @@ -1150,7 +1042,6 @@ }, /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; name = "Prison Intercom (General)"; pixel_y = 24; prison_radio = 1 @@ -1172,7 +1063,6 @@ }, /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; name = "Prison Intercom (General)"; pixel_y = 24; prison_radio = 1 @@ -1211,13 +1101,15 @@ /turf/open/floor/plasteel, /area/security/prison) "acK" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 +/obj/structure/mirror{ + pixel_x = 25 }, /obj/machinery/light/small{ - dir = 4 + dir = 8 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 }, /turf/open/floor/plasteel/freezer, /area/security/prison) @@ -1239,25 +1131,23 @@ pixel_y = -3 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/turf_decal/bot{ - dir = 2 - }, +/obj/effect/turf_decal/bot, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/turf/open/floor/plasteel, /area/ai_monitored/security/armory) "acN" = ( -/obj/structure/chair/stool/bar, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + on = 0; + pixel_x = -7; + pixel_y = 12 }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "acO" = ( /obj/structure/closet/l3closet/security, /obj/machinery/camera{ @@ -1278,15 +1168,16 @@ /area/crew_quarters/heads/hos) "acR" = ( /obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, /obj/item/flashlight/lamp/green{ on = 0; pixel_x = -3; pixel_y = 8 }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, +/obj/item/pen/fountain, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "acS" = ( @@ -1438,9 +1329,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, +/obj/effect/turf_decal/bot, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -1448,9 +1337,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/turf/open/floor/plasteel, /area/ai_monitored/security/armory) "adk" = ( /obj/structure/rack, @@ -1463,9 +1350,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, +/obj/effect/turf_decal/bot, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -1473,9 +1358,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/turf/open/floor/plasteel, /area/ai_monitored/security/armory) "adl" = ( /obj/machinery/door/poddoor/shutters{ @@ -1514,15 +1397,12 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "adq" = ( -/obj/structure/table/wood, -/obj/item/instrument/guitar{ - pixel_x = -7 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/instrument/eguitar{ - pixel_x = 5 - }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "adr" = ( /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 @@ -1700,9 +1580,7 @@ /area/security/prison) "adK" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "adL" = ( @@ -1731,8 +1609,8 @@ /area/crew_quarters/heads/hos) "adN" = ( /obj/machinery/power/apc{ - dir = 8; areastring = "/area/crew_quarters/heads/hos"; + dir = 8; name = "Head of Security's Office APC"; pixel_x = -24 }, @@ -1743,8 +1621,11 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "adO" = ( -/obj/structure/chair/stool, /obj/effect/landmark/event_spawn, +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison) "adP" = ( @@ -1755,9 +1636,7 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/hos) "adQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "adR" = ( @@ -2040,13 +1919,12 @@ /area/security/prison) "aer" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/power/apc{ + areastring = "/area/security/prison"; dir = 4; name = "Prison Wing APC"; - areastring = "/area/security/prison"; pixel_x = 24 }, /obj/structure/cable{ @@ -2065,7 +1943,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/suit_storage_unit/security, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -2082,7 +1959,6 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/suit_storage_unit/security, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -2145,7 +2021,8 @@ "aeB" = ( /obj/structure/table, /obj/item/stack/packageWrap, -/obj/item/pen, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, /turf/open/floor/plasteel, /area/security/main) "aeC" = ( @@ -2444,8 +2321,6 @@ /area/security/main) "afd" = ( /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29 }, @@ -2553,7 +2428,7 @@ /turf/open/floor/plasteel, /area/security/main) "afn" = ( -/obj/structure/table, +/obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "afo" = ( @@ -2924,9 +2799,8 @@ /obj/structure/closet/secure_closet/injection, /obj/structure/cable, /obj/machinery/power/apc{ - dir = 2; - name = "Prisoner Transfer Centre"; areastring = "/area/security/execution/transfer"; + name = "Prisoner Transfer Centre"; pixel_y = -27 }, /turf/open/floor/plasteel/dark, @@ -3034,9 +2908,7 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "agr" = ( @@ -3054,12 +2926,11 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "agu" = ( -/obj/structure/table, -/obj/machinery/recharger, /obj/machinery/airalarm{ dir = 8; pixel_x = 24 }, +/obj/machinery/suit_storage_unit/security, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "agv" = ( @@ -3085,6 +2956,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/syndicatebomb/training, /turf/open/floor/plasteel, /area/security/main) "agx" = ( @@ -3159,8 +3031,13 @@ /area/security/brig) "agE" = ( /obj/structure/table, -/obj/item/folder/red, -/obj/item/pen, +/obj/item/storage/fancy/donut_box{ + pixel_y = 10 + }, +/obj/item/storage/fancy/donut_box, +/obj/item/storage/fancy/donut_box{ + pixel_y = -10 + }, /turf/open/floor/plasteel, /area/security/main) "agF" = ( @@ -3334,8 +3211,11 @@ /turf/open/floor/plating, /area/security/warden) "agX" = ( -/obj/structure/table, -/obj/machinery/recharger, +/obj/structure/closet/secure_closet/warden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/book/manual/wiki/security_space_law, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "agY" = ( @@ -3402,14 +3282,21 @@ /turf/open/floor/plasteel, /area/security/main) "ahh" = ( +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/pen/fountain, +/obj/item/folder/red, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/item/pen, /obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, /turf/open/floor/plasteel, /area/security/main) "ahi" = ( @@ -3517,8 +3404,6 @@ /area/security/brig) "ahs" = ( /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_y = 24 }, @@ -3563,9 +3448,9 @@ /area/security/brig) "ahv" = ( /obj/machinery/power/apc{ + areastring = "/area/security/warden"; dir = 8; name = "Brig Control APC"; - areastring = "/area/security/warden"; pixel_x = -24 }, /obj/structure/cable{ @@ -3649,9 +3534,7 @@ /area/security/main) "ahD" = ( /obj/machinery/door/window/westleft{ - base_state = "left"; dir = 4; - icon_state = "left"; name = "Brig Infirmary" }, /obj/effect/turf_decal/tile/red, @@ -3784,9 +3667,9 @@ /area/security/main) "ahN" = ( /obj/machinery/power/apc{ + areastring = "/area/security/main"; dir = 4; name = "Security Office APC"; - areastring = "/area/security/main"; pixel_x = 24 }, /obj/structure/cable{ @@ -3809,9 +3692,17 @@ /turf/open/floor/plasteel/white, /area/security/brig) "ahQ" = ( -/obj/structure/closet/secure_closet/warden, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 3 }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) @@ -3966,16 +3857,11 @@ /turf/open/floor/plasteel/white, /area/security/brig) "aie" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/item/pen, -/obj/item/hand_labeler, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/item/book/manual/wiki/security_space_law, -/turf/open/floor/plasteel/showroomfloor, -/area/security/warden) +/obj/structure/closet/wardrobe/mixed, +/obj/item/clothing/shoes/jackboots, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "aif" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -4475,7 +4361,6 @@ "aje" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/effect/turf_decal/tile/red{ @@ -4535,8 +4420,6 @@ /area/security/courtroom) "ajj" = ( /obj/item/radio/intercom{ - broadcasting = 0; - listening = 1; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -4590,10 +4473,10 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "ajq" = ( +/obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/lattice/catwalk, /turf/open/space, /area/solar/port/fore) "ajr" = ( @@ -4643,7 +4526,6 @@ /area/security/brig) "ajx" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -4660,9 +4542,9 @@ /area/security/brig) "ajy" = ( /obj/machinery/power/apc{ + areastring = "/area/security/brig"; dir = 1; name = "Brig APC"; - areastring = "/area/security/brig"; pixel_y = 24 }, /obj/structure/cable{ @@ -4740,9 +4622,7 @@ /area/security/courtroom) "ajF" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/security/brig) "ajG" = ( @@ -4824,9 +4704,7 @@ "ajO" = ( /obj/structure/table/wood, /obj/item/radio/intercom{ - broadcasting = 0; dir = 8; - listening = 1; name = "Station Intercom (Court)" }, /obj/effect/turf_decal/tile/neutral{ @@ -5027,9 +4905,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/security/brig) "akh" = ( @@ -5077,9 +4953,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/security/brig) "akl" = ( @@ -5582,10 +5456,10 @@ /turf/open/floor/plasteel, /area/security/brig) "alg" = ( +/obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/lattice/catwalk, /turf/open/space, /area/solar/starboard/fore) "alh" = ( @@ -5703,7 +5577,6 @@ }, /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; name = "Prison Intercom (General)"; pixel_x = -25; pixel_y = -2; @@ -5738,7 +5611,6 @@ }, /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; name = "Prison Intercom (General)"; pixel_x = -25; pixel_y = -2; @@ -5815,9 +5687,7 @@ /turf/open/floor/plasteel, /area/security/brig) "alF" = ( -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 2 - }, +/obj/machinery/atmospherics/components/unary/tank/air, /turf/open/floor/plating, /area/maintenance/port/fore) "alG" = ( @@ -5862,22 +5732,25 @@ /turf/open/floor/plasteel, /area/security/courtroom) "alK" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/button/door{ + id = "Room Two"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 7; + pixel_y = -24; + specialfunctions = 4 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/chair/comfy/brown{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "alL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ + areastring = "/area/security/courtroom"; dir = 8; name = "Courtroom APC"; - areastring = "/area/security/courtroom"; pixel_x = -24 }, /obj/structure/cable{ @@ -5905,14 +5778,8 @@ /turf/open/floor/plasteel, /area/security/prison) "alN" = ( -/obj/machinery/camera{ - c_tag = "Dormitory Toilets"; - dir = 1 - }, -/obj/structure/table, -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/space/basic, +/area/space/nearstation) "alO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5923,8 +5790,7 @@ "alQ" = ( /obj/machinery/power/solar_control{ id = "auxsolareast"; - name = "Port Bow Solar Control"; - track = 0 + name = "Port Bow Solar Control" }, /obj/structure/cable{ icon_state = "0-4" @@ -6001,7 +5867,7 @@ pixel_y = -2 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -6026,17 +5892,23 @@ /turf/open/floor/plasteel, /area/security/processing) "amd" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/button/door{ + desc = "Bolts the doors to the Private Study."; + id = "PrivateStudy"; + name = "Private Study Lock"; + pixel_x = -5; + pixel_y = 24; + req_access_txt = "28" }, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 4 +/obj/machinery/button/door{ + id = "PrivateStudy1"; + name = "Privacy Shutters"; + pixel_x = 5; + pixel_y = 24 }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/hallway/secondary/exit) +/turf/open/floor/wood, +/area/library) "ame" = ( /obj/structure/cable{ icon_state = "1-2" @@ -6048,7 +5920,6 @@ /area/security/processing) "amf" = ( /obj/structure/bed, -/obj/item/bedsheet, /obj/structure/cable{ icon_state = "1-2" }, @@ -6056,6 +5927,7 @@ id = "Cell 1"; pixel_x = -28 }, +/obj/item/bedsheet/orange, /turf/open/floor/plasteel, /area/security/brig) "amg" = ( @@ -6067,11 +5939,11 @@ /area/security/brig) "amh" = ( /obj/structure/bed, -/obj/item/bedsheet, /obj/machinery/flasher{ id = "Cell 2"; pixel_x = -28 }, +/obj/item/bedsheet/orange, /turf/open/floor/plasteel, /area/security/brig) "ami" = ( @@ -6083,11 +5955,11 @@ /area/security/brig) "amj" = ( /obj/structure/bed, -/obj/item/bedsheet, /obj/machinery/flasher{ id = "Cell 3"; pixel_x = -28 }, +/obj/item/bedsheet/orange, /turf/open/floor/plasteel, /area/security/brig) "amk" = ( @@ -6170,7 +6042,6 @@ /obj/item/bedsheet, /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; name = "Prison Intercom (General)"; pixel_x = 25; pixel_y = -2; @@ -6216,11 +6087,8 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) "amx" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/closed/wall, +/area/crew_quarters/abandoned_gambling_den) "amy" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -6244,16 +6112,18 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "amB" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/computer/arcade{ - icon_state = "arcade"; - dir = 1 +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "amC" = ( /turf/open/floor/plating, /area/maintenance/port/fore) @@ -6300,6 +6170,29 @@ /obj/item/trash/plate, /turf/open/floor/plating, /area/maintenance/port/fore) +"amI" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Air In" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"amJ" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "amK" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -6320,6 +6213,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/security/processing) +"amN" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"amO" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"amP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, +/area/crew_quarters/dorms) "amQ" = ( /obj/structure/cable{ icon_state = "0-4" @@ -6465,18 +6371,21 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "anc" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/shower{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/item/soap, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "and" = ( /obj/machinery/light/small{ dir = 4 }, /obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "ane" = ( @@ -6493,9 +6402,9 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/port/fore"; dir = 8; name = "Port Bow Solar APC"; - areastring = "/area/maintenance/solars/port/fore"; pixel_x = -25; pixel_y = 3 }, @@ -6566,6 +6475,13 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"anq" = ( +/obj/structure/sign/poster/official/twelve_gauge, +/turf/closed/wall/r_wall, +/area/ai_monitored/security/armory) +"anr" = ( +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "ans" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -6679,15 +6595,11 @@ /turf/open/floor/plating, /area/security/courtroom) "anD" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "anE" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -6733,6 +6645,16 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) +"anM" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/curtain, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "anN" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -6879,8 +6801,7 @@ "aoh" = ( /obj/machinery/power/solar_control{ id = "auxsolareast"; - name = "Starboard Bow Solar Control"; - track = 0 + name = "Starboard Bow Solar Control" }, /obj/structure/cable{ icon_state = "0-4" @@ -6932,6 +6853,9 @@ /obj/item/circuitboard/machine/monkey_recycler, /turf/open/floor/plating, /area/maintenance/port/fore) +"aop" = ( +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aoq" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = -32 @@ -7026,9 +6950,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoz" = ( -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoA" = ( @@ -7037,9 +6959,7 @@ pixel_y = -29 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoB" = ( @@ -7047,16 +6967,12 @@ dir = 1; pixel_y = -24 }, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoC" = ( /obj/machinery/vending/coffee, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoD" = ( @@ -7068,23 +6984,17 @@ pixel_x = 5; pixel_y = -32 }, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoE" = ( /obj/machinery/vending/cigarette, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoF" = ( /obj/machinery/vending/snack/random, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoG" = ( @@ -7104,27 +7014,9 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "aoI" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 2; - name = "Fitness Room APC"; - areastring = "/area/crew_quarters/fitness"; - pixel_y = -24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/obj/structure/fireplace, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "aoJ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -7219,6 +7111,26 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/port/fore) +"aoY" = ( +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 10; + icon_state = "roomnum"; + name = "Room Number 6"; + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/washing_machine{ + pixel_x = 7; + pixel_y = 7 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aoZ" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ name = "Waste Release" @@ -7334,9 +7246,9 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ + areastring = "/area/maintenance/fore/secondary"; dir = 1; name = "Fore Maintenance APC"; - areastring = "/area/maintenance/fore/secondary"; pixel_y = 24 }, /obj/structure/disposalpipe/segment{ @@ -7367,38 +7279,23 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "apu" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "apv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Fitness Maintenance"; - req_access_txt = "12" - }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"apw" = ( /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) -"apw" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Air In" - }, -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/fore/secondary) "apx" = ( @@ -7435,9 +7332,9 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/starboard/fore"; dir = 8; name = "Starboard Bow Solar APC"; - areastring = "/area/maintenance/solars/starboard/fore"; pixel_x = -25; pixel_y = 3 }, @@ -7458,8 +7355,9 @@ /turf/closed/wall/r_wall, /area/maintenance/starboard/fore) "apD" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/item/clothing/shoes/jackboots, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/computer/slot_machine, +/obj/item/coin/iron, /turf/open/floor/plating, /area/maintenance/starboard/fore) "apE" = ( @@ -7475,6 +7373,15 @@ /obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/plasteel, /area/janitor) +"apH" = ( +/obj/machinery/door/airlock{ + desc = "A small bathroom with a sink, toilet and shower."; + id_tag = "Bath1"; + name = "Bathroom" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "apI" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ dir = 1 @@ -7485,6 +7392,12 @@ "apJ" = ( /turf/closed/wall, /area/construction/mining/aux_base) +"apK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/space/nearstation) "apL" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -7513,6 +7426,14 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/port/fore) +"apQ" = ( +/obj/machinery/door/airlock{ + desc = "A small bathroom with a sink, toilet and shower."; + id_tag = "Bath2"; + name = "Bathroom" + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "apR" = ( /obj/item/paper/fluff/jobs/security/beepsky_mom, /turf/open/floor/plating, @@ -7523,6 +7444,18 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"apT" = ( +/obj/structure/lattice/catwalk, +/obj/item/stack/marker_beacon{ + anchored = 1; + icon_state = "markerburgundy-on"; + light_power = 3; + light_range = 3; + name = "Docking Beacon"; + picked_color = "Burgundy" + }, +/turf/open/space/basic, +/area/space/nearstation) "apU" = ( /turf/open/floor/plating, /area/security/vacantoffice/b) @@ -7539,13 +7472,21 @@ /turf/open/floor/plating, /area/maintenance/fore) "apX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/crew_quarters/fitness) -"apY" = ( -/obj/structure/closet/secure_closet/personal, +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /turf/open/floor/carpet, /area/crew_quarters/dorms) +"apY" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "maintdiy"; + name = "Security Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "apZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -7553,12 +7494,9 @@ /turf/open/floor/wood, /area/lawoffice) "aqa" = ( -/obj/structure/table, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aqb" = ( /obj/structure/rack, /obj/item/storage/briefcase, @@ -7639,9 +7577,8 @@ /area/maintenance/fore/secondary) "aqk" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Dormitory APC"; areastring = "/area/crew_quarters/dorms"; + name = "Dormitory APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -7653,32 +7590,22 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "aql" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/structure/mirror{ + pixel_y = 32 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/sink{ + dir = 1; + pixel_y = 25 }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) -"aqm" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) +"aqm" = ( +/obj/structure/chair/sofa/right, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "aqn" = ( /obj/structure/bed, /obj/machinery/airalarm{ @@ -7698,11 +7625,25 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "aqo" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/fitness"; + name = "Fitness Room APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aqp" = ( /obj/structure/rack, /obj/item/clothing/suit/fire/firefighter, @@ -7727,24 +7668,45 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "aqr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"aqs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) -"aqs" = ( +"aqt" = ( +/obj/machinery/door/airlock{ + desc = "A small bathroom with a sink, toilet and shower."; + id_tag = "Bath3"; + name = "Bathroom" + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"aqu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/fitness) -"aqu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" }, -/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/crew_quarters/fitness) "aqv" = ( @@ -7788,26 +7750,47 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aqB" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aqC" = ( -/obj/machinery/computer/slot_machine{ - balance = 15; - money = 500 +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/chair/comfy/brown{ + dir = 4 }, -/obj/item/coin/iron, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/floor/wood, +/area/crew_quarters/dorms) "aqD" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/item/coin/gold, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/crew_quarters/dorms) "aqE" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/item/flashlight/lamp/green{ + pixel_x = -3; + pixel_y = 22 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 5 + }, +/obj/structure/dresser{ + desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; + name = "Dresser"; + pixel_y = 7 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"aqF" = ( +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "aqG" = ( /obj/docking_port/stationary/random{ dir = 4; @@ -7816,6 +7799,28 @@ }, /turf/open/space, /area/space/nearstation) +"aqH" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"aqI" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aqJ" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -7841,19 +7846,25 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/port/fore) +"aqN" = ( +/obj/structure/toilet{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/dorms) "aqO" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" + lootcount = 3; + name = "3maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/port/fore) "aqP" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/port/fore"; dir = 1; name = "Port Bow Maintenance APC"; - areastring = "/area/maintenance/port/fore"; pixel_x = -1; pixel_y = 26 }, @@ -7882,9 +7893,9 @@ /area/security/processing) "aqT" = ( /obj/machinery/power/apc{ + areastring = "/area/security/processing"; dir = 8; name = "Labor Shuttle Dock APC"; - areastring = "/area/security/processing"; pixel_x = -24 }, /obj/structure/cable, @@ -7893,6 +7904,14 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"aqU" = ( +/obj/structure/closet/secure_closet/personal{ + desc = "Swipe your ID on this locker to claim it. You can drag it around and use it as your own personal storage area. Very useful."; + name = "Personal ID-Locked Locker"; + pixel_y = 10 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "aqV" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -7961,6 +7980,13 @@ "arf" = ( /turf/closed/wall, /area/crew_quarters/dorms) +"arg" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "arh" = ( /obj/machinery/door/airlock/maintenance{ name = "Dormitories Maintenance"; @@ -7970,60 +7996,49 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "ari" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/wood, -/area/crew_quarters/dorms) -"arj" = ( -/turf/closed/wall, -/area/crew_quarters/fitness) -"ark" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/wood, -/area/crew_quarters/dorms) -"arl" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/light/small{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"arj" = ( +/obj/machinery/door/airlock{ + id_tag = "Room Two"; + name = "Room Seven - Luxury Suite" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"arm" = ( +/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"ark" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"arl" = ( +/obj/structure/sign/poster/official/ion_rifle, +/turf/closed/wall/r_wall, +/area/ai_monitored/security/armory) +"arm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) "arn" = ( -/obj/structure/closet/athletic_mixed, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aro" = ( /turf/open/floor/engine{ name = "Holodeck Projector Floor" @@ -8046,35 +8061,31 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "arr" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Dormitories Maintenance"; + req_access_txt = "12" }, /turf/open/floor/plating, -/area/maintenance/starboard/fore) +/area/maintenance/fore/secondary) "ars" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Starboard Bow Maintenance APC"; - areastring = "/area/maintenance/starboard/fore"; - pixel_y = 24 +/obj/item/flashlight/lamp/green{ + pixel_x = -3; + pixel_y = 22 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/dresser{ + desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; + name = "Dresser"; + pixel_y = 7 }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/floor/wood, +/area/crew_quarters/dorms) "art" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, -/obj/machinery/camera{ - c_tag = "Fore Starboard Solar Access" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aru" = ( /obj/structure/chair/stool, /turf/open/floor/plating, @@ -8099,11 +8110,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "ary" = ( -/obj/structure/closet, -/obj/item/coin/iron, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/turf/open/floor/wood, +/area/crew_quarters/dorms) "arz" = ( /obj/item/coin/gold, /obj/item/coin/iron, @@ -8112,11 +8123,26 @@ "arA" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/plasma, /turf/open/floor/plating, /area/maintenance/starboard/fore) "arB" = ( /turf/closed/wall/r_wall, /area/hallway/secondary/entry) +"arC" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"arD" = ( +/obj/item/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 27 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "arE" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/tile/yellow{ @@ -8204,14 +8230,27 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "arO" = ( -/obj/machinery/monkey_recycler, -/obj/item/reagent_containers/food/snacks/monkeycube, -/obj/item/reagent_containers/food/snacks/monkeycube, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/sofa, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "arP" = ( /turf/closed/wall, /area/maintenance/fore) +"arQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "arR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/table/wood, @@ -8235,7 +8274,7 @@ }, /obj/structure/filingcabinet/employment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/wood, @@ -8284,14 +8323,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "asb" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 5; + icon_state = "roomnum"; + name = "Room Number 7"; + pixel_y = 24 }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/chair/sofa/right, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel, @@ -8335,20 +8375,11 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "asg" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ +/obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "ash" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8381,23 +8412,29 @@ /turf/open/floor/plating, /area/security/vacantoffice/b) "ask" = ( -/obj/structure/dresser, +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" + }, /turf/open/floor/wood, /area/crew_quarters/dorms) "asl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plating, /area/security/vacantoffice/b) "asm" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/structure/closet/secure_closet/bar{ + req_access_txt = "25" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/gun/ballistic/revolver/doublebarrel, /turf/open/floor/wood, -/area/crew_quarters/dorms) +/area/crew_quarters/bar) "asn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plating, @@ -8414,69 +8451,41 @@ /turf/open/floor/plating, /area/maintenance/fore) "asp" = ( -/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/vending/wardrobe/bar_wardrobe, /turf/open/floor/wood, -/area/crew_quarters/dorms) +/area/crew_quarters/bar) "asq" = ( -/obj/machinery/camera{ - c_tag = "Fitness Room" +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 }, -/obj/structure/closet/masks, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/wood, +/area/crew_quarters/bar) "asr" = ( -/obj/structure/closet/boxinggloves, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/item/clothing/shoes/jackboots, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = -3; + pixel_y = 5 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "ass" = ( -/obj/structure/closet/lasertag/red, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "ast" = ( -/obj/structure/closet/lasertag/blue, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/airalarm{ + pixel_y = 23 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/structure/chair/sofa/left, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "asu" = ( /obj/structure/bed, /obj/machinery/button/door{ @@ -8496,6 +8505,9 @@ lootcount = 3; name = "3maintenance loot spawner" }, +/obj/structure/light_construct{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/starboard/fore) "asw" = ( @@ -8531,6 +8543,10 @@ "asC" = ( /turf/open/floor/plasteel/airless, /area/space/nearstation) +"asD" = ( +/obj/machinery/light, +/turf/open/floor/wood, +/area/crew_quarters/bar) "asE" = ( /turf/closed/wall, /area/hallway/secondary/entry) @@ -8538,6 +8554,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/construction/mining/aux_base) +"asG" = ( +/obj/machinery/camera{ + c_tag = "Bar South"; + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "asH" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/tile/yellow{ @@ -8582,40 +8605,30 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "asL" = ( -/obj/structure/bed, -/obj/machinery/button/door{ - id = "Dorm6"; - name = "Cabin Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/spawner/lootdrop/bedsheet, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/space/nearstation) "asM" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "1-2" }, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "2-4" }, -/obj/effect/turf_decal/tile/neutral{ +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"asN" = ( +/obj/machinery/light/small{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/machinery/camera{ + c_tag = "Fore Starboard Solar Access" }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"asN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "asO" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -8643,48 +8656,64 @@ /turf/open/floor/plating, /area/maintenance/fore) "asU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, /turf/open/floor/plasteel, /area/security/vacantoffice/b) "asV" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/fore"; + dir = 1; + name = "Starboard Bow Maintenance APC"; + pixel_y = 24 }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-8" }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "asW" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/structure/table/wood, +/obj/item/storage/box/evidence, +/obj/item/hand_labeler{ + pixel_x = 5 }, -/obj/structure/rack, -/obj/item/storage/briefcase, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/taperecorder, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "asX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "asY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" }, /turf/open/floor/plating, /area/crew_quarters/fitness) "asZ" = ( +/obj/structure/chair/sofa/left, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/vr_sleeper, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 + dir = 10 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -8725,23 +8754,23 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "atf" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/machinery/camera{ + c_tag = "Bar Storage" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/sink/kitchen{ + pixel_y = 28 }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/turf/open/floor/wood, +/area/crew_quarters/bar) "atg" = ( /obj/machinery/door/airlock{ id_tag = "Dorm4"; - name = "Dorm 4" + name = "Room Three" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/crew_quarters/dorms) "ath" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -8772,6 +8801,17 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"atk" = ( +/obj/machinery/light/small, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"atl" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "atm" = ( /turf/open/floor/wood, /area/crew_quarters/dorms) @@ -8816,7 +8856,13 @@ /turf/open/floor/plating, /area/security/vacantoffice/b) "att" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table/wood/fancy, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/reagent_containers/food/drinks/britcup{ + desc = "Kingston's personal cup."; + pixel_x = 5; + pixel_y = 5 + }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "atu" = ( @@ -8860,8 +8906,22 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/fore) +"atz" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/closet/wardrobe/black, +/obj/item/clothing/under/skirt/black, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/under/trendy_fit, +/obj/item/clothing/under/trendy_fit, +/obj/item/clothing/under/sundress, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "atA" = ( /obj/structure/table, +/obj/item/paicard, /turf/open/floor/plating, /area/maintenance/starboard/fore) "atB" = ( @@ -8957,13 +9017,19 @@ /turf/closed/wall, /area/maintenance/port/fore) "atQ" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm5"; - name = "Cabin 1" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/item/clothing/under/waiter, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/item/clothing/suit/straight_jacket, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "atR" = ( /obj/effect/landmark/carpspawn, /obj/structure/lattice, @@ -8973,10 +9039,15 @@ /turf/closed/wall, /area/space/nearstation) "atT" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck{ + pixel_y = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "atU" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -8986,44 +9057,48 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "atV" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 + dir = 4; + pixel_y = 5 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/chair/sofa{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "atW" = ( /obj/structure/chair/stool, /turf/open/floor/plating, /area/maintenance/port/fore) +"atX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating, +/area/space/nearstation) "atY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/security/vacantoffice/b) "atZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aua" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/bed, +/obj/machinery/button/door{ + id = "Dorm6"; + name = "Cabin Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/spawner/lootdrop/bedsheet, +/turf/open/floor/wood, +/area/crew_quarters/dorms) "aub" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/yellow, @@ -9043,6 +9118,12 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"aud" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "aue" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -9146,60 +9227,60 @@ /turf/open/floor/plating, /area/maintenance/fore) "aup" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm6"; - name = "Cabin 2" +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 9 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "auq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/vacantoffice/b) "aur" = ( -/obj/machinery/door/window/eastright{ - base_state = "left"; - dir = 8; - icon_state = "left"; - name = "Fitness Ring" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) +/obj/structure/table/wood/fancy/black, +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "aus" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "aut" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/machinery/door/airlock{ + id_tag = "Room One"; + name = "Room Six - Luxury Suite" }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "auu" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/wood, +/area/crew_quarters/dorms) "auv" = ( -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) +/turf/open/floor/wood, +/area/crew_quarters/dorms) "auw" = ( /obj/structure/bed, /obj/machinery/airalarm{ @@ -9219,54 +9300,79 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "aux" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"auy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"auy" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"auz" = ( -/obj/machinery/camera{ - c_tag = "Holodeck" - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"auA" = ( -/obj/machinery/light/small{ +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"auz" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"auA" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 4; + icon_state = "roomnum"; + name = "Room Number 3"; + pixel_x = -30; + pixel_y = -7 + }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "auB" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) "auC" = ( -/obj/machinery/light/small, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "auD" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -9328,6 +9434,21 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/electrical) +"auN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "auO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -9339,37 +9460,20 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "auR" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/closed/wall, +/area/crew_quarters/fitness) "auS" = ( -/obj/machinery/requests_console{ - department = "Crew Quarters"; - pixel_y = 30 - }, /obj/machinery/camera{ - c_tag = "Dormitory North" + c_tag = "Holodeck" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/airalarm{ + pixel_y = 24 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "auT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -9377,36 +9481,20 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "auU" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/components/binary/valve, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "auV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/port/fore) "auW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "auX" = ( @@ -9475,13 +9563,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "avg" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avh" = ( @@ -9490,18 +9572,18 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/power/apc{ + areastring = "/area/security/vacantoffice/b"; dir = 8; name = "Vacant Office B APC"; - areastring = "/area/security/vacantoffice/b"; pixel_x = -24 }, /turf/open/floor/plating, /area/maintenance/fore) "avi" = ( /obj/machinery/power/apc{ + areastring = "/area/lawoffice"; dir = 1; name = "Law Office APC"; - areastring = "/area/lawoffice"; pixel_y = 24 }, /obj/structure/cable{ @@ -9512,7 +9594,7 @@ /area/maintenance/fore) "avj" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable{ @@ -9533,43 +9615,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "avl" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avm" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avn" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avo" = ( @@ -9597,8 +9653,7 @@ pixel_y = 24 }, /obj/machinery/camera{ - c_tag = "Detective's Office"; - dir = 2 + c_tag = "Detective's Office" }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) @@ -9616,68 +9671,63 @@ /turf/open/floor/plating, /area/maintenance/fore) "avt" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/chair/sofa/left{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"avv" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"avw" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"avv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/meter, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"avw" = ( +/obj/machinery/button/door{ + id = "Room One"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "avx" = ( -/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"avy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) -"avy" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) "avz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/computer/holodeck{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/crew_quarters/fitness) "avA" = ( -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" }, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/crew_quarters/fitness) "avB" = ( /obj/effect/spawner/structure/window/reinforced, @@ -9687,17 +9737,20 @@ /turf/open/floor/plating, /area/ai_monitored/security/armory) "avC" = ( -/obj/structure/chair{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "avD" = ( -/obj/machinery/computer/holodeck{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "avE" = ( /obj/machinery/door/poddoor/preopen{ id = "maint3" @@ -9746,9 +9799,9 @@ /area/maintenance/department/electrical) "avL" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/department/electrical"; dir = 1; name = "Electrical Maintenance APC"; - areastring = "/area/maintenance/department/electrical"; pixel_y = 24 }, /obj/structure/cable{ @@ -9777,8 +9830,6 @@ }, /obj/item/multitool, /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29 }, @@ -9810,11 +9861,17 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "avR" = ( -/obj/structure/table/wood, -/obj/item/storage/firstaid/regular, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/structure/table/wood/poker, +/obj/item/clothing/mask/cigarette/cigar{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "avS" = ( /obj/item/wrench, /turf/open/floor/plating, @@ -9892,9 +9949,9 @@ /area/maintenance/fore) "awd" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/fore"; dir = 1; name = "Fore Maintenance APC"; - areastring = "/area/maintenance/fore"; pixel_y = 24 }, /obj/structure/cable{ @@ -10027,60 +10084,73 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "awo" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm3"; - name = "Dorm 3" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/structure/chair/comfy/black{ dir = 4 }, -/turf/open/floor/plasteel, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -29 + }, +/turf/open/floor/carpet, /area/crew_quarters/dorms) "awp" = ( -/obj/structure/table/wood, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/item/storage/pill_bottle/dice, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "awq" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "awr" = ( /turf/open/floor/plasteel, /area/crew_quarters/dorms) "aws" = ( -/obj/structure/table/wood, -/obj/item/coin/silver, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/fitness) +"awt" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"awt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 + dir = 4 }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "awu" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/wardrobe/mixed, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/skirt/purple, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "awv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 8; + icon_state = "roomnum"; + name = "Room Number 4"; + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "aww" = ( @@ -10097,48 +10167,62 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "awy" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) "awz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ - name = "Fitness" + name = "Holodeck Door" }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, /area/crew_quarters/fitness) "awA" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/airlock{ + id_tag = "Dorm5"; + name = "Room Four" }, -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "awB" = ( -/obj/effect/landmark/start/assistant, -/obj/machinery/vr_sleeper, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) "awC" = ( -/obj/structure/table, -/obj/item/paper/fluff/holodeck/disclaimer, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) "awD" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard/fore) "awE" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 20 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 20 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/item/reagent_containers/food/drinks/britcup, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "awF" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance{ @@ -10179,26 +10263,34 @@ /area/maintenance/starboard/fore) "awK" = ( /obj/structure/table/glass, -/obj/item/pen, +/obj/item/coin/silver, /turf/open/floor/plating, /area/maintenance/starboard/fore) "awL" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 +/obj/structure/table, +/obj/item/instrument/guitar{ + pixel_x = -7 }, +/obj/item/instrument/eguitar{ + pixel_x = 5 + }, +/obj/item/instrument/violin, +/obj/item/instrument/trombone, +/obj/item/instrument/saxophone, +/obj/item/instrument/piano_synth, +/obj/item/instrument/recorder, +/obj/item/instrument/accordion, /turf/open/floor/plating, /area/maintenance/starboard/fore) "awM" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 +/obj/machinery/button/door{ + id = "maintdiy"; + name = "Shutters Control Button"; + pixel_x = -6; + pixel_y = 24 }, /turf/open/floor/plating, -/area/maintenance/starboard/fore) +/area/crew_quarters/abandoned_gambling_den) "awN" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10294,6 +10386,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/entry) +"awX" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm6"; + name = "Room Five" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "awY" = ( /obj/machinery/light{ dir = 1 @@ -10357,6 +10457,15 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"axd" = ( +/obj/structure/closet, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "axe" = ( /obj/machinery/sleeper{ dir = 4 @@ -10558,12 +10667,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "axC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/sign/poster/official/enlist{ + pixel_y = 32 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) @@ -10574,12 +10682,16 @@ /turf/closed/wall, /area/maintenance/fore/secondary) "axE" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "axF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -10617,6 +10729,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"axJ" = ( +/obj/structure/piano{ + icon_state = "piano" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "axK" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -10624,128 +10742,189 @@ /turf/closed/wall, /area/maintenance/port/fore) "axL" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/wardrobe/grey, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/assistantformal, +/obj/machinery/camera{ + c_tag = "Dorms East - Holodeck"; + dir = 4 + }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "axM" = ( -/obj/structure/table/wood, -/obj/item/paicard, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "axN" = ( -/obj/structure/table/wood, -/obj/item/storage/crayons, -/turf/open/floor/plasteel, +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/carpet, /area/crew_quarters/dorms) "axO" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, +/obj/machinery/light/small, +/turf/open/floor/mineral/titanium/blue, /area/crew_quarters/dorms) "axP" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck{ - pixel_x = 2 +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/table/wood, +/obj/item/paicard, /obj/item/clothing/mask/balaclava{ pixel_x = -8; pixel_y = 8 }, +/obj/item/toy/cards/deck{ + pixel_x = 2 + }, +/obj/item/storage/crayons, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "axQ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"axR" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fitness" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"axS" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ +/obj/machinery/light{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) -"axT" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"axU" = ( -/obj/structure/window/reinforced, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) -"axV" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 1; + icon_state = "roomnum"; + name = "Room Number 2"; + pixel_x = -30; + pixel_y = -7 }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"axW" = ( -/obj/machinery/door/window/eastright{ - base_state = "left"; - icon_state = "left"; - name = "Fitness Ring" +"axR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/structure/window/reinforced, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) -"axX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"axY" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ +"axS" = ( +/obj/item/flashlight/lamp/green{ + pixel_x = -3; + pixel_y = 22 + }, +/obj/structure/dresser{ + desc = "There's plenty of clothes here to change into! It has a surprising amount of variety, too."; + name = "Dresser"; + pixel_y = 7 + }, +/turf/open/floor/plating, +/area/maintenance/port) +"axT" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm3"; + name = "Room Two" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"axU" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + dir = 6; + icon_state = "roomnum"; + name = "Room Number 5"; + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"axZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" +/area/crew_quarters/dorms) +"axV" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"axW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, /turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"axX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/carpet, +/area/crew_quarters/dorms) +"axY" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/closet/toolcloset, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"axZ" = ( +/obj/machinery/light/small{ + dir = 1; + light_color = "#ffc1c1" + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel, /area/crew_quarters/fitness) "aya" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "ayb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/chair{ + dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -10821,9 +11000,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "ayn" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "ayo" = ( @@ -10997,14 +11174,6 @@ /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "ayM" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/item/clothing/head/welding, -/turf/open/floor/plasteel, -/area/ai_monitored/storage/eva) -"ayN" = ( /obj/structure/rack, /obj/machinery/light{ dir = 1 @@ -11014,8 +11183,15 @@ /obj/item/flashlight, /obj/item/flashlight, /obj/item/flashlight, +/obj/item/clothing/glasses/welding, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) +"ayN" = ( +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel, +/area/ai_monitored/storage/eva) "ayO" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical{ @@ -11029,9 +11205,9 @@ /area/ai_monitored/storage/eva) "ayP" = ( /obj/machinery/power/apc{ + areastring = "/area/ai_monitored/storage/eva"; dir = 1; name = "EVA Storage APC"; - areastring = "/area/ai_monitored/storage/eva"; pixel_y = 24 }, /obj/structure/cable{ @@ -11114,38 +11290,45 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "ayY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/obj/structure/sign/poster/official/cohiba_robusto_ad, +/turf/closed/wall, +/area/lawoffice) +"ayZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) -"ayZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_x = -32 }, -/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aza" = ( -/obj/machinery/light, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/vr_sleeper{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/fitness) "azb" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 2 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/fitness) "azc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -11159,47 +11342,68 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "azd" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/vr_sleeper{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aze" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"azf" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"azg" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) -"azh" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/vr_sleeper, /obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/crew_quarters/fitness) +"aze" = ( +/obj/machinery/vr_sleeper{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/fitness) +"azf" = ( +/obj/structure/grille/broken, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/window{ + dir = 4 + }, +/obj/structure/window, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/fore) +"azg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "holoprivacy"; + name = "Holodeck Privacy"; + pixel_y = 24 + }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"azh" = ( +/obj/machinery/door/airlock{ + name = "Instrument Storage" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/fore) "azi" = ( /obj/machinery/door/airlock/maintenance{ name = "Garden Maintenance"; @@ -11209,61 +11413,81 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "azj" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -29 +/obj/structure/closet{ + name = "Holodeck Outfits" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/item/clothing/under/trek/Q, +/obj/item/clothing/under/trek/command/next, +/obj/item/clothing/under/trek/command/next, +/obj/item/clothing/under/trek/command/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/engsec/next, +/obj/item/clothing/under/trek/medsci/next, +/obj/item/clothing/under/trek/medsci/next, +/obj/item/clothing/under/trek/medsci/next, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/gladiator, +/obj/item/clothing/under/gladiator, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "azk" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "azl" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"azm" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"azn" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) -"azo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/area/crew_quarters/dorms) +"azm" = ( +/obj/machinery/shower{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) +"azn" = ( +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"azo" = ( +/obj/machinery/shower{ + dir = 8; + pixel_y = -4 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) "azp" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) "azq" = ( @@ -11466,6 +11690,27 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"azP" = ( +/obj/structure/table/wood, +/obj/machinery/requests_console{ + department = "Theatre"; + name = "theatre RC"; + pixel_x = -32 + }, +/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/toy/dummy, +/obj/item/lipstick/random{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/lipstick/random{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) "azQ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11504,12 +11749,9 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "azT" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 2 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/landmark/event_spawn, +/turf/closed/wall, +/area/crew_quarters/fitness) "azU" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11523,27 +11765,38 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "azV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/machinery/vr_sleeper{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "azW" = ( /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "azX" = ( -/obj/machinery/door/airlock{ - name = "Unisex Showers" +/obj/machinery/vr_sleeper{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/green{ + dir = 8 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/crew_quarters/fitness) "azY" = ( /obj/structure/table, /obj/item/radio/off, @@ -11563,27 +11816,26 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aAb" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm2"; - name = "Dorm 2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "aAc" = ( /obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aAd" = ( -/obj/machinery/light_switch{ - pixel_y = -25 +/obj/machinery/camera{ + c_tag = "Dorms West" }, -/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ - dir = 8 + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) @@ -11595,46 +11847,51 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aAf" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/vr_sleeper{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/crew_quarters/fitness) "aAg" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -29 +/obj/machinery/vr_sleeper{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/crew_quarters/fitness) "aAh" = ( /turf/closed/wall, /area/crew_quarters/toilet) "aAi" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/turf/open/floor/plating, +/area/crew_quarters/fitness) "aAj" = ( /obj/structure/cable{ icon_state = "1-4" }, /obj/machinery/power/apc{ - dir = 2; - name = "Security Checkpoint APC"; areastring = "/area/security/checkpoint/auxiliary"; + name = "Security Checkpoint APC"; pixel_x = 1; pixel_y = -24 }, @@ -11643,119 +11900,77 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aAk" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/structure/closet/athletic_mixed, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aAl" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/structure/closet/boxinggloves, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aAm" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/crew_quarters/fitness) "aAn" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/light_switch{ - pixel_y = -25 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/crew_quarters/dorms) "aAo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "aAp" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/closet{ + name = "Suit Closet" }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/item/clothing/under/suit_jacket/white, +/obj/item/clothing/under/suit_jacket/tan, +/obj/item/clothing/under/suit_jacket/red, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/under/suit_jacket/green, +/obj/item/clothing/under/suit_jacket/female, +/obj/item/clothing/under/suit_jacket/checkered, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/burgundy, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/under/lawyer/black, +/obj/item/clothing/under/lawyer/blacksuit, +/obj/item/clothing/under/lawyer/blue, +/obj/item/clothing/under/lawyer/bluesuit, +/obj/item/clothing/under/lawyer/female, +/obj/item/clothing/under/lawyer/purpsuit, +/obj/item/clothing/under/lawyer/really_black, +/obj/item/clothing/under/lawyer/red, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"aAq" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"aAr" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"aAs" = ( +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"aAr" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aAs" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "aAt" = ( /obj/machinery/door/poddoor/preopen{ id = "maint2" @@ -11763,12 +11978,12 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aAu" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/machinery/door/poddoor/preopen{ id = "maint2" }, -/obj/structure/cable{ - icon_state = "1-2" - }, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aAv" = ( @@ -11780,9 +11995,9 @@ /area/maintenance/starboard/fore) "aAw" = ( /obj/machinery/power/apc{ + areastring = "/area/hydroponics/garden"; dir = 4; name = "Garden APC"; - areastring = "/area/hydroponics/garden"; pixel_x = 27; pixel_y = 2 }, @@ -11796,9 +12011,7 @@ /turf/open/floor/plasteel, /area/hydroponics/garden) "aAy" = ( -/obj/machinery/power/smes{ - charge = 0 - }, +/obj/machinery/power/smes, /obj/structure/cable{ icon_state = "0-4" }, @@ -11825,9 +12038,7 @@ /turf/closed/wall, /area/maintenance/department/electrical) "aAB" = ( -/obj/machinery/power/smes{ - charge = 0 - }, +/obj/machinery/power/smes, /obj/structure/cable{ icon_state = "0-8" }, @@ -11900,9 +12111,8 @@ /area/hydroponics/garden) "aAL" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Primary Tool Storage APC"; areastring = "/area/storage/primary"; + name = "Primary Tool Storage APC"; pixel_x = 1; pixel_y = -24 }, @@ -11914,6 +12124,16 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"aAM" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aAN" = ( /obj/structure/cable{ icon_state = "2-8" @@ -11989,18 +12209,11 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aAX" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness) "aAY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -12008,10 +12221,10 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aAZ" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/urinal{ + pixel_y = 32 }, -/turf/open/floor/plasteel/freezer, +/turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet) "aBa" = ( /turf/closed/wall/r_wall, @@ -12084,9 +12297,9 @@ /area/maintenance/fore) "aBi" = ( /obj/machinery/power/apc{ + areastring = "/area/gateway"; dir = 8; name = "Gateway APC"; - areastring = "/area/gateway"; pixel_x = -24; pixel_y = -1 }, @@ -12126,7 +12339,6 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aBm" = ( -/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -12216,26 +12428,41 @@ /turf/open/floor/plasteel, /area/hydroponics/garden) "aBx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/closed/wall, -/area/crew_quarters/toilet) +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/hydroponics) "aBy" = ( -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aBz" = ( -/obj/machinery/shower{ +/obj/machinery/camera{ + c_tag = "Library North" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aBA" = ( -/obj/machinery/shower{ - dir = 8 +/obj/structure/chair/sofa/right, +/obj/machinery/light{ + dir = 1; + light_color = "#c1caff" }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/wood, +/area/library) +"aBz" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/sofa/left, +/turf/open/floor/wood, +/area/library) +"aBA" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/wood, +/area/library) "aBB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, @@ -12251,6 +12478,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aBD" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/wood, +/area/library) "aBE" = ( /obj/item/clothing/under/rank/mailman, /obj/item/clothing/head/mailman, @@ -12300,9 +12533,12 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aBM" = ( -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, -/area/hydroponics/garden) +/obj/structure/sign/poster/official/nanomichi_ad{ + pixel_y = 32 + }, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) "aBN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -12359,9 +12595,9 @@ /area/ai_monitored/nuke_storage) "aBU" = ( /obj/machinery/power/apc{ + areastring = "/area/ai_monitored/nuke_storage"; dir = 1; name = "Vault APC"; - areastring = "/area/ai_monitored/nuke_storage"; pixel_y = 25 }, /obj/structure/cable{ @@ -12483,21 +12719,27 @@ /turf/open/floor/carpet, /area/crew_quarters/cryopod) "aCe" = ( -/obj/effect/landmark/xeno_spawn, -/obj/item/bikehorn/rubberducky, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/official/do_not_question{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "aCf" = ( -/obj/machinery/camera{ - c_tag = "Theatre Storage" +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 }, -/turf/open/floor/plasteel/white/side{ - dir = 4 +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/area/crew_quarters/theatre) +/obj/structure/sign/poster/official/obey{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "aCg" = ( /obj/structure/cable{ icon_state = "4-8" @@ -12505,11 +12747,14 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aCh" = ( -/obj/machinery/vending/autodrobe, -/turf/open/floor/plasteel/white/side{ - dir = 4 +/obj/machinery/shower{ + dir = 8; + pixel_y = -4 }, -/area/crew_quarters/theatre) +/obj/effect/landmark/xeno_spawn, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) "aCi" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -12536,32 +12781,48 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCm" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 +/obj/item/radio/intercom{ + pixel_y = 25 }, -/obj/structure/mirror{ - pixel_x = -28 +/obj/machinery/camera{ + c_tag = "Theatre Stage" }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aCn" = ( -/obj/structure/urinal{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aCo" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/structure/chair/comfy/brown{ dir = 4 }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aCn" = ( +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 20 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 20 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aCo" = ( +/obj/structure/closet{ + name = "Costume Closet" + }, +/obj/item/clothing/head/russobluecamohat, +/obj/item/clothing/head/russobluecamohat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/head/russofurhat, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/under/mw2_russian_para, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/shoes/jackboots, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCp" = ( @@ -12578,19 +12839,11 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "aCq" = ( -/obj/structure/table/wood, -/obj/machinery/requests_console{ - department = "Theatre"; - departmentType = 0; - name = "theatre RC"; - pixel_x = -32 - }, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/toy/dummy, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) +/obj/structure/closet/lasertag/red, +/obj/item/clothing/under/pj/red, +/obj/item/clothing/under/pj/red, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aCr" = ( /turf/closed/wall, /area/crew_quarters/theatre) @@ -12614,30 +12867,53 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) "aCv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 + dir = 5 }, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) "aCw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 + dir = 4 }, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, /turf/open/floor/plating, /area/crew_quarters/fitness) +"aCx" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aCy" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aCz" = ( /obj/structure/window/reinforced{ dir = 8 @@ -12648,18 +12924,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCA" = ( -/obj/structure/grille/broken, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/chair/comfy/brown{ + dir = 1 }, -/obj/structure/window{ - dir = 4 - }, -/obj/structure/window, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/starboard/fore) +/turf/open/floor/wood, +/area/library) "aCB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -12789,6 +13058,13 @@ "aCR" = ( /turf/closed/wall, /area/chapel/main) +"aCS" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/library) "aCT" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -12800,6 +13076,23 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"aCU" = ( +/obj/machinery/photocopier{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/open/floor/wood, +/area/library) +"aCV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/official/obey{ + pixel_x = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "aCW" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/spawner/lootdrop/maintenance, @@ -12846,7 +13139,6 @@ pixel_y = 5 }, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/plasteel, @@ -12857,7 +13149,6 @@ dir = 1 }, /obj/item/radio/intercom{ - broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -12900,9 +13191,14 @@ /turf/open/floor/plasteel, /area/hydroponics/garden) "aDh" = ( -/obj/machinery/vending/assist, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/sign/poster/official/space_cops{ + pixel_x = -32 + }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/hallway/primary/fore) "aDi" = ( /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, @@ -12927,7 +13223,6 @@ }, /obj/machinery/requests_console{ department = "Tool Storage"; - departmentType = 0; pixel_y = 30 }, /turf/open/floor/plasteel, @@ -12954,7 +13249,6 @@ /obj/item/assembly/signaler, /obj/item/assembly/signaler, /obj/item/radio/intercom{ - broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -13011,6 +13305,10 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) +"aDu" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -13073,9 +13371,7 @@ /area/ai_monitored/storage/eva) "aDB" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aDC" = ( @@ -13099,9 +13395,7 @@ c_tag = "EVA Storage"; dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aDF" = ( @@ -13112,38 +13406,33 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aDG" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/door/poddoor/shutters/preopen{ + desc = "Privacy shutters for the Private Study. Stops people spying in on your game."; + id = "PrivateStudy1"; + name = "Private Study Privacy Shutters" }, -/obj/machinery/camera{ - c_tag = "Dormitory South"; - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/effect/spawner/structure/window, +/turf/open/floor/wood, +/area/library) "aDH" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/item/folder/white, -/obj/item/stamp/rd{ - pixel_x = 3; - pixel_y = -2 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/heads/hor) +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/item/pen/fountain/captain, +/turf/open/floor/carpet, +/area/crew_quarters/heads/captain) "aDI" = ( /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) +"aDJ" = ( +/obj/machinery/door/airlock{ + desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; + id_tag = "PrivateStudy"; + name = "Private Study" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/wood, +/area/library) "aDK" = ( /obj/machinery/door/airlock/public/glass{ name = "Cryogenics " @@ -13156,126 +13445,140 @@ /turf/open/floor/plasteel, /area/crew_quarters/cryopod) "aDL" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aDM" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aDN" = ( -/obj/machinery/light/small, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aDO" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aDP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aDQ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aDR" = ( -/obj/structure/table/wood, -/obj/structure/mirror{ - pixel_x = -28 - }, -/obj/item/lipstick/random{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/lipstick/random{ - pixel_x = -2; - pixel_y = -2 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) -"aDS" = ( /obj/machinery/door/airlock{ - name = "Unisex Showers" + desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; + id_tag = "PrivateStudy"; + name = "Private Study" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/library) +"aDM" = ( +/obj/structure/chair/sofa/right, +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aDN" = ( +/obj/structure/chair/sofa, +/obj/structure/window{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aDO" = ( +/obj/structure/chair/sofa/left, +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aDP" = ( +/obj/structure/chair/comfy/brown{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aDR" = ( +/obj/structure/closet/lasertag/blue, +/obj/item/clothing/under/pj/blue, +/obj/item/clothing/under/pj/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"aDS" = ( +/obj/machinery/light/small{ + dir = 4; + light_color = "#d8b1b1" }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDT" = ( -/obj/machinery/light/small, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/table/wood/fancy, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 5 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/item/reagent_containers/food/snacks/burger/plain, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDU" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 9 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDV" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/table/wood/fancy, +/obj/machinery/light, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 20 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = 3; + pixel_y = 20 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/holopad, +/obj/machinery/camera{ + c_tag = "Dorms Central" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aDX" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/chair/sofa{ + dir = 1 + }, +/obj/structure/window, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aDY" = ( -/obj/structure/chair/stool, -/obj/effect/landmark/start/mime, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/white/side{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 }, -/area/crew_quarters/theatre) +/obj/structure/mirror{ + pixel_x = 25 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aDZ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -13304,29 +13607,17 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aEb" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Theatre Maintenance"; - req_access_txt = "46" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet"; + pixel_y = 15 }, /turf/open/floor/plating, -/area/maintenance/starboard/fore) +/area/maintenance/port) "aEc" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white/side{ - dir = 4 - }, -/area/crew_quarters/theatre) +/obj/structure/chair/wood/wings, +/turf/open/floor/plating, +/area/maintenance/port) "aEd" = ( /obj/structure/cable{ icon_state = "4-8" @@ -13360,9 +13651,8 @@ dir = 4 }, /obj/machinery/power/apc{ - dir = 2; - name = "Chapel APC"; areastring = "/area/chapel/main"; + name = "Chapel APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -13424,11 +13714,121 @@ /obj/structure/fans/tiny, /turf/open/floor/plating, /area/chapel/main) +"aEo" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aEp" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/flora/ausbushes/brflowers, +/obj/effect/spawner/structure/window, +/turf/open/floor/grass, +/area/crew_quarters/bar) +"aEq" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aEr" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, +/obj/structure/table, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aEs" = ( +/obj/machinery/vending/cola/red, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"aEt" = ( +/obj/machinery/computer/arcade/minesweeper, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aEu" = ( +/obj/machinery/computer/arcade/battle, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aEv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/closet/wardrobe/pjs, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/accessory/maidapron, +/obj/item/clothing/accessory/maidapron, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"aEw" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) +"aEx" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/that, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) +"aEy" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -9; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = -3 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = -9 + }, +/obj/item/sharpener{ + pixel_x = 10 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "aEz" = ( /obj/machinery/power/apc{ + areastring = "/area/hallway/secondary/entry"; dir = 4; name = "Entry Hall APC"; - areastring = "/area/hallway/secondary/entry"; pixel_x = 24 }, /obj/structure/cable, @@ -13685,97 +14085,68 @@ /turf/closed/wall/r_wall, /area/ai_monitored/storage/eva) "aFd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/table/wood, +/obj/item/instrument/guitar{ + pixel_x = -7 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/item/instrument/eguitar{ + pixel_x = 5 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) +/obj/item/instrument/violin, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aFe" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/machinery/door/airlock{ + id_tag = "Dorm2"; + name = "Room One" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) -"aFf" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aFg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall, -/area/crew_quarters/toilet) -"aFh" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) +"aFf" = ( +/obj/structure/piano{ + icon_state = "piano" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aFi" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Dormitory Bathrooms APC"; - areastring = "/area/crew_quarters/toilet"; - pixel_x = 26 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aFj" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aFg" = ( +/obj/structure/chair/comfy/black{ dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aFh" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aFi" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aFj" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/britcup, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aFk" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/area/crew_quarters/bar) "aFl" = ( /obj/machinery/light/small{ dir = 8 @@ -13808,12 +14179,17 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aFp" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/door/window/southright{ + name = "Bar Door"; + req_one_access_txt = "25;28" }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aFq" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -13846,6 +14222,20 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aFt" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 32 + }, +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/rag, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aFu" = ( /turf/closed/wall, /area/library) @@ -13871,15 +14261,14 @@ /area/maintenance/starboard/fore) "aFy" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Chapel Office APC"; areastring = "/area/chapel/office"; + name = "Chapel Office APC"; pixel_y = -24 }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/chapel/office) +/area/maintenance/starboard/fore) "aFz" = ( /turf/open/floor/plasteel/dark, /area/chapel/main) @@ -13899,6 +14288,36 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/chapel/main) +"aFC" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/bluecherrycupcake{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aFD" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aFE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 23 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"aFF" = ( +/obj/structure/chair/sofa{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aFG" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -14044,7 +14463,9 @@ /turf/open/floor/plasteel, /area/storage/primary) "aFS" = ( -/obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, /turf/open/floor/plasteel, /area/storage/primary) "aFT" = ( @@ -14054,9 +14475,8 @@ /turf/open/floor/plasteel, /area/storage/primary) "aFU" = ( -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/chair/stool{ + pixel_y = 8 }, /turf/open/floor/plasteel, /area/storage/primary) @@ -14075,8 +14495,6 @@ /area/gateway) "aFX" = ( /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30 }, @@ -14168,7 +14586,7 @@ /area/ai_monitored/nuke_storage) "aGf" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -14191,39 +14609,48 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) "aGk" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/plating, +/area/space/nearstation) "aGl" = ( -/obj/machinery/light_switch{ - pixel_x = 27 +/obj/structure/closet/crate, +/obj/item/book/manual/wiki/telescience, +/obj/item/book/manual/wiki/engineering_guide, +/obj/item/book/manual/wiki/engineering_construction, +/obj/item/book/manual/wiki/atmospherics, +/obj/item/book/manual/wiki/detective, +/obj/item/book/manual/wiki/tcomms, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/obj/item/book/manual/wiki/experimentor, +/obj/item/book/manual/wiki/research_and_development, +/obj/item/book/manual/wiki/robotics_cyborgs, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/book/manual/wiki/medicine, +/obj/item/book/manual/wiki/medical_cloning, +/obj/item/book/manual/wiki/infections, +/obj/item/book/manual/ripley_build_and_repair, +/obj/item/book/manual/hydroponics_pod_people, +/obj/item/book/manual/wiki/toxins, +/obj/item/book/manual/wiki/grenades, +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "A Simpleton's Guide to Safe-cracking with Stethoscopes" }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/wood, +/area/library) "aGm" = ( -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/hydroponics) "aGn" = ( -/obj/structure/toilet{ - pixel_y = 8 +/obj/effect/turf_decal/stripes/corner{ + dir = 1 }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/landmark/blobstart, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/plasteel, +/area/hydroponics) "aGo" = ( /obj/structure/table, /obj/item/stack/sheet/rglass{ @@ -14243,12 +14670,11 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aGp" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/machinery/recharge_station, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/turf/open/floor/plasteel, +/area/hydroponics) "aGq" = ( /obj/item/stack/sheet/plasteel{ amount = 10 @@ -14300,28 +14726,13 @@ /turf/closed/wall, /area/crew_quarters/theatre) "aGw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/closet/secure_closet/freezer/cream_pie, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/obj/machinery/seed_extractor, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aGx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/crew_quarters/toilet) +/obj/machinery/biogenerator, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aGy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14479,6 +14890,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aGK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "aGL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -14520,15 +14937,9 @@ /turf/closed/wall, /area/chapel/office) "aGP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/vending/hydronutrients, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aGQ" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -14541,6 +14952,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aGR" = ( +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "aGS" = ( /obj/structure/cable{ icon_state = "2-8" @@ -14632,17 +15049,33 @@ /area/hallway/secondary/entry) "aHb" = ( /obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 }, -/obj/item/stack/packageWrap, -/turf/open/floor/wood, -/area/library) +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/pen/fountain, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/pen/fourcolor, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aHc" = ( -/obj/machinery/vending/games, -/turf/open/floor/wood, -/area/library) +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel, +/area/hydroponics) "aHd" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -14668,8 +15101,7 @@ pixel_y = 28 }, /obj/machinery/camera{ - c_tag = "Chapel Office"; - dir = 2 + c_tag = "Chapel Office" }, /turf/open/floor/plasteel/grimy, /area/chapel/office) @@ -14750,6 +15182,34 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/chapel/main) +"aHr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"aHs" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) +"aHt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aHu" = ( /obj/machinery/status_display{ pixel_x = 32 @@ -14828,12 +15288,12 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/eva) "aHD" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/structure/chair/comfy/beige{ + dir = 8 }, /obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel, -/area/storage/primary) +/turf/open/floor/plasteel/grimy, +/area/hallway/secondary/entry) "aHE" = ( /obj/structure/table, /obj/item/weldingtool, @@ -15000,38 +15460,67 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "aHU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/structure/extinguisher_cabinet{ + pixel_y = -30 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aHV" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aHW" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aHX" = ( +/obj/machinery/light{ dir = 1 }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = -9 }, -/obj/structure/mirror{ - pixel_x = -28 +/obj/item/reagent_containers/food/condiment/peppermill{ + dir = 1; + pixel_x = -3 }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aHV" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -9; + pixel_y = 9 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aHW" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 9 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) -"aHX" = ( -/obj/machinery/door/airlock{ - name = "Unit B" +/obj/item/reagent_containers/food/condiment/pack/ketchup{ + pixel_x = 5 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet) +/obj/item/reagent_containers/food/condiment/pack/ketchup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/food/condiment/pack/ketchup{ + pixel_x = 5 + }, +/obj/item/reagent_containers/food/condiment/pack/hotsauce{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/condiment/pack/hotsauce{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/condiment/pack/mustard{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/condiment/pack/mustard{ + pixel_x = 10 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aHY" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -15039,23 +15528,12 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aHZ" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/closet/crate/wooden/toy, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/poster/contraband/fun_police{ + pixel_x = 32 }, /turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/area/hallway/primary/fore) "aIa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -15065,9 +15543,9 @@ /area/maintenance/starboard/fore) "aIb" = ( /obj/machinery/power/apc{ + areastring = "/area/crew_quarters/theatre"; dir = 8; name = "Theatre APC"; - areastring = "/area/crew_quarters/theatre"; pixel_x = -25 }, /obj/structure/cable, @@ -15078,9 +15556,8 @@ /area/maintenance/starboard/fore) "aIc" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Bar APC"; areastring = "/area/crew_quarters/bar"; + name = "Bar APC"; pixel_y = -24 }, /obj/structure/cable, @@ -15120,18 +15597,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/crew_quarters/bar) "aIh" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Kitchen APC"; areastring = "/area/crew_quarters/kitchen"; + name = "Kitchen APC"; pixel_y = -24 }, /obj/structure/cable, @@ -15140,6 +15612,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aIi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aIj" = ( /obj/structure/cable{ icon_state = "4-8" @@ -15190,9 +15668,8 @@ /area/maintenance/starboard/fore) "aIn" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Hydroponics APC"; areastring = "/area/hydroponics"; + name = "Hydroponics APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -15219,21 +15696,15 @@ /turf/closed/wall, /area/hydroponics) "aIr" = ( -/obj/structure/filingcabinet, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/library) +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aIs" = ( -/obj/structure/chair/office/dark, -/obj/machinery/camera{ - c_tag = "Library North"; - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, +/obj/structure/chair/comfy/brown, /turf/open/floor/wood, -/area/library) +/area/crew_quarters/bar) "aIt" = ( /turf/open/floor/wood, /area/library) @@ -15253,16 +15724,11 @@ /turf/open/floor/wood, /area/library) "aIw" = ( -/obj/structure/chair/office/dark, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 + dir = 9 }, /turf/open/floor/wood, -/area/library) +/area/crew_quarters/bar) "aIx" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -15273,29 +15739,35 @@ /turf/open/floor/wood, /area/library) "aIy" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/stack/packageWrap, +/obj/item/pen/fourcolor, +/turf/open/floor/wood, +/area/library) "aIz" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/grimy, /area/chapel/office) "aIA" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/storage/crayons, -/turf/open/floor/plasteel/grimy, -/area/chapel/office) -"aIB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/bodycontainer/crematorium{ id = "crematoriumChapel" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/office) +"aIB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/chapel/office) "aIC" = ( @@ -15319,6 +15791,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/security/warden) +"aIG" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aIH" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -15370,8 +15851,7 @@ /area/storage/primary) "aIO" = ( /obj/machinery/camera{ - c_tag = "Arrivals Lounge"; - dir = 2 + c_tag = "Arrivals Lounge" }, /obj/machinery/light{ dir = 1 @@ -15405,7 +15885,7 @@ /obj/item/reagent_containers/glass/bucket, /obj/item/plant_analyzer, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/green, @@ -15419,8 +15899,6 @@ /obj/structure/table/glass, /obj/item/plant_analyzer, /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29 }, @@ -15580,12 +16058,13 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aJk" = ( -/obj/machinery/door/airlock{ - name = "Theatre Backstage"; - req_access_txt = "46" +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel, -/area/crew_quarters/theatre) +/area/crew_quarters/dorms) "aJl" = ( /obj/structure/tank_dispenser/oxygen, /obj/machinery/light{ @@ -15597,12 +16076,11 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "aJm" = ( -/obj/structure/sink/kitchen{ - pixel_y = 28 +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aJn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -15612,8 +16090,7 @@ dir = 1 }, /obj/machinery/camera{ - c_tag = "Central Hallway North"; - dir = 2 + c_tag = "Central Hallway North" }, /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -15685,8 +16162,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aJv" = ( -/obj/machinery/vending/cola/random, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/robust_softdrinks{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, /area/hallway/primary/central) "aJw" = ( /turf/closed/wall, @@ -15706,6 +16192,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"aJz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "aJA" = ( /obj/machinery/door/airlock/maintenance{ name = "Kitchen Maintenance"; @@ -15737,13 +16227,12 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aJE" = ( -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/gun/ballistic/revolver/doublebarrel, -/obj/structure/table/wood, -/obj/item/stack/spacecash/c10, -/obj/item/stack/spacecash/c100, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aJF" = ( /obj/machinery/newscaster{ pixel_x = 30 @@ -15770,9 +16259,6 @@ /area/chapel/office) "aJH" = ( /obj/machinery/door/window/southleft{ - base_state = "left"; - dir = 2; - icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25" }, @@ -15783,11 +16269,11 @@ /turf/closed/wall, /area/crew_quarters/kitchen) "aJJ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/obj/structure/table/wood, +/obj/item/folder/yellow, +/obj/item/pen/blue, +/turf/open/floor/wood, +/area/library) "aJK" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -15795,12 +16281,8 @@ location = "Kitchen" }, /obj/structure/plasticflaps/opaque, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/crew_quarters/kitchen) "aJL" = ( /obj/machinery/navbeacon{ @@ -15809,30 +16291,26 @@ location = "Hydroponics" }, /obj/structure/plasticflaps/opaque, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, -/area/hydroponics) -"aJM" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp{ - pixel_y = 10 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/grimy, -/area/chapel/office) -"aJN" = ( -/obj/structure/table, -/obj/item/book/manual/hydroponics_pod_people, -/obj/item/paper/guides/jobs/hydroponics, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hydroponics) +"aJM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/dark, +/area/chapel/office) +"aJN" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/sign/departments/security{ + pixel_x = -32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "aJO" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -15840,30 +16318,55 @@ /area/hydroponics) "aJP" = ( /obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/item/pen, -/turf/open/floor/wood, -/area/library) -"aJQ" = ( -/obj/structure/chair/office/dark{ +/obj/item/flashlight/lamp{ + pixel_y = 10 + }, +/obj/structure/disposalpipe/segment, +/obj/item/nullrod, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/wood, -/area/library) -"aJR" = ( -/obj/structure/chair/office/dark{ +/turf/open/floor/plasteel/grimy, +/area/chapel/office) +"aJQ" = ( +/obj/machinery/light{ dir = 8 }, -/turf/open/floor/wood, -/area/library) +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aJR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aJS" = ( /obj/structure/table/wood, /obj/structure/disposalpipe/segment, +/obj/item/paicard, /turf/open/floor/wood, /area/library) "aJT" = ( /obj/structure/table/wood, -/obj/item/nullrod, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/storage/crayons, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15971,9 +16474,9 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ + areastring = "/area/construction/mining/aux_base"; dir = 8; name = "Auxillary Base Construction APC"; - areastring = "/area/construction/mining/aux_base"; pixel_x = -24 }, /obj/structure/cable{ @@ -15984,11 +16487,33 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"aKg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aKh" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aKi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aKj" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 2 - }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "aKk" = ( @@ -16028,22 +16553,24 @@ /turf/open/floor/plating, /area/storage/primary) "aKq" = ( -/obj/item/radio/intercom{ - pixel_y = 25 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, -/obj/machinery/camera{ - c_tag = "Theatre Stage"; - dir = 2 - }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aKr" = ( -/obj/machinery/airalarm{ - dir = 2; - pixel_y = 24 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aKs" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/structure/window, @@ -16182,14 +16709,22 @@ /turf/open/floor/plasteel, /area/hydroponics) "aKJ" = ( -/obj/machinery/light_switch{ - pixel_y = 28 +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -29 }, -/obj/machinery/light{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aKK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/secure_closet/hydroponics, @@ -16212,45 +16747,46 @@ /turf/open/floor/plasteel, /area/hydroponics) "aKM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aKN" = ( -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) -"aKO" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) +"aKN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/chair/comfy/brown, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aKO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/chair/comfy/black, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aKP" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/dorms) "aKQ" = ( /obj/machinery/reagentgrinder, /obj/structure/table/wood, @@ -16260,11 +16796,13 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "aKS" = ( -/obj/machinery/camera{ - c_tag = "Bar Storage" +/obj/effect/turf_decal/tile/red, +/obj/structure/sign/departments/security{ + pixel_x = 32; + pixel_y = -32 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "aKT" = ( /obj/structure/closet/secure_closet/freezer/meat, /turf/open/floor/plasteel/showroomfloor, @@ -16275,9 +16813,6 @@ /area/hydroponics) "aKV" = ( /obj/machinery/door/window/southleft{ - base_state = "left"; - dir = 2; - icon_state = "left"; name = "Kitchen Delivery"; req_access_txt = "28" }, @@ -16317,8 +16852,9 @@ c_tag = "Chapel Crematorium"; dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/bodycontainer/morgue, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 }, /turf/open/floor/plasteel/dark, /area/chapel/office) @@ -16387,11 +16923,9 @@ /turf/open/floor/wood, /area/library) "aLh" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/wood, -/area/library) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/crew_quarters/toilet) "aLi" = ( /obj/structure/chair/comfy/beige, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -16467,6 +17001,23 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main) +"aLs" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Dorms South"; + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aLt" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -16483,7 +17034,7 @@ /area/construction/mining/aux_base) "aLv" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -16550,9 +17101,9 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ - name = "Port Hall APC"; areastring = "/area/hallway/primary/port"; dir = 1; + name = "Port Hall APC"; pixel_y = 26 }, /turf/open/floor/plasteel, @@ -16588,8 +17139,7 @@ /area/hallway/primary/port) "aLL" = ( /obj/machinery/camera{ - c_tag = "Port Hallway 2"; - dir = 2 + c_tag = "Port Hallway 2" }, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -16628,15 +17178,18 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aLQ" = ( -/obj/machinery/camera{ - c_tag = "Central Hallway North-East"; - dir = 2 +/obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/toilet"; + dir = 4; + name = "Dormitory Bathrooms APC"; + pixel_x = 26 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table/glass, +/obj/structure/bedsheetbin/towel, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aLR" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -16650,10 +17203,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aLS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel/white/side{ dir = 4 }, -/turf/open/floor/wood, /area/crew_quarters/theatre) "aLT" = ( /obj/machinery/door/firedoor, @@ -16678,15 +17232,13 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aLW" = ( /obj/machinery/camera{ - c_tag = "Central Hallway North-West"; - dir = 2 + c_tag = "Central Hallway North-West" }, /obj/machinery/airalarm{ pixel_y = 23 @@ -16746,14 +17298,12 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aMg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/vending/cola/pwr_game, +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_y = 32 }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/crew_quarters/locker) "aMh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -16790,7 +17340,6 @@ /area/crew_quarters/kitchen) "aMm" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/plasteel, @@ -16808,20 +17357,33 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aMp" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/maintenance/department/electrical) "aMq" = ( -/obj/structure/piano{ - icon_state = "piano" +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aMr" = ( -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aMs" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -16843,41 +17405,33 @@ /turf/open/floor/plasteel, /area/hydroponics) "aMu" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/camera{ + c_tag = "Bathrooms"; dir = 1 }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/structure/urinal{ + pixel_y = 32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aMv" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) -"aMw" = ( -/obj/machinery/computer/slot_machine, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aMx" = ( -/obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) +"aMw" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/hallway/primary/central) +"aMx" = ( +/obj/machinery/door/airlock{ + name = "Shower Room" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/toilet) "aMy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -16910,13 +17464,21 @@ /turf/open/floor/plasteel, /area/hydroponics) "aMB" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aMC" = ( -/obj/machinery/vending/cola/random, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + pixel_y = -25 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aMD" = ( /obj/machinery/icecream_vat, /turf/open/floor/plasteel/showroomfloor, @@ -16942,27 +17504,28 @@ /turf/open/floor/plasteel, /area/hydroponics) "aMH" = ( -/obj/structure/chair/office/dark{ - dir = 1 +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" }, -/turf/open/floor/wood, -/area/library) +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/bar) "aMI" = ( /obj/machinery/light/small, /obj/machinery/vending/wardrobe/hydro_wardrobe, /turf/open/floor/plasteel, /area/hydroponics) "aMJ" = ( -/obj/structure/chair/office/dark{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood, -/area/library) +/turf/closed/wall, +/area/crew_quarters/dorms) "aMK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 5 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/dark, /area/chapel/office) "aML" = ( @@ -16973,8 +17536,7 @@ /area/chapel/main) "aMM" = ( /obj/machinery/camera{ - c_tag = "Chapel North"; - dir = 2 + c_tag = "Chapel North" }, /turf/open/floor/plasteel/dark, /area/chapel/main) @@ -17041,9 +17603,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aMW" = ( -/obj/structure/bodycontainer/morgue, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/turf/open/floor/carpet, +/area/library) "aMX" = ( /turf/open/floor/plasteel/grimy, /area/chapel/office) @@ -17124,6 +17688,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"aNn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aNo" = ( /obj/structure/cable{ icon_state = "1-8" @@ -17154,17 +17725,33 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aNt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/comfy/brown{ dir = 4 }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) -"aNu" = ( -/obj/structure/closet/secure_closet/bar{ - req_access_txt = "25" +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/turf/open/floor/wood, -/area/crew_quarters/bar) +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"aNu" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/abandoned_gambling_den"; + name = "Abandoned Gambling Den APC"; + pixel_y = -24 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aNv" = ( /obj/effect/turf_decal/plaque{ icon_state = "L4" @@ -17240,57 +17827,78 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "aNF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aNG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/chair/comfy/brown{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aNH" = ( -/obj/machinery/door/window{ - dir = 4; - name = "Theatre Stage" +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/sign/warning/fire{ + desc = "A sign that states the labeled room's number."; + icon_state = "roomnum"; + name = "Room Number 1"; + pixel_x = -30; + pixel_y = -7 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aNI" = ( -/obj/machinery/computer/slot_machine, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/status_display{ - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, +/obj/structure/closet/jcloset, +/obj/item/storage/bag/trash, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/janitor) "aNJ" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/machinery/requests_console{ + department = "Janitorial"; + departmentType = 1; + pixel_y = -29 }, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/storage/box/lights/mixed, +/obj/item/storage/box/lights/mixed, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/janitor) "aNK" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -17343,6 +17951,7 @@ "aNR" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/paicard, /turf/open/floor/carpet, /area/hallway/secondary/entry) "aNS" = ( @@ -17379,9 +17988,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aNV" = ( -/obj/machinery/photocopier, -/turf/open/floor/wood, -/area/library) +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "aNW" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office"; @@ -17588,6 +18199,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"aOu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aOv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -17712,32 +18332,56 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aOH" = ( -/obj/structure/window/reinforced, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/structure/closet/secure_closet/captains, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/clothing/under/captainparade, +/turf/open/floor/carpet, +/area/crew_quarters/heads/captain) "aOI" = ( /obj/structure/kitchenspike, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aOJ" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 +/obj/item/radio/intercom{ + dir = 8; + name = "Station Intercom (General)"; + pixel_x = -28 }, -/turf/open/floor/wood, -/area/crew_quarters/theatre) -"aOK" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/crew_quarters/bar) -"aOL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/structure/closet/secure_closet/hop, +/obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/clothing/suit/ianshirt, /turf/open/floor/plasteel, +/area/crew_quarters/heads/hop) +"aOK" = ( +/obj/machinery/door/airlock{ + name = "Theatre Backstage"; + req_access_txt = "46" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, /area/crew_quarters/bar) +"aOL" = ( +/obj/machinery/camera{ + c_tag = "Central Hallway North-East" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "aOM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -17806,8 +18450,7 @@ "aOW" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/camera{ - c_tag = "Hydroponics North"; - dir = 2 + c_tag = "Hydroponics North" }, /turf/open/floor/plasteel/dark, /area/hydroponics) @@ -17864,29 +18507,38 @@ /turf/open/floor/wood, /area/library) "aPg" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, -/turf/open/floor/engine/cult, -/area/library) -"aPh" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen/invisible, -/turf/open/floor/engine/cult, -/area/library) -"aPi" = ( -/obj/structure/table/wood, -/obj/item/taperecorder, -/obj/item/camera, /obj/item/radio/intercom{ pixel_y = 25 }, -/turf/open/floor/engine/cult, +/obj/machinery/vending/wardrobe/curator_wardrobe, +/turf/open/floor/carpet, /area/library) +"aPh" = ( +/obj/structure/table/wood, +/obj/item/book/codex_gigas, +/obj/item/clothing/under/suit_jacket/red, +/obj/structure/destructible/cult/tome, +/turf/open/floor/carpet, +/area/library) +"aPi" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/carpet, +/area/library) +"aPj" = ( +/obj/machinery/vr_sleeper{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/crew_quarters/fitness) "aPk" = ( /turf/open/floor/plasteel/chapel{ dir = 4 @@ -17961,7 +18613,6 @@ /area/hallway/secondary/entry) "aPv" = ( /obj/item/radio/intercom{ - broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -18080,6 +18731,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/primary/port) +"aPP" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "aPQ" = ( /turf/closed/wall, /area/storage/tools) @@ -18170,39 +18834,34 @@ /turf/open/floor/plating, /area/bridge) "aPY" = ( -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/table/optable{ + name = "Robotics Operating Table" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/effect/landmark/event_spawn, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "aPZ" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -31 - }, -/obj/item/clothing/head/hardhat/cakehat, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{ + pixel_x = 32 }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/janitor) "aQa" = ( -/obj/structure/table, -/obj/item/kitchen/fork, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/reagent_dispensers/watertank, +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_x = 32 }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/janitor) "aQb" = ( -/obj/structure/window/reinforced, -/obj/structure/table/wood, -/obj/item/instrument/violin, -/turf/open/floor/wood, +/obj/machinery/vending/autodrobe, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, /area/crew_quarters/theatre) "aQc" = ( /obj/effect/turf_decal/tile/bar, @@ -18212,23 +18871,15 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar) "aQd" = ( -/obj/structure/chair, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) "aQe" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/space/nearstation) "aQf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/green{ @@ -18343,22 +18994,24 @@ /area/library) "aQr" = ( /obj/machinery/light/small, -/obj/machinery/vending/wardrobe/curator_wardrobe, -/turf/open/floor/engine/cult, +/obj/structure/table/wood/fancy, +/turf/open/floor/carpet, /area/library) "aQs" = ( -/obj/structure/destructible/cult/tome, -/obj/item/clothing/under/suit_jacket/red, -/obj/item/book/codex_gigas, -/turf/open/floor/engine/cult, +/obj/structure/bed, +/obj/item/bedsheet/black, +/turf/open/floor/carpet, /area/library) "aQt" = ( -/obj/effect/landmark/blobstart, -/obj/structure/chair/comfy/brown{ - dir = 1 - }, -/turf/open/floor/engine/cult, -/area/library) +/obj/structure/table, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil, +/obj/item/paper_bin/construction, +/obj/item/stack/cable_coil, +/obj/item/pen/fourcolor, +/turf/open/floor/plasteel, +/area/storage/art) "aQu" = ( /turf/open/floor/plasteel/chapel, /area/chapel/main) @@ -18494,37 +19147,67 @@ /area/crew_quarters/locker) "aQO" = ( /obj/structure/closet/wardrobe/white, +/obj/item/clothing/suit/ghost_sheet, +/obj/item/clothing/suit/ghost_sheet, +/obj/item/clothing/suit/ghost_sheet, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQP" = ( -/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aQQ" = ( /obj/machinery/light_switch{ pixel_y = 28 }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aQQ" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/machinery/vending/cigarette, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQR" = ( -/obj/machinery/vending/cola/random, +/obj/machinery/camera{ + c_tag = "Arrivals Bay 3 & 4"; + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/hallway/secondary/entry) "aQS" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQT" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/obj/item/clothing/gloves/color/rainbow, +/obj/item/clothing/head/soft/rainbow, +/obj/item/clothing/shoes/sneakers/rainbow, +/obj/item/clothing/under/color/rainbow, +/turf/open/floor/plating, +/area/maintenance/port/fore) "aQU" = ( -/obj/machinery/vending/kink, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "aQV" = ( -/obj/machinery/vending/clothing, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQW" = ( @@ -18532,18 +19215,19 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQX" = ( -/obj/machinery/firealarm{ - dir = 2; - pixel_y = 24 +/obj/machinery/vending/clothing, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aQY" = ( -/obj/structure/table, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, +/obj/machinery/vending/autodrobe/all_access, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, -/area/storage/art) +/area/crew_quarters/locker) "aQZ" = ( /obj/machinery/light/small{ dir = 4 @@ -18736,47 +19420,30 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aRu" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aRv" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aRw" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aRx" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/machinery/vending/kink, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/fitness) +"aRv" = ( +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"aRw" = ( +/obj/structure/fans/tiny/invisible, +/turf/open/space/basic, +/area/space) +"aRx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating, +/area/space/nearstation) "aRy" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -18795,7 +19462,9 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar) "aRA" = ( -/obj/machinery/vending/dinnerware, +/obj/machinery/vending/dinnerware{ + contraband = list(/obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/knife/butcher = 2, /obj/item/reagent_containers/food/condiment/flour = 4) + }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aRB" = ( @@ -18803,8 +19472,7 @@ pixel_y = 25 }, /obj/machinery/camera{ - c_tag = "Kitchen"; - dir = 2 + c_tag = "Kitchen" }, /obj/structure/closet/secure_closet/freezer/fridge, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -18875,9 +19543,9 @@ icon_state = "1-2" }, /obj/machinery/power/apc{ + areastring = "/area/library"; dir = 4; name = "Library APC"; - areastring = "/area/library"; pixel_x = 24 }, /obj/structure/cable, @@ -18920,7 +19588,7 @@ /area/library) "aRR" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/dark, @@ -18945,13 +19613,13 @@ /area/hallway/secondary/exit) "aRV" = ( /obj/machinery/power/apc{ + areastring = "/area/storage/tools"; dir = 1; name = "Auxiliary Tool Storage APC"; - areastring = "/area/storage/tools"; pixel_y = 24 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable{ @@ -18990,8 +19658,7 @@ pixel_y = 28 }, /obj/machinery/camera{ - c_tag = "Auxiliary Tool Storage"; - dir = 2 + c_tag = "Auxiliary Tool Storage" }, /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -19012,7 +19679,7 @@ /area/storage/tools) "aSd" = ( /obj/machinery/firealarm{ - dir = 2; + dir = 1; pixel_y = -24 }, /turf/open/floor/plasteel, @@ -19032,26 +19699,39 @@ /turf/open/floor/plating, /area/maintenance/port) "aSh" = ( -/obj/structure/closet/wardrobe/mixed, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = -27 +/obj/structure/table, +/obj/item/storage/toolbox/artistic{ + pixel_y = 10 + }, +/obj/item/storage/toolbox/artistic, +/obj/item/storage/toolbox/electrical{ + pixel_y = -10 }, /turf/open/floor/plasteel, -/area/crew_quarters/locker) +/area/storage/art) "aSi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aSk" = ( -/obj/structure/table, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil, -/obj/item/paper_bin/construction, -/obj/item/stack/cable_coil, +"aSj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light, /turf/open/floor/plasteel, -/area/storage/art) +/area/crew_quarters/dorms) +"aSk" = ( +/obj/structure/table/wood, +/obj/item/camera_film, +/obj/item/camera_film, +/obj/item/taperecorder, +/obj/item/camera, +/turf/open/floor/wood, +/area/library) "aSl" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -19067,36 +19747,50 @@ /turf/open/floor/plating, /area/storage/emergency/port) "aSo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aSp" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aSq" = ( -/obj/structure/chair{ +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) +"aSp" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "Bath1"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) +"aSq" = ( +/obj/machinery/door/airlock{ + name = "Recharging Station" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "aSr" = ( /turf/open/floor/plasteel, /area/storage/tools) @@ -19212,28 +19906,20 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar) "aSG" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/fireplace, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 23 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/maintenance/port) "aSH" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/space, +/area/solar/starboard/aft) "aSI" = ( /obj/machinery/door/airlock/public/glass{ name = "Kitchen"; @@ -19314,13 +20000,17 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "aSS" = ( -/obj/machinery/seed_extractor, -/turf/open/floor/plasteel, -/area/hydroponics) +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space, +/area/solar/starboard/aft) "aST" = ( -/obj/machinery/biogenerator, -/turf/open/floor/plasteel, -/area/hydroponics) +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/space, +/area/solar/starboard/aft) "aSU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -19342,25 +20032,19 @@ /turf/open/floor/plasteel, /area/storage/tools) "aSX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/vending/kink, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/port) -"aSY" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/head/that{ - throwforce = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/locker) +"aSY" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/space, +/area/solar/starboard/aft) "aSZ" = ( /obj/effect/landmark/start/bartender, /obj/effect/turf_decal/tile/bar, @@ -19369,6 +20053,13 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/bar) +"aTa" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/space, +/area/solar/starboard/aft) "aTb" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -19377,9 +20068,7 @@ /area/library) "aTc" = ( /obj/machinery/door/window/northright{ - base_state = "right"; dir = 8; - icon_state = "right"; name = "Library Desk Door"; req_access_txt = "37" }, @@ -19475,6 +20164,20 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"aTp" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space, +/area/solar/port/fore) +"aTq" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space, +/area/solar/starboard/fore) "aTr" = ( /obj/machinery/door/firedoor, /obj/machinery/status_display{ @@ -19506,17 +20209,25 @@ /turf/open/floor/plating, /area/maintenance/port) "aTw" = ( -/obj/structure/closet/wardrobe/green, -/obj/machinery/light{ - dir = 8 +/obj/structure/closet/wardrobe/mixed, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -27 }, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/russobluecamohat, +/obj/item/clothing/head/russobluecamohat, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTx" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/machinery/firealarm{ + pixel_y = 24 }, -/obj/effect/landmark/start/assistant, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/vending/games, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTy" = ( @@ -19524,45 +20235,71 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTz" = ( -/obj/structure/table, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aTA" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aTB" = ( /obj/structure/chair/stool{ pixel_y = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aTC" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 +"aTA" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"aTB" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/window{ + dir = 1 + }, +/obj/structure/window{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"aTC" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/window{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTD" = ( -/obj/structure/closet/secure_closet/personal, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/obj/machinery/camera{ - c_tag = "Locker Room East"; - dir = 8 - }, -/obj/machinery/light{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/window{ + dir = 1 + }, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aTE" = ( @@ -19606,6 +20343,12 @@ /area/storage/emergency/port) "aTL" = ( /obj/structure/table, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = 6 + }, /obj/item/storage/toolbox/emergency, /turf/open/floor/plasteel, /area/storage/tools) @@ -19615,10 +20358,15 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aTN" = ( -/obj/structure/table, -/obj/item/kitchen/rollingpin, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) +/obj/machinery/vending/dinnerware{ + contraband = list(/obj/item/reagent_containers/food/condiment/flour = 4); + desc = "This vendor is full of condiments to put on food."; + name = "\improper Condiments Vendor"; + product_ads = "Get your sauces here!;No slave labour was used to make these products!;Nanotrasen Approved?!"; + products = list(/obj/item/storage/bag/tray = 8, /obj/item/reagent_containers/food/drinks/drinkingglass = 10, /obj/item/storage/box/cups = 5, /obj/item/reagent_containers/food/condiment/pack/ketchup = 20, /obj/item/reagent_containers/food/condiment/pack/mustard = 20, /obj/item/reagent_containers/food/condiment/pack/hotsauce = 20, /obj/item/reagent_containers/food/condiment/pack/astrotame = 20, /obj/item/reagent_containers/food/condiment/saltshaker = 20, /obj/item/reagent_containers/food/condiment/peppermill = 20) + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "aTO" = ( /obj/structure/table, /obj/item/book/manual/chef_recipes, @@ -19738,28 +20486,19 @@ /turf/open/floor/plasteel, /area/bridge) "aUf" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/machinery/camera{ - c_tag = "Bar West"; - dir = 4 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/space, +/area/solar/port/aft) "aUg" = ( -/obj/structure/chair, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/space, +/area/solar/port/aft) "aUh" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/eastleft{ @@ -19784,15 +20523,28 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "aUj" = ( -/obj/machinery/vending/hydronutrients, -/turf/open/floor/plasteel, -/area/hydroponics) -"aUk" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 +/obj/item/soap, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light/small{ + dir = 1; + light_color = "#ffc1c1" }, -/turf/open/floor/plasteel, -/area/hydroponics) +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) +"aUk" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green, +/obj/machinery/camera{ + c_tag = "VR Sleepers"; + dir = 1 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/crew_quarters/fitness) "aUl" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -19817,39 +20569,71 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUp" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/camera{ + c_tag = "Locker Room East"; + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, /obj/structure/table, -/obj/item/clothing/head/soft/grey{ - pixel_x = -2; - pixel_y = 3 +/obj/item/reagent_containers/rag/towel/random, +/obj/item/razor, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) +"aUq" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) -"aUq" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/structure/window{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ dir = 4 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUr" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUs" = ( -/obj/structure/table, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUt" = ( @@ -19859,12 +20643,27 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUu" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) @@ -19911,10 +20710,17 @@ /turf/open/floor/wood, /area/library) "aUC" = ( -/obj/structure/chair/comfy/black, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood, -/area/library) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/landmark/start/mime, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) "aUD" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -19966,6 +20772,15 @@ dir = 1 }, /area/chapel/main) +"aUL" = ( +/obj/machinery/computer/arcade, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/secondary/exit) "aUM" = ( /obj/machinery/camera{ c_tag = "Arrivals Bay 2"; @@ -19984,11 +20799,29 @@ /turf/open/floor/wood, /area/security/vacantoffice) "aUP" = ( -/obj/machinery/airalarm{ - pixel_y = 23 +/obj/structure/toilet{ + dir = 4 }, -/turf/open/floor/wood, -/area/security/vacantoffice) +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "Bath2"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aUQ" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -20012,18 +20845,29 @@ /turf/open/floor/plating, /area/maintenance/port) "aUU" = ( -/obj/structure/closet/wardrobe/grey, -/obj/machinery/requests_console{ - department = "Locker Room"; - pixel_x = -32 +/obj/structure/closet/wardrobe/green, +/obj/machinery/light{ + dir = 8 }, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/kilt, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUV" = ( -/obj/structure/chair/stool{ - pixel_y = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/door/window/westright{ + name = "Red Corner" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ dir = 4 }, /turf/open/floor/plasteel, @@ -20040,17 +20884,29 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUY" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUZ" = ( -/obj/structure/closet/secure_closet/personal, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, +/obj/structure/table, +/obj/item/clothing/gloves/boxing/yellow, +/obj/item/clothing/gloves/boxing/green, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing, +/obj/item/clothing/gloves/boxing, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aVa" = ( @@ -20128,9 +20984,9 @@ /area/bridge) "aVh" = ( /obj/machinery/power/apc{ + areastring = "/area/hallway/primary/fore"; dir = 8; name = "Fore Primary Hallway APC"; - areastring = "/area/hallway/primary/fore"; pixel_x = -24 }, /obj/structure/cable{ @@ -20295,8 +21151,7 @@ /area/hallway/primary/central) "aVv" = ( /obj/machinery/camera{ - c_tag = "Bridge East Entrance"; - dir = 2 + c_tag = "Bridge East Entrance" }, /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -20307,40 +21162,42 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aVw" = ( -/obj/structure/table/wood/poker, -/obj/item/clothing/mask/cigarette/cigar, -/obj/item/toy/cards/deck, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space) "aVx" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "holoprivacy"; + name = "Holodeck Shutters" + }, +/turf/open/floor/plating, +/area/crew_quarters/fitness) "aVy" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_y = 5 }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/fitness) "aVz" = ( /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "aVA" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/snacks/pie/cream, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/crew_quarters/theatre) "aVB" = ( /obj/structure/table, /obj/item/reagent_containers/food/condiment/enzyme{ @@ -20360,15 +21217,18 @@ /turf/open/floor/plating, /area/maintenance/port) "aVD" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 +/obj/machinery/door/airlock/maintenance{ + name = "Theatre Maintenance"; + req_access_txt = "46" }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/crew_quarters/theatre) "aVE" = ( /obj/structure/table, /obj/item/storage/box/donkpockets{ @@ -20384,10 +21244,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) +"aVG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/table, +/obj/item/coin/gold, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aVH" = ( /obj/machinery/processor, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/cafeteria, @@ -20409,9 +21277,14 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "aVK" = ( -/obj/effect/landmark/start/botanist, -/turf/open/floor/plasteel, -/area/hydroponics) +/obj/machinery/shower{ + dir = 4 + }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet) "aVL" = ( /obj/structure/cable{ icon_state = "1-2" @@ -20454,10 +21327,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "aVP" = ( -/obj/structure/table/wood, -/obj/item/paper, -/turf/open/floor/wood, -/area/library) +/obj/machinery/vending/autodrobe/all_access, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aVQ" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -20466,27 +21338,32 @@ /area/library) "aVR" = ( /obj/structure/table/wood, -/obj/item/pen/red, -/obj/item/pen/blue{ - pixel_x = 5; - pixel_y = 5 +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 }, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/pen/fountain, +/obj/item/pen/fourcolor, /turf/open/floor/wood, /area/library) "aVS" = ( /obj/structure/table/wood, -/obj/item/camera_film, -/obj/item/camera_film, +/obj/item/pen/red, /turf/open/floor/wood, /area/library) "aVT" = ( /obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 3 }, -/turf/open/floor/wood, -/area/library) +/obj/item/lighter, +/obj/item/restraints/handcuffs, +/turf/open/floor/carpet, +/area/security/detectives_office) "aVU" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20587,6 +21464,7 @@ /area/chapel/main) "aWh" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/item/beacon, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aWi" = ( @@ -20629,6 +21507,14 @@ "aWn" = ( /obj/structure/closet/wardrobe/black, /obj/item/clothing/shoes/jackboots, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/maid, +/obj/item/clothing/under/maid, +/obj/item/clothing/accessory/maidapron, +/obj/item/clothing/accessory/maidapron, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret/black, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aWo" = ( @@ -20689,9 +21575,9 @@ /area/maintenance/port) "aWw" = ( /obj/machinery/power/apc{ + areastring = "/area/storage/art"; dir = 1; name = "Art Storage"; - areastring = "/area/storage/art"; pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -20721,9 +21607,9 @@ /area/crew_quarters/toilet/locker) "aWz" = ( /obj/machinery/power/apc{ + areastring = "/area/storage/emergency/port"; dir = 1; name = "Port Emergency Storage APC"; - areastring = "/area/storage/emergency/port"; pixel_y = 24 }, /obj/structure/cable{ @@ -20741,9 +21627,21 @@ /turf/open/floor/plating, /area/maintenance/port) "aWB" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "aWC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20971,9 +21869,8 @@ /area/bridge) "aWW" = ( /obj/machinery/power/apc/highcap/five_k{ - dir = 2; - name = "Bridge APC"; areastring = "/area/bridge"; + name = "Bridge APC"; pixel_y = -24 }, /obj/structure/cable, @@ -21124,51 +22021,51 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aXi" = ( -/obj/machinery/light{ +/obj/machinery/vending/clothing, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"aXj" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -31 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, -/area/crew_quarters/bar) -"aXj" = ( -/obj/structure/table/reinforced, -/obj/item/lighter, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aXk" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = 32 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/item/book/manual/wiki/barman_recipes, -/obj/item/reagent_containers/rag, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/window/eastleft{ + name = "Blue Corner" + }, +/obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/locker) "aXl" = ( -/obj/machinery/door/window/southright{ - name = "Bar Door"; - req_one_access_txt = "25;28" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/structure/disposalpipe/junction, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aXm" = ( /obj/effect/landmark/start/cook, /turf/open/floor/plasteel/cafeteria, @@ -21204,29 +22101,33 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "aXr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aXs" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + name = "Detective Maintenance"; + req_access_txt = "4" }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port) "aXt" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 +/obj/machinery/power/apc{ + areastring = "/area/security/detectives_office"; + dir = 4; + name = "Detective's Office APC"; + pixel_x = 24 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21"; - pixel_x = -3; - pixel_y = 3 +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aXu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -21234,20 +22135,45 @@ /turf/open/floor/carpet, /area/library) "aXv" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/window{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aXw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aXx" = ( -/obj/structure/closet/secure_closet/personal, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aXy" = ( @@ -21268,10 +22194,19 @@ /turf/open/floor/carpet, /area/chapel/main) "aXA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/corner{ +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aXB" = ( @@ -21305,19 +22240,24 @@ /turf/closed/wall, /area/quartermaster/warehouse) "aXF" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/item/pen/fountain{ + pixel_x = 6 + }, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/fitness) +/obj/item/pen/fourcolor, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "aXG" = ( /obj/machinery/light{ dir = 4 @@ -21330,6 +22270,10 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"aXH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "aXI" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -21379,15 +22323,16 @@ /turf/open/floor/wood, /area/security/vacantoffice) "aXO" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aXP" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -21467,9 +22412,9 @@ /area/security/vacantoffice) "aYa" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/port"; dir = 8; name = "Port Maintenance APC"; - areastring = "/area/maintenance/port"; pixel_x = -27; pixel_y = 2 }, @@ -21498,12 +22443,12 @@ /turf/open/floor/plating, /area/maintenance/port) "aYc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/closed/wall, /area/quartermaster/warehouse) "aYd" = ( @@ -21535,19 +22480,17 @@ /area/construction) "aYh" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 10 }, -/obj/machinery/light/small{ - dir = 4 +/obj/machinery/button/door{ + id = "kanyewest"; + name = "Privacy Shutters"; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/structure/rack, +/obj/item/storage/briefcase, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aYi" = ( /obj/structure/closet/secure_closet/detective, /obj/structure/disposalpipe/segment{ @@ -21559,15 +22502,8 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aYj" = ( -/obj/structure/table/wood, -/obj/item/taperecorder, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/button/door{ - id = "kanyewest"; - name = "Privacy Shutters"; - pixel_y = 24 +/obj/machinery/light/small{ + dir = 8 }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) @@ -21764,9 +22700,8 @@ /area/hallway/primary/central) "aYF" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Central Hall APC"; areastring = "/area/hallway/primary/central"; + name = "Central Hall APC"; pixel_y = -24 }, /obj/structure/cable, @@ -21784,28 +22719,24 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aYH" = ( -/obj/structure/table, -/obj/item/razor, -/obj/structure/window{ - dir = 1 +/obj/structure/table/wood, +/obj/item/paper/fluff{ + info = "Renovation Notice

The bar layout for the station is very old. We've decided to give it a facelift after our partnership with IKEA Intergalactic?.
  • We added some sweet retro arcade machines and much more seating area. We removed the stage since it hasn't ever been used.
  • You can run this place like a restaurant now that you have tables. Go whip up a menu with the Chef. You have a condiments table and your Requests Console has been moved so a noticeboard can be placed there. Take tickets from customers and pin them on the noticeboard for the Chef.
  • We hope you like the new bar!"; + name = "Renovation Notice - Bar"; + pixel_x = -5; + pixel_y = 3 }, -/obj/effect/turf_decal/tile/blue{ +/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/stack/spacecash/c100, +/obj/item/stack/spacecash/c100, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"aYI" = ( +/obj/structure/chair/comfy/black{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/locker) -"aYI" = ( -/obj/structure/chair/stool/bar, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aYJ" = ( /obj/machinery/light_switch{ pixel_y = -25 @@ -21853,9 +22784,9 @@ /turf/open/floor/plasteel, /area/hydroponics) "aYP" = ( -/obj/structure/reagent_dispensers/watertank/high, +/obj/structure/table/wood/poker, /turf/open/floor/plasteel, -/area/hydroponics) +/area/crew_quarters/dorms) "aYQ" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/tile/green{ @@ -21872,25 +22803,24 @@ /turf/open/floor/plasteel, /area/hydroponics) "aYS" = ( -/obj/structure/closet, -/obj/item/clothing/under/suit_jacket/female{ - pixel_x = 3; - pixel_y = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + pixel_x = 5 }, -/obj/item/clothing/under/suit_jacket/really_black{ - pixel_x = -2 - }, -/obj/structure/window{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/light/small{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/table/glass, +/obj/item/razor{ + pixel_x = 2; + pixel_y = 3 }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/locker) +/obj/item/reagent_containers/rag/towel/random, +/obj/item/reagent_containers/rag/towel/random, +/obj/item/reagent_containers/rag/towel/random, +/obj/item/reagent_containers/rag/towel/random, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aYT" = ( /obj/machinery/camera{ c_tag = "Hydroponics South"; @@ -21910,11 +22840,17 @@ /turf/open/floor/carpet, /area/library) "aYX" = ( -/obj/structure/window/reinforced{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, /turf/open/floor/plasteel, @@ -21926,16 +22862,15 @@ /turf/open/floor/carpet, /area/library) "aYZ" = ( -/obj/structure/table/wood, -/obj/item/storage/box/evidence, -/obj/item/hand_labeler{ - pixel_x = 5 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/closet/crate/freezer, +/obj/machinery/light/small{ + dir = 8 }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "aZa" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -21943,16 +22878,10 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aZb" = ( -/obj/machinery/camera{ - c_tag = "Bar South"; - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "aZc" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -22043,15 +22972,14 @@ /turf/open/floor/wood, /area/security/vacantoffice) "aZo" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aZp" = ( /obj/structure/rack, /obj/item/electronics/apc, @@ -22086,41 +23014,77 @@ /turf/open/floor/plating, /area/maintenance/port) "aZt" = ( -/obj/structure/toilet{ - pixel_y = 8 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + pixel_x = 5 }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/obj/machinery/light/small, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "aZu" = ( /obj/machinery/photocopier, /turf/open/floor/wood, /area/bridge/meeting_room) "aZv" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 24 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) -"aZw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) -"aZx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks/beer{ dir = 8 }, -/turf/open/floor/plasteel/cafeteria, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) +"aZw" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/machinery/requests_console{ + department = "Bar"; + departmentType = 2; + pixel_x = -30; + pixel_y = 45; + receive_ore_updates = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) +"aZx" = ( +/obj/structure/closet{ + name = "Suit Closet" + }, +/obj/item/clothing/under/suit_jacket/white, +/obj/item/clothing/under/suit_jacket/tan, +/obj/item/clothing/under/suit_jacket/red, +/obj/item/clothing/under/suit_jacket/really_black, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/under/suit_jacket/green, +/obj/item/clothing/under/suit_jacket/female, +/obj/item/clothing/under/suit_jacket/checkered, +/obj/item/clothing/under/suit_jacket/charcoal, +/obj/item/clothing/under/suit_jacket/burgundy, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/under/lawyer/black, +/obj/item/clothing/under/lawyer/blacksuit, +/obj/item/clothing/under/lawyer/blue, +/obj/item/clothing/under/lawyer/bluesuit, +/obj/item/clothing/under/lawyer/female, +/obj/item/clothing/under/lawyer/purpsuit, +/obj/item/clothing/under/lawyer/really_black, +/obj/item/clothing/under/lawyer/red, +/turf/open/floor/plasteel, /area/crew_quarters/locker) "aZy" = ( /obj/machinery/camera{ - c_tag = "Conference Room"; - dir = 2 + c_tag = "Conference Room" }, /turf/open/floor/wood, /area/bridge/meeting_room) @@ -22281,53 +23245,50 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aZZ" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"baa" = ( +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "bab" = ( -/obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/structure/chair/comfy/black{ dir = 1 }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "bac" = ( -/obj/machinery/newscaster{ - pixel_y = -28 +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/crew_quarters/dorms) "bad" = ( -/obj/machinery/light, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/structure/rack, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/cobweb, +/obj/item/clothing/under/color/grey, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bae" = ( -/obj/structure/noticeboard{ - pixel_y = -27 +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "baf" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -22341,28 +23302,29 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bag" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bah" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bai" = ( -/obj/machinery/light/small, +/obj/machinery/camera{ + c_tag = "Bar"; + dir = 8 + }, +/obj/structure/table, +/obj/machinery/chem_dispenser/drinks{ + dir = 8 + }, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ dir = 1 @@ -22395,7 +23357,7 @@ pixel_y = 2 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -22458,10 +23420,9 @@ /turf/open/floor/wood, /area/library) "bat" = ( -/obj/structure/table/wood, -/obj/item/pen, -/turf/open/floor/wood, -/area/library) +/obj/structure/reagent_dispensers/keg/semen, +/turf/open/floor/plating, +/area/maintenance/bar) "bau" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -22479,15 +23440,16 @@ /turf/open/floor/wood, /area/library) "baw" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/food/snacks/pie/cream, +/obj/structure/noticeboard{ + desc = "Tickets for food orders will be placed here. The Chef should make the order and hand it to a waiter, waitress or just let the barkeep serve it."; + name = "Food Orders"; + pixel_y = 26 }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "bax" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -22526,9 +23488,9 @@ /area/hallway/secondary/exit) "baD" = ( /obj/machinery/power/apc{ + areastring = "/area/hallway/secondary/exit"; dir = 8; name = "Escape Hallway APC"; - areastring = "/area/hallway/secondary/exit"; pixel_x = -25 }, /obj/structure/cable{ @@ -22601,9 +23563,9 @@ icon_state = "1-2" }, /obj/machinery/power/apc{ + areastring = "/area/crew_quarters/toilet/locker"; dir = 4; name = "Locker Restrooms APC"; - areastring = "/area/crew_quarters/toilet/locker"; pixel_x = 27; pixel_y = 2 }, @@ -22619,8 +23581,28 @@ /turf/open/floor/plating, /area/maintenance/port) "baO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/freezer, +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "LockerShitter1"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet/locker) "baP" = ( /obj/structure/table/wood, @@ -22811,24 +23793,28 @@ /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "bbr" = ( -/obj/machinery/camera{ - c_tag = "Locker Room South"; +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/window, +/obj/structure/window{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bbs" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/light, +/obj/effect/landmark/event_spawn, +/obj/effect/landmark/xmastree, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/locker) +/turf/open/floor/wood, +/area/crew_quarters/bar) "bbt" = ( /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -22836,9 +23822,9 @@ /area/quartermaster/warehouse) "bbu" = ( /obj/machinery/power/apc{ + areastring = "/area/crew_quarters/heads/captain"; dir = 1; name = "Captain's Office APC"; - areastring = "/area/crew_quarters/heads/captain"; pixel_y = 24 }, /obj/structure/cable{ @@ -22866,7 +23852,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Diner" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "bby" = ( /obj/structure/sign/barsign, @@ -22878,14 +23864,14 @@ }, /area/hallway/primary/starboard) "bbA" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway 2"; - dir = 2 +/obj/machinery/vending/assist, +/obj/structure/sign/poster/contraband/grey_tide{ + desc = "A poster promoting a regression to ape-like intelligence for Assistants, suggesting they break, loot and murder enough to make even a caveman blush."; + pixel_x = -32; + poster_item_desc = "Nanotrasen does not condone such messages. Please don't regress to ape-level intelligence as this poster suggests." }, -/turf/open/floor/plasteel/white/corner{ - dir = 1 - }, -/area/hallway/primary/starboard) +/turf/open/floor/plasteel, +/area/storage/primary) "bbB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -22915,7 +23901,7 @@ /area/chapel/main) "bbG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/red{ @@ -22934,9 +23920,9 @@ /area/hallway/secondary/exit) "bbI" = ( /obj/machinery/power/apc{ + areastring = "/area/security/vacantoffice"; dir = 8; name = "Vacant Office APC"; - areastring = "/area/security/vacantoffice"; pixel_x = -24 }, /obj/structure/cable{ @@ -22963,9 +23949,10 @@ /area/maintenance/port) "bbL" = ( /obj/machinery/door/airlock{ - name = "Unit 2" + id_tag = "LockerShitter1"; + name = "Unit 1" }, -/turf/open/floor/plasteel/freezer, +/turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet/locker) "bbM" = ( /obj/item/book/manual/wiki/security_space_law, @@ -22973,16 +23960,20 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bbN" = ( -/obj/machinery/washing_machine, -/obj/machinery/light, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/machinery/button/door{ + id = "Bath3"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 }, -/obj/effect/turf_decal/tile/blue{ +/obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/locker) +/obj/machinery/recharge_station, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "bbO" = ( /obj/machinery/washing_machine, /obj/effect/turf_decal/tile/blue{ @@ -23000,13 +23991,20 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bbQ" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ - pixel_x = 3 +/obj/item/paper_bin/bundlenatural{ + pixel_x = 6; + pixel_y = 4 }, -/obj/item/lighter, -/turf/open/floor/carpet, -/area/security/detectives_office) +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/pen/fountain, +/obj/structure/table, +/obj/item/pen/fourcolor, +/obj/item/stamp/hop, +/turf/open/floor/plasteel, +/area/crew_quarters/heads/hop) "bbR" = ( /turf/open/floor/plasteel, /area/quartermaster/office) @@ -23023,15 +24021,22 @@ /turf/open/floor/carpet, /area/security/detectives_office) "bbU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Detective Maintenance"; - req_access_txt = "4" +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/effect/turf_decal/tile/blue, +/obj/structure/window, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "bbV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -23184,31 +24189,46 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcr" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway"; - dir = 2 +/obj/machinery/smartfridge/disks{ + pixel_y = 2 + }, +/obj/structure/table, +/obj/item/radio/intercom{ + pixel_y = 25 }, /turf/open/floor/plasteel, -/area/hallway/primary/starboard) +/area/hydroponics) "bcs" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bct" = ( -/obj/effect/landmark/xeno_spawn, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "bcu" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Locker Room Maintenance"; - req_access_txt = "12" +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/structure/window, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "bcv" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -23217,13 +24237,26 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/window, +/obj/structure/window{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, /area/crew_quarters/locker) "bcx" = ( /obj/machinery/camera{ - c_tag = "Starboard Primary Hallway 5"; - dir = 2 + c_tag = "Starboard Primary Hallway 5" }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) @@ -23296,12 +24329,13 @@ /turf/open/floor/plating, /area/maintenance/port) "bcJ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/machinery/door/airlock{ + desc = "To keep the station within regulations, space IKEA requires one storage cupboard for their Nanotrasen partnership to continue."; + id_tag = "MaintDorm1"; + name = "Furniture Storage" }, -/obj/structure/closet/crate/freezer, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/turf/open/floor/plasteel/dark, +/area/maintenance/port) "bcK" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -23329,12 +24363,21 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bcO" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/theatre) "bcP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -23354,21 +24397,20 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bcS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/freezer, +/area/crew_quarters/toilet/locker) +"bcT" = ( +/obj/structure/window/reinforced{ + dir = 8 }, +/obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light/small{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, /turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"bcT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/quartermaster/warehouse) +/area/crew_quarters/locker) "bcU" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -23382,6 +24424,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"bcW" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/wood, +/area/security/vacantoffice) "bcX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -23413,18 +24463,14 @@ /area/bridge/meeting_room) "bdb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/hallway/primary/starboard) "bdc" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -30 }, /obj/machinery/light, -/turf/open/floor/plasteel/white/corner{ - dir = 2 - }, +/turf/open/floor/plasteel/white/corner, /area/hallway/primary/starboard) "bdd" = ( /obj/machinery/vending/cola/random, @@ -23658,11 +24704,32 @@ /turf/open/floor/plating, /area/maintenance/port) "bdE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/closet/crate/wooden/toy, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/obj/structure/sign/poster/contraband/clown{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/theatre) "bdF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -23686,8 +24753,15 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bdJ" = ( -/obj/machinery/door/airlock{ - name = "Unit 3" +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/mirror{ + pixel_x = 28 }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) @@ -23699,15 +24773,20 @@ /turf/open/floor/carpet, /area/bridge/meeting_room) "bdL" = ( -/obj/effect/landmark/blobstart, -/obj/item/clothing/suit/ianshirt, -/obj/structure/closet, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/camera{ + c_tag = "Locker Room South"; + dir = 8 + }, +/obj/structure/closet/secure_closet/personal, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "bdM" = ( -/obj/item/latexballon, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "bdN" = ( /obj/machinery/door/airlock/medical{ name = "Morgue"; @@ -23755,9 +24834,9 @@ /area/quartermaster/warehouse) "bdT" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/disposal"; dir = 8; name = "Disposal APC"; - areastring = "/area/maintenance/disposal"; pixel_x = -24 }, /obj/structure/cable{ @@ -23772,13 +24851,39 @@ /obj/structure/closet/crate/medical, /turf/open/floor/plasteel, /area/quartermaster/warehouse) +"bdV" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + dir = 1; + pixel_y = 25 + }, +/obj/machinery/button/door{ + id = "LockerShitter2"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 14; + pixel_y = 38; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet/locker) "bdW" = ( -/obj/item/clothing/gloves/color/rainbow, -/obj/item/clothing/head/soft/rainbow, -/obj/item/clothing/shoes/sneakers/rainbow, -/obj/item/clothing/under/color/rainbow, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "bdX" = ( /obj/item/storage/fancy/donut_box, /obj/structure/table, @@ -23838,9 +24943,8 @@ /area/ai_monitored/turret_protected/ai_upload) "bed" = ( /obj/machinery/power/apc/highcap/five_k{ - dir = 2; - name = "Upload APC"; areastring = "/area/ai_monitored/turret_protected/ai_upload"; + name = "Upload APC"; pixel_y = -24 }, /obj/structure/cable, @@ -23874,9 +24978,7 @@ /obj/item/aiModule/supplied/oxygen, /obj/item/aiModule/zeroth/oneHuman, /obj/machinery/door/window{ - base_state = "left"; dir = 8; - icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20" }, @@ -23994,12 +25096,12 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bev" = ( -/obj/machinery/light, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/chair/stool{ + pixel_y = 8 }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "bew" = ( /obj/structure/cable{ icon_state = "2-4" @@ -24090,9 +25192,7 @@ /area/quartermaster/sorting) "beG" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "beH" = ( @@ -24227,7 +25327,7 @@ layer = 2.9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/table/reinforced, @@ -24261,14 +25361,17 @@ /area/medical/morgue) "beZ" = ( /obj/machinery/mineral/stacking_unit_console{ - dir = 2; machinedir = 8 }, /turf/closed/wall, /area/maintenance/disposal) "bfa" = ( -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bfb" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -24281,9 +25384,9 @@ /area/chapel/main) "bfc" = ( /obj/machinery/power/apc{ + areastring = "/area/crew_quarters/locker"; dir = 1; name = "Locker Room APC"; - areastring = "/area/crew_quarters/locker"; pixel_y = 24 }, /obj/structure/cable{ @@ -24302,9 +25405,17 @@ /turf/open/floor/plating, /area/maintenance/port) "bfe" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/port) +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/locker) "bff" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -24346,9 +25457,8 @@ dir = 9 }, /obj/machinery/power/apc{ - dir = 2; - name = "Cargo Bay APC"; areastring = "/area/quartermaster/storage"; + name = "Cargo Bay APC"; pixel_x = 1; pixel_y = -24 }, @@ -24534,9 +25644,8 @@ /area/hallway/primary/starboard) "bfP" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Starboard Primary Hallway APC"; areastring = "/area/hallway/primary/starboard"; + name = "Starboard Primary Hallway APC"; pixel_y = -24 }, /obj/structure/cable, @@ -24684,13 +25793,17 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bgi" = ( -/obj/machinery/camera{ - c_tag = "Arrivals Bay 3 & 4"; - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/space_up{ + pixel_y = -32 }, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, -/area/hallway/secondary/entry) +/area/hallway/primary/central) "bgj" = ( /obj/machinery/conveyor{ dir = 8; @@ -24705,6 +25818,13 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"bgl" = ( +/obj/machinery/door/airlock{ + id_tag = "LockerShitter2"; + name = "Unit 2" + }, +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet/locker) "bgm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -24726,9 +25846,9 @@ icon_state = "1-2" }, /obj/machinery/power/apc{ + areastring = "/area/science/robotics/mechbay"; dir = 4; name = "Mech Bay APC"; - areastring = "/area/science/robotics/mechbay"; pixel_x = 26 }, /obj/structure/cable{ @@ -24755,18 +25875,16 @@ /turf/open/floor/plating, /area/maintenance/port) "bgr" = ( -/obj/machinery/door/airlock{ - name = "Unit 4" +/obj/machinery/camera{ + c_tag = "Locker Room Toilets"; + dir = 8 }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "bgs" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) +/obj/item/chair/wood, +/turf/open/floor/plating, +/area/maintenance/port) "bgt" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -24796,6 +25914,11 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port) +"bgx" = ( +/obj/structure/closet/wardrobe/cargotech, +/obj/item/radio/headset/headset_cargo, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "bgy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -24989,16 +26112,16 @@ /area/crew_quarters/heads/captain) "bgY" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bgZ" = ( /obj/machinery/power/apc{ + areastring = "/area/medical/chemistry"; dir = 1; name = "Chemistry APC"; - areastring = "/area/medical/chemistry"; pixel_y = 24 }, /obj/structure/cable{ @@ -25022,11 +26145,9 @@ /area/medical/chemistry) "bhc" = ( /obj/machinery/camera{ - c_tag = "Chemistry"; - dir = 2 + c_tag = "Chemistry" }, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/chem_heater, @@ -25068,8 +26189,7 @@ /area/security/checkpoint/medical) "bhj" = ( /obj/machinery/camera{ - c_tag = "Security Post - Medbay"; - dir = 2 + c_tag = "Security Post - Medbay" }, /obj/machinery/requests_console{ department = "Security"; @@ -25146,9 +26266,9 @@ /area/medical/morgue) "bhp" = ( /obj/machinery/power/apc{ + areastring = "/area/medical/morgue"; dir = 1; name = "Morgue APC"; - areastring = "/area/medical/morgue"; pixel_y = 24 }, /obj/structure/cable{ @@ -25358,6 +26478,11 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"bhK" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/crowbar/red, +/turf/open/floor/plating, +/area/maintenance/port) "bhL" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 1; @@ -25387,12 +26512,32 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"bhQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +"bhP" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/wood/fifty{ + amount = 20 }, -/turf/closed/wall, -/area/crew_quarters/toilet/locker) +/turf/open/floor/plating, +/area/maintenance/port) +"bhQ" = ( +/obj/structure/closet, +/obj/item/stack/tile/carpet/royalblue{ + amount = 24 + }, +/obj/item/stack/tile/carpet/green{ + amount = 24 + }, +/obj/item/stack/tile/carpet/purple{ + amount = 24 + }, +/obj/item/stack/tile/carpet/orange{ + amount = 24 + }, +/obj/item/stack/tile/wood{ + amount = 24 + }, +/turf/open/floor/plating, +/area/maintenance/port) "bhR" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -25453,7 +26598,6 @@ /area/quartermaster/storage) "bhZ" = ( /obj/machinery/door/window/eastleft{ - dir = 4; icon_state = "right"; name = "Incoming Mail"; req_access_txt = "50" @@ -25475,8 +26619,6 @@ dir = 8 }, /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29 }, @@ -25630,9 +26772,16 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "bit" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/obj/machinery/light, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/bedsheetbin/color, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/locker) "biu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -25770,6 +26919,19 @@ "biL" = ( /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"biM" = ( +/obj/machinery/button/door{ + desc = "Alright, GAMER! Want to take your PWRGAME addiction to the MAX? Just smash this button with your chubby chetto encrusted hands an- oh, you broke the switch. Good job, idiot."; + id = "RIPFUN"; + name = "Powerful Gamer Toggle"; + normaldoorcontrol = 1; + pixel_x = -24; + pixel_y = 7; + specialfunctions = 4 + }, +/obj/structure/table_frame/wood, +/turf/open/floor/plating, +/area/maintenance/port) "biN" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -25782,11 +26944,9 @@ "biO" = ( /obj/machinery/camera{ c_tag = "Robotics Lab"; - dir = 2; network = list("ss13","rd") }, /obj/machinery/button/door{ - dir = 2; id = "robotics"; name = "Shutters Control Button"; pixel_x = 6; @@ -25833,8 +26993,7 @@ /area/science/research) "biS" = ( /obj/machinery/camera{ - c_tag = "Research Division Access"; - dir = 2 + c_tag = "Research Division Access" }, /obj/structure/sink{ dir = 4; @@ -25880,12 +27039,10 @@ "biX" = ( /obj/machinery/camera{ c_tag = "Research and Development"; - dir = 2; network = list("ss13","rd"); pixel_x = 22 }, /obj/machinery/button/door{ - dir = 2; id = "rnd"; name = "Shutters Control Button"; pixel_x = -6; @@ -25905,6 +27062,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard) +"biZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plating, +/area/maintenance/port) "bja" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -26136,6 +27297,10 @@ /obj/structure/closet/wardrobe/black, /turf/open/floor/plating, /area/maintenance/central) +"bjD" = ( +/obj/structure/bed, +/turf/open/floor/plating, +/area/maintenance/port) "bjE" = ( /obj/machinery/airalarm{ dir = 4; @@ -26271,9 +27436,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/obj/effect/turf_decal/tile/blue{ - dir = 2 - }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bjV" = ( @@ -26286,6 +27449,11 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"bjW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/table/wood/fancy/purple, +/turf/open/floor/plating, +/area/maintenance/port) "bjX" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -26330,8 +27498,8 @@ "bkb" = ( /obj/machinery/camera{ c_tag = "Medbay Morgue"; - network = list("ss13","medbay"); - dir = 8 + dir = 8; + network = list("ss13","medbay") }, /obj/machinery/airalarm{ dir = 8; @@ -26347,10 +27515,23 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/storage/emergency/starboard) +"bke" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "bkf" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/storage/emergency/starboard) +"bkg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/port) "bkh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit, @@ -26375,7 +27556,6 @@ "bkj" = ( /obj/structure/closet/emcloset, /obj/machinery/airalarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -26391,6 +27571,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"bkl" = ( +/obj/effect/turf_decal/tile/blue{ + alpha = 255 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + alpha = 255; + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "bkm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -26711,9 +27907,9 @@ /area/maintenance/central) "bkX" = ( /obj/machinery/power/apc{ + areastring = "/area/bridge/meeting_room"; dir = 4; name = "Conference Room APC"; - areastring = "/area/bridge/meeting_room"; pixel_x = 24 }, /obj/structure/cable{ @@ -26870,8 +28066,8 @@ /obj/structure/table/reinforced, /obj/machinery/camera{ c_tag = "Medbay Foyer"; - network = list("ss13","medbay"); - dir = 8 + dir = 8; + network = list("ss13","medbay") }, /obj/machinery/cell_charger, /turf/open/floor/plasteel/white, @@ -26884,9 +28080,9 @@ icon_state = "4-8" }, /obj/machinery/power/apc{ + areastring = "/area/storage/emergency/starboard"; dir = 1; name = "Starboard Emergency Storage APC"; - areastring = "/area/storage/emergency/starboard"; pixel_y = 24 }, /obj/structure/cable{ @@ -26899,9 +28095,9 @@ /area/maintenance/department/medical/morgue) "blp" = ( /obj/machinery/power/apc{ + areastring = "/area/security/checkpoint/medical"; dir = 8; name = "Medbay Security APC"; - areastring = "/area/security/checkpoint/medical"; pixel_x = -25 }, /obj/structure/cable{ @@ -26948,12 +28144,9 @@ /turf/open/floor/plasteel, /area/science/robotics/mechbay) "blt" = ( -/obj/machinery/recharge_station, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/science/robotics/mechbay) +/obj/structure/sign/poster/contraband/tools, +/turf/closed/wall, +/area/storage/primary) "blu" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 4 @@ -27050,8 +28243,6 @@ /obj/item/healthanalyzer, /obj/item/healthanalyzer, /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29 }, @@ -27113,6 +28304,17 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel, /area/science/robotics/lab) +"blN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + alpha = 255; + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "blO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -27210,7 +28412,7 @@ }, /obj/item/stack/cable_coil, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white, @@ -27305,6 +28507,16 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"bml" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port) "bmm" = ( /obj/structure/cable{ icon_state = "1-2" @@ -27487,7 +28699,6 @@ "bmJ" = ( /obj/item/radio/intercom{ broadcasting = 1; - freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; @@ -27495,7 +28706,7 @@ }, /obj/machinery/light, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/white, @@ -27646,6 +28857,38 @@ }, /turf/closed/wall/r_wall, /area/science/robotics/mechbay) +"bnd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + alpha = 255; + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"bne" = ( +/obj/machinery/button/door{ + desc = "A remote control switch for the genetics doors."; + id = "GeneticsDoor"; + name = "Genetics Exit Button"; + normaldoorcontrol = 1; + pixel_x = 8; + pixel_y = 24 + }, +/obj/structure/table, +/obj/item/book/manual/wiki/medical_cloning{ + pixel_y = 6 + }, +/obj/item/storage/box/rxglasses{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/bodybags, +/obj/item/pen, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "bnf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -27702,7 +28945,7 @@ /obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -27734,9 +28977,9 @@ }, /obj/item/stock_parts/scanning_module, /obj/machinery/power/apc{ + areastring = "/area/science/lab"; dir = 4; name = "Research Lab APC"; - areastring = "/area/science/lab"; pixel_x = 26 }, /obj/structure/cable{ @@ -27782,8 +29025,12 @@ /turf/closed/wall, /area/maintenance/starboard) "bnt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/starboard/aft) @@ -27949,9 +29196,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bnN" = ( -/obj/effect/turf_decal/tile/red{ - dir = 2 - }, +/obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/central) "bnO" = ( @@ -28079,10 +29324,15 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "bnZ" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet, -/area/crew_quarters/heads/captain) +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=HOP"; + location = "CHE" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "boa" = ( /obj/structure/toilet{ dir = 4 @@ -28173,7 +29423,6 @@ pixel_y = -22 }, /obj/machinery/requests_console{ - announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; @@ -28224,6 +29473,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"bop" = ( +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/under/kilt, +/obj/item/clothing/under/janimaid, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "boq" = ( /obj/structure/bed/roller, /obj/effect/turf_decal/tile/blue, @@ -28242,15 +29497,25 @@ "bos" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/power/apc{ + areastring = "/area/science/robotics/lab"; dir = 8; name = "Robotics Lab APC"; - areastring = "/area/science/robotics/lab"; pixel_x = -25 }, /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"bot" = ( +/obj/structure/closet/wardrobe/grey, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret/black, +/obj/item/clothing/head/beret, +/obj/item/clothing/head/beret, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/skirt/black, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "bou" = ( /turf/open/floor/plasteel, /area/science/robotics/lab) @@ -28405,9 +29670,7 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "boM" = ( -/turf/open/floor/plasteel/white/corner{ - dir = 2 - }, +/turf/open/floor/plasteel/white/corner, /area/science/research) "boN" = ( /obj/effect/turf_decal/tile/brown{ @@ -28417,9 +29680,7 @@ /area/quartermaster/office) "boO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/science/research) "boP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -28495,20 +29756,16 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "boY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/vending/cola/black, +/obj/structure/sign/poster/contraband/sun_kist{ + pixel_y = 32 }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/turf/open/floor/wood, +/area/crew_quarters/bar) "boZ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northleft{ dir = 8; - icon_state = "left"; name = "Reception Window" }, /obj/machinery/door/window/brigdoor{ @@ -28516,7 +29773,6 @@ dir = 4; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; - req_access = null; req_access_txt = "57" }, /obj/structure/disposalpipe/segment{ @@ -28581,7 +29837,7 @@ "bpg" = ( /obj/structure/chair/office/light, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -28622,13 +29878,18 @@ /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "bpk" = ( -/obj/structure/closet/secure_closet/captains, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 +/obj/machinery/camera{ + c_tag = "Genetics Cloning"; + dir = 4; + network = list("ss13","medbay") }, -/turf/open/floor/carpet, -/area/crew_quarters/heads/captain) +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/closet/secure_closet/personal/patient, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "bpl" = ( /obj/structure/table/wood, /obj/item/storage/box/matches, @@ -28804,9 +30065,9 @@ /area/medical/chemistry) "bpG" = ( /obj/machinery/power/apc{ + areastring = "/area/medical/genetics"; dir = 1; name = "Genetics APC"; - areastring = "/area/medical/genetics"; pixel_y = 24 }, /obj/structure/cable{ @@ -28820,7 +30081,6 @@ /obj/item/radio/headset/headset_medsci, /obj/machinery/requests_console{ department = "Genetics"; - departmentType = 0; name = "Genetics Requests Console"; pixel_y = 30 }, @@ -28952,7 +30212,7 @@ /area/science/robotics/lab) "bpX" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -28985,6 +30245,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bqb" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) "bqc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white, @@ -29186,16 +30452,14 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ + areastring = "/area/engine/gravity_generator"; dir = 8; name = "Gravity Generator APC"; - areastring = "/area/engine/gravity_generator"; pixel_x = -25; pixel_y = 1 }, /obj/structure/table, -/obj/item/paper/guides/jobs/engi/gravity_gen{ - layer = 3 - }, +/obj/item/paper/guides/jobs/engi/gravity_gen, /obj/item/pen/blue, /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -29351,8 +30615,7 @@ }, /obj/machinery/camera{ c_tag = "Medbay West"; - network = list("ss13","medbay"); - dir = 2 + network = list("ss13","medbay") }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -29457,9 +30720,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/turf_decal/tile/blue{ - dir = 2 - }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bri" = ( @@ -29490,6 +30751,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/medical/genetics) +"brl" = ( +/obj/structure/shuttle/engine/heater{ + dir = 1 + }, +/turf/closed/wall/mineral/titanium, +/area/space/nearstation) "brm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29536,7 +30803,6 @@ "brq" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/button/door{ - dir = 2; id = "robotics2"; name = "Shutters Control Button"; pixel_x = 24; @@ -29577,7 +30843,6 @@ /area/science/research) "bru" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/structure/disposalpipe/segment{ @@ -29644,29 +30909,22 @@ /obj/item/pen, /obj/machinery/camera{ c_tag = "Experimentor Lab"; - dir = 2; network = list("ss13","rd") }, /obj/item/hand_labeler, /obj/item/stack/packageWrap, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/science/explab) "brA" = ( /obj/structure/table, /obj/item/paper_bin{ pixel_y = 6 }, -/turf/open/floor/plasteel/white/corner{ - dir = 2 - }, +/turf/open/floor/plasteel/white/corner, /area/science/explab) "brB" = ( /obj/structure/closet/l3closet/scientist, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/science/explab) "brC" = ( /obj/structure/table, @@ -29676,9 +30934,7 @@ pixel_y = 23 }, /obj/item/radio/off, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/science/explab) "brD" = ( /obj/structure/closet/emcloset, @@ -29818,6 +31074,9 @@ "brS" = ( /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) +"brT" = ( +/turf/open/floor/plating, +/area/space/nearstation) "brU" = ( /obj/structure/sign/warning/electricshock{ pixel_y = -32 @@ -29947,7 +31206,6 @@ /area/teleporter) "bsk" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/light{ @@ -29960,8 +31218,6 @@ /area/teleporter) "bsl" = ( /obj/item/radio/intercom{ - broadcasting = 0; - listening = 1; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -30014,10 +31270,7 @@ dir = 4 }, /obj/item/radio/intercom{ - broadcasting = 0; - freerange = 0; frequency = 1485; - listening = 1; name = "Station Intercom (Medbay)"; pixel_y = -30 }, @@ -30045,17 +31298,14 @@ /area/medical/medbay/central) "bst" = ( /obj/item/radio/intercom{ - broadcasting = 0; - freerange = 0; frequency = 1485; - listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30 }, /obj/machinery/camera{ c_tag = "Medbay East"; - network = list("ss13","medbay"); dir = 8; + network = list("ss13","medbay"); pixel_y = -22 }, /turf/open/floor/plasteel/white, @@ -30113,6 +31363,9 @@ dir = 9 }, /area/science/research) +"bsB" = ( +/turf/closed/wall/mineral/titanium, +/area/space/nearstation) "bsC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -30165,9 +31418,9 @@ /area/science/explab) "bsI" = ( /obj/machinery/power/apc{ + areastring = "/area/science/explab"; dir = 4; name = "Experimentation Lab APC"; - areastring = "/area/science/explab"; pixel_x = 26 }, /obj/structure/cable, @@ -30216,12 +31469,8 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bsP" = ( -/obj/structure/table/optable{ - name = "Robotics Operating Table" - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/turf/open/floor/plating/foam, +/area/space/nearstation) "bsQ" = ( /turf/open/floor/plasteel/dark, /area/science/robotics/lab) @@ -30292,8 +31541,7 @@ dir = 4 }, /obj/machinery/camera{ - c_tag = "Research Division North"; - dir = 2 + c_tag = "Research Division North" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -30335,7 +31583,6 @@ /area/science/research) "btf" = ( /obj/machinery/requests_console{ - announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; @@ -30358,9 +31605,9 @@ /turf/open/floor/plasteel/white, /area/science/research) "bti" = ( -/obj/structure/closet/secure_closet/personal/patient, -/turf/open/floor/plasteel/white, -/area/medical/genetics) +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/space/nearstation) "btj" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -30371,9 +31618,9 @@ /turf/open/floor/plasteel/white, /area/science/explab) "btk" = ( -/obj/structure/closet/wardrobe/white, -/turf/open/floor/plasteel/white, -/area/medical/genetics) +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/space/nearstation) "btl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/white, @@ -30434,7 +31681,6 @@ pixel_y = -8 }, /obj/machinery/button/door{ - dir = 2; id = "QMLoaddoor2"; layer = 4; name = "Loading Doors"; @@ -30463,7 +31709,7 @@ "btt" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/folder/yellow, @@ -30507,11 +31753,16 @@ /turf/open/floor/plasteel, /area/science/research) "bty" = ( -/obj/structure/chair{ - dir = 8 +/obj/structure/chair/sofa/right, +/obj/structure/window{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/obj/structure/sign/poster/contraband/pwr_game{ + pixel_x = -32 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/bar) "btz" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/brown{ @@ -30521,8 +31772,7 @@ /area/hallway/primary/central) "btA" = ( /obj/machinery/camera{ - c_tag = "Research Division West"; - dir = 2 + c_tag = "Research Division West" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -30553,13 +31803,21 @@ "btD" = ( /obj/structure/table, /obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 + pixel_x = 1; + pixel_y = 9 }, /obj/item/pen, -/obj/item/stamp/hop, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/hop) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/folder/white, +/obj/item/pen/fountain, +/obj/item/stamp/rd{ + pixel_x = 3; + pixel_y = -2 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/heads/hor) "btE" = ( /obj/structure/cable{ icon_state = "1-2" @@ -30594,9 +31852,9 @@ /area/teleporter) "btI" = ( /obj/machinery/power/apc{ + areastring = "/area/teleporter"; dir = 8; name = "Teleporter APC"; - areastring = "/area/teleporter"; pixel_x = -24 }, /obj/structure/cable{ @@ -30682,7 +31940,6 @@ /area/medical/medbay/central) "btS" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -30766,9 +32023,8 @@ "buc" = ( /obj/machinery/light, /obj/machinery/power/apc{ - dir = 2; - name = "Cargo Office APC"; areastring = "/area/quartermaster/office"; + name = "Cargo Office APC"; pixel_x = 1; pixel_y = -24 }, @@ -30776,9 +32032,7 @@ icon_state = "0-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 2 - }, +/obj/effect/turf_decal/tile/brown, /turf/open/floor/plasteel, /area/quartermaster/office) "bud" = ( @@ -30823,6 +32077,10 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics) +"buh" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/space/nearstation) "bui" = ( /obj/machinery/airalarm{ dir = 1; @@ -30989,10 +32247,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard) +"buA" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/turf/open/floor/plating, +/area/space/nearstation) "buB" = ( /obj/machinery/conveyor_switch/oneway{ - id = "QMLoad"; - dir = 8 + dir = 8; + id = "QMLoad" }, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -31071,12 +32335,12 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "buJ" = ( -/obj/structure/chair{ - dir = 8 +/obj/structure/chair/sofa, +/obj/structure/window{ + dir = 1 }, -/obj/machinery/light, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/turf/open/floor/wood, +/area/crew_quarters/bar) "buK" = ( /obj/machinery/light{ dir = 4 @@ -31344,20 +32608,12 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bvn" = ( -/obj/machinery/button/door{ - desc = "A remote control switch for the genetics doors."; - id = "GeneticsDoor"; - name = "Genetics Exit Button"; - normaldoorcontrol = 1; - pixel_x = 8; - pixel_y = 24 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/structure/table, -/obj/item/book/manual/wiki/medical_cloning{ - pixel_y = 6 - }, -/turf/open/floor/plasteel/white, -/area/medical/genetics) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, +/area/maintenance/port) "bvo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -31465,8 +32721,8 @@ "bvB" = ( /obj/machinery/camera{ c_tag = "Genetics Access"; - network = list("ss13","medbay"); dir = 8; + network = list("ss13","medbay"); pixel_y = -22 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -31517,6 +32773,20 @@ }, /turf/open/floor/plasteel, /area/quartermaster/qm) +"bvG" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light/small, +/obj/structure/extinguisher_cabinet{ + pixel_x = 5; + pixel_y = -32 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/crew_quarters/fitness) "bvH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -31738,20 +33008,10 @@ /area/hallway/primary/central) "bwi" = ( /obj/item/radio/intercom{ - dir = 8; - name = "Station Intercom (General)"; - pixel_x = -28 + pixel_x = -25 }, -/obj/structure/closet/secure_closet/hop, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/hop) +/turf/open/floor/mineral/titanium/blue, +/area/crew_quarters/toilet) "bwj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -31928,8 +33188,7 @@ /obj/structure/table/glass, /obj/machinery/camera{ c_tag = "Medbay Cryogenics"; - network = list("ss13","medbay"); - dir = 2 + network = list("ss13","medbay") }, /obj/item/reagent_containers/glass/beaker/cryoxadone, /obj/item/reagent_containers/glass/beaker/cryoxadone, @@ -31945,24 +33204,17 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bwL" = ( -/obj/machinery/camera{ - c_tag = "Genetics Cloning"; - network = list("ss13","medbay"); +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/closet/wardrobe/miner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/table, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/item/storage/box/rxglasses{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/bodybags, -/obj/item/pen, -/turf/open/floor/plasteel/white, -/area/medical/genetics) +/obj/item/radio/headset/headset_cargo/mining, +/turf/open/floor/plasteel, +/area/quartermaster/miningdock) "bwM" = ( /obj/structure/cable{ icon_state = "1-2" @@ -32009,6 +33261,10 @@ dir = 9 }, /area/science/research) +"bwP" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/closed/wall, +/area/maintenance/port) "bwQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -32191,6 +33447,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) +"bxh" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "bxi" = ( /obj/machinery/computer/aifixer{ dir = 8 @@ -32278,9 +33542,7 @@ pixel_x = 25; req_access_txt = "47" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/science/explab) "bxt" = ( @@ -32627,6 +33889,7 @@ pixel_x = -3; pixel_y = 7 }, +/obj/item/pen/fountain, /turf/open/floor/plasteel, /area/quartermaster/qm) "byh" = ( @@ -32796,9 +34059,9 @@ /area/quartermaster/qm) "byA" = ( /obj/machinery/power/apc{ + areastring = "/area/quartermaster/qm"; dir = 1; name = "Quartermaster APC"; - areastring = "/area/quartermaster/qm"; pixel_y = 24 }, /obj/structure/cable{ @@ -32852,9 +34115,9 @@ /area/quartermaster/miningdock) "byF" = ( /obj/machinery/power/apc{ + areastring = "/area/quartermaster/miningdock"; dir = 1; name = "Mining Dock APC"; - areastring = "/area/quartermaster/miningdock"; pixel_y = 24 }, /obj/structure/cable{ @@ -33019,6 +34282,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "byV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/structure/extinguisher_cabinet{ pixel_x = 5; pixel_y = -32 @@ -33087,7 +34353,6 @@ /obj/item/stack/packageWrap, /obj/item/pen, /obj/machinery/requests_console{ - announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; @@ -33212,8 +34477,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4; external_pressure_bound = 140; - pressure_checks = 0; - name = "server vent" + name = "server vent"; + pressure_checks = 0 }, /turf/open/floor/circuit/telecomms/server, /area/science/server) @@ -33250,14 +34515,13 @@ "bzy" = ( /obj/machinery/camera{ c_tag = "Server Room"; - dir = 2; network = list("ss13","rd"); pixel_x = 22 }, /obj/machinery/power/apc{ + areastring = "/area/science/server"; dir = 1; name = "Server Room APC"; - areastring = "/area/science/server"; pixel_y = 25 }, /obj/structure/cable{ @@ -33332,7 +34596,7 @@ /area/science/research) "bzF" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -33343,18 +34607,14 @@ name = "Central Access" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/central) "bzH" = ( /obj/structure/table, /obj/item/hemostat, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/medical/sleeper) "bzI" = ( /obj/structure/disposalpipe/segment, @@ -33381,9 +34641,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bzL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hor) "bzM" = ( @@ -33455,9 +34713,7 @@ /area/quartermaster/qm) "bzU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/turf_decal/tile/blue{ - dir = 2 - }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bzV" = ( @@ -33564,11 +34820,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bAj" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=HOP"; - location = "CHE" +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/turf/open/floor/plasteel, +/obj/machinery/disposal/bin, +/turf/open/floor/plasteel/dark, /area/hallway/primary/central) "bAk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -33616,9 +34872,9 @@ icon_state = "4-8" }, /obj/machinery/power/apc{ + areastring = "/area/security/checkpoint/supply"; dir = 1; name = "Cargo Security APC"; - areastring = "/area/security/checkpoint/supply"; pixel_x = 1; pixel_y = 24 }, @@ -33636,7 +34892,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/white, @@ -33647,8 +34903,8 @@ }, /obj/machinery/camera{ c_tag = "Medbay Treatment Center"; - network = list("ss13","medbay"); - dir = 8 + dir = 8; + network = list("ss13","medbay") }, /turf/open/floor/plasteel, /area/medical/sleeper) @@ -33859,9 +35115,7 @@ "bAP" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bAQ" = ( @@ -34016,6 +35270,10 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -29 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBh" = ( @@ -34185,13 +35443,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bBz" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, +/obj/machinery/vending/cola/space_up, +/turf/open/floor/plasteel/dark, /area/hallway/primary/central) "bBA" = ( /obj/structure/cable{ @@ -34203,14 +35456,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bBB" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/crew_quarters/fitness) "bBC" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -34238,9 +35497,7 @@ "bBF" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/item/storage/firstaid/toxin, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/airalarm/unlocked{ pixel_y = 24 }, @@ -34260,19 +35517,14 @@ /turf/closed/wall, /area/quartermaster/miningdock) "bBI" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/closet/wardrobe/miner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, /turf/open/floor/plasteel, -/area/quartermaster/miningdock) +/area/hallway/secondary/service) "bBJ" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/plasteel/white, @@ -34291,6 +35543,14 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"bBM" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "bBN" = ( /turf/closed/wall, /area/crew_quarters/heads/cmo) @@ -34350,6 +35610,18 @@ }, /turf/open/floor/circuit/telecomms/server, /area/science/server) +"bBT" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bBU" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 9 @@ -34411,9 +35683,8 @@ /area/security/checkpoint/science) "bCa" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Science Security APC"; areastring = "/area/security/checkpoint/science"; + name = "Science Security APC"; pixel_y = -24 }, /obj/structure/cable, @@ -34475,9 +35746,9 @@ /area/maintenance/port/aft) "bCf" = ( /obj/machinery/power/apc{ + areastring = "/area/crew_quarters/heads/hor"; dir = 8; name = "RD Office APC"; - areastring = "/area/crew_quarters/heads/hor"; pixel_x = -25 }, /obj/structure/cable, @@ -34581,9 +35852,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bCq" = ( @@ -34660,9 +35929,20 @@ /turf/open/floor/plating, /area/maintenance/aft) "bCA" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/central) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bCB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34688,9 +35968,7 @@ "bCD" = ( /obj/structure/table, /obj/item/retractor, -/turf/open/floor/plasteel/white/side{ - dir = 2 - }, +/turf/open/floor/plasteel/white/side, /area/medical/sleeper) "bCE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -34725,12 +36003,14 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bCI" = ( -/obj/structure/chair/office/dark{ +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ dir = 4 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood, -/area/library) +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bCJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -34747,8 +36027,7 @@ /obj/structure/closet/secure_closet/medical3, /obj/machinery/camera{ c_tag = "Medbay Storage"; - network = list("ss13","medbay"); - dir = 2 + network = list("ss13","medbay") }, /turf/open/floor/plasteel/white, /area/medical/sleeper) @@ -34765,7 +36044,13 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bCO" = ( -/obj/machinery/bloodbankgen, +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/rxglasses, +/obj/item/hand_labeler, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bCP" = ( @@ -34799,35 +36084,22 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bCT" = ( -/obj/structure/table, -/obj/item/storage/belt/medical{ - pixel_y = 2 - }, -/obj/item/storage/belt/medical{ - pixel_y = 2 - }, -/obj/item/storage/belt/medical{ - pixel_y = 2 - }, -/obj/item/clothing/neck/stethoscope, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/bloodbankgen, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bCU" = ( /obj/item/radio/intercom{ - broadcasting = 0; - freerange = 0; frequency = 1485; - listening = 1; name = "Station Intercom (Medbay)"; pixel_x = -30 }, /obj/machinery/camera{ c_tag = "Medbay South"; - network = list("ss13","medbay"); - dir = 4 + dir = 4; + network = list("ss13","medbay") }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -34950,7 +36222,6 @@ /obj/item/pen, /obj/machinery/requests_console{ department = "Mining"; - departmentType = 0; pixel_x = -30 }, /obj/machinery/light{ @@ -34960,7 +36231,7 @@ /area/quartermaster/miningdock) "bDl" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -34994,13 +36265,11 @@ /area/quartermaster/miningdock) "bDp" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bDq" = ( @@ -35022,9 +36291,15 @@ /turf/open/floor/plasteel, /area/janitor) "bDs" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green, /turf/open/floor/plasteel, -/area/janitor) +/area/hallway/primary/starboard) "bDt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -35042,6 +36317,13 @@ /turf/open/floor/plating, /area/maintenance/aft) "bDv" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"bDw" = ( /obj/structure/table, /obj/item/flashlight{ pixel_x = 1; @@ -35056,14 +36338,15 @@ /obj/machinery/status_display/ai{ pixel_x = -32 }, -/turf/open/floor/plating, -/area/storage/tech) -"bDw" = ( -/obj/structure/table, -/obj/item/screwdriver{ - pixel_y = 16 +/obj/machinery/power/apc{ + areastring = "/area/storage/tech"; + dir = 1; + name = "Tech Storage APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/item/wirecutters, /turf/open/floor/plating, /area/storage/tech) "bDx" = ( @@ -35076,33 +36359,28 @@ /turf/open/floor/plating, /area/storage/tech) "bDy" = ( -/obj/machinery/camera{ - c_tag = "Tech Storage"; - dir = 2 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "Tech Storage APC"; - areastring = "/area/storage/tech"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/table, +/obj/item/screwdriver{ + pixel_y = 16 }, +/obj/item/wirecutters, /turf/open/floor/plating, /area/storage/tech) "bDz" = ( -/obj/machinery/airalarm{ - pixel_y = 23 +/obj/structure/table, +/obj/item/aicard, +/obj/item/aiModule/reset, +/obj/structure/cable{ + icon_state = "1-2" }, /turf/open/floor/plating, /area/storage/tech) "bDA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ + areastring = "/area/medical/sleeper"; dir = 4; name = "Treatment Center APC"; - areastring = "/area/medical/sleeper"; pixel_x = 26 }, /obj/structure/cable{ @@ -35129,9 +36407,6 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bDD" = ( -/obj/structure/sign/warning/nosmoking{ - pixel_x = -28 - }, /obj/structure/bed, /obj/item/bedsheet/medical, /obj/effect/turf_decal/tile/blue{ @@ -35145,8 +36420,8 @@ }, /obj/machinery/camera{ c_tag = "Medbay Recovery Room"; - network = list("ss13","medbay"); - dir = 8 + dir = 8; + network = list("ss13","medbay") }, /obj/machinery/iv_drip, /turf/open/floor/plasteel/white, @@ -35164,9 +36439,7 @@ /area/medical/medbay/central) "bDG" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bDH" = ( @@ -35182,8 +36455,9 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bDJ" = ( -/obj/item/storage/box/lights/mixed, -/obj/item/storage/box/lights/mixed, +/obj/structure/sign/poster/contraband/lizard{ + pixel_x = -32 + }, /turf/open/floor/plasteel, /area/janitor) "bDK" = ( @@ -35197,8 +36471,17 @@ /turf/open/floor/plasteel, /area/janitor) "bDL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/plasteel, -/area/janitor) +/area/crew_quarters/fitness) "bDM" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -35212,11 +36495,15 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bDO" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/vending/snack/orange, +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/structure/sign/poster/contraband/donut_corp{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bDP" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -35290,6 +36577,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"bDX" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "bDY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -35418,8 +36712,8 @@ }, /obj/machinery/camera{ c_tag = "Chief Medical Office"; - network = list("ss13","medbay"); dir = 8; + network = list("ss13","medbay"); pixel_y = -22 }, /obj/effect/turf_decal/tile/blue{ @@ -35436,7 +36730,6 @@ "bEn" = ( /obj/machinery/camera{ c_tag = "Xenobiology Test Chamber"; - dir = 2; network = list("xeno","rd") }, /obj/machinery/light{ @@ -35459,9 +36752,9 @@ /area/science/storage) "bEq" = ( /obj/machinery/power/apc{ + areastring = "/area/science/research"; dir = 8; name = "Misc Research APC"; - areastring = "/area/science/research"; pixel_x = -25 }, /obj/structure/cable{ @@ -35491,9 +36784,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/science/mixing) "bEv" = ( @@ -35501,9 +36792,7 @@ /obj/machinery/light_switch{ pixel_y = 28 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/science/mixing) "bEw" = ( @@ -35511,9 +36800,7 @@ /obj/item/radio/intercom{ pixel_y = 25 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/science/mixing) "bEx" = ( @@ -35522,17 +36809,13 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/camera{ c_tag = "Toxins Lab West"; - dir = 2; network = list("ss13","rd") }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/science/mixing) "bEy" = ( @@ -35540,9 +36823,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white, /area/science/mixing) "bEz" = ( @@ -35688,15 +36969,8 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bER" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/techstorage/rnd, /turf/open/floor/plating, /area/storage/tech) "bES" = ( @@ -35746,9 +37020,12 @@ /turf/open/floor/plating, /area/storage/tech) "bEX" = ( -/obj/structure/table, -/obj/item/aicard, -/obj/item/aiModule/reset, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plating, /area/storage/tech) "bEY" = ( @@ -35844,18 +37121,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bFk" = ( -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plasteel, -/area/janitor) +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "bFl" = ( /obj/structure/cable{ icon_state = "1-2" }, /obj/machinery/power/apc{ + areastring = "/area/janitor"; dir = 8; name = "Custodial Closet APC"; - areastring = "/area/janitor"; pixel_x = -24 }, /obj/structure/cable{ @@ -35893,9 +37172,7 @@ /area/maintenance/aft) "bFq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bFr" = ( @@ -35989,21 +37266,14 @@ /turf/open/floor/plasteel, /area/medical/sleeper) "bFC" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 5; - pixel_y = -2 +/obj/structure/door_assembly/door_assembly_mai, +/obj/item/electronics/airlock, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/crew_quarters/abandoned_gambling_den) "bFD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -36070,6 +37340,9 @@ "bFJ" = ( /obj/structure/bed, /obj/item/bedsheet/medical, +/obj/structure/sign/warning/nosmoking{ + pixel_x = -28 + }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bFK" = ( @@ -36224,12 +37497,8 @@ /obj/machinery/doppler_array/research/science{ dir = 4 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/science/mixing) "bGe" = ( /turf/closed/wall, @@ -36238,6 +37507,22 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/science/test_area) +"bGg" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"bGh" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/fore) "bGi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -36321,8 +37606,7 @@ /area/storage/tech) "bGs" = ( /obj/machinery/camera{ - c_tag = "Secure Tech Storage"; - dir = 2 + c_tag = "Secure Tech Storage" }, /obj/structure/cable{ icon_state = "1-2" @@ -36347,11 +37631,12 @@ /turf/open/floor/plating, /area/storage/tech) "bGw" = ( -/obj/structure/rack, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 }, -/obj/effect/spawner/lootdrop/techstorage/rnd, /turf/open/floor/plating, /area/storage/tech) "bGx" = ( @@ -36382,18 +37667,14 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "bGB" = ( -/obj/structure/table, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/machinery/requests_console{ - department = "Janitorial"; - departmentType = 1; - pixel_y = -29 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/item/reagent_containers/spray/cleaner, -/turf/open/floor/plasteel, -/area/janitor) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "bGC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -36516,9 +37797,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bGP" = ( @@ -36544,15 +37823,34 @@ /area/maintenance/aft) "bGR" = ( /obj/structure/table, -/obj/item/hand_labeler, -/obj/item/storage/box/rxglasses, -/obj/item/storage/box/bodybags{ - pixel_x = 3; - pixel_y = 3 +/obj/item/storage/belt/medical{ + pixel_y = 2 }, -/obj/item/gun/syringe, +/obj/item/storage/belt/medical{ + pixel_y = 2 + }, +/obj/item/storage/belt/medical{ + pixel_y = 2 + }, +/obj/item/clothing/neck/stethoscope, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"bGS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "bGT" = ( /obj/structure/table, /obj/item/folder/white, @@ -36649,9 +37947,9 @@ /area/maintenance/aft) "bHe" = ( /obj/machinery/power/apc{ + areastring = "/area/science/storage"; dir = 8; name = "Toxins Storage APC"; - areastring = "/area/science/storage"; pixel_x = -25 }, /obj/structure/cable{ @@ -36671,6 +37969,22 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"bHg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/departments/restroom{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "bHh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -36706,9 +38020,7 @@ "bHl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bHm" = ( @@ -36764,9 +38076,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/science/mixing) "bHt" = ( @@ -36799,6 +38109,16 @@ }, /turf/open/floor/plating, /area/science/test_area) +"bHx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/item/shovel/spade, +/obj/item/reagent_containers/glass/bucket, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) "bHy" = ( /obj/structure/closet/crate, /obj/machinery/light/small{ @@ -36830,6 +38150,19 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"bHB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/table, +/obj/item/storage/box/beakers{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/service) "bHC" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -36845,12 +38178,17 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bHF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/wood, -/area/crew_quarters/theatre) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bHG" = ( /obj/structure/rack, /obj/machinery/light/small{ @@ -36927,9 +38265,7 @@ /turf/open/floor/plating, /area/storage/tech) "bHP" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bHQ" = ( @@ -36972,9 +38308,9 @@ /area/maintenance/aft) "bHV" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; dir = 8; name = "Aft Maintenance APC"; - areastring = "/area/maintenance/aft"; pixel_x = -24 }, /obj/structure/cable{ @@ -37003,6 +38339,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"bHZ" = ( +/obj/structure/table, +/obj/item/book/manual/hydroponics_pod_people{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/paper/guides/jobs/hydroponics{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "bIa" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -37034,8 +38382,8 @@ }, /obj/machinery/camera{ c_tag = "Surgery Operating"; - network = list("ss13","medbay"); dir = 1; + network = list("ss13","medbay"); pixel_x = 22 }, /obj/machinery/light, @@ -37133,6 +38481,9 @@ /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, +/obj/item/hand_labeler, +/obj/item/stack/packageWrap, +/obj/item/stack/packageWrap, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bIk" = ( @@ -37474,9 +38825,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/science/mixing) "bIV" = ( @@ -37872,6 +39221,10 @@ }, /turf/closed/wall, /area/science/storage) +"bJS" = ( +/obj/structure/sign/departments/restroom, +/turf/closed/wall, +/area/crew_quarters/toilet) "bJT" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/white, @@ -37954,9 +39307,9 @@ /area/science/mixing) "bKa" = ( /obj/machinery/power/apc{ + areastring = "/area/science/mixing"; dir = 4; name = "Toxins Lab APC"; - areastring = "/area/science/mixing"; pixel_x = 26 }, /obj/structure/cable, @@ -38252,9 +39605,9 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ + areastring = "/area/medical/medbay/central"; dir = 4; name = "Medbay APC"; - areastring = "/area/medical/medbay/central"; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -38331,9 +39684,9 @@ /area/medical/medbay/central) "bKS" = ( /obj/machinery/power/apc{ + areastring = "/area/crew_quarters/heads/cmo"; dir = 1; name = "CM Office APC"; - areastring = "/area/crew_quarters/heads/cmo"; pixel_y = 24 }, /obj/structure/cable{ @@ -38377,9 +39730,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/xenobiology) "bKX" = ( @@ -38408,9 +39759,7 @@ pixel_y = 2 }, /obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/xenobiology) "bKZ" = ( @@ -38431,18 +39780,14 @@ name = "Test Chamber"; req_access_txt = "55" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/xenobiology) "bLb" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/xenobiology) "bLc" = ( @@ -38452,9 +39797,7 @@ /obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science, /obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/xenobiology) "bLd" = ( @@ -38568,10 +39911,18 @@ dir = 8 }, /turf/open/floor/plating{ - luminosity = 2; - initial_gas_mix = "o2=0.01;n2=0.01" + initial_gas_mix = "o2=0.01;n2=0.01"; + luminosity = 2 }, /area/science/test_area) +"bLs" = ( +/obj/structure/reagent_dispensers/keg/milk, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"bLt" = ( +/obj/structure/reagent_dispensers/keg/gargle, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bLu" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -38596,6 +39947,10 @@ /obj/item/stock_parts/subspace/treatment, /obj/item/stock_parts/subspace/treatment, /obj/item/stock_parts/subspace/treatment, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, /turf/open/floor/plating, /area/storage/tech) "bLy" = ( @@ -38627,6 +39982,10 @@ /obj/item/clothing/gloves/color/yellow, /obj/item/t_scanner, /obj/item/multitool, +/obj/machinery/camera{ + c_tag = "Tech Storage"; + dir = 1 + }, /turf/open/floor/plating, /area/storage/tech) "bLB" = ( @@ -38658,9 +40017,8 @@ "bLF" = ( /obj/structure/filingcabinet/filingcabinet, /obj/machinery/power/apc{ - dir = 2; - name = "Delivery Office APC"; areastring = "/area/quartermaster/sorting"; + name = "Delivery Office APC"; pixel_x = 1; pixel_y = -24 }, @@ -38857,9 +40215,9 @@ /area/science/misc_lab) "bMg" = ( /obj/machinery/power/apc{ + areastring = "/area/science/xenobiology"; dir = 8; name = "Xenobiology APC"; - areastring = "/area/science/xenobiology"; pixel_x = -25 }, /obj/structure/cable{ @@ -38900,7 +40258,6 @@ "bMm" = ( /obj/machinery/monkey_recycler, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -38966,7 +40323,6 @@ /area/science/mixing) "bMw" = ( /obj/machinery/sparker/toxmix{ - dir = 2; pixel_x = 25 }, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output{ @@ -39041,6 +40397,10 @@ }, /turf/open/floor/plating/airless, /area/science/test_area) +"bMF" = ( +/obj/structure/reagent_dispensers/keg/mead, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bMG" = ( /obj/structure/cable{ icon_state = "1-2" @@ -39103,7 +40463,6 @@ /area/engine/atmos) "bMP" = ( /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -39144,9 +40503,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bMV" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/visible, /obj/machinery/meter/atmos/distro_loop, /turf/open/floor/plasteel, /area/engine/atmos) @@ -39175,6 +40532,13 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"bNa" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/departments/evac{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bNb" = ( /obj/item/airlock_painter, /obj/structure/lattice, @@ -39339,9 +40703,7 @@ /turf/open/floor/engine, /area/science/mixing) "bNw" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix{ - dir = 2 - }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix, /turf/open/floor/engine, /area/science/mixing) "bNx" = ( @@ -39406,9 +40768,7 @@ /turf/open/floor/plating/airless, /area/science/test_area) "bNF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/science/test_area) "bNG" = ( @@ -39446,11 +40806,30 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "bNL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/machinery/airalarm{ - pixel_y = 23 + dir = 1; + pixel_y = -22 }, /turf/open/floor/plating, /area/construction) +"bNM" = ( +/obj/machinery/light, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/sign/directions/evac{ + dir = 4; + pixel_y = -25 + }, +/obj/structure/sign/directions/science{ + dir = 4; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bNN" = ( /obj/structure/cable{ icon_state = "1-2" @@ -39472,8 +40851,6 @@ dir = 6 }, /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30 }, @@ -39494,8 +40871,7 @@ pixel_y = 23 }, /obj/machinery/camera{ - c_tag = "Atmospherics Monitoring"; - dir = 2 + c_tag = "Atmospherics Monitoring" }, /obj/machinery/light{ dir = 4 @@ -39662,8 +41038,7 @@ /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Virology Airlock"; - network = list("ss13","medbay"); - dir = 2 + network = list("ss13","medbay") }, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -39775,7 +41150,6 @@ /area/tcommsat/computer) "bOE" = ( /obj/machinery/sparker/toxmix{ - dir = 2; pixel_x = 25 }, /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input{ @@ -39850,12 +41224,21 @@ /area/quartermaster/office) "bOM" = ( /obj/structure/table, -/obj/item/paper_bin, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 7 }, +/obj/item/clothing/head/welding{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/multitool, +/obj/item/clothing/glasses/welding, /turf/open/floor/plasteel, -/area/tcommsat/computer) +/area/engine/atmos) "bON" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -39866,9 +41249,9 @@ /area/security/detectives_office) "bOO" = ( /obj/machinery/power/apc{ + areastring = "/area/security/checkpoint/engineering"; dir = 8; name = "Engineering Security APC"; - areastring = "/area/security/checkpoint/engineering"; pixel_x = -24 }, /obj/structure/cable{ @@ -39949,7 +41332,6 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/window/northleft{ dir = 4; - icon_state = "left"; name = "Atmospherics Desk"; req_access_txt = "24" }, @@ -40181,6 +41563,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"bPv" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/departments/evac{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bPw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -40416,6 +41805,36 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) +"bPR" = ( +/obj/structure/sign/mining{ + pixel_y = 7 + }, +/turf/closed/wall, +/area/quartermaster/miningdock) +"bPS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/departments/custodian{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bPT" = ( +/obj/structure/reagent_dispensers/foamtank, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/plasteel, +/area/engine/atmos) "bPU" = ( /obj/item/shard, /turf/open/floor/plating, @@ -40784,7 +42203,6 @@ /obj/item/clothing/ears/earmuffs, /obj/machinery/camera{ c_tag = "Testing Lab North"; - dir = 2; network = list("ss13","rd") }, /turf/open/floor/plasteel, @@ -40793,7 +42211,6 @@ /obj/machinery/requests_console{ department = "Science"; departmentType = 2; - dir = 2; name = "Science Requests Console"; pixel_y = 30; receive_ore_updates = 1 @@ -40824,6 +42241,21 @@ }, /turf/open/floor/engine, /area/science/misc_lab) +"bQX" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/plasteel, +/area/engine/atmos) "bQY" = ( /obj/structure/table/reinforced, /obj/item/integrated_circuit_printer, @@ -40844,6 +42276,50 @@ /obj/item/stack/sheet/metal/ten, /turf/open/floor/plasteel/white, /area/science/circuit) +"bRb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/structure/sign/departments/engineering{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"bRc" = ( +/obj/structure/sign/poster/contraband/space_cola{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"bRd" = ( +/obj/structure/sign/poster/contraband/space_up{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"bRe" = ( +/obj/machinery/computer/slot_machine{ + balance = 15; + money = 500; + pixel_x = -5 + }, +/obj/structure/sign/poster/contraband/robust_softdrinks{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"bRf" = ( +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "bRg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -40957,7 +42433,6 @@ /obj/machinery/door/firedoor/heavy, /obj/machinery/door/window/northleft{ dir = 4; - icon_state = "left"; name = "Atmospherics Desk"; req_access_txt = "24" }, @@ -41122,7 +42597,7 @@ /area/medical/virology) "bRO" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white, @@ -41342,6 +42817,14 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/port/aft) +"bSr" = ( +/obj/structure/sign/poster/official/fruit_bowl{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/primary/starboard) "bSs" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -41356,6 +42839,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) +"bSu" = ( +/obj/machinery/camera{ + c_tag = "Starboard Primary Hallway 2" + }, +/obj/structure/sign/poster/contraband/eat{ + pixel_y = 32; + poster_item_desc = "This poster promotes obesity, it also promotes giving the Chef a reason to keep their job." + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/hallway/primary/starboard) "bSv" = ( /obj/machinery/camera{ c_tag = "Construction Area"; @@ -41459,20 +42954,13 @@ /area/engine/atmos) "bSF" = ( /obj/structure/table, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 7 +/obj/item/paper_bin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 }, -/obj/item/clothing/head/welding{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/multitool, +/obj/item/pen/fountain, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/tcommsat/computer) "bSG" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -41513,6 +43001,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) +"bSL" = ( +/obj/structure/sign/poster/contraband/red_rum{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "bSM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -41528,6 +43022,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) +"bSO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/cohiba_robusto_ad{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "bSP" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 4 @@ -41611,9 +43114,9 @@ /area/medical/virology) "bSX" = ( /obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/medical/virology"; dir = 1; name = "Virology APC"; - areastring = "/area/medical/virology"; pixel_y = 24 }, /obj/structure/cable{ @@ -41629,6 +43132,15 @@ /obj/machinery/vending/medical, /turf/open/floor/plasteel/white, /area/medical/virology) +"bSZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/have_a_puff{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "bTa" = ( /obj/machinery/door/window/northleft{ dir = 4; @@ -41810,6 +43322,13 @@ /obj/item/pen, /turf/open/floor/plasteel/white, /area/science/circuit) +"bTq" = ( +/obj/structure/sign/poster/contraband/smoke{ + desc = "This poster reminds us all that the Detective is a parasite. Year after year, they must get replacement lungs because of their addiction. "; + pixel_y = -32 + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "bTr" = ( /obj/structure/cable{ icon_state = "1-2" @@ -41818,6 +43337,68 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"bTs" = ( +/obj/structure/sign/poster/official/help_others{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) +"bTt" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/port) +"bTu" = ( +/obj/machinery/recharge_station, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/state_laws{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/science/robotics/mechbay) +"bTv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/sign/poster/official/ian{ + pixel_x = 32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bTw" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/structure/sign/poster/official/love_ian{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bTx" = ( +/obj/effect/turf_decal/bot, +/obj/structure/sign/poster/official/pda_ad{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"bTy" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/aft) "bTz" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -41903,9 +43484,9 @@ /area/tcommsat/computer) "bTJ" = ( /obj/machinery/power/apc{ - name = "Aft Hall APC"; areastring = "/area/hallway/primary/aft"; dir = 8; + name = "Aft Hall APC"; pixel_x = -25; pixel_y = 1 }, @@ -42226,6 +43807,21 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) +"bUw" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/free_drone{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "bUx" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 1 @@ -42255,11 +43851,27 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"bUA" = ( +/obj/machinery/door/poddoor/preopen{ + id = "Engineering"; + name = "engineering security door" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/shower{ + dir = 8 + }, +/obj/structure/sign/warning/enginesafety{ + pixel_x = 32 + }, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "bUB" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Telecomms Monitoring APC"; areastring = "/area/tcommsat/computer"; + name = "Telecomms Monitoring APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -42404,6 +44016,7 @@ /area/engine/atmos) "bUU" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/machinery/atmospherics/miner/n2o, /turf/open/floor/engine/n2o, /area/engine/atmos) "bUV" = ( @@ -42416,6 +44029,13 @@ }, /turf/open/floor/engine/n2o, /area/engine/atmos) +"bUX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/safety_eye_protection, +/turf/closed/wall/r_wall, +/area/engine/engineering) "bUY" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -42511,7 +44131,6 @@ /area/hallway/primary/aft) "bVg" = ( /obj/item/radio/intercom{ - broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -42634,10 +44253,12 @@ }, /turf/open/space, /area/space/nearstation) +"bVw" = ( +/obj/structure/sign/poster/official/safety_eye_protection, +/turf/closed/wall/r_wall, +/area/engine/engineering) "bVx" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 2 - }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on, /turf/open/floor/plating/airless, /area/maintenance/port/aft) "bVy" = ( @@ -42709,6 +44330,19 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"bVH" = ( +/obj/machinery/camera{ + c_tag = "Engineering Storage"; + dir = 4 + }, +/obj/machinery/rnd/production/protolathe/department/engineering, +/obj/structure/sign/poster/contraband/power{ + desc = "Lord Singuloth must feed. Annoyingly, it's really easy for people to sabotage containment and let Lord Singuloth eat the entire station.. For this reason, Nanotrasen prefers Supermatter reactors."; + pixel_x = -32; + poster_item_desc = "This poster depicts Lord Singuloth. Nanotrasen doesn't approve. Nanotrasen wants Supermatter over Singularities, as they are usually much safer." + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "bVI" = ( /turf/closed/wall/r_wall, /area/tcommsat/server) @@ -42719,6 +44353,12 @@ /obj/machinery/vending/snack/random, /turf/open/floor/plasteel, /area/engine/break_room) +"bVL" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer, +/area/security/prison) "bVM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, @@ -42902,6 +44542,13 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/medical/virology) +"bWk" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/plasteel, +/area/quartermaster/office) "bWl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -42959,9 +44606,7 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "bWq" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 2 - }, +/obj/machinery/atmospherics/components/binary/pump, /turf/open/floor/plasteel, /area/science/misc_lab) "bWr" = ( @@ -43040,9 +44685,9 @@ dir = 1 }, /obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/tcommsat/server"; dir = 1; name = "Telecomms Server APC"; - areastring = "/area/tcommsat/server"; pixel_y = 25 }, /obj/structure/cable{ @@ -43156,8 +44801,6 @@ /area/security/checkpoint/engineering) "bWR" = ( /obj/item/radio/intercom{ - freerange = 0; - frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30 }, @@ -43447,6 +45090,17 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/science/circuit) +"bXu" = ( +/obj/machinery/camera{ + c_tag = "Bar West"; + dir = 4 + }, +/obj/machinery/computer/arcade/orion_trail, +/obj/structure/sign/poster/official/foam_force_ad{ + pixel_x = -32 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "bXv" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -43611,6 +45265,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/item/cartridge/atmos, /turf/open/floor/plasteel, /area/engine/atmos) "bXS" = ( @@ -43618,23 +45273,15 @@ dir = 4 }, /obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/engine/atmos) "bXT" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/engine/atmos) "bXU" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ @@ -43773,12 +45420,8 @@ /area/science/misc_lab) "bYk" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/science/misc_lab) "bYl" = ( /obj/structure/disposalpipe/segment, @@ -43793,12 +45436,8 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/science/misc_lab) "bYn" = ( /obj/structure/disposalpipe/segment, @@ -43937,29 +45576,22 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "bYG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/structure/chair{ dir = 8 }, +/obj/machinery/light, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/hallway/primary/aft) +/area/quartermaster/office) "bYH" = ( /turf/closed/wall, /area/engine/break_room) "bYI" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bYJ" = ( @@ -44046,6 +45678,7 @@ /area/engine/atmos) "bYU" = ( /obj/machinery/portable_atmospherics/canister/toxins, +/obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos) "bYV" = ( @@ -44121,6 +45754,22 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/break_room) +"bZf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "bZg" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -44256,13 +45905,17 @@ /area/engine/break_room) "bZz" = ( /obj/structure/table, -/obj/machinery/cell_charger, /obj/machinery/light_switch{ pixel_x = -23 }, /obj/machinery/light{ dir = 8 }, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_construction, /turf/open/floor/plasteel, /area/engine/break_room) "bZA" = ( @@ -44327,9 +45980,9 @@ /area/engine/break_room) "bZF" = ( /obj/machinery/power/apc{ + areastring = "/area/engine/atmos"; dir = 8; name = "Atmospherics APC"; - areastring = "/area/engine/atmos"; pixel_x = -24 }, /obj/structure/cable{ @@ -44513,6 +46166,15 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"cab" = ( +/obj/structure/table, +/obj/item/storage/pill_bottle/dice{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/cherrycupcake, +/turf/open/floor/wood, +/area/crew_quarters/bar) "cac" = ( /obj/structure/chair/stool, /turf/open/floor/plating, @@ -44555,6 +46217,18 @@ }, /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) +"caj" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/starkist{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "cak" = ( /obj/machinery/telecomms/hub/preset, /obj/effect/turf_decal/tile/neutral{ @@ -44592,6 +46266,18 @@ }, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) +"cam" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "kitchen shutters" + }, +/obj/item/reagent_containers/food/snacks/bluecherrycupcake{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "can" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -44690,13 +46376,20 @@ /area/hallway/primary/aft) "caw" = ( /obj/structure/table, +/obj/item/storage/box/lights/mixed, /obj/item/clothing/glasses/meson, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, /turf/open/floor/plasteel, -/area/engine/break_room) +/area/engine/engineering) "cax" = ( /obj/structure/closet/wardrobe/black, /obj/effect/decal/cleanable/cobweb, @@ -44733,6 +46426,18 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/checkpoint/engineering) +"caB" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "kitchen shutters" + }, +/obj/item/reagent_containers/food/snacks/cheesynachos{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "caC" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -44861,9 +46566,7 @@ /obj/machinery/atmospherics/components/binary/valve{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/aft) "caQ" = ( @@ -45000,9 +46703,9 @@ /area/science/misc_lab) "cbd" = ( /obj/machinery/power/apc{ + areastring = "/area/science/misc_lab"; dir = 4; name = "Testing Lab APC"; - areastring = "/area/science/misc_lab"; pixel_x = 26 }, /obj/structure/cable{ @@ -45100,13 +46803,11 @@ /turf/open/floor/plating, /area/tcommsat/computer) "cbp" = ( -/obj/structure/closet/secure_closet/engineering_chief{ - req_access_txt = "0" - }, +/obj/structure/closet/secure_closet/engineering_chief, /obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/crew_quarters/heads/chief"; dir = 4; name = "CE Office APC"; - areastring = "/area/crew_quarters/heads/chief"; pixel_x = 24 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -45170,16 +46871,14 @@ dir = 8; pixel_y = -22 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 2 - }, +/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) "cbu" = ( /obj/machinery/power/apc{ + areastring = "/area/engine/break_room"; dir = 8; name = "Engineering Foyer APC"; - areastring = "/area/engine/break_room"; pixel_x = -24 }, /obj/structure/cable{ @@ -45196,33 +46895,37 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cbw" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + sortType = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/port/aft) "cbx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"cby" = ( /obj/structure/cable{ icon_state = "1-2" }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"cby" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, /turf/open/floor/plating, /area/maintenance/port/aft) "cbz" = ( @@ -45419,6 +47122,11 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"cbX" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/miner/carbon_dioxide, +/turf/open/floor/engine/co2, +/area/engine/atmos) "cbY" = ( /obj/structure/table/reinforced, /obj/item/multitool, @@ -45472,10 +47180,10 @@ /turf/open/space, /area/solar/port/aft) "ccd" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/engine/atmos) "cce" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45638,17 +47346,15 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "ccu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 5 + icon_state = "1-2" }, /turf/open/floor/plating, /area/maintenance/port/aft) "ccv" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -45687,8 +47393,9 @@ /turf/open/floor/plasteel, /area/engine/atmos) "ccB" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/open/floor/engine/co2, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, /area/engine/atmos) "ccC" = ( /obj/machinery/air_sensor/atmos/carbon_tank, @@ -45720,6 +47427,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) +"ccH" = ( +/obj/structure/table, +/obj/item/paper/fluff/holodeck/disclaimer, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "ccI" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -45802,13 +47514,23 @@ /area/science/xenobiology) "ccR" = ( /obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/science/misc_lab) +"ccS" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/window, +/obj/structure/sign/poster/official/high_class_martini{ + pixel_x = -32 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "ccT" = ( /obj/machinery/light{ dir = 4 @@ -45896,38 +47618,30 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "cdh" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8; - sortType = 4 +/obj/structure/lattice/catwalk, +/obj/item/stack/marker_beacon{ + anchored = 1; + icon_state = "markerburgundy-on"; + light_power = 3; + light_range = 3; + name = "Docking Beacon"; + picked_color = "Burgundy" }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, -/area/maintenance/port/aft) +/area/space/nearstation) "cdi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/structure/grille, +/obj/structure/lattice, /turf/open/floor/plating, -/area/maintenance/port/aft) +/area/space/nearstation) "cdj" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/obj/item/cartridge/atmos, +/turf/open/floor/engine, +/area/engine/engineering) "cdk" = ( /obj/machinery/computer/atmos_alert, /obj/effect/turf_decal/tile/neutral{ @@ -45952,6 +47666,7 @@ /obj/item/paper/monitorkey, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/pen/fountain, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "cdn" = ( @@ -45996,9 +47711,9 @@ /area/maintenance/starboard/aft) "cds" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; dir = 8; name = "Starboard Quarter Maintenance APC"; - areastring = "/area/maintenance/starboard/aft"; pixel_x = -25 }, /obj/structure/cable{ @@ -46165,6 +47880,13 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"cdM" = ( +/obj/structure/window, +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "cdN" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -46179,6 +47901,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cdP" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "cdQ" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, @@ -46190,12 +47921,8 @@ /area/maintenance/starboard/aft) "cdS" = ( /obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/science/misc_lab) "cdT" = ( /obj/effect/turf_decal/stripes/line{ @@ -46223,9 +47950,9 @@ /area/maintenance/starboard/aft) "cdW" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/port/aft"; dir = 8; name = "Port Quarter Maintenance APC"; - areastring = "/area/maintenance/port/aft"; pixel_x = -25; pixel_y = 1 }, @@ -46242,6 +47969,13 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"cdY" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "cdZ" = ( /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/plasteel/dark/telecomms, @@ -46316,16 +48050,18 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cek" = ( -/obj/machinery/door/poddoor/preopen{ - id = "Engineering"; - name = "engineering security door" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/shower{ - dir = 8 +/obj/structure/closet/wardrobe/grey, +/obj/machinery/requests_console{ + department = "Locker Room"; + pixel_x = -32 }, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/assistantformal, +/obj/item/clothing/under/color/grey, +/obj/item/clothing/under/color/grey, /turf/open/floor/plasteel, -/area/engine/engineering) +/area/crew_quarters/locker) "cel" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -46402,6 +48138,18 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"ceu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "cev" = ( /obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -46532,12 +48280,8 @@ /area/maintenance/starboard/aft) "ceP" = ( /obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot{ - dir = 2 - }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, /area/science/misc_lab) "ceQ" = ( /obj/structure/cable{ @@ -46607,18 +48351,18 @@ "cfa" = ( /obj/structure/rack, /obj/item/storage/belt/utility, -/obj/item/wrench, -/obj/item/weldingtool, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/item/weldingtool/largetank, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/glasses/welding, /turf/open/floor/plasteel, /area/engine/engineering) "cfb" = ( @@ -46637,7 +48381,7 @@ /area/crew_quarters/heads/chief) "cfd" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/closet/radiation, @@ -46661,6 +48405,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) +"cff" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "cfg" = ( /obj/structure/cable{ icon_state = "1-4" @@ -46737,10 +48491,9 @@ /area/maintenance/aft) "cfr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 2; external_pressure_bound = 140; - pressure_checks = 0; - name = "killroom vent" + name = "killroom vent"; + pressure_checks = 0 }, /obj/machinery/camera{ c_tag = "Xenobiology Kill Room"; @@ -46804,14 +48557,33 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cfB" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/effect/turf_decal/tile/yellow, +"cfA" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"cfB" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) +"cfC" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ dir = 4 }, /turf/open/floor/plasteel, -/area/engine/engineering) +/area/crew_quarters/fitness) "cfD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ @@ -46824,6 +48596,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) +"cfE" = ( +/obj/machinery/button/door{ + desc = "Bolts the doors to the Private Study."; + id = "PrivateStudy"; + name = "Private Study Lock"; + pixel_x = 25; + pixel_y = 25; + req_access_txt = ""; + req_one_access_txt = "28;63" + }, +/turf/open/floor/wood, +/area/library) "cfF" = ( /obj/machinery/suit_storage_unit/ce, /obj/effect/turf_decal/stripes/line{ @@ -46858,17 +48642,15 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) "cfI" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 9 }, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, -/area/engine/engineering) +/area/hallway/primary/central) "cfJ" = ( /obj/machinery/light/small{ dir = 1 @@ -46932,6 +48714,14 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"cfS" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "cfT" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 9 @@ -46944,6 +48734,17 @@ }, /turf/closed/wall, /area/maintenance/disposal/incinerator) +"cfV" = ( +/obj/structure/table, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/obj/item/stack/packageWrap, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/turf/open/floor/plasteel, +/area/engine/break_room) "cfW" = ( /obj/structure/cable{ icon_state = "1-2" @@ -46956,9 +48757,8 @@ /area/maintenance/aft) "cfX" = ( /obj/machinery/power/apc{ - dir = 2; - name = "Incinerator APC"; areastring = "/area/maintenance/disposal/incinerator"; + name = "Incinerator APC"; pixel_y = -24 }, /obj/structure/cable, @@ -47067,7 +48867,6 @@ /area/science/xenobiology) "cgl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 2; external_pressure_bound = 120; name = "killroom vent" }, @@ -47097,11 +48896,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgp" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 +/obj/structure/rack, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/starboard/aft) @@ -47139,9 +48938,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgu" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgv" = ( @@ -47239,6 +49037,17 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"cgH" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/item/clothing/under/overalls, +/obj/item/clothing/under/overalls, +/obj/item/radio/headset/headset_eng, +/turf/open/floor/plasteel, +/area/engine/engineering) "cgI" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -47266,6 +49075,34 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"cgM" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/item/clothing/under/overalls, +/obj/item/clothing/under/overalls, +/obj/item/radio/headset/headset_eng, +/turf/open/floor/plasteel, +/area/engine/engineering) +"cgN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "cgO" = ( /obj/structure/rack, /obj/item/lighter, @@ -47286,6 +49123,19 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) +"cgP" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/floor/plasteel, +/area/engine/engineering) "cgQ" = ( /obj/machinery/camera{ c_tag = "Engineering East"; @@ -47486,7 +49336,6 @@ dir = 1 }, /obj/machinery/atmospherics/components/binary/pump{ - dir = 2; name = "atmospherics mix pump" }, /turf/open/floor/plasteel, @@ -47726,12 +49575,10 @@ /turf/open/space, /area/solar/port/aft) "chM" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/port/aft) +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/radio/headset/headset_eng, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "chN" = ( /obj/structure/cable{ icon_state = "4-8" @@ -47791,6 +49638,22 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"chU" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = 6 + }, +/obj/item/storage/toolbox/artistic{ + icon_state = "yellow"; + item_state = "toolbox_yellow"; + name = "Cable Toolbox"; + pixel_y = -4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "chV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -47809,6 +49672,22 @@ }, /turf/open/floor/engine, /area/engine/engineering) +"chW" = ( +/obj/item/wrench, +/obj/structure/rack, +/obj/item/weldingtool/hugetank, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "chX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -47825,6 +49704,10 @@ /obj/machinery/shieldgen, /turf/open/floor/plating, /area/engine/engineering) +"chZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/crew_quarters/locker) "cia" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -47837,6 +49720,14 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cib" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) "cic" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -47859,9 +49750,9 @@ }, /obj/structure/reagent_dispensers/watertank, /obj/machinery/power/apc/highcap/fifteen_k{ + areastring = "/area/engine/engineering"; dir = 1; name = "Engineering APC"; - areastring = "/area/engine/engineering"; pixel_y = 25 }, /obj/structure/cable{ @@ -47903,6 +49794,10 @@ "cig" = ( /turf/closed/wall, /area/engine/engineering) +"cih" = ( +/obj/effect/spawner/lootdrop/keg, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "cii" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -47958,6 +49853,13 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) +"cil" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/light_construct{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "cim" = ( /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) @@ -48029,6 +49931,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) +"ciw" = ( +/obj/structure/light_construct{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "cix" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/closed/wall/r_wall, @@ -48118,8 +50026,10 @@ }, /area/maintenance/starboard/aft) "ciK" = ( -/obj/structure/rack, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "ciL" = ( @@ -48172,17 +50082,16 @@ /obj/machinery/power/solar_control{ dir = 4; id = "portsolar"; - name = "Port Quarter Solar Control"; - track = 0 + name = "Port Quarter Solar Control" }, /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/solars/port/aft) "ciR" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/port/aft"; dir = 4; name = "Port Quarter Solar APC"; - areastring = "/area/maintenance/solars/port/aft"; pixel_x = 23; pixel_y = 2 }, @@ -48207,22 +50116,27 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/port/aft) +"ciV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/light_construct{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "ciW" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/engine/engineering) "ciX" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/engine/engineering) "ciY" = ( /obj/machinery/door/poddoor{ @@ -48698,6 +50612,11 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) +"cjZ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel, +/area/engine/engineering) "cka" = ( /obj/machinery/door/poddoor/preopen{ id = "testlab"; @@ -48807,14 +50726,22 @@ /turf/closed/wall, /area/maintenance/starboard/aft) "ckp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" + lootcount = 3; + name = "3maintenance loot spawner" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"ckq" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/rods/fifty, +/turf/open/floor/plasteel, +/area/engine/engineering) "ckr" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -48831,9 +50758,9 @@ /area/maintenance/solars/starboard/aft) "ckt" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/starboard/aft"; dir = 8; name = "Starboard Quarter Solar APC"; - areastring = "/area/maintenance/solars/starboard/aft"; pixel_x = -26; pixel_y = 3 }, @@ -48907,6 +50834,14 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"ckE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/maintenance{ + name = "Locker Room Maintenance"; + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/maintenance/port) "ckF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, @@ -48931,6 +50866,15 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"ckJ" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/plating, +/area/maintenance/department/medical/morgue) "ckK" = ( /obj/structure/tank_dispenser, /obj/effect/turf_decal/bot{ @@ -48995,10 +50939,27 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) +"ckP" = ( +/obj/structure/noticeboard{ + pixel_y = -27 + }, +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/turf/open/floor/wood, +/area/crew_quarters/bar) "ckQ" = ( /obj/structure/closet/cardboard, /turf/open/floor/plasteel, /area/quartermaster/warehouse) +"ckR" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/gold, +/obj/item/coin/gold, +/obj/item/coin/gold, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ckS" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, @@ -49072,9 +51033,7 @@ /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cle" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "clf" = ( @@ -49188,13 +51147,10 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cls" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/starboard/aft) "clt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -49328,6 +51284,12 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) +"clH" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "clI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -49342,23 +51304,33 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/engine/engineering) -"clM" = ( -/obj/structure/table, -/obj/item/crowbar/large, -/obj/item/storage/box/lights/mixed, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 +"clK" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/turf/open/floor/plating, /area/engine/engineering) +"clL" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"clM" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/coin/silver, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "clN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/yellow{ @@ -49367,13 +51339,21 @@ /turf/open/floor/plasteel, /area/engine/engineering) "clO" = ( -/obj/machinery/vr_sleeper, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/janitor, +/mob/living/simple_animal/hostile/lizard{ + name = "Wags-His-Tail"; + real_name = "Wags-His-Tail" }, /turf/open/floor/plasteel, -/area/crew_quarters/fitness) +/area/janitor) +"clP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/port) "clQ" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -49381,21 +51361,9 @@ /turf/open/floor/plasteel, /area/engine/engineering) "clR" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_construction, -/obj/item/clothing/glasses/meson, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "clS" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/rnd/production/techfab/department/security, @@ -49406,28 +51374,30 @@ /turf/open/floor/plasteel, /area/security/main) "clT" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/engine/n2, -/area/engine/atmos) +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "clU" = ( /turf/open/floor/engine/n2, /area/engine/atmos) "clV" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/engine/o2, -/area/engine/atmos) +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "clW" = ( /turf/open/floor/engine/o2, /area/engine/atmos) "clX" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/landmark/xmastree, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/light{ dir = 1 }, +/obj/item/radio/intercom{ + pixel_y = 25 + }, /turf/open/floor/plasteel, -/area/crew_quarters/bar) +/area/hallway/primary/central) "clY" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/engine/air, @@ -49435,17 +51405,28 @@ "clZ" = ( /turf/open/floor/engine/air, /area/engine/atmos) +"cma" = ( +/obj/machinery/hydroponics/constructable, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29 + }, +/turf/open/floor/plasteel/dark, +/area/hydroponics) "cmb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cmc" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 2 +/obj/machinery/camera{ + c_tag = "Starboard Primary Hallway" }, -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "cmd" = ( /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) @@ -49509,15 +51490,27 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"cmm" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/kitchen/rollingpin, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/kitchen) "cmn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/structure/table/wood, +/obj/item/storage/pill_bottle/dice, +/turf/open/floor/plasteel, +/area/security/prison) "cmo" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cmp" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck, +/turf/open/floor/plasteel, +/area/security/prison) "cmq" = ( /obj/effect/landmark/xeno_spawn, /obj/structure/disposalpipe/segment, @@ -49526,21 +51519,18 @@ }, /area/maintenance/starboard/aft) "cmr" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/structure/chair/comfy/brown{ + dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/turf/open/floor/plasteel, +/area/security/prison) "cms" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/structure/chair/comfy/brown{ + color = "#66b266"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/turf/open/floor/plasteel, +/area/security/prison) "cmt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -49567,8 +51557,7 @@ /obj/machinery/power/solar_control{ dir = 1; id = "starboardsolar"; - name = "Starboard Quarter Solar Control"; - track = 0 + name = "Starboard Quarter Solar Control" }, /obj/structure/cable{ icon_state = "0-4" @@ -49648,6 +51637,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) +"cmE" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/prison) "cmF" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -49659,7 +51655,7 @@ /area/engine/engineering) "cmG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable{ @@ -49676,6 +51672,34 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cmH" = ( +/obj/item/electropack/shockcollar, +/obj/item/assembly/signaler, +/turf/open/floor/plating, +/area/security/prison) +"cmI" = ( +/obj/structure/bed, +/obj/effect/spawner/lootdrop/bedsheet, +/turf/open/floor/plating, +/area/security/prison) +"cmJ" = ( +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"cmK" = ( +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "cmL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -49725,9 +51749,7 @@ /turf/open/floor/plasteel, /area/construction) "cmY" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 2 - }, +/obj/machinery/atmospherics/components/binary/pump/on, /obj/machinery/light/small{ dir = 8 }, @@ -49877,9 +51899,6 @@ /area/engine/engine_smes) "cnr" = ( /obj/machinery/door/window/southleft{ - base_state = "left"; - dir = 2; - icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "10" }, @@ -49971,7 +51990,6 @@ /area/maintenance/aft) "cnF" = ( /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 2; name = "Waste Out" }, /obj/structure/disposalpipe/segment{ @@ -49996,11 +52014,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cnJ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cnK" = ( /obj/structure/cable{ icon_state = "1-2" @@ -50390,39 +52403,18 @@ pixel_x = 3; pixel_y = -3 }, -/obj/effect/turf_decal/bot{ - dir = 2 - }, +/obj/effect/turf_decal/bot, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 }, -/turf/open/floor/plasteel{ - dir = 2 - }, +/turf/open/floor/plasteel, /area/ai_monitored/security/armory) "coT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/meter, /turf/open/floor/engine, /area/science/misc_lab) -"coZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/open/floor/plasteel, -/area/engine/engineering) -"cpa" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/closet/secure_closet/engineering_welding, -/turf/open/floor/plasteel, -/area/engine/engineering) "cpb" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small{ @@ -50484,9 +52476,7 @@ /turf/open/floor/plasteel, /area/engine/engine_smes) "cpk" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/engine/engine_smes) "cpl" = ( @@ -50542,13 +52532,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cps" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/turf/open/floor/plasteel, -/area/engine/engineering) "cpt" = ( /obj/structure/table, /obj/item/clothing/gloves/color/yellow, @@ -50648,7 +52631,6 @@ "cpO" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 2; name = "Incinerator Output Pump" }, /turf/open/space, @@ -50672,9 +52654,8 @@ "cpS" = ( /obj/structure/cable, /obj/machinery/power/apc{ - dir = 2; - name = "SMES room APC"; areastring = "/area/engine/engine_smes"; + name = "SMES room APC"; pixel_y = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -50705,25 +52686,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/engine_smes) -"cpV" = ( -/obj/machinery/camera{ - c_tag = "Engineering Storage"; - dir = 4 - }, -/obj/machinery/rnd/production/protolathe/department/engineering, -/turf/open/floor/plasteel, -/area/engine/engineering) "cpW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, /turf/open/floor/plasteel, /area/engine/engineering) -"cpX" = ( -/obj/structure/table, -/obj/item/stack/rods/fifty, -/turf/open/floor/plasteel, -/area/engine/engineering) "cpY" = ( /obj/structure/cable{ icon_state = "2-8" @@ -50905,13 +52873,6 @@ /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) -"cqu" = ( -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cqv" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, @@ -50969,7 +52930,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/engine, @@ -51025,11 +52986,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"cqJ" = ( -/obj/structure/cable, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/starboard/aft) "cqK" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -51044,12 +53000,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"cqM" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "cqN" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -51079,10 +53029,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cqQ" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plasteel, -/area/engine/engineering) "cqR" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel, @@ -51131,7 +53077,6 @@ /area/engine/supermatter) "crb" = ( /obj/machinery/atmospherics/components/binary/pump{ - dir = 2; name = "Gas to Chamber" }, /obj/effect/decal/cleanable/dirt, @@ -51158,12 +53103,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"cri" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "crk" = ( /obj/structure/lattice/catwalk, /turf/open/space, @@ -51252,9 +53191,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "crz" = ( @@ -51545,14 +53482,6 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/space, /area/space/nearstation) -"csy" = ( -/obj/structure/table, -/obj/item/weldingtool, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "csA" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "engsm"; @@ -51570,13 +53499,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) -"csE" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/starboard/aft) "csH" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -51662,27 +53584,6 @@ }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) -"csY" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/starboard/aft) -"csZ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solar/starboard/aft) "cta" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -51981,7 +53882,7 @@ pixel_y = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -52034,9 +53935,9 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/aisat_interior"; dir = 4; name = "MiniSat Foyer APC"; - areastring = "/area/ai_monitored/turret_protected/aisat_interior"; pixel_x = 27 }, /obj/structure/chair, @@ -52101,8 +54002,6 @@ "cud" = ( /obj/machinery/turretid{ control_area = "/area/ai_monitored/turret_protected/aisat_interior"; - enabled = 1; - icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_y = -24; req_access = null; @@ -52181,7 +54080,6 @@ /area/ai_monitored/turret_protected/aisat/service) "cun" = ( /obj/machinery/atmospherics/components/binary/pump{ - dir = 2; name = "Mix to MiniSat" }, /obj/effect/turf_decal/stripes/line, @@ -52190,12 +54088,10 @@ "cuo" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat/atmos) "cup" = ( @@ -52279,7 +54175,7 @@ amount = 35 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/corner{ @@ -52347,8 +54243,6 @@ }, /obj/machinery/turretid{ control_area = "/area/ai_monitored/turret_protected/aisat/atmos"; - enabled = 1; - icon_state = "control_standby"; name = "Atmospherics Turret Control"; pixel_x = -27; req_access = null; @@ -52374,8 +54268,6 @@ }, /obj/machinery/turretid{ control_area = "/area/ai_monitored/turret_protected/aisat/service"; - enabled = 1; - icon_state = "control_standby"; name = "Service Bay Turret Control"; pixel_x = 27; req_access = null; @@ -52464,9 +54356,9 @@ /area/ai_monitored/turret_protected/aisat/atmos) "cuM" = ( /obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/aisat/atmos"; dir = 8; name = "MiniSat Atmospherics APC"; - areastring = "/area/ai_monitored/turret_protected/aisat/atmos"; pixel_x = -27 }, /obj/structure/cable{ @@ -52590,9 +54482,9 @@ /area/ai_monitored/turret_protected/aisat/service) "cuX" = ( /obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/aisat/service"; dir = 4; name = "MiniSat Service Bay APC"; - areastring = "/area/ai_monitored/turret_protected/aisat/service"; pixel_x = 27 }, /obj/structure/cable{ @@ -52677,8 +54569,6 @@ }, /obj/machinery/turretid{ control_area = "/area/ai_monitored/turret_protected/aisat/hallway"; - enabled = 1; - icon_state = "control_standby"; name = "Chamber Hallway Turret Control"; pixel_x = 32; pixel_y = -24; @@ -52796,23 +54686,18 @@ "cvx" = ( /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom{ - anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_y = 28 }, /obj/item/radio/intercom{ - broadcasting = 0; freerange = 1; - listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5 }, /obj/item/radio/intercom{ - anyai = 1; - broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; @@ -52835,23 +54720,18 @@ "cvA" = ( /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom{ - anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_y = 28 }, /obj/item/radio/intercom{ - broadcasting = 0; freerange = 1; - listening = 1; name = "Common Channel"; pixel_x = 27; pixel_y = 5 }, /obj/item/radio/intercom{ - anyai = 1; - broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; @@ -52950,7 +54830,7 @@ network = list("aicore") }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/circuit, @@ -53047,9 +54927,9 @@ "cwa" = ( /obj/structure/cable, /obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/aisat/hallway"; dir = 4; name = "MiniSat Chamber Hallway APC"; - areastring = "/area/ai_monitored/turret_protected/aisat/hallway"; pixel_x = 27 }, /turf/open/floor/circuit, @@ -53148,7 +55028,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -53246,13 +55126,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) -"cwy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table_frame, -/obj/item/wirerod, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cwz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -53312,9 +55185,8 @@ icon_state = "0-8" }, /obj/machinery/power/apc/highcap/five_k{ - dir = 2; - name = "AI Chamber APC"; areastring = "/area/ai_monitored/turret_protected/ai"; + name = "AI Chamber APC"; pixel_y = -24 }, /obj/machinery/flasher{ @@ -53454,14 +55326,6 @@ }, /turf/open/floor/plating, /area/security/processing) -"cxW" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "cxY" = ( /obj/machinery/camera{ c_tag = "Arrivals Escape Pod 1"; @@ -53740,15 +55604,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"czP" = ( -/obj/structure/chair/stool/bar, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/bar) "czQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, @@ -53995,15 +55850,6 @@ /obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) -"cAz" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) "cAA" = ( /obj/machinery/light/small{ dir = 1 @@ -54049,9 +55895,8 @@ icon_state = "4-8" }, /obj/machinery/power/apc{ - dir = 2; - name = "Head of Personnel APC"; areastring = "/area/crew_quarters/heads/hop"; + name = "Head of Personnel APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -54079,14 +55924,6 @@ /obj/machinery/light/small, /turf/open/floor/plating, /area/maintenance/port/aft) -"cAL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/mob/living/simple_animal/hostile/lizard{ - name = "Wags-His-Tail"; - real_name = "Wags-His-Tail" - }, -/turf/open/floor/plasteel, -/area/janitor) "cAN" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -54125,23 +55962,18 @@ "cAS" = ( /obj/effect/landmark/start/ai, /obj/item/radio/intercom{ - broadcasting = 0; freerange = 1; - listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = -9 }, /obj/item/radio/intercom{ - anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_y = -31 }, /obj/item/radio/intercom{ - anyai = 1; - broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; @@ -54236,7 +56068,6 @@ "cBb" = ( /obj/machinery/camera/motion{ c_tag = "MiniSat AI Chamber South"; - dir = 2; network = list("aicore") }, /turf/open/floor/circuit, @@ -54268,7 +56099,6 @@ "cBf" = ( /obj/machinery/camera{ c_tag = "MiniSat External South"; - dir = 2; network = list("minisat"); start_active = 1 }, @@ -54318,14 +56148,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"cBn" = ( -/obj/machinery/camera{ - c_tag = "Locker Room Toilets"; - dir = 8 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/freezer, -/area/crew_quarters/toilet/locker) "cBo" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/wood, @@ -54401,7 +56223,6 @@ /area/science/xenobiology) "cBA" = ( /obj/machinery/button/massdriver{ - dir = 2; id = "toxinsdriver"; pixel_y = 24 }, @@ -54540,18 +56361,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/hallway) -"cBT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"cBU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cBV" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -54626,31 +56435,6 @@ }, /turf/closed/wall, /area/security/detectives_office) -"cCl" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating, -/area/maintenance/port) -"cCm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/port) -"cCn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "Detective's Office APC"; - areastring = "/area/security/detectives_office"; - pixel_x = 24 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "cCo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55138,7 +56922,7 @@ /area/engine/engineering) "cEk" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -55187,7 +56971,6 @@ "cEu" = ( /obj/machinery/camera{ c_tag = "Supermatter Chamber"; - dir = 2; network = list("engine"); pixel_x = 23 }, @@ -55382,7 +57165,6 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/components/binary/pump{ - dir = 2; name = "Cooling Loop Bypass" }, /turf/open/floor/engine, @@ -55547,7 +57329,6 @@ }, /obj/machinery/camera{ c_tag = "Engineering Supermatter Aft"; - dir = 2; network = list("ss13","engine"); pixel_x = 23 }, @@ -55599,13 +57380,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"cGd" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/engine, -/area/engine/engineering) "cGe" = ( /obj/structure/cable{ icon_state = "2-8" @@ -55654,10 +57428,6 @@ /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"cGl" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "cGr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -55913,7 +57683,6 @@ /area/science/robotics/mechbay) "cHF" = ( /obj/machinery/button/door{ - dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 6; @@ -56262,9 +58031,9 @@ /area/quartermaster/sorting) "cNL" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/central"; dir = 1; name = "Central Maintenance APC"; - areastring = "/area/maintenance/central"; pixel_y = 24 }, /obj/structure/cable{ @@ -56299,9 +58068,9 @@ /area/maintenance/starboard) "cNS" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard"; dir = 4; name = "Starboard Maintenance APC"; - areastring = "/area/maintenance/starboard"; pixel_x = 26 }, /obj/structure/cable{ @@ -56430,12 +58199,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cSz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/chapel/main) "cSA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -56528,7 +58291,6 @@ "cSM" = ( /obj/machinery/computer/station_alert, /obj/item/radio/intercom{ - broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, @@ -56727,7 +58489,6 @@ icon_state = "4-8" }, /obj/machinery/requests_console{ - announcementConsole = 0; department = "Engineering"; departmentType = 4; name = "Engineering RC"; @@ -56746,9 +58507,9 @@ icon_state = "1-2" }, /obj/machinery/power/apc{ + areastring = "/area/maintenance/central/secondary"; dir = 8; name = "Central Maintenance APC"; - areastring = "/area/maintenance/central/secondary"; pixel_x = -24 }, /obj/structure/cable{ @@ -56772,12 +58533,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"cTI" = ( -/obj/machinery/door/airlock/maintenance/abandoned{ - req_access_txt = "12" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cTJ" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -56808,9 +58563,9 @@ /area/medical/morgue) "cTM" = ( /obj/machinery/power/apc{ + areastring = "/area/maintenance/department/medical/morgue"; dir = 4; name = "Morgue Maintenance APC"; - areastring = "/area/maintenance/department/medical/morgue"; pixel_x = 26 }, /obj/structure/cable{ @@ -57015,13 +58770,6 @@ icon_state = "wood-broken4" }, /area/maintenance/bar) -"fGf" = ( -/obj/machinery/smartfridge/disks{ - pixel_y = 2 - }, -/obj/structure/table, -/turf/open/floor/plasteel, -/area/hydroponics) "fKl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, @@ -57032,17 +58780,10 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"gbq" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/construction) "gbT" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -57058,18 +58799,6 @@ "gjl" = ( /turf/closed/wall, /area/quartermaster/warehouse) -"gsz" = ( -/obj/machinery/camera{ - c_tag = "Fitness Room South"; - dir = 1 - }, -/obj/machinery/vr_sleeper, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/fitness) "gwd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -57098,12 +58827,6 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"gOZ" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/turf/open/floor/plating, -/area/crew_quarters/fitness) "gWd" = ( /obj/structure/cable{ icon_state = "1-4" @@ -57128,9 +58851,9 @@ icon_state = "1-2" }, /obj/machinery/power/apc{ + areastring = "/area/quartermaster/warehouse"; dir = 4; name = "Cargo Warehouse APC"; - areastring = "/area/quartermaster/warehouse"; pixel_x = 26 }, /obj/structure/cable{ @@ -57138,10 +58861,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"hwu" = ( -/obj/machinery/vr_sleeper, -/turf/open/floor/plasteel, -/area/security/prison) "hEm" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" @@ -57159,13 +58878,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/circuit) -"ihn" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/vr_sleeper, -/turf/open/floor/plasteel, -/area/security/prison) "iiW" = ( /turf/open/floor/wood, /area/maintenance/bar) @@ -57255,12 +58967,6 @@ /obj/machinery/rnd/production/techfab/department/cargo, /turf/open/floor/plasteel, /area/quartermaster/office) -"jnR" = ( -/obj/machinery/atmospherics/components/binary/valve{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "jqv" = ( /obj/structure/chair/wood/normal{ dir = 1 @@ -57311,15 +59017,6 @@ }, /turf/open/floor/wood, /area/maintenance/port/aft) -"jMY" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stack/cable_coil, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "jSO" = ( /obj/machinery/light{ dir = 4 @@ -57338,14 +59035,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"khb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/structure/table, -/obj/item/kitchen/rollingpin, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "khB" = ( /obj/machinery/door/airlock/external{ req_access_txt = "13" @@ -57390,14 +59079,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) -"kQk" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/turf/open/floor/plating, -/area/maintenance/department/medical/morgue) "kQq" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -57437,14 +59118,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/science/circuit) -"mjr" = ( -/obj/machinery/vending/wardrobe/bar_wardrobe, -/turf/open/floor/wood, -/area/crew_quarters/bar) -"moD" = ( -/obj/effect/landmark/barthpot, -/turf/open/floor/wood, -/area/library) "mpI" = ( /obj/structure/table/wood, /turf/open/floor/wood{ @@ -57500,8 +59173,8 @@ /area/engine/engineering) "nxv" = ( /obj/machinery/power/apc{ - name = "Construction Area APC"; areastring = "/area/construction"; + name = "Construction Area APC"; pixel_y = -24 }, /obj/structure/cable{ @@ -57530,6 +59203,10 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"nWU" = ( +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/sleeper) "oce" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -57556,7 +59233,6 @@ /area/science/circuit) "oKh" = ( /obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; dir = 8 }, /turf/open/floor/wood, @@ -57597,9 +59273,7 @@ pixel_y = -3 }, /obj/item/radio/intercom{ - freerange = 0; frequency = 1485; - listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30 }, @@ -57668,12 +59342,6 @@ /obj/item/reagent_containers/food/drinks/beer, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"rsp" = ( -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "rBq" = ( /obj/item/clothing/head/kitty, /obj/item/clothing/under/maid, @@ -57732,12 +59400,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) -"sxs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/table, -/obj/item/shovel/spade, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "sAM" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" @@ -57817,7 +59479,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 2; pixel_y = 24 }, /turf/open/floor/carpet, @@ -57832,10 +59493,6 @@ /obj/item/restraints/handcuffs/fake, /turf/open/floor/plating, /area/maintenance/bar) -"tyO" = ( -/obj/item/clothing/under/color/grey, -/turf/open/floor/plating, -/area/maintenance/bar) "tMl" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/showroomfloor, @@ -57885,16 +59542,6 @@ /obj/item/flashlight, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"uhH" = ( -/obj/item/wrench, -/obj/item/weldingtool, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/rack, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "ujF" = ( /obj/machinery/cryopod{ dir = 4 @@ -57948,9 +59595,7 @@ /turf/open/floor/plasteel, /area/science/circuit) "uPT" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 2 - }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58001,13 +59646,6 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"vpY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "vsM" = ( /obj/machinery/power/apc/auto_name/south, /obj/structure/cable, @@ -58024,7 +59662,7 @@ "vzp" = ( /obj/structure/table/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/stock_parts/cell/high, @@ -58119,11 +59757,6 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"wUY" = ( -/obj/structure/table, -/obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plasteel, -/area/hallway/secondary/service) "xgF" = ( /obj/structure/chair/stool/bar, /turf/open/floor/wood{ @@ -64207,6 +65840,11 @@ aaa aaa aaa aaa +cdh +aaa +aaa +aaa +cdh aaa aaa aaa @@ -64219,12 +65857,7 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +aVw aaa aaa aaa @@ -64458,23 +66091,23 @@ aaa aaa aaa aaa +cdh +aaa +cdh aaa aaa aaa +gXs aaa aaa aaa +gXs aaa aaa aaa +cdh aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cdh aaa aaa aaa @@ -64715,23 +66348,23 @@ aaa aaa aaa aaa +gXs +aaa +gXs aaa aaa +gXs +apv +gXs +gXs +gXs +apv +gXs aaa aaa +gXs aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +gXs aaa aaa aaa @@ -64971,25 +66604,25 @@ aaa aaa aaa aaa +apv +apv +gXs +aag +apv +gXs +gXs aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aae -aaa +gXs +gXs +apv +apv +aQd +aag +apv aaa aaa aaa @@ -65228,25 +66861,25 @@ aaa aaa aaa aaa +aGk +aQe +aaa +aQe +aRx +gXs +aoV aaa aaa aaa aaa aaa aaa +gXs +aGk +aQe aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aQe +aRx aaa aaa aaa @@ -65485,10 +67118,11 @@ aaa aaa aaa aaa -aaa +aab aaa cpe aaa +asL aaa aaa aaa @@ -65498,12 +67132,11 @@ aaa aaa aaa aaa -aaa -aaa +aab aaa cwV aaa -aaa +asL aaa aaa aaa @@ -65741,14 +67374,12 @@ aaa aaa aaa aae -aaf +alN +gXs aaa aaa aaa -aaa -aaa -aaa -aae +gXs aaa aaa aaa @@ -65758,9 +67389,11 @@ aaa aaa aaa aaa +gXs aaa aaa aaa +gXs aaa aaa aaa @@ -65998,14 +67631,12 @@ aaa aaa aaa aaa -aaf -aaa -aaa -aaa -aaa -aaa -aaa -aaa +alN +gXs +aaa +aaa +aaa +gXs aaa aaa aaa @@ -66015,9 +67646,11 @@ aaa aaa aaa aaa +gXs aaa aaa aaa +gXs aaa aaa aaa @@ -66255,14 +67888,12 @@ aaa aaa aaa aaa -aaf -aaa -aaa -aaa -aaa -aaa -aaa -aaa +alN +gXs +aaa +aaa +aaa +gXs aaa aaa aaa @@ -66272,9 +67903,11 @@ aaa aaa aaa aaa +gXs aaa aaa aaa +gXs aaa aaa aaa @@ -66512,11 +68145,12 @@ aaa aaa aaa aaa -aaf -aaa +alN +gXs aaa cqq aaa +gXs aaa aaa aaa @@ -66526,12 +68160,11 @@ aaa aaa aaa aaa -aaa -aaa +gXs aaa cqq aaa -aaa +gXs aaa aaa aaa @@ -66769,7 +68402,7 @@ aaf aaf aaf aaa -aaf +alN arB asE cyb @@ -68842,7 +70475,7 @@ aaa awW aOh ayl -ayl +bRf aRY awW aaa @@ -68854,7 +70487,7 @@ awW awZ ayl ayl -bgi +aQR awW aaa aaa @@ -71419,7 +73052,7 @@ aUO aUy aWm aWf -aUQ +bcW czK bhN bcl @@ -71702,7 +73335,7 @@ aaa aaa aaa aaa -aae +aaa aaa aaa aaa @@ -71958,7 +73591,7 @@ aaa aaa aaa aaa -aaa +aae aaa aaa aaa @@ -72186,7 +73819,7 @@ aPa aQn ayl czK -aUP +aUO aUO aXL aXZ @@ -72437,7 +74070,7 @@ aHy ayl aKk aLA -aNf +aHD aNf aLA aQD @@ -74463,8 +76096,8 @@ ady ady ady ady -ady ajq +aTp ajW akB alh @@ -74489,7 +76122,7 @@ aBG aAQ aAQ aAQ -aBM +aAQ aAQ aKn aLE @@ -74505,11 +76138,11 @@ aXQ aXQ aXQ aXQ -aXQ -aXQ -aXQ -aXQ -bhQ +aPz +aPz +bcJ +aPz +bkg bjj bkF aaa @@ -74759,14 +76392,14 @@ aPA aPA aPA aXQ -aZt +baO aXQ -aZt -aXQ -aZt -aXQ -aZt -bhQ +bdV +aPz +axS +bgs +biM +bkg bjj bkF aaa @@ -75011,20 +76644,20 @@ aNm aOl aPA aQO -aSh aTw aUU +cek aWn aXQ -aZv -aXQ bbL aXQ -bdJ -aXQ -bgr -bhQ -bjj +bgl +aPz +aEb +bhK +biZ +bvn +bml bkF aaa aaa @@ -75249,7 +76882,7 @@ alU amC arM alU -atT +avc asO avV atO @@ -75257,7 +76890,7 @@ ayw atN aAV aBQ -aDh +bbA aDo aFQ aHe @@ -75274,13 +76907,13 @@ aUn aTy aWy aYe -aZw -aZw bbq -bct -bfa -bfa -bhQ +bcS +aPz +aEc +bhP +bjD +bkg bjk bkE aaa @@ -75524,20 +77157,20 @@ aLk aNo aOo aPA -aQQ +aQS aQN aSV aUo aUX aXp -baO -aZo -baw -bcO -baw -cBn -bgs +bct +bdJ +bgr +aPz +aSG bhQ +bjW +bwP bjk bkF aaa @@ -75781,20 +77414,20 @@ aLE aLE aOn aPA -aQP +aQQ aQN -aTx -aUV +aTz +aUt aWo aXQ aXQ aXQ aXQ -aXQ -aXQ -aXQ -aXQ -bhQ +aPz +aPz +aPz +aPz +bkg bjk aPz aaa @@ -75838,7 +77471,7 @@ ccb ccb ccb aaa -chL +aUf aaa ccb ccb @@ -76030,26 +77663,26 @@ aAY aBQ aDl bxk -aFS +aDo aDo aIX -aBQ +blt aLE aLE aOp aPA -aQR +aMg aQN -aTA -aUq +aQN +aUt aWq -aXs -aYH -aZx +aQN +aQN +aQN +aQN +bfe bbO aPA -bdM -aPz bgt bhS bjk @@ -76095,7 +77728,7 @@ aaa aaf aaa aaa -chL +aUg aaa aaa aaf @@ -76297,16 +77930,16 @@ aOl aPC aQN aQN -aTz -aUp -aWq -aXr -aZx +aTB +aUq +aUV +aXv +bbr +aQN +aQN cBh -bbN +bit aPA -bdL -aPz bgt bhR bjk @@ -76352,7 +77985,7 @@ aaf aaf aaf aaf -chM +aUg aaf aaf aaf @@ -76545,25 +78178,25 @@ aBQ aDn aDo aDo -aHD +aFU aIZ aBQ aLE aLE aOq aPD -aQT -aQT +aQV +aQN aTC -aUs +aUr aUY -aXv -aYS -aZx +aXw +bbU +aQN +aQN +bfe bbO aPA -bdM -aPz aSg bhT bjk @@ -76793,7 +78426,7 @@ amC amC amC alU -aqO +avc amC atJ atO @@ -76804,23 +78437,23 @@ aDo aDo aDo aIY -aBQ +blt aLE aLE aOl aPA -aQS +aQX aQN -aTB +aTC aUr -aWq -aXt +aYX +aXx +bcu +aQN +aQN aPA aPA aPA -aPA -aPA -aPz bel bfI bgq @@ -77047,7 +78680,7 @@ aaf alU alU alU -alU +amC amC alU atM @@ -77058,7 +78691,7 @@ aAY aBQ aDp aDo -aFU +aFS aDo aJb aKp @@ -77066,15 +78699,15 @@ aLE aLE aOl aPE -aQV +aQY +aQN +aTC +aUs +aWB +aXx +bcu +aQN aQN -aSi -aUu -aWq -aXw -aZB -aZB -aZB aZB aPA bfc @@ -77303,8 +78936,8 @@ alU aaf aaH alU -arO -alU +aQT +amC amC avc atO @@ -77323,15 +78956,15 @@ aLH aLE aOl aPA -aQU +aSX +aQN +aTD +aUu +aXk +aXA +bcw aQN aQN -aUt -aWq -aXw -aZA -aZA -aZA aZA aPA aWv @@ -77580,17 +79213,17 @@ aLK aLK aOr aPA -aQX -aQN +aTx aQN +aSi aUv aWp -aXA -aYX -aYX -aYX -bbs -bcw +aTy +aTy +aTy +aTy +bcT +chZ bfd bgw aZE @@ -77837,18 +79470,18 @@ aLJ aLE aOl aPA -aQW -aQW -aTD -aQW +aTA +aQN +aUp aUZ -aXx +aXr aYU aYU aYU -bbr -bcu -bfe +aYU +aYU +ckE +bTt aYb aZE bjm @@ -78098,14 +79731,14 @@ aPG aPG aPG aPG +aZx +aQW +aQW +aQW +aQW +bdL aPA -aPA -aPA -aPA -aPA -aPA -aPA -aWv +clP aYb aZE bjp @@ -78351,19 +79984,19 @@ aLL bDe aOl aPF -aQY -aSk +aSh +aQt aTE aPG -aWu -aYa -aZD -aZD -hcE -aZD -aZD -bff -bfk +aPA +aPA +aPA +aPA +aPA +aPA +aPA +aWv +aYb aZE bjo bjr @@ -78612,17 +80245,17 @@ aRa aRa aTG aPG -aWw -aYc -aZF -aZF -aZF -aZF -aZF -aZF -bgy +aWu +aYa +aZD +aZD +hcE +aZD +aZD +bff +bfk aZE -bjr +bgx bjr ama bmh @@ -78664,7 +80297,7 @@ bHE bUs ceY bCq -bHE +bJP bUs bHE bLu @@ -78869,15 +80502,15 @@ aQZ aRa aTF aPG -aSX -aWC -baS -aZI -baS -baS -bdS -bdU -ckQ +aWw +aYc +aZF +aZF +aZF +aZF +aZF +aZF +bgy gjl bjq bjr @@ -79131,7 +80764,7 @@ aXJ bgA aZp baY -bcJ +aYZ bcF bfg bgA @@ -79420,7 +81053,7 @@ aoV bCq bHE bHE -bSq +bad cdb bCq bVE @@ -79645,7 +81278,7 @@ aXM bfi cBi bbS -bcS +bdM bbt bfi beD @@ -79899,14 +81532,14 @@ aTH aPK aWz aWC +baS +baS +baS +bcR +baS +baS +baS gjl -gjl -gjl -bcT -gjl -gjl -gjl -aZE bju biv bmf @@ -79947,14 +81580,14 @@ mrR dKP odx rBq -tur +bat bCq bUs bLv aaa bLv bJf -ccd +cfS bCq aaa aaa @@ -80154,16 +81787,16 @@ aRc aSm aTJ aPK -cCl -aYh -cCm -cCm -cCm -cCn -aPz +aWA +aWC +baS +aZI +baS bdW -aSg -aZE +bdS +bdU +ckQ +gjl bgz biT boU @@ -80174,7 +81807,7 @@ bbR btu bbR bOL -bxy +bPR byF bwW bGm @@ -80411,11 +82044,11 @@ aPK aSm aTI aPK -aWB +aXs cCj apd apd -bbU +apd cCk apd aZK @@ -80460,7 +82093,7 @@ iiW dfL dKP mqZ -tyO +tur wfR bCq bUs @@ -80668,9 +82301,9 @@ aPK aSn aTK aPK -apd -cCj -asW +aXt +aZo +aYj baW bLE bLG @@ -80929,8 +82562,8 @@ apd aYi aqW aqW -bbQ -bLG +aVT +bSO apd aZH aZK @@ -81208,7 +82841,7 @@ bwY byJ bwe bAc -bBI +bwL bGn bGn bGn @@ -81444,7 +83077,7 @@ aWG aZa baX bcH -bdE +bSZ apd aZH bnL @@ -81642,9 +83275,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +gXs +gXs +brT abc abu abu @@ -81727,7 +83360,7 @@ bCq bHD bJe bCq -bLu +cib bHE bHE bHE @@ -81898,10 +83531,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +gXs +aai +aai +aai abb abt aca @@ -81954,11 +83587,11 @@ aSa aSr aSr apd -aYZ +asW bLE aqW aqW -bLE +bTq apd beA bqp @@ -82156,9 +83789,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +aai +cmH +aay abe abw acc @@ -82211,7 +83844,7 @@ aTL aTP aWD apd -aYj +aYh aZL baU baU @@ -82227,8 +83860,8 @@ bnJ bbR bbR bbR -bty -buJ +bWk +bYG bwe bxE byM @@ -82412,10 +84045,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +gXs +aai +cmI +aay abd abv acb @@ -82519,8 +84152,8 @@ bLw bLw bLw caq -cbw -ccu +bCA +bHE ciT bCq bSs @@ -82670,11 +84303,11 @@ aaa aaa aaf aaf -aaH -aai -aai -abg -aby +ctv +acd +aaM +aaP +aaY aby aby aby @@ -82776,10 +84409,10 @@ bVI bVI bVI bTA -bEP -cdi -bCq -bCq +bHF +bHE +bHE +bHE bHE bHE cmD @@ -82787,7 +84420,7 @@ cnr cnU chD cpq -cpV +bVH cqw cqO crp @@ -82928,10 +84561,10 @@ aaf aaf aai aai -aai -aaU abf -abx +aat +aaU +abg acd acC ada @@ -83033,8 +84666,8 @@ bWB bWB bVI cax -cbx -cdh +cbw +cby ciU cjK ckA @@ -83185,7 +84818,7 @@ aai aai aai aaI -aaM +aat aat aat aat @@ -83252,12 +84885,12 @@ aYl bBi aLY bnN -boY +bTv bqw aJq aJq aYl -aKF +bTw aLX aJq aJq @@ -83290,8 +84923,8 @@ cdd cea bVI caz -cby -cdj +cbx +ccu cdv cem cem @@ -83440,8 +85073,8 @@ aaf aai aan aaw -aaB -aat +aaD +aaL aaJ aat abh @@ -83695,9 +85328,9 @@ aaa aag aaa aak -aap -aay -aaD +aao +aaz +aaE aat aat aat @@ -83734,7 +85367,7 @@ ats atY auo axy -ayN +ayM azE aAW aCa @@ -83771,7 +85404,7 @@ bqy cBr bqy buK -bqy +bTx aJw aJq aJq @@ -83803,10 +85436,10 @@ bWB bWB cec bVI -cay +bUw ccw chY -ciX +clK cjM ckB ckB @@ -83817,7 +85450,7 @@ coH cgR cgR cqx -cqR +cgR crp crJ crT @@ -83952,9 +85585,9 @@ aaa aag aaf aaj -aao -aax -aaC +aap +aaB +aaF aat aat adO @@ -83991,7 +85624,7 @@ atu cCi awg axy -ayM +ayN azs aAR aBP @@ -84071,10 +85704,10 @@ ckC ccw cnX coH -cps -cpX +cjZ +ckq cqz -cqQ +cqR ccw crH crT @@ -84209,13 +85842,13 @@ aaa aag aaa aal -aar -aay -aaF -aat -aaO -aaW +aaq +aax +aaN aat +aaV +cmn +cms abB acf abM @@ -84285,11 +85918,11 @@ bqA brW btB buM -bwi +aOJ bmr aMm aJq -bBi +byV bCs bCs bEY @@ -84466,13 +86099,13 @@ aaa aag aaf aaj -aaq -aay -aaE -aaJ -aaN -aaV +aar +aaC +aaO aat +aaW +cmp +cmE aat acd abL @@ -84548,11 +86181,11 @@ aMn aJq bBi bCs -bDv +bDw +bDz +bFb bEX bFa -bHH -bFa bKt bLx bCs @@ -84723,13 +86356,13 @@ aaa aag aaa aal -aat -aay +aau aat aat -aaJ aat aat +cmr +aat abD acd acd @@ -84797,7 +86430,7 @@ bnR bpe bqB bqq -btD +bbQ buO bwk bmr @@ -84981,7 +86614,7 @@ aag aaf aaj aas -aaz +aat aat aat aat @@ -85029,7 +86662,7 @@ aGq aHO aJl ayW -aJq +clV aJq aOE aJn @@ -85062,7 +86695,7 @@ byP aJq bBi bCs -bDw +bDy bEZ bGv bHH @@ -85074,7 +86707,7 @@ bNJ bNJ bKx cjL -gbq +bNL bNI bUz bVJ @@ -85240,10 +86873,10 @@ aam aav aav aav -aaL -aaQ -aaY -ihn +aav +aav +aav +aav abE acg acJ @@ -85319,7 +86952,7 @@ byR bnM bBl bCs -bDz +bFa bFa bFa bHH @@ -85327,7 +86960,7 @@ bFa bFa bFa bCs -bNL +bNJ bNJ apV cjL @@ -85366,7 +86999,7 @@ cEL cFb cFu cFI -cGd +cdj cGs cGr ccw @@ -85494,14 +87127,14 @@ aaa aag aaf aai -aau +aaA aaA aaG -aaK -aaP +aaA +aaQ aaX -hwu -aat +abj +abG acd acD acY @@ -85576,10 +87209,10 @@ byQ aJq aJq bCs -bDy -bFb -bGw +bFa +bFa bER +bGw bJk bFa bLA @@ -85611,7 +87244,7 @@ cTa ceZ clQ cgR -cgx +bUX coM cpv cqb @@ -85626,11 +87259,11 @@ cqb cAo cGt cgx -jMY +chU csd cHa csd -uhH +chW ccw aaa aaT @@ -85757,8 +87390,8 @@ aai aai aai aai -abj -abG +abx +abF acd acd acd @@ -85831,7 +87464,7 @@ aaa aJn aXf aJq -byV +aJq bCs bAM bFa @@ -85850,7 +87483,7 @@ bNI bEP bVJ bVJ -bOM +bSF bQd bQP bSt @@ -86015,7 +87648,7 @@ aaa aaf aai abi -abF +bVL ach acK adf @@ -86536,11 +88169,11 @@ cpg acv adi adi -aaZ +arl aeW agQ ahv -ahQ +agX aiI aiH ajB @@ -86553,7 +88186,7 @@ anw anz aov aph -aph +ayY ard ard ard @@ -86793,7 +88426,7 @@ acl ajC acL adi -aaZ +anq agp agT ahx @@ -86808,7 +88441,7 @@ afM amR anw anz -aov +aJN apk anw anw @@ -86817,9 +88450,9 @@ anw aVh avj awl -axC -ayY -azZ +ayZ +aCf +aDh azZ azZ azZ @@ -87322,7 +88955,7 @@ agj amS anx anz -aoz +aKS apm aqd anA @@ -87331,9 +88964,9 @@ atd anA avk awk -axE -ayZ -aAa +aCe +aCV +aHZ aBu aAa aAa @@ -87568,7 +89201,7 @@ aeY agt agt ahz -aie +ahQ aiN ajc ajI @@ -87656,7 +89289,7 @@ bYH bYH bVg bXn -bYG +bRb cfb cfF cfb @@ -87664,7 +89297,7 @@ cik cjg cjU cfb -clM +caw cfz cgR ccw @@ -87890,7 +89523,7 @@ aJq bBu bCv bAT -bDL +bDJ bDq bCv bJs @@ -87909,7 +89542,7 @@ bWO bXK bYH bZz -caw +cfV bYH bVo bXq @@ -88148,7 +89781,7 @@ bBt bCv bDH bFf -bGB +aNJ bCv bJs bKy @@ -88337,7 +89970,7 @@ adg aeu alt agu -agX +agt ahB aij agn @@ -88354,14 +89987,14 @@ aoB aod aqe arf -aqa -atf +aqU +awy arf -aqa -atf +aqU +awy arf -aqa -atf +aqU +awy dgz tqg ujF @@ -88611,13 +90244,13 @@ aoz aod aqe arf -apY +ari ate arf -apY +ari ath arf -apY +ari ath dgz fvY @@ -88658,9 +90291,9 @@ bsh bqH aJq aJq -aXf +bPS bCv -bDJ +aNI bCt bGD bCv @@ -88695,7 +90328,7 @@ ckO ckH cja cny -ccw +bVw cip cnx cDx @@ -88906,7 +90539,7 @@ bjF blc bmz bnY -bpk +aOH bqJ bsj btI @@ -88949,7 +90582,7 @@ ciq cfb cfb cfb -clR +ciX cgR cgR cMm @@ -89119,7 +90752,7 @@ akY afM amp aiX -anA +axC anz aoC aod @@ -89129,19 +90762,19 @@ asd atg arf asd -awo +axT arf asd -aAb +aFe dgz iVU aDK vHj eVC dgz +aBM +aEs aJv -aKG -aMg bHt aOE aJn @@ -89175,7 +90808,7 @@ aJq aXf bCv bAU -cAL +clO bFg bFs bJt @@ -89382,18 +91015,18 @@ aoF apo aqh arh -asg +auA atj aul -auR +axQ atj -aul +azl +aNH +atj +aJQ azc atj -aAX -azc -atj -aFe +aMq aul aHT aJy @@ -89419,7 +91052,7 @@ bim bjG aZV bmB -bnZ +aDH bpl bqH bsl @@ -89432,8 +91065,8 @@ aLY bBx bCv apG -bFk -bDs +aPZ +aQa bCv bJs bHo @@ -89642,15 +91275,15 @@ aun asf ati auk -aux -avt -axL +arQ +aus +aJk bbl -azT -auk -auk -aDG -aFd +avt +aJR +aya +aLs +aMr auk aHH aJg @@ -89700,8 +91333,8 @@ bNT bOV bQj bRw -bSF -bOd +bOM +bPT bTP bRA bWQ @@ -89717,12 +91350,12 @@ cap ctR ccn cdo -cek +bUA ccw cet cfd -cfB -cfI +cgH +cgM cgQ cjS cjN @@ -89735,7 +91368,7 @@ cEW cse cse csu -cGl +chM ccw aaa aaa @@ -89899,15 +91532,15 @@ arf arf arf arf -auU -avG +arf +auC +aKg awr awr -azV +aKr +aAh aAh aAh -aFg -aFh aAh aAh aAh @@ -89941,7 +91574,7 @@ btL buY buY bqH -aJq +clV aJq aXf bCv @@ -89958,7 +91591,7 @@ bOV bQo bRz bSH -bOd +bQX bTP bRA bWQ @@ -90153,23 +91786,23 @@ aoG cSA aqe arf -aqo -asp +auu +atm +atm arf -auS -avv -awu -awr aAd +auW +awr +aXH +aXO aAh -aCm -aDL -aFf -aGk -aHU -alN +aSp aAh -aLQ +aUP +aAh +bbN +aAh +aOL aJq aOE aJn @@ -90202,7 +91835,7 @@ aJq aJq bBy bzs -bDO +bTy bFl bGH bHU @@ -90215,7 +91848,7 @@ bOV bQj bRy bSG -bOd +bPT bUK bVT bWR @@ -90410,23 +92043,23 @@ aoH cSA aqe arf -asm +aqC blU -atQ -avg -awp -axN +blU +awA +auy +aKh awr -aAg +awr +aKJ aAh -aDO -aDQ -aFi -aGl -aBy -aBy +apH aAh -aMn +apQ +aAh +aqt +aAh +clX aJq aOE aJn @@ -90495,7 +92128,7 @@ clU clU bOh ccw -coZ +cgN cgU cgU cDK @@ -90667,21 +92300,21 @@ ajo cSA aqe arf -ari +aqD +ask asu aun -auW -avR -axM -awu -aAf +awv +aKg +aYI +awr +bHg aAh -aCn -aDM -aGx -aAh -aAh -aBy +aop +bwi +aop +aop +aop aAh aMm aJq @@ -90714,7 +92347,7 @@ bqH bqH aJq bHt -bBz +bgi bzs bzs bFm @@ -90748,11 +92381,11 @@ bMQ aaf bQA ckU -clT +ccd cmU bOh ccw -cpa +cgP cjc cqo cDL @@ -90927,19 +92560,19 @@ arf arf arf arf -avm -aws -axP -azb -aAi -aAh -aCn -aDM -aGx -aGm -aHV -aBy -aAh +arf +auC +aKN +aYP +baa +aKM +aKP +aFE +aDY +aLQ +aYS +aop +aMw aJq aJq aJq @@ -90970,9 +92603,9 @@ bva bwu bwu bwu -bwu -bBB -aJv +bke +cfI +bBz bzs bFp bGJ @@ -91181,21 +92814,21 @@ ajo app aqi arf -ask +ars +atm atm arf -avl -awq -axO -aza +aHt +aKO +aZb +bab +aSj aAh aAh aAh -aDS -aGx aAh aAh -aDN +aMu aAh aMo aNC @@ -91227,7 +92860,7 @@ aJq aJq aJq aJq -bAj +bnZ aJq aKG bzs @@ -91438,22 +93071,22 @@ ajo aps aqk arf -asm +auv +blU aHw -aup -avn -awv -axX -aze +awX +axR +aKq +aZZ +awr +bac aAh -aBz -aBz -aDU -aGx -aGn -aHW -aBy +aVK +azm +azm aAh +aAZ +bJS aJq aJq aJq @@ -91484,9 +93117,9 @@ aJq aJq bxL byX -aJq -aJq -bCA +aXh +bmE +bAj bzs bCC bDA @@ -91695,31 +93328,31 @@ ajo apr aqj arf -ark -asL +ary +ask +aua aun -avu -awt -axV -azd -azX -aAZ -aCe -aDT -aGx +axU +awr +awr +axW +aHb +aLh +aUj +aMv +aMv +aMx +aZt aAh -aAh -aBy -aAh -aCr -aCr -aCr aJC +aJC +aJC +aQg bYP -aQg aJC aQg aJC +aJC aQg aJC aJC @@ -91776,7 +93409,7 @@ bMQ aaf bQA ckX -clV +ccB cmV bOh cig @@ -91950,35 +93583,35 @@ ajp ajp ajo apt -aqm -arj -arj -arj -arj -avx -awz -axR -avx +arn +arf +arf +arf +arf +arf +asX +awr +awr +avG +axP aAh -aBA -aBA -aDP -aBx -aGp -aHX -aBy +aCh +azo +azo aAh -aMq -adq -aQb -aPZ -aRu -aQc -aUf -aQc -aXi -aQc -amB +aAM +aMH +bRc +bRe +bty +aFj +ccS +bXu +aKR +aFd +aDM +cab +bfa aJC bcq bcq @@ -92207,16 +93840,17 @@ ajo aoa ajo apt -aql -apv -arl -asM -atV -avw -awy -axQ -azj -arj +aqr +aoJ +aoJ +aoJ +aoJ +arr +auN +awr +awr +avG +aNt aAh aAh aAh @@ -92224,19 +93858,18 @@ aAh aAh aAh aAh -aAh -aMp -aMr -aOH -aPY -aQc -aRx -aQc -aQc -aPY -aQc -aZZ -aJC +aKR +aKR +buJ +aDU +aDX +aEt +aKR +aFf +aDN +aDU +aFF +aQg aYV aYV aYV @@ -92464,35 +94097,35 @@ ahT anb ahT anZ -apu -arj -asb -asV -aus -aus -awA -axT -azl -aAl -arj -aCq -aDR +aqo +arf +arf +arf +arf +arf +aDW +avl +avm +avg +awE +aCr +azP aFl aGD -aHZ +bdE aCr -aKJ -aMr -aMr -aOH -aQc -aQd -aQa -aRv -aPY -aVw -aPY -bac +boY +bRd +aKR +aDO +aFC +cdM +aEu +aKR +aFg +aDO +caj +ckP aJC aYV aYV @@ -92714,44 +94347,44 @@ aif aif aif aif -aif -aif -alK -aif bkV -anc -anD -aoI -apX -arn -asN -aur -avy -avy -axS -azk -aAk -arj -aCf -aDY -aFj +adq +amB +aif +aif +apw +aqH +aqI +arf +apu +atl +avw +aut +axM +avx +avn +awp +aNG +aCr +aLS +aUC aGr aHI -aJk -aMr -aMr -aNt -aOH -aQc -aQc -aSq -aQc -aQc -aPY -aQc -bab +aOK +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +aKR +asq aJC -aYV +bSL aYV ber bfF @@ -92963,11 +94596,7 @@ abp afo abp abp -ahn -ahn -aiA -aiA -aiA +aSq ahn aiA aiA @@ -92979,38 +94608,42 @@ aod ahn apx ahn -arj -asr -asN -aut -avz -aXF -axU -azn -aAn -arj -aCh -aEc -aFk -aGw +ahn +ahn +ahn +ahn +arf +aoI +aqF +awo +arf +aoY +awr +awr +awt +aXj +aCr +aQb +aVA +bcO aHK aCr -aKr -aMr -bHF -aOH -aQc -aQc -aSo -clX -aVx -aQc -aQc -aQc +bDO +aKR +aKR +aDP +aDP +aEo +aKR +aKR +aKR +aDP +aKR +aKR bbx aYV aYV -aYV +bTs bfF bhd bis @@ -93216,16 +94849,12 @@ aaf aaf aaf abp -aaa +aRw afp -aaa +aRw abp -aaa -aaa -aaa -aaf -aaf -aaf +aqa +ahn aaa aaf aaf @@ -93234,36 +94863,40 @@ ahn anE aod aoK -apw +amI aqp -arj -asq -asN -aut -avz -avz -axU -azm -aAm -arj +ahn +anc +anr +anM +aqF +aqF +aqF +aur +aun +aEr +awr +awr +awt +aSo aCr -aEb aCr +aVD aGv aCr aCr -aKq -aLS -aNF -aOH -aQc -aQc -aSH -aQc -aQc -aRx -aQc -aQc +aCm +aKR +aDu +aDT +aDV +aEp +aHX +aKR +aIs +atT +aFD +aKR aQg aYV aYV @@ -93288,7 +94921,7 @@ bvj bvj bvd bFu -bvj +nWU bvj bvd bKH @@ -93477,12 +95110,8 @@ aaa aaa aaa adR -aaa -aaa -aaa -aaf -aaf -aaa +ahn +ahn aaa aaa aaa @@ -93493,43 +95122,47 @@ aoe aoL apy aqq -arj -ast -asN -auv -avA -avA -axW -azo -aAp +ahn +aql +aqN +arf +aqE +ark +aqF +axN +arf +aKi +avm +aAn +aIG +aXl aBC aCt aEA -aCt aGz aIb aCr -aKN -aMv -aNH -aOJ -aQc -aPY -aSG -aPY -aUg -bFC -aRw -aQc +aCn +aKR +aKR +axV +aFh +arC +aKR +aKR +aNn +avR +aFD +aKR bbx aYV aYV bet bfH bhf +bkl bhh -bhh -bhh +bkl bmJ bof bpu @@ -93729,15 +95362,11 @@ aaa aaa aaa aaa +gXs aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +gXs aaa aaa aaa @@ -93750,43 +95379,47 @@ ahn ahn ahn ahn -arj -ass -asX -auu -att -att -att -azf +ahn +arf +arf +arf +asd +arf +arf +arf +arf +aMJ +azn aAo -apX +aJz +amP aBB aBB aBB aGy aIa cNE -aKM -aMu -aNG -aKM -aKM -aKM -aSp -aQc -aQc -aSq -aQc -bad +aQP +awB +awB +aaK +aFi +awB +awB +awB +aIi +aOu +aKR +asD bby aYV aYV bet bfG bhe -bit +blN bjS -bli +bnd bli boe bli @@ -93986,15 +95619,11 @@ aaa aaa aaa aaa +gXs aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa +gXs aaa aaa aaa @@ -94004,37 +95633,41 @@ aaa aag aag aag -aaa -aaa -aaf -arj -clO -asZ -aua -clO -awB -axY -azh -gsz -arj -aaf -aaa +arf +amJ +axO +arf +apu +acN +amP +atz +axL +atQ +awu +aEv +azj +aAb +aAr +amN +amN +aza +azX alP aGI aId aJD -aKP -aMx -aNJ -aQe -aOL -aOL -aOL -aOL -aOL -aOL -aXO -aZb +aCx +awC +awC +bbs +aHW +awC +awC +awC +awC +aIw +aKR +asG aJC aYV aYV @@ -94243,10 +95876,11 @@ aaa aaa aaa aaa -aaa +aab aaa aqG aaa +asL aaa aaa aaa @@ -94256,44 +95890,43 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aqr -arm -arm -asY +arf +amO +anr +anM +aqF +alK +arf +axZ +amN atZ -auB -auB -atZ -azg -azp -azp -aCu -aaf +amN +amN +bBB +cdP +ceu +cfA +amN +azb +aUk alP aGH aIc aJC -aKO -aMw -aNI -aMw -aOK -acN -acN -acN -acN -acN -aQc -bae +aCy +aTN +aDS +aKR +aKR +aEq +aEq +aEq +aEq +aEq +aKR +aKR aJC -bcr +cmc aYV bet bfG @@ -94336,7 +95969,7 @@ bYU bXW bOh cbH -ccB +cbX cbH bOh aaf @@ -94500,6 +96133,11 @@ aaa aaa aaa aaa +aac +apK +aaa +apK +atX aaa aaa aaa @@ -94509,30 +96147,25 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aqs -aro -aro -aro -aro -aro -aro -aro -aro -aro -aro -aCv -aaa +arf +arf +arf +arf +aoI +anD +arj +art +amN +amN +amN +amN +bDL +amN +aAX +cfB +amN +azd +aAf alP aGJ aIe @@ -94542,13 +96175,13 @@ aJC aJC aJC aJC -aXj -aVy -aSY -aVy -aVy -aYI -bah +aXF +aEw +aEx +aEw +aNF +aEq +aHU aJC aYV bdo @@ -94757,8 +96390,11 @@ aaa aaa aaa aaa -aaa -aae +apv +apv +gXs +apv +apv aaa aaa aaa @@ -94770,42 +96406,39 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aqs -aro -aro -aro -aro -aro -aro -aro -aro -aro -aro -aCv -aaf +arf +aqm +aqF +axX +arf +asb +asr +avu +amN +amN +bDL +amN +aAX +cfB +amN +aze +aAg alP aGJ aIe -aJE -aKQ +asm aLU -aNu +aKQ +aYH aJC aPw -aQc +aZw aQc aSZ aQc -aVy -czP -bag +aFk +aEq +aHV aJC aYV aYV @@ -95015,6 +96648,9 @@ aaa aaa aaa aaa +gXs +aaa +gXs aaa aaa aaa @@ -95027,26 +96663,23 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aqs -aro -aro -aro -aro -aro -aro -aro -aro -aro -aro -aCv -aaa +arf +ast +arD +apX +arf +arO +aup +atV +amN +asg +bZf +cdY +cff +cfC +amN +azb +bvG alP aGA aHS @@ -95060,9 +96693,9 @@ aRz aSF aQc aQc -aXl -aQc -bai +aFp +aKR +atk aJC aYV aYV @@ -95272,9 +96905,9 @@ aaa aaa aaa aaa +apT aaa -aaa -aaa +apT aaa aaa aaa @@ -95287,43 +96920,43 @@ aaa aae aaa aaa -aaa -aaa -aaa -aaa -aqs -aro -aro -aro -aro -aro -aro -aro -aro -aro -aro -aCv -aaf +arf +arf +arf +arf +arf +asZ +att +avA +awq +aVy +aVG +amN +aRu +aVP +aXi +azV +aPj alP aGL aHM -aJm +asp aKz -mjr +bLs aND aJC -aab +aZv aRg aQc -aac -aQc -aXk -aQc +bai aQc +aFt +aKR +aKR aJC aYV aYV -bev +bNM bfK bhi bhi @@ -95521,6 +97154,7 @@ aaa aaa aaa aaa +aae aaa aaa aaa @@ -95546,34 +97180,33 @@ aaa aaa aaa aaa -aaa -aaa +gXs aqs -aro -aro -aro -aro -aro -aro -aro -aro -aro -aro +asY +asY +auB +aws +avy +avy +aws +azp +aCu +aCu aCv -aaa +auR alP aGL aIe aJC -aKS -aMC +atf +bLt aJC aJC aJI aJI aSI aJI -aVA +baw aJI aYK aJI @@ -95803,27 +97436,27 @@ aaa aaa aaa aaa -aaa -aaa +gXs +gXs aqu -arm -arm -arm -auy -auB -auB -axZ -azp -azp -azp +aro +aro +aro +aro +aro +aro +aro +aro +aro +aro aCw -aaf +aaa alP aGL aIg aJH aKR -aMB +bMF aJC aOP aJI @@ -95834,7 +97467,7 @@ aVz aVz aYJ aJI -bbz +bSr aYV aYV aYV @@ -96059,22 +97692,22 @@ aaa aaa aaa aaa +gXs +gXs aaa +aqu +aro +aro +aro +aro +aro +aro +aro +aro +aro +aro +aCw aaf -aaf -aaf -arj -arj -arj -auA -avD -awC -ayb -arj -alP -alP -aaa -aaa alP aGL aIe @@ -96315,23 +97948,23 @@ aaa aaa aaa aaa +gXs +gXs +aaa +aaa +aqu +aro +aro +aro +aro +aro +aro +aro +aro +aro +aro +aCw aaa -aaf -aaf -aaf -aaf -aaf -aaf -arj -auz -avC -avC -aya -arj -arA -alP -alP -alP alP aGN aIh @@ -96351,7 +97984,7 @@ baj bbz aYV bdp -aYV +bDv bfK bfK bfK @@ -96404,7 +98037,7 @@ cle cli uPT cmY -cmc +cme cop cmd cmd @@ -96571,24 +98204,24 @@ aaa aaa aaa aaa +gXs +gXs aaa +aaa +aaa +aqu +aro +aro +aro +aro +aro +aro +aro +aro +aro +aro +aCw aaf -aaf -aaa -aaa -aaa -aaa -aaf -arj -auB -auB -arj -gOZ -arj -anf -anf -rsp -rsp alP aGB aIf @@ -96600,11 +98233,11 @@ aON aQk aRD aSM -aVD +aEy aVE aXm aVz -bak +cam bbz aYV bdp @@ -96827,25 +98460,25 @@ aaa aaa aaa aaa -aaa -aaf -aaf -aaa -aaa -aaa -aaa -aaa -aaf -aaa gXs -aoV -alP -anf -anf -anf -anf -aDW -aDV +gXs +aaa +aaa +aaa +aaa +aqu +aro +aro +aro +aro +aro +aro +aro +aro +aro +aro +aCw +aaa alP aGL aHY @@ -96857,7 +98490,7 @@ aOM aQj aRB aSL -aTN +cmm cCq aVz cAg @@ -97083,7 +98716,6 @@ aaa aaa aaa aaa -aaa aaf aaf aaa @@ -97091,18 +98723,19 @@ aaa aaa aaa aaa -aaa -aaf -aaa -gXs -aoV -alP -awD -anf -anf -anf -aCy -jnR +arm +asY +asY +asY +awz +avy +avy +aAm +aCu +aCu +aCu +aVx +auR alP aGL avI @@ -97118,7 +98751,7 @@ aTO cCq aVz aVz -bak +caB bbz aYV bdp @@ -97134,8 +98767,8 @@ boo bqQ bhg bua -bvn -bwL +bne +bpk bxX bsL bua @@ -97339,7 +98972,6 @@ aaS aaS aaS aaS -aaa aaf aaf aaa @@ -97347,21 +98979,22 @@ aaa aaa aaa aaa -aaf -aaf -alO -alO -alO +aaa +aaa +aaa +aaa +auR +azg +avz +ccH +aAX +aAp +aAk +aAl +aCq +aDR alP -alP -alP -alP -alP -alP -alP -vpY -aFn -aGP +aGJ avI aJI aJI @@ -97376,7 +99009,7 @@ aVF aVF aYM aJI -bbA +bSu aYV bdr bdb @@ -97597,26 +99230,26 @@ aaf aaa aaS aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf -aaa -aaa -aaa -aaa -aaa -aag -alO -arp -alO -awD -anf -anf -awD -anf -aoP -alP -aBE -alP -aDX +aaf +auR +auS +ayb +azk +atZ +amN +amN +aAs +amN +amN alP aGJ avI @@ -97648,7 +99281,7 @@ boq boq brj bpE -btk +bop bum bvq bzn @@ -97853,22 +99486,22 @@ adS aeG aaa aaS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf -aaa -aaa -aaa -aaa -aaa -aaa -aag -cxW -anf -aqv -anf -anf -anf -aEl -anf +aaf +alO +auR +auR +auR +azT +aAi cVb cVb cVb @@ -97905,7 +99538,7 @@ bpE bpE bpE bpE -bti +bot bul bvp bzm @@ -98119,11 +99752,11 @@ aaa aaa aag alO -alO +arp alO anf -auC -alP +anf +anf anf anf cVb @@ -98145,7 +99778,7 @@ aSR aUi aVJ aOX -aYP +aPP bal bam aYV @@ -98374,20 +100007,20 @@ aaa aaa aaa aaa -aaa -aaa -aaa -alO -aqy -anf -alP -awE +aag +ass anf +aqv +ayf +aux +auU +avv +avC cVb vCb -wUY -khb -sxs +bBI +bHx +bHB tal aCI aIj @@ -98631,15 +100264,15 @@ aaf aaf aaf aaf -aaf -apC -apC -apC -apC -apC -apC +aag +alO +anf +alO +aud +auz alP anf +aCG cVb cVb cVb @@ -98652,12 +100285,12 @@ aIq aKK aMy aIp -aOX +arg aQm -aRJ -aRJ -aRJ -aVK +aBx +aGp +aGp +aHc aRJ aRJ aRJ @@ -98890,18 +100523,18 @@ aof aof aof aof -arq -asv -atv -auD -apC -awF -anf alP -arA -anf +alP +alP +alP +alP +awF +aCG +alP +bBM +aBE aCz -asw +aQU aCJ aGT aIn @@ -98911,10 +100544,10 @@ aMt aIp aOW aQm -aRJ -aSS -aUj -aRJ +aGm +aGw +aGP +aHr aRJ aYQ cBg @@ -99147,35 +100780,35 @@ aoh aoN apA aof -ars -anf -arx -anf -apC +arq +asv +atv +auD +alP aoQ -cqM -asw -asw -asw -aCA -anf -aFp +avD +ayg +ayg +ayg +azf +aFn +aAq aGW anf aIp -fGf +bcr aMA aIp aOX aQm -aRJ -aST -aUk -aRJ +aGm +aGx +aGR +aHr aRJ aYQ bam -aYV +bBT aYV aYV aYV @@ -99392,10 +101025,10 @@ adU adU adU adU -adU -adU -adU alg +aTq +aTq +aTq acx amv ane @@ -99404,11 +101037,11 @@ aog aoM apz aqw -arr +asM asw asw auE -apC +alP awG auF alP @@ -99425,14 +101058,14 @@ aMz aNQ aOX aQm -aRJ -aRJ -aRJ -aRJ +aGn +aGK +aGK +aHs aRJ aYR ban -aYV +bCI aYV aYV bez @@ -99489,7 +101122,7 @@ bAw cmk cnf bzs -aaa +aaf aaa aaa aaa @@ -99661,22 +101294,22 @@ aoi aoO apB aqx -art +asN anf anf auF -apC +alP awH auF alP -aAr -anf +axd +aBF alP aaa aFq aGX aIp -aJO +bHZ aKU aME aNN @@ -99689,13 +101322,13 @@ aXo aXo aYO bap -aYV +bCI aYV bci beB bfS bfS -kQk +ckJ ipA gbT cTO @@ -99918,35 +101551,35 @@ aof aof aof aof -anf +asV aoP atw auF -apC +alP aoP auF azr -anf +aRv atw alP alP aFo aGV aIp -aJN +aJO aLd aMN aNQ aOZ aOX aOX -aOX +cma aUz aVM aOX aYT bam -aYV +bDs baR bcb bdl @@ -100003,7 +101636,7 @@ bAw bAw clp aag -aaa +apv aaa aaa aaa @@ -100179,9 +101812,9 @@ anf anf aty auF -apC alP -auF +aAt +aAu alP alP alP @@ -100260,7 +101893,7 @@ bPn bPn bPn aag -aaa +gXs aaa aaa aaa @@ -100432,16 +102065,16 @@ aaa aaa apC anf -anf +aRv alP atx auF -apC +alP auD auF -alP -aAs -anf +apE +axJ +awL alP aCG aFr @@ -100515,9 +102148,9 @@ czY cOT aaa aaa +gXs aaa -aaa -aaa +gXs aaa aaa aaa @@ -100693,13 +102326,13 @@ alP alP apE auG -apC -aoP +alP +clM auF apE anf anf -alP +azh aCG aDZ aFu @@ -100772,9 +102405,9 @@ czY cOT aaa aaa +gXs aaa -aaa -aaa +gXs aaa aaa aaa @@ -100960,12 +102593,12 @@ aCB aEB aFs bbE -aIr +amd bav aLf -aIt -aNS -aPb +aCU +aDG +aRO aQp aRN aIt @@ -100987,7 +102620,7 @@ bls bfT boD bpY -bsP +aPY box btw buT @@ -101028,11 +102661,11 @@ cQB czY cOT aaa -aaa -aaa -aaa -aaa -aaa +apv +apv +apv +apv +apv aaa aaa aaa @@ -101205,24 +102838,24 @@ apC alP alP alP -anf +ciw auH avF awI ayc +ciV asw -aAu asw aCD aEa aFv aGG aIu -aJQ -bCI +aBA aIt aIt -aPb +aDG +aRO aIt aRN aIt @@ -101468,17 +103101,17 @@ avE anf anf awD -aAt +anf aty aCC aDZ +anf aFu -aFu -aIs -aJP -aLg -aMH +aBy +aJJ +aCA aIt +aDJ aYW aYW aYW @@ -101497,7 +103130,7 @@ cHJ cHL blw bjP -blt +bTu bfT boG bqa @@ -101545,10 +103178,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +bsP +bti +btk +buh aaa aaa aaa @@ -101730,12 +103363,12 @@ alP aCE aDZ aFu -aHc -aIw +aFu +aBz aJS -aJS -aMJ +aCS aNP +aDL aOS aOS aOS @@ -101798,15 +103431,15 @@ cOT cQB cAa cOT +gXs +bqb +brl aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bsP +bsP +bsP +buh aaa aaa aaa @@ -101974,7 +103607,7 @@ aaf aaf alO aqA -anf +arz alP anf anf @@ -101983,25 +103616,25 @@ awJ anf alP aAv -anf +cih aCE aDZ aFu -aHb +aIy aIv -aJR -aJR +aBD aIt aIt +aDG +aRO +aIt aPd aIt -aRO -aRO -aUC -aVP +aPb +aIt aXu aYW -bat +aVS bbD aYV aXq @@ -102056,14 +103689,14 @@ czU czZ cOT aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +apv +brT +brT +bsP +bsP +bsP +buA +bti aaa aaa aaa @@ -102247,15 +103880,15 @@ aFu aHd aIx aJF -aLh +aQq +aNS +aDG +aRO aIt -aNV aPd aIt -aRO -aRO +aPb aIt -aVQ aXu aYW aVQ @@ -102312,15 +103945,15 @@ cOT cgm czY cOT +gXs +bqb +brl +bsB +brT +brT aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bsB aaa aaa aaa @@ -102485,8 +104118,8 @@ aaf aaf aaa aaa -alO -apD +alP +aie aEl anf arx @@ -102500,22 +104133,22 @@ alP alP aCF aDZ +alP aFw aFw aFw aFw aFw -aFw -aFw +aFu aPf aQq aRP +cfE aIt aIt -moD aWd aXV -aIt +aGl bbD aYV aXq @@ -102572,11 +104205,11 @@ cNW aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bsB +bsB +bti +bsP +gXs aaa aaa aaa @@ -102742,15 +104375,15 @@ aaa aaf aaf aaa -alP +alO anf anf arw -asA -asA +bxh +clL anf alP -awL +aqB anf anf apE @@ -102759,17 +104392,17 @@ aCH aED aFy aGO -aIB -aJJ +aIA +aJM aKZ -aMW aFw aFu aFu aFu +aFu aTc aUD -aVS +aSk aYW aYW bax @@ -102833,10 +104466,10 @@ aaa aaa aaa aaa -cOT -cOT -cOT -aag +aaa +aaa +aaa +aaa aaa aaa aaa @@ -103016,17 +104649,17 @@ aCk aEC aFx aGM -aIy +aIB aJG -cAz aMK aFw -aPg +aMW +aPi aQr aFu aTb aIt -aVR +aLg aYW aYW aUD @@ -103087,13 +104720,13 @@ aaa aaa aaa aaa +apv +apv +apv +apv aaa aaa aaa -cOT -cOe -cqu -aag aaa aaa aaa @@ -103255,16 +104888,16 @@ aaa aaa aaa aaa +gXs alP -alP -alP -aqB -arx -anf -anf -anf -alP -awM +apD +ayf +bev +cil +aFn +aFn +aBB +bGB ayg ayg ayg @@ -103277,9 +104910,9 @@ aFw aLo aLb aFw -aFw -aPi -aQt +aPg +aYW +aYW aRQ aIt aUF @@ -103340,17 +104973,17 @@ cOT cgm czY cOT -aaf -aaf -aaf -aaf -aaf -cNW -cNW -cOT -cqu -cOT -aag +aaa +aaa +aaa +aaa +gXs +aaa +aaa +gXs +aaa +aaa +aaa aaa aaa aaa @@ -103511,13 +105144,13 @@ aaa aaa aaa aaa -aaa -alP -aoP -alP -alP -apE -alP +amx +amx +amx +amx +aMB +amx +amx atB alP alP @@ -103531,16 +105164,16 @@ aEd aFw aHf aIz -aJM +aJP aLa -cBZ aFw aPh +aYW aQs aFu aTd aUE -aVT +aVR aYW aYW aZd @@ -103600,13 +105233,13 @@ cOT aaa aaa aaa -aaf -aaf -cNW -cwy -cmn -cmn -cOT +aaa +gXs +aaa +aaa +gXs +aaa +aaa aaa aaa aaa @@ -103761,36 +105394,35 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -alP -alP -alP -alP -alP -anf -anf -anf -anf -anf -anf -aty -anf -awx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +amx +axE +aIr +aJm +aNV +bDX +bFC +bGg +bGh +bGg +bGS avI asA apE -arx aCo +aCG aEf aFw aGU aIC aJU aLe -aMX aFw aCR aCR @@ -103798,6 +105430,7 @@ aCR aCR aCR aCR +aCR aWe aWe aCR @@ -103860,10 +105493,10 @@ cNW cNW cNW cNW -cmn -cmn -cmn cOT +cOT +aag +aaa aaa aaa aaa @@ -104022,15 +105655,15 @@ aaa aaa aaa aaa -alO -amx -anf -anf -anf -anf -alP -alP -alP +aaa +aaa +aaa +apY +aIr +aIr +aIr +aIr +aMC asB asB asB @@ -104044,13 +105677,13 @@ aCK aEf aFw aHg -aIA +cBZ aJT aLc -aMX aFw aFz aFz +aFz aRR aTe aUG @@ -104114,14 +105747,14 @@ cko clq cmq ciI -cnJ -cri -cTI -cmn -cBT -cBU -cOT -aaa +bae +cmJ +cOe +cOe +cmK +aag +gXs +apv aaa aaa aaa @@ -104279,15 +105912,15 @@ aaa aaa aaa aaa -alP -alP -alP -alP -alP -anf -alP -aqD -arz +aaa +aaa +aaa +apY +aIr +aIr +aIr +aIr +aNu asB atD auJ @@ -104304,8 +105937,8 @@ aGY aII aJW aMX -aMX aNW +aFz aPl aQv aPl @@ -104371,13 +106004,13 @@ cNW cOx cBL cOe -cOe cvO cNW cNW -cNW -cNW -cNW +cOT +cOT +aag +aaa aaa aaa aaa @@ -104534,17 +106167,17 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aaf -aaf -aaf -alP -anf -alP -aqC -ary +aaa +aaa +aaa +aaa +aaa +amx +aIr +aIr +aIr +aIr +aIr asB atC auI @@ -104562,7 +106195,7 @@ aHi aJV aFw aFw -aFw +aFz aPk aQu aPk @@ -104627,9 +106260,9 @@ cNW cNW cNW cNW -cNW cOe -csy +bag +clH cko cAf aaa @@ -104796,12 +106429,12 @@ aaa aaa aaa aaa -aaf -alP -anf -alP -alP -alP +apY +aIr +aIr +aIr +aIr +aIr asB atE auI @@ -104811,7 +106444,7 @@ avM azv aAA asB -cSz +aCE aEi aFw aHl @@ -104879,14 +106512,14 @@ ceO cNW cgm chw -ciK +cgp cjC +cgu ckp cls -cmr -cNW cOe -cmo +cOe +cou cNW aaf aaf @@ -105051,20 +106684,20 @@ aaa aaa aaa aaa -aaf -aaf -aaf -alP -anf -apE -anf -anf +aaa +aaa +apY +aIr +aIr +aIr +aIr +aIr asB asB asB avL awR -auI +aMp azu aAz asB @@ -105104,7 +106737,7 @@ buo bvJ bCk byo -aDH +btD bxP bCf bvK @@ -105134,16 +106767,16 @@ bQZ cdR ceN cNW -cgp +axY chv ciJ cbf -cbf +ciK clr -bnt -cNW +bah cOe -cou +cOe +bMB cOT aaa aaa @@ -105310,12 +106943,12 @@ aaa aaa aaa aaa -aaf -alP -aoQ -alP -aqE -arA +amx +awM +aIr +aJE +aIr +bFk asB atG auL @@ -105397,10 +107030,10 @@ cNW cNW cNW clt -bnt -cNW +cQw cOe -bMB +cOe +bNA cOT aaa aaa @@ -105566,13 +107199,13 @@ aaa aaa aaa aaa -aaf -aaf -alP -alP -alP -alP -alP +aaa +amx +amx +amx +amx +amx +amx asB atF auK @@ -105653,11 +107286,11 @@ chx cNW aaa cNW -cgr -cms +clt +cQw +cNW +cNW cNW -cOe -bNA cNW aaf aaf @@ -105858,9 +107491,9 @@ aXB aZh baB aCR -bcq +bNa bdx -bcq +bPv bgc bgc biX @@ -105911,10 +107544,10 @@ cOT aaa cOT clt -bnt +cQw +cOe cOe cOe -cNW cNW aaa aaa @@ -106169,18 +107802,18 @@ aaa cOT clt cQw -cNW -cNW -cNW -aaa -aaa -aaS -aaS -aaS -aaS -aaS -aaS -aaS +cOe +cOe +cOe +cOe +sQX +cdi +cdi +cdi +cdi +cdi +cdi +cdi aaS aaS aba @@ -106366,7 +107999,7 @@ aCR aCR aCR aTl -amd +aUL aVW aXD aZj @@ -106419,17 +108052,17 @@ ccT bSc bSc cfu -cgu +bnt chA cNW aaa cNW clt cQw -aaf -aaf -aaf -aaf +cOe +cOe +cOe +cNW aaf aaS aaa @@ -106683,10 +108316,10 @@ cNW cNW clt cQw -aaa -aaa -aaa -aaa +cOe +cOe +cOe +cNW aaa aaS aaa @@ -106932,18 +108565,18 @@ cbZ bSl cmo cNW -cOx +ckR cNW chC ciL cOe cOe clv -cmt -aaa -aaa -aaa -aaa +cQw +cNW +cNW +cNW +cNW aaa aba aaf @@ -107199,7 +108832,7 @@ clu cmt aaa aaa -aaa +gXs aaa aaa aaf @@ -107713,7 +109346,7 @@ cjD cjD cnj aaa -aaa +gXs aaa aaa aaf @@ -107984,7 +109617,7 @@ crD aaa aaa aaa -csZ +aSY aaa aaa aaa @@ -108231,18 +109864,18 @@ cyU cpi cpi cpi -cqJ +aSH +aSS crk crk crk crk crk +aST +aSH +aSS crk -crk -csE -cpi -csY -cpi +aST cpi cpi ctB @@ -108498,7 +110131,7 @@ crF aaa aaa aaa -csZ +aTa aaa aaa aaa @@ -108979,8 +110612,8 @@ cbf cbf cbf cbf -cbf bYr +cbf clr cad cbi @@ -109237,7 +110870,7 @@ cNW cNW cNW cNW -cNW +clR clt cac cbh @@ -109503,7 +111136,7 @@ cbf cbf ceT cNW -cOe +clT chH cNW aaf diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index d9d46066bf..25f8bfdd4c 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1800,7 +1800,7 @@ pixel_y = -32 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/twohanded/required/kirbyplants/random, @@ -15186,7 +15186,7 @@ /area/crew_quarters/bar) "aGc" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = 32 }, @@ -15457,7 +15457,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -16828,7 +16828,7 @@ /area/maintenance/disposal/incinerator) "aIy" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -17791,7 +17791,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -21486,7 +21486,7 @@ "aQl" = ( /obj/structure/table/wood, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/camera, @@ -23602,7 +23602,7 @@ /area/crew_quarters/theatre) "aTy" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -27337,7 +27337,7 @@ /area/crew_quarters/bar/atrium) "aYF" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -27513,7 +27513,7 @@ "aYR" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -27639,7 +27639,7 @@ "aZb" = ( /obj/machinery/photocopier, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -29336,7 +29336,7 @@ pixel_y = 22 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/chem_master/condimaster{ @@ -29603,7 +29603,7 @@ /obj/item/clipboard, /obj/item/toy/figure/miner, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -30819,7 +30819,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -31057,7 +31057,7 @@ "beY" = ( /obj/structure/kitchenspike, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -32627,7 +32627,7 @@ /area/crew_quarters/kitchen) "bhL" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = 32 }, @@ -40095,7 +40095,7 @@ /area/crew_quarters/heads/hos) "bty" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -40782,7 +40782,7 @@ /area/security/main) "buM" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -41844,7 +41844,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -43216,7 +43216,7 @@ "byI" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/red{ @@ -43230,7 +43230,7 @@ /area/security/execution/transfer) "byJ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -48755,7 +48755,7 @@ /area/engine/gravity_generator) "bGg" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/twohanded/required/kirbyplants/random, @@ -48794,7 +48794,7 @@ /area/engine/break_room) "bGk" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/airalarm{ @@ -48935,7 +48935,7 @@ "bGt" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -49890,7 +49890,7 @@ /area/engine/gravity_generator) "bHS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -50406,7 +50406,7 @@ "bIG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, @@ -51881,7 +51881,7 @@ "bKU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -52445,7 +52445,7 @@ "bLK" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/button/door{ @@ -55374,7 +55374,7 @@ "bQh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/yellow{ @@ -57009,7 +57009,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/red{ @@ -57153,7 +57153,7 @@ pixel_y = -3 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -57248,7 +57248,7 @@ layer = 2.9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ @@ -60797,7 +60797,7 @@ "bXY" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -60899,7 +60899,7 @@ "bYh" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -60920,7 +60920,7 @@ "bYi" = ( /obj/structure/window/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -62280,7 +62280,7 @@ /area/ai_monitored/turret_protected/aisat_interior) "caj" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/porta_turret/ai, @@ -64037,7 +64037,7 @@ "cdk" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -64076,7 +64076,7 @@ /area/security/brig) "cdn" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -67030,7 +67030,7 @@ /area/engine/engineering) "chF" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -67361,7 +67361,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, @@ -69328,7 +69328,7 @@ pixel_x = -26 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = 32 }, @@ -70711,7 +70711,7 @@ }, /obj/item/camera_film, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/grimy, @@ -76603,7 +76603,7 @@ }, /obj/item/crowbar, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/table/reinforced, @@ -77602,7 +77602,7 @@ "czP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -77888,7 +77888,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable/white{ @@ -78794,7 +78794,7 @@ "cBL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/twohanded/required/kirbyplants/random, @@ -80798,7 +80798,7 @@ /obj/item/radio, /obj/item/radio, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/decal/cleanable/dirt, @@ -81427,7 +81427,7 @@ /obj/item/clothing/head/welding, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24; pixel_y = -32 }, @@ -82645,7 +82645,7 @@ /area/crew_quarters/dorms) "cIk" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -87477,7 +87477,7 @@ "cQE" = ( /obj/structure/closet/secure_closet/security/science, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/status_display{ @@ -88838,7 +88838,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light_switch{ @@ -95618,7 +95618,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/storage/bag/bio, @@ -96554,7 +96554,7 @@ /obj/item/reagent_containers/glass/bottle/epinephrine, /obj/item/reagent_containers/dropper, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -100259,7 +100259,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/door/firedoor, @@ -100623,7 +100623,7 @@ /area/science/explab) "dmJ" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/bot, @@ -100634,7 +100634,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -103278,7 +103278,7 @@ pixel_x = 36 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/vending/assist, @@ -103445,7 +103445,7 @@ pixel_y = 6 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -103794,10 +103794,10 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "dsI" = ( -/obj/structure/sign/warning/nosmoking, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/smartfridge/organ/preloaded, /turf/closed/wall, /area/medical/surgery) "dsJ" = ( @@ -104055,7 +104055,7 @@ "dti" = ( /obj/structure/closet/bombcloset, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -104389,7 +104389,7 @@ /area/medical/surgery) "dtQ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/blue{ @@ -105002,7 +105002,7 @@ "duZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24; pixel_y = -26 }, @@ -105033,7 +105033,7 @@ "dvd" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -107185,7 +107185,7 @@ "dyD" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/status_display/ai{ @@ -108398,7 +108398,7 @@ /obj/item/clothing/glasses/welding, /obj/structure/table/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -111492,7 +111492,7 @@ dir = 5 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -111886,7 +111886,7 @@ pixel_y = 26 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24; pixel_y = -26 }, @@ -112582,7 +112582,7 @@ /area/science/robotics/lab) "dHC" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/disposalpipe/segment, @@ -113983,7 +113983,7 @@ "dJO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -114247,7 +114247,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, @@ -116746,7 +116746,7 @@ "dOC" = ( /obj/structure/filingcabinet/medical, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -117626,7 +117626,7 @@ name = "emergency shower" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -118825,7 +118825,7 @@ /area/medical/virology) "dSd" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -119657,7 +119657,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sign/poster/official/work_for_a_future{ @@ -119868,7 +119868,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -121622,7 +121622,7 @@ "dXI" = ( /obj/structure/chair/wood, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -122148,7 +122148,7 @@ /area/medical/virology) "dYV" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/closet/secure_closet/medical1, @@ -125155,7 +125155,7 @@ }, /obj/item/camera_film, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/status_display{ @@ -125251,7 +125251,7 @@ "eeH" = ( /obj/structure/filingcabinet/security, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -125960,7 +125960,7 @@ "egb" = ( /obj/structure/table/wood, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/clipboard, @@ -127428,6 +127428,10 @@ /obj/item/assembly/signaler, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"mMC" = ( +/obj/structure/sign/warning/nosmoking, +/turf/closed/wall, +/area/medical/surgery) "mQE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -174919,7 +174923,7 @@ dkv dma dma dma -dma +mMC dsI dro dvz diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index f72a787214..10e0c1a9a7 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1445,7 +1445,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -3882,7 +3882,7 @@ /obj/item/clothing/head/helmet/riot, /obj/item/clothing/head/helmet/riot, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -4020,7 +4020,7 @@ "ahJ" = ( /obj/machinery/disposal/bin, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -4158,7 +4158,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -4903,7 +4903,7 @@ name = "Evidence Closet 5" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -7192,7 +7192,7 @@ /obj/item/reagent_containers/glass/bottle/morphine, /obj/machinery/light/small, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/bot, @@ -7248,7 +7248,7 @@ "anu" = ( /obj/machinery/vending/security, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/showroomfloor, @@ -7733,7 +7733,7 @@ "aot" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/red{ @@ -7780,7 +7780,7 @@ /area/maintenance/port/fore) "aoy" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/closet/secure_closet/warden, @@ -9298,7 +9298,7 @@ }, /obj/structure/table/wood, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/grimy, @@ -9456,7 +9456,7 @@ /area/engine/gravity_generator) "arS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/cable{ @@ -11192,7 +11192,7 @@ dir = 5 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/neutral{ @@ -13469,7 +13469,7 @@ /area/security/brig) "azQ" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/filingcabinet, @@ -14063,7 +14063,7 @@ /area/hallway/primary/fore) "aAX" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light/small{ @@ -14112,7 +14112,7 @@ "aBc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/red{ @@ -14609,7 +14609,7 @@ maxcharge = 2000 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/spawner/lootdrop/maintenance, @@ -15124,7 +15124,7 @@ /area/maintenance/port/fore) "aDh" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -16127,7 +16127,7 @@ "aFc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -16225,7 +16225,7 @@ "aFo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -16236,7 +16236,7 @@ "aFp" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -16584,7 +16584,7 @@ icon_state = "2-4" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/machinery/camera{ @@ -16858,7 +16858,7 @@ }, /obj/item/pen, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/reagent_dispensers/peppertank{ @@ -17616,7 +17616,7 @@ /area/maintenance/starboard/fore) "aHX" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -18710,7 +18710,7 @@ icon_state = "1-8" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -19722,7 +19722,7 @@ /area/storage/primary) "aMF" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -19794,7 +19794,7 @@ /area/hallway/primary/fore) "aMK" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20623,7 +20623,7 @@ /area/lawoffice) "aOs" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/table, @@ -21207,7 +21207,7 @@ "aPA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -21396,7 +21396,7 @@ pixel_y = 32 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/neutral{ @@ -23473,7 +23473,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -23863,7 +23863,7 @@ /area/crew_quarters/locker) "aUL" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -25956,7 +25956,7 @@ pixel_x = -38 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/loading_area{ @@ -28079,7 +28079,7 @@ "bcn" = ( /obj/structure/rack, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/item/clothing/gloves/color/fyellow, @@ -28277,7 +28277,7 @@ /area/storage/tech) "bcE" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/disposalpipe/segment{ @@ -28446,7 +28446,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/cable/yellow{ @@ -28566,7 +28566,7 @@ }, /obj/structure/closet/secure_closet/security, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/red{ @@ -28783,7 +28783,7 @@ dir = 9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -29276,7 +29276,7 @@ "beo" = ( /obj/structure/closet/secure_closet/security/engine, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/cable/yellow{ @@ -30114,7 +30114,7 @@ pixel_y = 7 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/dark, @@ -30613,7 +30613,7 @@ /obj/item/mop, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -31943,7 +31943,7 @@ /area/hallway/primary/starboard) "bjE" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -32353,7 +32353,7 @@ "bkn" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/brown{ @@ -33024,7 +33024,7 @@ /obj/machinery/computer/teleporter, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/effect/turf_decal/tile/neutral{ @@ -34207,7 +34207,7 @@ /area/ai_monitored/storage/satellite) "bnK" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -34637,7 +34637,7 @@ /area/bridge) "boC" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/storage/fancy/donut_box, @@ -36458,7 +36458,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -37243,7 +37243,7 @@ /obj/structure/table, /obj/item/camera_film, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel, @@ -38242,7 +38242,7 @@ pixel_x = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/dark, @@ -38729,7 +38729,7 @@ "bwr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -38821,7 +38821,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -38943,7 +38943,7 @@ "bwK" = ( /obj/structure/table, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/machinery/chem_dispenser/drinks, @@ -39807,7 +39807,7 @@ "byv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -39973,7 +39973,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue, @@ -40671,7 +40671,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/carpet, @@ -41103,7 +41103,7 @@ pixel_y = -30 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/paper_bin{ @@ -41614,7 +41614,7 @@ /area/crew_quarters/theatre) "bCd" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/table/wood, @@ -41949,7 +41949,7 @@ /area/crew_quarters/toilet/auxiliary) "bCS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel, @@ -44190,7 +44190,7 @@ dir = 5 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/yellow{ @@ -45223,7 +45223,7 @@ /area/security/vacantoffice) "bJx" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -45233,7 +45233,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/decal/cleanable/cobweb, @@ -45319,7 +45319,7 @@ "bJH" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -45967,7 +45967,7 @@ icon_state = "1-2" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -46985,7 +46985,7 @@ "bMW" = ( /obj/machinery/teleport/station, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plating, @@ -47352,7 +47352,7 @@ /area/crew_quarters/kitchen) "bNC" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/vending/dinnerware, @@ -47447,7 +47447,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -49198,7 +49198,7 @@ name = "novelty HoS hat" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ @@ -49294,7 +49294,7 @@ "bRO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -49729,7 +49729,7 @@ "bSD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -52408,7 +52408,7 @@ /area/hallway/primary/central) "bXZ" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/twohanded/required/kirbyplants{ @@ -53733,7 +53733,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -53817,7 +53817,7 @@ }, /obj/item/pen, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/red{ @@ -53831,7 +53831,7 @@ /area/security/checkpoint/science/research) "caG" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sink{ @@ -55905,7 +55905,7 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26; pixel_y = 28 }, @@ -57091,7 +57091,7 @@ icon_state = "2-8" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/structure/reagent_dispensers/cooking_oil, @@ -57265,7 +57265,7 @@ /area/medical/sleeper) "cgT" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -57892,7 +57892,7 @@ /area/maintenance/port/aft) "cie" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -59031,7 +59031,7 @@ /area/maintenance/starboard/aft) "ckm" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sink{ @@ -59626,7 +59626,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -59730,7 +59730,7 @@ /area/science/research) "clI" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/closet/firecloset, @@ -61045,7 +61045,7 @@ /area/science/research) "cok" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/disposalpipe/segment, @@ -62766,7 +62766,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white/side{ @@ -62776,6 +62776,9 @@ "cro" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, +/obj/structure/sign/warning/nosmoking{ + pixel_x = -28 + }, /turf/open/floor/plasteel/white, /area/medical/surgery) "crq" = ( @@ -63296,9 +63299,6 @@ dir = 1; pixel_y = -22 }, -/obj/structure/sign/warning/nosmoking{ - pixel_x = -28 - }, /obj/machinery/iv_drip, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -63319,7 +63319,7 @@ "csq" = ( /obj/structure/bed, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/bedsheet/medical, @@ -63349,7 +63349,7 @@ /area/medical/cryo) "cst" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -64556,7 +64556,7 @@ pixel_y = 2 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/sign/warning/nosmoking{ @@ -64778,7 +64778,7 @@ }, /obj/item/storage/secure/briefcase, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/cafeteria{ @@ -65130,7 +65130,7 @@ /area/medical/genetics) "cvC" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/storage/box/syringes, @@ -65705,7 +65705,7 @@ "cwF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/blue{ @@ -65785,7 +65785,7 @@ "cwO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -66781,7 +66781,7 @@ /area/science/circuit) "cyN" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/airalarm{ @@ -67430,7 +67430,7 @@ }, /obj/item/paper, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/table/glass, @@ -68105,7 +68105,7 @@ "cBi" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/delivery, @@ -68521,7 +68521,7 @@ /area/medical/medbay/aft) "cCb" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/closet/secure_closet/personal/patient, @@ -69596,7 +69596,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -70136,7 +70136,7 @@ /area/science/robotics/lab) "cFj" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28; pixel_y = 5 }, @@ -70649,7 +70649,7 @@ "cGi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white/side{ @@ -72046,7 +72046,7 @@ dir = 9 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/machinery/vending/wardrobe/viro_wardrobe, @@ -73267,7 +73267,7 @@ dir = 9 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -73902,7 +73902,7 @@ "cLS" = ( /obj/structure/chair/stool, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/green, @@ -73931,7 +73931,7 @@ pixel_y = 25 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/table/wood, @@ -77869,7 +77869,7 @@ /area/hallway/primary/central) "cVi" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/wood, @@ -79683,7 +79683,7 @@ network = list("ss13","engine") }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /turf/open/floor/plasteel/dark, @@ -81295,7 +81295,7 @@ /area/crew_quarters/theatre) "dis" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/disposal/bin, @@ -83997,6 +83997,10 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"qnB" = ( +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/surgery) "qqg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -84064,7 +84068,7 @@ /area/library) "qXt" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/dark, @@ -104229,7 +104233,7 @@ cia cia cpX cia -cia +qnB cia ceu dyg diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index a7ab212bd6..b8484859f4 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1094,7 +1094,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/purple{ @@ -3052,7 +3052,7 @@ "afp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/camera{ @@ -3138,7 +3138,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -4288,7 +4288,7 @@ /area/maintenance/starboard/fore) "ahk" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -4440,7 +4440,7 @@ "ahy" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -4475,7 +4475,7 @@ "ahB" = ( /obj/machinery/photocopier, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/cable/white{ @@ -7740,7 +7740,7 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -7886,7 +7886,7 @@ "anj" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/end{ @@ -8367,7 +8367,7 @@ "anZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -8554,7 +8554,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/red{ @@ -9965,7 +9965,7 @@ icon_state = "plant-21" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -10216,7 +10216,7 @@ pixel_y = -22 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/item/paper_bin, @@ -11445,7 +11445,7 @@ "atj" = ( /obj/machinery/vending/coffee, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -12887,7 +12887,7 @@ /area/hallway/primary/port) "avX" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/item/twohanded/required/kirbyplants{ @@ -12902,7 +12902,7 @@ /obj/item/stock_parts/cell/high, /obj/machinery/cell_charger, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light_switch{ @@ -14105,7 +14105,7 @@ /area/engine/atmos) "ayl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -14116,7 +14116,7 @@ "aym" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/delivery, @@ -16093,7 +16093,7 @@ "aCh" = ( /obj/machinery/vending/snack/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/bot, @@ -16503,7 +16503,7 @@ /obj/item/clipboard, /obj/item/toy/figure/chef, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/camera{ @@ -16714,7 +16714,7 @@ /area/engine/break_room) "aDw" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -17444,7 +17444,7 @@ "aEK" = ( /obj/machinery/vending/clothing, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/bot, @@ -17977,7 +17977,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/structure/cable{ @@ -18209,7 +18209,7 @@ /area/hallway/primary/port) "aFL" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20148,7 +20148,7 @@ /obj/structure/table, /obj/item/storage/pill_bottle/dice, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/light{ @@ -21489,7 +21489,7 @@ "aLg" = ( /obj/machinery/vending/snack/random, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -22597,7 +22597,7 @@ /area/maintenance/starboard/central) "aNF" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -23062,7 +23062,7 @@ /area/engine/engineering) "aOG" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -23834,7 +23834,7 @@ "aPW" = ( /obj/machinery/vending/snack/random, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -25049,7 +25049,7 @@ name = "emergency shower" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -26916,7 +26916,7 @@ /obj/item/storage/box/bodybags, /obj/item/pen, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -28252,7 +28252,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -29794,7 +29794,7 @@ /area/hallway/primary/aft) "baN" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -30100,7 +30100,7 @@ /area/medical/medbay/zone3) "bbu" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light{ @@ -31241,7 +31241,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -32128,7 +32128,7 @@ /area/security/checkpoint) "beK" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -34456,7 +34456,7 @@ pixel_y = -22 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/light/small{ @@ -37099,7 +37099,7 @@ "dai" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/blue{ @@ -40387,7 +40387,7 @@ /area/maintenance/starboard) "sHf" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel, @@ -42215,6 +42215,7 @@ }, /obj/structure/table, /obj/machinery/firealarm{ + dir = 1; pixel_y = -26 }, /obj/effect/turf_decal/tile/neutral, @@ -42280,6 +42281,7 @@ }, /obj/effect/turf_decal/delivery, /obj/machinery/firealarm{ + dir = 1; pixel_y = -26 }, /obj/effect/turf_decal/tile/neutral, @@ -42880,6 +42882,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"uvp" = ( +/obj/machinery/smartfridge/organ/preloaded{ + pixel_y = 2 + }, +/turf/closed/wall, +/area/medical/medbay/zone3) "uxJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -81595,7 +81603,7 @@ aSh bcf bcW blt -aSh +uvp aOL bfA bfX diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index d70bc0187b..13922a15e2 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -174,7 +174,6 @@ pixel_x = -27 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 26 }, /turf/open/floor/circuit, @@ -672,7 +671,7 @@ /obj/item/pen, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/item/paper_bin, @@ -2453,7 +2452,7 @@ dir = 6 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /turf/open/floor/plasteel/showroomfloor, @@ -3387,7 +3386,7 @@ /obj/item/gun/energy/e_gun, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /turf/open/floor/plasteel/dark, @@ -4248,7 +4247,7 @@ }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /obj/effect/turf_decal/tile/red{ @@ -4964,7 +4963,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/showroomfloor, @@ -8228,7 +8227,7 @@ dir = 10 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/dark, @@ -8715,7 +8714,7 @@ /area/crew_quarters/dorms) "avl" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/computer/cryopod{ @@ -9674,7 +9673,7 @@ light_color = "#e8eaff" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/computer/rdconsole{ @@ -11431,7 +11430,6 @@ "aBB" = ( /obj/machinery/computer/cargo/request, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /turf/open/floor/wood, @@ -12379,7 +12377,7 @@ /area/storage/primary) "aDB" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral, @@ -14356,7 +14354,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/blue{ @@ -17508,7 +17505,7 @@ dir = 10 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel, @@ -18556,7 +18553,7 @@ /area/maintenance/department/crew_quarters/bar) "aSA" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/hydroponics/constructable, @@ -18775,7 +18772,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/brown{ @@ -19108,7 +19104,7 @@ "aTP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral, @@ -21328,7 +21324,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/brown, @@ -21725,7 +21721,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/plasteel/dark, @@ -22077,7 +22073,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/green{ @@ -24433,7 +24429,6 @@ "bfx" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/firealarm{ - dir = 1; pixel_y = 24 }, /obj/effect/turf_decal/delivery, @@ -24819,7 +24814,6 @@ /area/hallway/primary/central) "bgx" = ( /obj/machinery/firealarm{ - dir = 1; pixel_y = 27 }, /obj/structure/chair, @@ -26683,7 +26677,7 @@ "bly" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26; pixel_y = 28 }, @@ -27994,7 +27988,6 @@ "boz" = ( /obj/machinery/vending/clothing, /obj/machinery/firealarm{ - dir = 1; pixel_y = 27 }, /obj/effect/turf_decal/tile/blue{ @@ -30024,7 +30017,7 @@ "bsB" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -26 }, /obj/structure/sign/poster/official/random{ @@ -30231,7 +30224,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/green, @@ -30360,7 +30353,7 @@ /obj/item/crowbar, /obj/item/wrench, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/item/multitool, @@ -30810,7 +30803,7 @@ /area/medical/chemistry) "bun" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/yellow{ @@ -30848,7 +30841,7 @@ network = list("ss13","rd") }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -31469,7 +31462,7 @@ dir = 1 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/purple{ @@ -34270,7 +34263,7 @@ /area/science/storage) "bBH" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/purple{ @@ -34299,7 +34292,7 @@ "bBK" = ( /obj/structure/closet/bombcloset, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/structure/sign/poster/official/random{ @@ -35599,7 +35592,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -35961,8 +35954,7 @@ dir = 1 }, /obj/machinery/vending/wallmed{ - pixel_y = 28; - products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1) + pixel_y = 28 }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/landmark/blobstart, @@ -36644,7 +36636,7 @@ "bGe" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/effect/turf_decal/tile/neutral{ @@ -36690,7 +36682,7 @@ network = list("ss13","rd") }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /turf/open/floor/engine, @@ -37123,7 +37115,7 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -37749,6 +37741,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/light_switch{ + pixel_x = -22 + }, /turf/open/floor/plasteel/white, /area/medical/surgery) "bIp" = ( @@ -37795,8 +37790,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/vending/wallmed{ - pixel_y = 28; - products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1) + pixel_y = 28 }, /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -38757,8 +38751,7 @@ /area/medical/medbay/central) "bKw" = ( /obj/machinery/vending/wallmed{ - pixel_y = 28; - products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/medspray/sterilizine = 1) + pixel_y = 28 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -38828,10 +38821,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -39305,15 +39294,16 @@ /obj/item/clothing/gloves/color/latex, /obj/item/clothing/mask/surgical, /obj/item/clothing/suit/apron/surgical, -/obj/machinery/light_switch{ - pixel_x = -22 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -26 + }, /turf/open/floor/plasteel/white, /area/medical/surgery) "bLN" = ( @@ -40977,7 +40967,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/yellow{ @@ -41200,7 +41190,6 @@ }, /obj/effect/turf_decal/stripes/line, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /turf/open/floor/plasteel/dark, @@ -41252,7 +41241,6 @@ }, /obj/item/stock_parts/cell/high/plus, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/green{ @@ -42923,7 +42911,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/yellow{ @@ -45325,7 +45312,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/stripes/corner{ @@ -47520,7 +47506,7 @@ /area/engine/engineering) "cgV" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/stripes/line{ @@ -48339,7 +48325,7 @@ "ckD" = ( /obj/structure/chair/wood/normal, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /turf/open/floor/plasteel/dark, @@ -52165,7 +52151,6 @@ network = list("ss13","monastery") }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /turf/open/floor/plasteel/dark, @@ -53839,7 +53824,7 @@ /area/maintenance/department/security/brig) "ePS" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/machinery/light{ @@ -54224,7 +54209,7 @@ "fFv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/dark, @@ -54362,7 +54347,7 @@ "gdL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -28 }, /obj/effect/turf_decal/tile/purple{ @@ -55674,6 +55659,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"jdA" = ( +/obj/machinery/smartfridge/organ/preloaded, +/turf/closed/wall, +/area/medical/surgery) "jeq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -56359,7 +56348,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -27 }, /obj/effect/turf_decal/tile/green{ @@ -59446,7 +59435,6 @@ pixel_y = 6 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 27 }, /turf/open/floor/plasteel/cafeteria, @@ -59847,7 +59835,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/red{ @@ -60089,7 +60076,7 @@ }, /obj/item/hand_labeler, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 28 }, /obj/machinery/light{ @@ -61752,7 +61739,6 @@ dir = 4 }, /obj/machinery/firealarm{ - dir = 1; pixel_y = 29 }, /obj/effect/turf_decal/tile/neutral{ @@ -92221,7 +92207,7 @@ bFU bFU bIn bJt -bFU +jdA bFU bFU bFU diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 80e80cd6a9..6a323ee86f 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3398,7 +3398,7 @@ /area/centcom/supply) "iS" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/brown{ @@ -3883,7 +3883,7 @@ /area/centcom/control) "jV" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/stripes/line{ @@ -4231,7 +4231,7 @@ icon_state = "plant-22" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -5775,7 +5775,7 @@ req_access_txt = "109" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -5799,7 +5799,7 @@ req_access_txt = "109" }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -6866,7 +6866,7 @@ /area/centcom/ferry) "pM" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -6893,7 +6893,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/eyepatch, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /turf/open/floor/plasteel/grimy, @@ -9214,7 +9214,7 @@ pixel_y = -32 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -11017,7 +11017,7 @@ dir = 8 }, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/blue{ @@ -12323,7 +12323,7 @@ /obj/item/book/manual/wiki/security_space_law, /obj/item/taperecorder, /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral{ @@ -12390,7 +12390,7 @@ "CM" = ( /obj/structure/filingcabinet/medical, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ @@ -14511,7 +14511,7 @@ /area/tdome/tdomeobserve) "Hq" = ( /obj/machinery/firealarm{ - dir = 4; + dir = 8; pixel_x = 24 }, /turf/open/floor/plasteel/white, @@ -14554,7 +14554,7 @@ /area/tdome/tdomeobserve) "Hu" = ( /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/bar, @@ -15835,7 +15835,7 @@ icon_state = "plant-21" }, /obj/machinery/firealarm{ - dir = 8; + dir = 4; pixel_x = -24 }, /obj/effect/turf_decal/tile/neutral{ diff --git a/_maps/map_files/generic/City_of_Cogs.dmm b/_maps/map_files/generic/City_of_Cogs.dmm index e1e7659ce3..1195ad62c5 100644 --- a/_maps/map_files/generic/City_of_Cogs.dmm +++ b/_maps/map_files/generic/City_of_Cogs.dmm @@ -379,15 +379,6 @@ /obj/item/camera, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) -"Nz" = ( -/obj/structure/table/bronze, -/obj/item/implantcase, -/obj/item/implantcase, -/obj/item/implantcase, -/obj/item/implanter, -/obj/item/storage/backpack/duffelbag/sec/surgery, -/turf/open/floor/clockwork/reebe, -/area/reebe/city_of_cogs) "NH" = ( /obj/structure/table/bronze, /obj/item/taperecorder, @@ -409,10 +400,6 @@ "WT" = ( /turf/closed/wall/clockwork, /area/reebe) -"Yy" = ( -/obj/structure/table/optable, -/turf/open/floor/clockwork/reebe, -/area/reebe/city_of_cogs) (1,1,1) = {" zb @@ -33918,7 +33905,7 @@ ab ai bE aj -Yy +aj aj aj aA @@ -34175,7 +34162,7 @@ ab ah al aj -Nz +aj aj aC ah diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 2c04837c79..05446968e7 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -56,7 +56,7 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ah" = ( -/obj/machinery/computer/shuttle, +/obj/machinery/computer/emergency_shuttle, /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ai" = ( diff --git a/code/__DEFINES/_globals.dm b/code/__DEFINES/_globals.dm index 874223a612..cc3e385f9f 100644 --- a/code/__DEFINES/_globals.dm +++ b/code/__DEFINES/_globals.dm @@ -41,6 +41,12 @@ //Create a list global that is initialized as an empty list #define GLOBAL_LIST_EMPTY(X) GLOBAL_LIST_INIT(X, list()) +// Create a typed list global with an initializer expression +#define GLOBAL_LIST_INIT_TYPED(X, Typepath, InitValue) GLOBAL_RAW(/list##Typepath/X); GLOBAL_MANAGED(X, InitValue) + +// Create a typed list global that is initialized as an empty list +#define GLOBAL_LIST_EMPTY_TYPED(X, Typepath) GLOBAL_LIST_INIT_TYPED(X, Typepath, list()) + //Create a typed global with an initializer expression #define GLOBAL_DATUM_INIT(X, Typepath, InitValue) GLOBAL_RAW(Typepath/##X); GLOBAL_MANAGED(X, InitValue) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index b875998f0a..bded562a3c 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -69,6 +69,7 @@ #define ADMIN_PUNISHMENT_BSA "Bluespace Artillery Device" #define ADMIN_PUNISHMENT_FIREBALL "Fireball" #define ADMIN_PUNISHMENT_ROD "Immovable Rod" +#define ADMIN_PUNISHMENT_SUPPLYPOD_QUICK "Supply Pod (Quick)" #define ADMIN_PUNISHMENT_SUPPLYPOD "Supply Pod" #define ADMIN_PUNISHMENT_MAZING "Puzzle" #define ADMIN_PUNISHMENT_PIE "Cream Pie" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index b2f05fd5f8..cabcc0a17d 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -12,6 +12,7 @@ #define APPRENTICE_BLUESPACE "bluespace" #define APPRENTICE_ROBELESS "robeless" #define APPRENTICE_HEALING "healing" +#define APPRENTICE_MARTIAL "martial" //ERT Types @@ -40,3 +41,19 @@ #define NOT_DOMINATING -1 #define MAX_LEADERS_GANG 4 #define INITIAL_DOM_ATTEMPTS 3 + +//Bloodsucker defines +// Bloodsucker related antag datums +#define ANTAG_DATUM_BLOODSUCKER /datum/antagonist/bloodsucker +#define ANTAG_DATUM_VASSAL /datum/antagonist/vassal +//#define ANTAG_DATUM_HUNTER /datum/antagonist/vamphunter Disabled for now + +// BLOODSUCKER +#define BLOODSUCKER_LEVEL_TO_EMBRACE 3 +#define BLOODSUCKER_FRENZY_TIME 25 // How long the vamp stays in frenzy. +#define BLOODSUCKER_FRENZY_OUT_TIME 300 // How long the vamp goes back into frenzy. +#define BLOODSUCKER_STARVE_VOLUME 5 // Amount of blood, below which a Vamp is at risk of frenzy. + +#define CAT_STRUCTURE "Structures" + +#define MARTIALART_HUNTER "hunter-fu" diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index baf29240c3..74a6796bd2 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -9,12 +9,13 @@ #define META_GAS_FUSION_POWER 7 //ATMOS //stuff you should probably leave well alone! -#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol) -#define ONE_ATMOSPHERE 101.325 //kPa -#define TCMB 2.7 // -270.3degC -#define TCRYO 225 // -48.15degC -#define T0C 273.15 // 0degC -#define T20C 293.15 // 20degC +#define R_IDEAL_GAS_EQUATION 8.31446261815324 //kPa*L/(K*mol) +#define ONE_ATMOSPHERE 101.325 //kPa +#define TCMB 2.7 // -270.3degC +#define TCRYO 225 // -48.15degC +#define T0C 273.15 // 0degC +#define T20C 293.15 // 20degC +#define STEFANBOLTZMANN (5.670373*10e-8) // W/(m^2*K^4) #define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC #define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity @@ -147,6 +148,20 @@ #define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) ) #define CANVERTICALATMOSPASS(A, O) ( A.CanAtmosPassVertical == ATMOS_PASS_PROC ? A.CanAtmosPass(O, TRUE) : ( A.CanAtmosPassVertical == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPassVertical ) ) +//OPEN TURF ATMOS +#define OPENTURF_DEFAULT_ATMOS "o2=22;n2=82;TEMP=293.15" //the default air mix that open turfs spawn +#define TCOMMS_ATMOS "n2=100;TEMP=80" //-193,15°C telecommunications. also used for xenobiology slime killrooms +#define AIRLESS_ATMOS "TEMP=2.7" //space +#define FROZEN_ATMOS "o2=22;n2=82;TEMP=180" //-93.15°C snow and ice turfs +#define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" //used in the holodeck burn test program + +//ATMOSPHERICS DEPARTMENT GAS TANK TURFS +#define ATMOS_TANK_N2O "n2o=6000;TEMP=293.15" +#define ATMOS_TANK_CO2 "co2=50000;TEMP=293.15" +#define ATMOS_TANK_PLASMA "plasma=70000;TEMP=293.15" +#define ATMOS_TANK_O2 "o2=100000;TEMP=293.15" +#define ATMOS_TANK_N2 "n2=100000;TEMP=293.15" +#define ATMOS_TANK_AIRMIX "o2=2644;n2=10580;TEMP=293.15" //LAVALAND #define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50 //what pressure you have to be under to increase the effect of equipment meant for lavaland #define LAVALAND_DEFAULT_ATMOS "o2=14;n2=23;TEMP=300" diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 0e4f0f3a6e..322a150617 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -58,6 +58,7 @@ #define ANTAG_HUD_SOULLESS 21 #define ANTAG_HUD_CLOCKWORK 22 #define ANTAG_HUD_BROTHER 23 +#define ANTAG_HUD_BLOODSUCKER 24 // Notification action types #define NOTIFY_JUMP "jump" diff --git a/code/__DEFINES/cargo.dm b/code/__DEFINES/cargo.dm index 0d07ef353a..52a2d56697 100644 --- a/code/__DEFINES/cargo.dm +++ b/code/__DEFINES/cargo.dm @@ -11,6 +11,7 @@ #define STYLE_FRUIT 11 #define STYLE_INVISIBLE 12 #define STYLE_GONDOLA 13 +#define STYLE_SEETHROUGH 14 #define POD_ICON_STATE 1 #define POD_NAME 2 @@ -29,5 +30,6 @@ list("honkpod", "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\ list("fruitpod", "\improper Orange", "An angry orange."),\ list("", "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\ - list("gondolapod", "gondola", "The silent walker. This one seems to be part of a delivery agency.")\ + list("gondolapod", "gondola", "The silent walker. This one seems to be part of a delivery agency."),\ + list("", "", "")\ ) \ No newline at end of file diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index e3cafd4613..47b5c2f602 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -57,9 +57,9 @@ #define BALLS_SACK_SIZE_DEF 8 #define BALLS_SACK_SIZE_MAX 40 -#define CUM_RATE 0.035 +#define CUM_RATE 2 // holy shit what a really shitty define name - relates to units per arbitrary measure of time? #define CUM_RATE_MULT 1 -#define CUM_EFFICIENCY 1//amount of nutrition required per life() +#define CUM_EFFICIENCY 1 //amount of nutrition required per life() #define EGG_GIRTH_MIN 1//inches #define EGG_GIRTH_DEF 6 diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 3664da4a5d..2d40d91023 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -98,6 +98,7 @@ //the define for visible message range in combat #define COMBAT_MESSAGE_RANGE 3 +#define DEFAULT_MESSAGE_RANGE 7 //Shove knockdown lengths (deciseconds) #define SHOVE_KNOCKDOWN_SOLID 30 diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index bf30b547fe..f95ff93ac3 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -5,6 +5,17 @@ #define COMPONENT_INCOMPATIBLE 1 #define COMPONENT_NOTRANSFER 2 +#define ELEMENT_INCOMPATIBLE 1 // Return value to cancel attaching + +// /datum/element flags +/// Causes the detach proc to be called when the host object is being deleted +#define ELEMENT_DETACH (1 << 0) +/** + * Only elements created with the same arguments given after `id_arg_index` share an element instance + * The arguments are the same when the text and number values are the same and all other values have the same ref + */ +#define ELEMENT_BESPOKE (1 << 1) + // How multiple components of the exact same type are handled in the same datum #define COMPONENT_DUPE_HIGHLANDER 0 //old component is deleted (default) @@ -25,10 +36,12 @@ ////////////////////////////////////////////////////////////////// // /datum signals -#define COMSIG_COMPONENT_ADDED "component_added" //when a component is added to a datum: (/datum/component) -#define COMSIG_COMPONENT_REMOVING "component_removing" //before a component is removed from a datum because of RemoveComponent: (/datum/component) +#define COMSIG_COMPONENT_ADDED "component_added" //sent to the new datum parent when a component is added to them: (/datum/component) +#define COMSIG_COMPONENT_REMOVING "component_removing" //sent to the datum parent before a component is removed from them because of RemoveComponent: (/datum/component) +#define COMSIG_COMPONENT_UNREGISTER_PARENT "component_unregister_parent" //sent to the component itself when unregistered from a parent +#define COMSIG_COMPONENT_REGISTER_PARENT "component_register_parent" //sent to the component itself when registered to a parent #define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation -#define COMSIG_PARENT_QDELETED "parent_qdeleted" //after a datum's Destroy() is called: (force, qdel_hint), at this point none of the other components chose to interrupt qdel and Destroy has been called +#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called // /atom signals #define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params) @@ -121,18 +134,30 @@ #define COMPONENT_CANCEL_THROW 1 #define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) #define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z) -#define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) +#define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded" //called when the movable is placed in an unaccessible area, used for stationloving: () +#define COMSIG_MOVABLE_HEAR "movable_hear" //from base of atom/movable/Hear(): (message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source) + #define HEARING_MESSAGE 1 + #define HEARING_SPEAKER 2 +// #define HEARING_LANGUAGE 3 + #define HEARING_RAW_MESSAGE 4 + /* #define HEARING_RADIO_FREQ 5 + #define HEARING_SPANS 6 + #define HEARING_MESSAGE_MODE 7 + #define HEARING_SOURCE 8*/ #define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) #define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination) // /mind signals -#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to(): (new_character, old_character) +#define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character) + #define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening. +#define COMSIG_MIND_TRANSFER "mind_transfer" //from base of mind/transfer_to() when it's done: (new_character, old_character) // /mob signals #define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A) #define COMPONENT_ALLOW_EXAMINE 1 #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) -#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse) + #define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat. +#define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize) #define COMPONENT_BLOCK_GHOSTING 1 #define COMSIG_MOB_ALLOWED "mob_allowed" //from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj #define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" //from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources) @@ -140,10 +165,13 @@ #define COMSIG_MOB_HUD_CREATED "mob_hud_created" //from base of mob/create_mob_hud(): () #define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" //from base of #define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" //from base of /obj/item/attack(): (mob/M, mob/user) + #define COMPONENT_ITEM_NO_ATTACK 1 #define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" //from base of mob/RangedAttack(): (atom/A, params) #define COMSIG_MOB_THROW "mob_throw" //from base of /mob/throw_item(): (atom/target) -#define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey() +#define COMSIG_MOB_KEY_CHANGE "mob_key_change" //from base of /mob/transfer_ckey(): (new_character, old_character) +#define COMSIG_MOB_PRE_PLAYER_CHANGE "mob_pre_player_change" //sent to the target mob from base of /mob/transfer_ckey() and /mind/transfer_to(): (our_character, their_character) +// #define COMPONENT_STOP_MIND_TRANSFER 1 #define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //from base of /mob/update_sight(): () #define COMSIG_MOB_SAY "mob_say" // from /mob/living/say(): (proc args list) #define COMPONENT_UPPERCASE_SPEECH 1 @@ -305,3 +333,11 @@ //Ouch my toes! #define CALTROP_BYPASS_SHOES 1 #define CALTROP_IGNORE_WALKERS 2 + +//Xenobio hotkeys +#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" //from slime CtrlClickOn(): (/mob) +#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" //from slime AltClickOn(): (/mob) +#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" //from slime ShiftClickOn(): (/mob) +#define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" //from turf ShiftClickOn(): (/mob) +#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" //from turf AltClickOn(): (/mob) +#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" //from monkey CtrlClickOn(): (/mob) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 9e8a4f71c2..55962bf78c 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define TESLA_IGNORE_1 (1<<13) // TESLA_IGNORE grants immunity from being targeted by tesla-style electricity #define INITIALIZED_1 (1<<14) //Whether /atom/Initialize() has already run for the object #define ADMIN_SPAWNED_1 (1<<15) //was this spawned by an admin? used for stat tracking stuff. +#define PREVENT_CONTENTS_EXPLOSION_1 (1<<16) /// should not get harmed if this gets caught by an explosion? //turf-only flags #define NOJAUNT_1 (1<<0) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 632e4adef9..f5ea8d835f 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -4,9 +4,9 @@ #define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money #define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device #define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets -#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits -#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons -#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe +#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in a normal bag, ex: Defibrillator, Backpack, Space Suits +#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons - Can not fit in Boh +#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe - Can not fit in Boh //Inventory depth: limits how many nested storage items you can access directly. //1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 6f433374e7..09ef814f68 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -118,6 +118,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) +#define iscow(A) (istype(A, /mob/living/simple_animal/cow)) + #define isslime(A) (istype(A, /mob/living/simple_animal/slime)) #define isdrone(A) (istype(A, /mob/living/simple_animal/drone)) diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 13dccc74fe..89c702e605 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -59,11 +59,13 @@ #define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow. #define LIGHTING_PLANE_ALPHA_VISIBLE 255 -#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250 +#define LIGHTING_PLANE_ALPHA_NV_TRAIT 223 #define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192 #define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell. #define LIGHTING_PLANE_ALPHA_INVISIBLE 0 +#define NIGHT_VISION_DARKSIGHT_RANGE 3 + //lighting area defines #define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness) #define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled @@ -80,4 +82,4 @@ #define FLASH_LIGHT_DURATION 2 #define FLASH_LIGHT_POWER 3 -#define FLASH_LIGHT_RANGE 3.8 \ No newline at end of file +#define FLASH_LIGHT_RANGE 3.8 diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 1ce5b88945..db13c21c44 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -100,3 +100,8 @@ #define NUKE_OFF_UNLOCKED 1 #define NUKE_ON_TIMING 2 #define NUKE_ON_EXPLODING 3 + + +//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified. +#define PLANT_GENE_REMOVABLE (1<<0) +#define PLANT_GENE_EXTRACTABLE (1<<1) \ No newline at end of file diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm index 50e1a10fa1..1883df6e8e 100644 --- a/code/__DEFINES/movespeed_modification.dm +++ b/code/__DEFINES/movespeed_modification.dm @@ -57,6 +57,7 @@ #define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG" #define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY" +#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER" #define MOVESPEED_ID_TASED_STATUS "TASED" diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index d3e724aefb..94c2c372f0 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -25,23 +25,22 @@ #define NO_MAT_REDEMPTION (1<<5) //Stops you from putting things like an RCD or other items into an ORM or protolathe for materials. #define DROPDEL (1<<6) //When dropped, it calls qdel on itself #define NOBLUDGEON (1<<7) //when an item has this it produces no "X has been hit by Y with Z" message in the default attackby() -#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff +#define ABSTRACT (1<<8) //for all things that are technically items but used for various different stuff #define IMMUTABLE_SLOW (1<<9) //When players should not be able to change the slowdown of the item (Speed potions, ect) #define SURGICAL_TOOL (1<<10) //Tool commonly used for surgery: won't attack targets in an active surgical operation on help intent (in case of mistakes) -#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform. +#define NO_UNIFORM_REQUIRED (1<<11) //Can be worn on certain slots (currently belt and id) that would otherwise require an uniform. // Flags for the clothing_flags var on /obj/item/clothing #define LAVAPROTECT (1<<0) #define STOPSPRESSUREDAMAGE (1<<1) //SUIT and HEAD items which stop pressure damage. To stop you taking all pressure damage you must have both a suit and head item with this flag. #define BLOCK_GAS_SMOKE_EFFECT (1<<2) //blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! -#define ALLOWINTERNALS (1<<3) //mask allows internals +#define ALLOWINTERNALS (1<<3) //mask allows internals #define NOSLIP (1<<4) //prevents from slipping on wet floors, in space etc #define THICKMATERIAL (1<<5) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. #define VOICEBOX_TOGGLABLE (1<<6) //The voicebox in this clothing can be toggled. #define VOICEBOX_DISABLED (1<<7) //The voicebox is currently turned off. -#define SNUG_FIT (1<<8) //Prevents knock-off from things like hat-throwing. -#define ANTI_TINFOIL_MANEUVER (1<<9) //Hats with negative effects when worn (i.e the tinfoil hat). +#define IGNORE_HAT_TOSS (1<<8) //Hats with negative effects when worn (i.e the tinfoil hat). // Flags for the organ_flags var on /obj/item/organ @@ -50,4 +49,4 @@ #define ORGAN_FAILING (1<<2) //Failing organs perform damaging effects until replaced or fixed #define ORGAN_EXTERNAL (1<<3) //Was this organ implanted/inserted/etc, if true will not be removed during species change. #define ORGAN_VITAL (1<<4) //Currently only the brain -#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances \ No newline at end of file +#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index b316c003a9..d5e3f828b8 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -35,6 +35,8 @@ #define ROLE_LAVALAND "lavaland" #define ROLE_INTERNAL_AFFAIRS "internal affairs agent" #define ROLE_GANG "gangster" +#define ROLE_BLOODSUCKER "bloodsucker" +//#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough @@ -60,7 +62,9 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_OVERTHROW = /datum/game_mode/overthrow, ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs, ROLE_SENTIENCE, - ROLE_GANG = /datum/game_mode/gang + ROLE_GANG = /datum/game_mode/gang, + ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker + //ROLE_MONSTERHUNTER Disabled for now )) //Job defines for what happens when you fail to qualify for any job during job selection diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index af06a5a2d0..beeee22df9 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -75,8 +75,16 @@ #define LINGHIVE_LING 2 #define LINGHIVE_LINK 3 +//whether the emote is visible or audible. +#define EMOTE_VISIBLE 1 +#define EMOTE_AUDIBLE 2 + //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam #define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen? #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 #define MAX_CHARTER_LEN 80 + +// Audio/Visual Flags. Used to determine what sense are required to notice a message. +#define MSG_VISUAL (1<<0) +#define MSG_AUDIBLE (1<<1) \ No newline at end of file diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index ff19976cff..6d52f4640c 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -7,6 +7,8 @@ #define STATUS_EFFECT_REPLACE 2 //if it allows only one, but new instances replace +#define STATUS_EFFECT_REFRESH 3 // if it only allows one, and new instances just instead refresh the timer + /////////// // BUFFS // /////////// @@ -44,7 +46,7 @@ #define STATUS_EFFECT_SLEEPING /datum/status_effect/incapacitating/sleeping //the affected is asleep -#define STATUS_EFFECT_TASED /datum/status_effect/electrode //the affected has been tased, preventing fine muscle control +#define STATUS_EFFECT_TASED /datum/status_effect/no_combat_mode/electrode/ //the affected has been tased, preventing fine muscle control #define STATUS_EFFECT_PACIFY /datum/status_effect/pacify //the affected is pacified, preventing direct hostile actions @@ -56,6 +58,8 @@ #define MAX_MANIA_SEVERITY 100 //how high the mania severity can go #define MANIA_DAMAGE_TO_CONVERT 90 //how much damage is required before it'll convert affected targets +#define STATUS_EFFECT_CHOKINGSTRAND /datum/status_effect/strandling //Choking Strand + #define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. #define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes @@ -64,6 +68,8 @@ #define STATUS_EFFECT_SAWBLEED /datum/status_effect/saw_bleed //if the bleed builds up enough, takes a ton of damage +#define STATUS_EFFECT_NECKSLICE /datum/status_effect/neck_slice //Creates the flavor messages for the neck-slice + #define STATUS_EFFECT_NECROPOLIS_CURSE /datum/status_effect/necropolis_curse #define CURSE_BLINDING 1 //makes the edges of the target's screen obscured #define CURSE_SPAWNING 2 //spawns creatures that attack the target only @@ -74,9 +80,14 @@ #define STATUS_EFFECT_ICHORIAL_STAIN /datum/status_effect/ichorial_stain //Prevents a servant from being revived by vitality matrices for one minute. +#define STATUS_EFFECT_SPASMS /datum/status_effect/spasms //causes random muscle spasms + #define STATUS_EFFECT_BREASTS_ENLARGEMENT /datum/status_effect/chem/breast_enlarger //Applied slowdown due to the ominous bulk. #define STATUS_EFFECT_PENIS_ENLARGEMENT /datum/status_effect/chem/penis_enlarger //More applied slowdown, just like the above. + +#define STATUS_EFFECT_NO_COMBAT_MODE /datum/status_effect/no_combat_mode //Wont allow combat mode and will disable it +#define STATUS_EFFECT_MESMERIZE /datum/status_effect/no_combat_mode/mesmerize //Just reskinned no_combat_mode ///////////// // NEUTRAL // ///////////// diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2382e0e444..d17db07b50 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -66,6 +66,7 @@ #define TRAIT_HUSK "husk" #define TRAIT_NOCLONE "noclone" #define TRAIT_CLUMSY "clumsy" +#define TRAIT_CHUNKYFINGERS "chunkyfingers" //means that you can't use weapons with normal trigger guards. #define TRAIT_DUMB "dumb" #define TRAIT_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE #define TRAIT_PACIFISM "pacifism" @@ -109,6 +110,7 @@ #define TRAIT_NOHARDCRIT "nohardcrit" #define TRAIT_NOSOFTCRIT "nosoftcrit" #define TRAIT_MINDSHIELD "mindshield" +#define TRAIT_SIXTHSENSE "sixthsense" #define TRAIT_DISSECTED "dissected" #define TRAIT_FEARLESS "fearless" #define TRAIT_UNSTABLE "unstable" @@ -117,13 +119,21 @@ #define TRAIT_PARALYSIS_L_LEG "para-l-leg" #define TRAIT_PARALYSIS_R_LEG "para-r-leg" #define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech" +#define TRAIT_SOOTHED_THROAT "soothed-throat" #define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism" -#define TRAIT_STRONG_GRABBER "strong_grabber" -#define TRAIT_CALCIUM_HEALER "calcium_healer" +#define TRAIT_STRONG_GRABBER "strong_grabber" +#define TRAIT_CALCIUM_HEALER "calcium_healer" +#define TRAIT_MAGIC_CHOKE "magic_choke" #define TRAIT_CAPTAIN_METABOLISM "captain-metabolism" #define TRAIT_ABDUCTOR_TRAINING "abductor-training" #define TRAIT_ABDUCTOR_SCIENTIST_TRAINING "abductor-scientist-training" #define TRAIT_SURGEON "surgeon" +#define TRAIT_COLDBLOODED "coldblooded" // Your body is literal room temperature. Does not make you immune to the temp. +#define TRAIT_NONATURALHEAL "nonaturalheal" // Only Admins can heal you. NOTHING else does it unless it's given the god tag. +#define TRAIT_NORUNNING "norunning" // You walk! +#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites. +#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat. + //non-mob traits #define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it @@ -160,6 +170,7 @@ #define TRAIT_FRIENDLY "friendly" #define TRAIT_ASSBLASTUSA "assblastusa" #define TRAIT_CULT_EYES "cult_eyes" +#define TRAIT_FREESPRINT "free_sprinting" // common trait sources @@ -179,6 +190,7 @@ #define CULT_TRAIT "cult" #define CURSED_ITEM_TRAIT "cursed-item" // The item is magically cursed #define ABSTRACT_ITEM_TRAIT "abstract-item" +#define STATUS_EFFECT_TRAIT "status-effect" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention // unique trait sources, still defines @@ -212,5 +224,6 @@ #define LOCKED_HELMET_TRAIT "locked-helmet" #define NINJA_SUIT_TRAIT "ninja-suit" #define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant" +#define SLEEPING_CARP_TRAIT "sleeping_carp" #define ABDUCTOR_ANTAGONIST "abductor-antagonist" #define MADE_UNCLONEABLE "made-uncloneable" diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 37f36a7e0d..4a86f57fcd 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -23,6 +23,9 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b) return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field]) +/proc/cmp_filter_data_priority(list/A, list/B) + return A["priority"] - B["priority"] + /proc/cmp_ckey_asc(client/a, client/b) return sorttext(b.ckey, a.ckey) @@ -84,3 +87,30 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_job_display_asc(datum/job/A, datum/job/B) return A.display_order - B.display_order + +/proc/cmp_uplink_items_dsc(datum/uplink_item/A, datum/uplink_item/B) + return sorttext(initial(B.name), initial(A.name)) + +/proc/cmp_numbered_displays_name_asc(datum/numbered_display/A, datum/numbered_display/B) + return sorttext(A.sample_object.name, B.sample_object.name) + +/proc/cmp_numbered_displays_name_dsc(datum/numbered_display/A, datum/numbered_display/B) + return sorttext(B.sample_object.name, A.sample_object.name) + +/proc/cmp_quirk_asc(datum/quirk/A, datum/quirk/B) + var/a_sign = num2sign(initial(A.value) * -1) + var/b_sign = num2sign(initial(B.value) * -1) + + // Neutral traits go last. + if(a_sign == 0) + a_sign = 2 + if(b_sign == 0) + b_sign = 2 + + var/a_name = initial(A.name) + var/b_name = initial(B.name) + + if(a_sign != b_sign) + return a_sign - b_sign + else + return sorttext(b_name, a_name) \ No newline at end of file diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 7852251230..a7bf5da17f 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -97,6 +97,16 @@ var/datum/emote/E = new path() E.emote_list[E.key] = E + //Uplink Items + for(var/path in subtypesof(/datum/uplink_item)) + var/datum/uplink_item/I = path + if(!initial(I.item)) //We add categories to a separate list. + GLOB.uplink_categories |= initial(I.category) + continue + GLOB.uplink_items += path + //(sub)typesof entries are listed by the order they are loaded in the code, so we'll have to rearrange them here. + GLOB.uplink_items = sortList(GLOB.uplink_items, /proc/cmp_uplink_items_dsc) + init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes) //creates every subtype of prototype (excluding prototype) and adds it to list L. diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 8e7938a312..0d6345dae2 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -522,12 +522,14 @@ GLOBAL_LIST_EMPTY(species_list) else prefs = new - var/adminoverride = 0 + var/override = FALSE if(M.client && M.client.holder && (prefs.chat_toggles & CHAT_DEAD)) - adminoverride = 1 - if(isnewplayer(M) && !adminoverride) + override = TRUE + if(HAS_TRAIT(M, TRAIT_SIXTHSENSE)) + override = TRUE + if(isnewplayer(M) && !override) continue - if(M.stat != DEAD && !adminoverride) + if(M.stat != DEAD && !override) continue if(speaker_key && speaker_key in prefs.ignoring) continue diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 2c92816264..27f1a81fef 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -313,14 +313,15 @@ parts += "[FOURSPACES]Threat level: [mode.threat_level]" parts += "[FOURSPACES]Threat left: [mode.threat]" parts += "[FOURSPACES]Executed rules:" + for(var/datum/dynamic_ruleset/rule in mode.executed_rules) + parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name]: -[rule.cost + rule.scaled_times * rule.scaling_cost] threat" + parts += "[FOURSPACES]Other threat changes:" for(var/str in mode.threat_log) parts += "[FOURSPACES][FOURSPACES][str]" for(var/entry in mode.threat_tallies) parts += "[FOURSPACES][FOURSPACES][entry] added [mode.threat_tallies[entry]]" - /* - for(var/datum/dynamic_ruleset/rule in mode.executed_rules) - parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name]: -[rule.cost + rule.scaled_times * rule.scaling_cost] threat" - */ + SSblackbox.record_feedback("tally","dynamic_threat",mode.threat_level,"Final threat level") + SSblackbox.record_feedback("tally","dynamic_threat",mode.threat,"Threat left") return parts.Join("
    ") /client/proc/roundend_report_file() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9abe42ea8e..29f5331fd3 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1548,4 +1548,12 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /proc/CallAsync(datum/source, proctype, list/arguments) set waitfor = FALSE - return call(source, proctype)(arglist(arguments)) \ No newline at end of file + return call(source, proctype)(arglist(arguments)) + +/proc/num2sign(numeric) + if(numeric > 0) + return 1 + else if(numeric < 0) + return -1 + else + return 0 diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 91f5105553..e0cf8ebdd5 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -142,8 +142,7 @@ GLOBAL_LIST_INIT(bitfields, list( "THICKMATERIAL" = THICKMATERIAL, "VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE, "VOICEBOX_DISABLED" = VOICEBOX_DISABLED, - "SNUG_FIT" = SNUG_FIT, - "ANTI_TINFOIL_MANEUVER" = ANTI_TINFOIL_MANEUVER, + "IGNORE_HAT_TOSS" = IGNORE_HAT_TOSS, ), "tesla_flags" = list( "TESLA_MOB_DAMAGE" = TESLA_MOB_DAMAGE, diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index a2135b93b2..e2705ad49f 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -7,15 +7,15 @@ GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/faci GLOBAL_LIST_EMPTY(facial_hair_styles_male_list) //stores only hair names GLOBAL_LIST_EMPTY(facial_hair_styles_female_list) //stores only hair names //Underwear -GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear/bottom indexed by name +GLOBAL_LIST_EMPTY_TYPED(underwear_list, /datum/sprite_accessory/underwear/bottom) //stores bottoms indexed by name GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name GLOBAL_LIST_EMPTY(underwear_f) //stores only underwear name //Undershirts -GLOBAL_LIST_EMPTY(undershirt_list) //stores /datum/sprite_accessory/underwear/top indexed by name +GLOBAL_LIST_EMPTY_TYPED(undershirt_list, /datum/sprite_accessory/underwear/top) //stores tops indexed by name GLOBAL_LIST_EMPTY(undershirt_m) //stores only undershirt name GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name //Socks -GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/underwear/socks indexed by name +GLOBAL_LIST_EMPTY_TYPED(socks_list, /datum/sprite_accessory/underwear/socks) //stores socks indexed by name //Lizard Bits (all datum lists indexed by name) GLOBAL_LIST_EMPTY(body_markings_list) GLOBAL_LIST_EMPTY(tails_list_lizard) @@ -46,10 +46,15 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list( ":thinking:", "Alien", "Angel", + "Angryface", + "AtlantisCZE", "Banned", "Bliss", "Blue", - "Clown", + "Boy", + "Boy-Malf", + "Girl", + "Girl-Malf", "Database", "Dorf", "Firewall", @@ -61,26 +66,44 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list( "Hades", "Heartline", "Helios", + "Hotdog", + "Hourglass", "House", "Inverted", + "Jack", "Matrix", "Monochrome", + "Mothman", "Murica", "Nanotrasen", "Not Malf", + "Patriot", + "Pirate", "President", - "Random", "Rainbow", - "Red", + "Clown", + "Random", + "Ravensdale", "Red October", + "Red", + "Royal", + "Searif", + "Serithi", + "SilveryFerret", + "Smiley", "Static", "Syndicat Meow", "TechDemon", + "Terminal", "Text", "Too Deep", "Triumvirate", "Triumvirate-M", - "Weird")) + "Wasp", + "Weird", + "Xerxes", + "Yes-Man" + )) /proc/resolve_ai_icon(input) if(!input || !(input in GLOB.ai_core_display_screens)) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index f0479cd8aa..6b8d91acf9 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -45,6 +45,6 @@ GLOBAL_LIST_EMPTY(vr_spawnpoints) //used by jump-to-area etc. Updated by area/updateName() GLOBAL_LIST_EMPTY(sortedAreas) /// An association from typepath to area instance. Only includes areas with `unique` set. -GLOBAL_LIST_EMPTY(areas_by_type) +GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area) GLOBAL_LIST_EMPTY(all_abstract_markers) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 14c752613b..fa68fab85f 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -19,6 +19,8 @@ GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums index GLOBAL_LIST_EMPTY(materials_list) //list of all /datum/material datums indexed by material id. GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. +GLOBAL_LIST_EMPTY(uplink_items) //list of all uplink item typepaths, ascendingly sorted by their initial name. +GLOBAL_LIST_EMPTY(uplink_categories) //list of all uplink categories, listed by the order they are loaded in code. Be careful. GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes GLOBAL_LIST_EMPTY(rcd_list) //list of Rapid Construction Devices. GLOBAL_LIST_EMPTY(apcs_list) //list of all Area Power Controller machines, separate from machines for powernet speeeeeeed. diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index 626bba9fc3..e30ce1d1ed 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -13,6 +13,10 @@ #define POLL_IGNORE_GOLEM "golem" #define POLL_IGNORE_SWARMER "swarmer" #define POLL_IGNORE_DRONE "drone" +#define POLL_IGNORE_IMAGINARYFRIEND "imaginary_friend" +#define POLL_IGNORE_SPLITPERSONALITY "split_personality" +#define POLL_IGNORE_DEMON "demon" +#define POLL_IGNORE_WIZARD "wizard" #define POLL_IGNORE_CLONE "clone" GLOBAL_LIST_INIT(poll_ignore_desc, list( @@ -29,6 +33,10 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_GOLEM = "Golems", POLL_IGNORE_SWARMER = "Swarmer shells", POLL_IGNORE_DRONE = "Drone shells", + POLL_IGNORE_IMAGINARYFRIEND = "Imaginary Friend", + POLL_IGNORE_SPLITPERSONALITY = "Split Personality", + POLL_IGNORE_DEMON = "Demons", + POLL_IGNORE_WIZARD = "Wizards", POLL_IGNORE_CLONE = "Defective/SDGF clones" )) GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore()) diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm index 96807214f2..1ec3de0bc5 100644 --- a/code/_globalvars/lists/typecache.dm +++ b/code/_globalvars/lists/typecache.dm @@ -10,3 +10,5 @@ GLOBAL_LIST_INIT(typecache_living, typecacheof(/mob/living)) GLOBAL_LIST_INIT(typecache_stack, typecacheof(/obj/item/stack)) GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery, /obj/structure))) + +GLOBAL_LIST_INIT(freezing_objects, typecacheof(list(/obj/structure/closet/crate/freezer, /obj/structure/closet/secure_closet/freezer, /obj/structure/bodycontainer, /obj/item/autosurgeon, /obj/machinery/smartfridge/organ))) //list of all cold objects, that freeze organs when inside diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 7a495b95e7..2a8289697b 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -114,7 +114,8 @@ /mob/living/silicon/ai/CtrlClickOn(var/atom/A) A.AICtrlClick(src) /mob/living/silicon/ai/AltClickOn(var/atom/A) - A.AIAltClick(src) + if(!A.AIAltClick(src)) + altclick_listed_turf(A) /* The following criminally helpful code is just the previous code cleaned up; @@ -125,9 +126,10 @@ /* Atom Procs */ /atom/proc/AICtrlClick() return + /atom/proc/AIAltClick(mob/living/silicon/ai/user) - AltClick(user) - return + return AltClick(user) + /atom/proc/AIShiftClick() return /atom/proc/AICtrlShiftClick() @@ -151,6 +153,7 @@ shock_perm(usr) else shock_restore(usr) + return TRUE /obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors! if(obj_flags & EMAGGED) @@ -185,10 +188,12 @@ return toggle_on() add_fingerprint(usr) + return TRUE /* Holopads */ /obj/machinery/holopad/AIAltClick(mob/living/silicon/ai/user) hangup_all_calls() + return TRUE // // Override TurfAdjacent for AltClicking diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index e9f50d9212..4c477f3872 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -353,8 +353,17 @@ Unused except for AI */ /mob/proc/AltClickOn(atom/A) - A.AltClick(src) - return + if(!A.AltClick(src)) + altclick_listed_turf(A) + +/mob/proc/altclick_listed_turf(atom/A) + var/turf/T = get_turf(A) + if(T == A.loc || T == A) + if(T == listed_turf) + listed_turf = null + else if(TurfAdjacent(T)) + listed_turf = T + client.statpanel = T.name /mob/living/carbon/AltClickOn(atom/A) if(!stat && mind && iscarbon(A) && A != src) @@ -366,18 +375,7 @@ ..() /atom/proc/AltClick(mob/user) - SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) - var/turf/T = get_turf(src) - if(T && user.TurfAdjacent(T)) - user.listed_turf = T - user.client.statpanel = T.name - -// Use this instead of /mob/proc/AltClickOn(atom/A) where you only want turf content listing without additional atom alt-click interaction -/atom/proc/AltClickNoInteract(mob/user, atom/A) - var/turf/T = get_turf(A) - if(T && user.TurfAdjacent(T)) - user.listed_turf = T - user.client.statpanel = T.name + . = SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) /mob/proc/TurfAdjacent(turf/T) return T.Adjacent(src) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 7f63b74945..a2d566d566 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -110,7 +110,8 @@ /mob/living/silicon/robot/CtrlClickOn(atom/A) A.BorgCtrlClick(src) /mob/living/silicon/robot/AltClickOn(atom/A) - A.BorgAltClick(src) + if(!A.BorgAltClick(src)) + altclick_listed_turf(A) /atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overridden CtrlShiftClick(user) @@ -154,20 +155,17 @@ ..() /atom/proc/BorgAltClick(mob/living/silicon/robot/user) - AltClick(user) - return + return AltClick(user) /obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. if(get_dist(src,user) <= user.interaction_range) - AIAltClick() - else - ..() + return AIAltClick() + return ..() /obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. if(get_dist(src,user) <= user.interaction_range) - AIAltClick() - else - ..() + return AIAltClick() + return ..() /* As with AI, these are not used in click code, diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 167fa989b2..9d53703cdd 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -107,6 +107,10 @@ #define ui_internal "EAST-1:28,CENTER+1:19"//CIT CHANGE - moves internal icon up a little bit to accommodate for the stamina meter #define ui_mood "EAST-1:28,CENTER-3:10" +//living +#define ui_living_pull "EAST-1:28,CENTER-2:15" +#define ui_living_health "EAST-1:28,CENTER:15" + //borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 2b5af9ddb8..858b8dbd06 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -113,7 +113,7 @@ name = "Show Buttons" else name = "Hide Buttons" - UpdateIcon() + update_icon() usr.update_action_buttons() /obj/screen/movable/action_button/hide_toggle/AltClick(mob/user) @@ -125,6 +125,7 @@ moved = FALSE user.update_action_buttons(TRUE) to_chat(user, "Action button positions have been reset.") + return TRUE /obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud) @@ -134,9 +135,9 @@ hide_icon = settings["toggle_icon"] hide_state = settings["toggle_hide"] show_state = settings["toggle_show"] - UpdateIcon() + update_icon() -/obj/screen/movable/action_button/hide_toggle/proc/UpdateIcon() +/obj/screen/movable/action_button/hide_toggle/update_icon() cut_overlays() add_overlay(mutable_appearance(hide_icon, hidden ? show_state : hide_state)) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index cc183dd6d3..c42956bbaa 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -213,6 +213,22 @@ or something covering your eyes." desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already." icon_state = "high" +/obj/screen/alert/mind_control + name = "Mind Control" + desc = "Your mind has been hijacked! Click to view the mind control command." + icon_state = "mind_control" + var/command + +/obj/screen/alert/mind_control/Click() + var/mob/living/L = usr + to_chat(L, "[command]") + +/obj/screen/alert/hypnosis + name = "Hypnosis" + desc = "Something's hypnotizing you, but you're not really sure about what." + icon_state = "hypnosis" + var/phrase + /obj/screen/alert/drunk //Not implemented name = "Drunk" desc = "All that alcohol you've been drinking is impairing your speech, motor skills, and mental cognition. Make sure to act like it." diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 7f2fca9d98..3b5f851333 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -349,6 +349,13 @@ devilsouldisplay = new /obj/screen/devil/soul_counter infodisplay += devilsouldisplay + blood_display = new /obj/screen/bloodsucker/blood_counter // Blood Volume + infodisplay += blood_display + vamprank_display = new /obj/screen/bloodsucker/rank_counter // Vampire Rank + infodisplay += vamprank_display + sunlight_display = new /obj/screen/bloodsucker/sunlight_counter // Sunlight + infodisplay += sunlight_display + zone_select = new /obj/screen/zone_sel() zone_select.icon = ui_style zone_select.update_icon(mymob) diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm new file mode 100644 index 0000000000..277ea8b898 --- /dev/null +++ b/code/_onclick/hud/lavaland_elite.dm @@ -0,0 +1,16 @@ +/datum/hud/lavaland_elite + ui_style = 'icons/mob/screen_elite.dmi' + +/datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite) + ..() + + pull_icon = new /obj/screen/pull() + pull_icon.icon = ui_style + pull_icon.update_icon() + pull_icon.screen_loc = ui_living_pull + pull_icon.hud = src + static_inventory += pull_icon + + healths = new /obj/screen/healths/lavaland_elite() + healths.hud = src + infodisplay += healths diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index f796f75407..86b4b0c024 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -25,7 +25,7 @@ return ..() /obj/screen/examine(mob/user) - return + return list() /obj/screen/orbit() return @@ -644,6 +644,12 @@ screen_loc = ui_construct_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT +/obj/screen/healths/lavaland_elite + icon = 'icons/mob/screen_elite.dmi' + icon_state = "elite_health0" + screen_loc = ui_health + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /obj/screen/healthdoll name = "health doll" screen_loc = ui_healthdoll diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 3a45e9bf60..f082f2ad16 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -39,23 +39,12 @@ if(..()) return TRUE user.changeNext_move(CLICK_CD_MELEE) - if(user.a_intent == INTENT_HARM && stat == DEAD && (butcher_results || guaranteed_butcher_results)) //can we butcher it? - var/datum/component/butchering/butchering = I.GetComponent(/datum/component/butchering) - if(butchering && butchering.butchering_enabled) - to_chat(user, "You begin to butcher [src]...") - playsound(loc, butchering.butcher_sound, 50, TRUE, -1) - if(do_mob(user, src, butchering.speed) && Adjacent(I)) - butchering.Butcher(user, src) - return 1 - else if(I.get_sharpness() && !butchering) //give sharp objects butchering functionality, for consistency - I.AddComponent(/datum/component/butchering, 80 * I.toolspeed) - attackby(I, user, params) //call the attackby again to refresh and do the butchering check again - return return I.attack(src, user) /obj/item/proc/attack(mob/living/M, mob/living/user) - SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, M, user) & COMPONENT_ITEM_NO_ATTACK) + return SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, M, user) if(item_flags & NOBLUDGEON) return @@ -121,7 +110,7 @@ totitemdamage *= 0.5 //CIT CHANGES END HERE apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage - if(I.damtype == BRUTE) + if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW)) if(prob(33)) I.add_mob_blood(src) var/turf/location = get_turf(src) @@ -174,4 +163,3 @@ /obj/item/proc/getweight() return total_mass || w_class * 1.25 - diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 299d7f64f8..f76a745fd2 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -31,7 +31,7 @@ ShiftClickOn(A) return if(modifiers["alt"]) - AltClickNoInteract(src, A) + altclick_listed_turf(A) return if(modifiers["ctrl"]) CtrlClickOn(A) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 12b1ca2784..ecd34b7840 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -106,9 +106,8 @@ /obj/item/tk_grab/examine(user) if (focus) - focus.examine(user) - else - ..() + return focus.examine(user) + return ..() /obj/item/tk_grab/attack_self(mob/user) if(!focus) diff --git a/code/controllers/configuration/entries/dynamic.dm b/code/controllers/configuration/entries/dynamic.dm index df57bd5aa8..7f3e16d57e 100644 --- a/code/controllers/configuration/entries/dynamic.dm +++ b/code/controllers/configuration/entries/dynamic.dm @@ -81,42 +81,6 @@ /datum/config_entry/number/dynamic_assassinate_cost config_entry_value = 2 -/datum/config_entry/number/dynamic_summon_guns_requirement - config_entry_value = 10 - min_val = 0 - -/datum/config_entry/number/dynamic_summon_guns_cost - config_entry_value = 5 - min_val = 0 - -/datum/config_entry/number/dynamic_summon_magic_requirement - config_entry_value = 10 - min_val = 0 - -/datum/config_entry/number/dynamic_summon_magic_cost - config_entry_value = 5 - min_val = 0 - -/datum/config_entry/number/dynamic_summon_events_requirement - config_entry_value = 20 - min_val = 0 - -/datum/config_entry/number/dynamic_summon_events_cost - config_entry_value = 10 - min_val = 0 - -/datum/config_entry/number/dynamic_staff_of_change_requirement - config_entry_value = 20 - min_val = 0 - -/datum/config_entry/number/dynamic_staff_of_change_cost - config_entry_value = 10 - min_val = 0 - -/datum/config_entry/number/dynamic_apprentice_cost - config_entry_value = 10 - min_val = 0 - /datum/config_entry/number/dynamic_warops_requirement config_entry_value = 60 min_val = 0 diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index fdddbda344..21d9d4e093 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -379,3 +379,10 @@ /datum/config_entry/number/auto_transfer_delay config_entry_value = 72000 min_val = 0 + +/datum/config_entry/number/marauder_delay_non_reebe + config_entry_value = 1800 + min_val = 0 + +/datum/config_entry/flag/allow_clockwork_marauder_on_station + config_entry_value = TRUE diff --git a/code/controllers/subsystem/chat.dm b/code/controllers/subsystem/chat.dm index 6ba6a7b177..8d4de0c091 100644 --- a/code/controllers/subsystem/chat.dm +++ b/code/controllers/subsystem/chat.dm @@ -29,6 +29,7 @@ SUBSYSTEM_DEF(chat) target = GLOB.clients //Some macros remain in the string even after parsing and fuck up the eventual output + var/original_message = message message = replacetext(message, "\improper", "") message = replacetext(message, "\proper", "") if(handle_whitespace) @@ -45,6 +46,12 @@ SUBSYSTEM_DEF(chat) for(var/I in target) var/client/C = CLIENT_FROM_VAR(I) //Grab us a client if possible + if(!C) + return + + //Send it to the old style output window. + SEND_TEXT(C, original_message) + if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file. continue @@ -57,6 +64,12 @@ SUBSYSTEM_DEF(chat) else var/client/C = CLIENT_FROM_VAR(target) //Grab us a client if possible + if(!C) + return + + //Send it to the old style output window. + SEND_TEXT(C, original_message) + if(!C?.chatOutput || C.chatOutput.broken) //A player who hasn't updated his skin file. return diff --git a/code/controllers/subsystem/dcs.dm b/code/controllers/subsystem/dcs.dm index c1e101a0e7..faf95fd319 100644 --- a/code/controllers/subsystem/dcs.dm +++ b/code/controllers/subsystem/dcs.dm @@ -1,6 +1,27 @@ -SUBSYSTEM_DEF(dcs) +PROCESSING_SUBSYSTEM_DEF(dcs) name = "Datum Component System" - flags = SS_NO_INIT | SS_NO_FIRE + flags = SS_NO_INIT + var/list/elements_by_type = list() -/datum/controller/subsystem/dcs/Recover() +/datum/controller/subsystem/processing/dcs/Recover() comp_lookup = SSdcs.comp_lookup + +/datum/controller/subsystem/processing/dcs/proc/GetElement(datum/element/eletype, ...) + var/element_id = eletype + + if(initial(eletype.element_flags) & ELEMENT_BESPOKE) + var/list/fullid = list("[eletype]") + for(var/i in initial(eletype.id_arg_index) to length(args)) + var/argument = args[i] + if(istext(argument) || isnum(argument)) + fullid += "[argument]" + else + fullid += "[REF(argument)]" + element_id = fullid.Join("&") + + . = elements_by_type[element_id] + if(.) + return + if(!ispath(eletype, /datum/element)) + CRASH("Attempted to instantiate [eletype] as a /datum/element") + . = elements_by_type[element_id] = new eletype \ No newline at end of file diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index eec9f63a12..f8ca1e7eae 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -98,7 +98,7 @@ SUBSYSTEM_DEF(garbage) state = SS_RUNNING break - + /datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK) @@ -266,8 +266,8 @@ SUBSYSTEM_DEF(garbage) D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/start_tick = world.tick_usage + SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy var/hint = D.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. - SEND_SIGNAL(D, COMSIG_PARENT_QDELETED, force, hint) // Let the (remaining) components know about the result of Destroy if(world.time != start_time) I.slept_destroy++ else diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index ceb2fae998..29762338fb 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -444,7 +444,7 @@ GLOBAL_LIST_EMPTY(the_station_areas) GLOB.the_gateway.wait = world.time /datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override) - UNTIL(reservation_ready["[z]"] && !clearing_reserved_turfs) + UNTIL((!z || reservation_ready["[z]"]) && !clearing_reserved_turfs) var/datum/turf_reservation/reserve = new type if(turf_type_override) reserve.turf_type = turf_type_override diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 1b7cade71f..8329493818 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -12,6 +12,8 @@ SUBSYSTEM_DEF(persistence) var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() var/list/saved_modes = list(1,2,3) + var/list/saved_dynamic_rules = list(list(),list(),list()) + var/list/saved_threat_levels = list(1,1,1) var/list/saved_maps var/list/saved_trophies = list() var/list/spawned_objects = list() @@ -27,6 +29,7 @@ SUBSYSTEM_DEF(persistence) LoadChiselMessages() LoadTrophies() LoadRecentModes() + LoadRecentThreats() LoadRecentMaps() LoadPhotoPersistence() if(CONFIG_GET(flag/use_antag_rep)) @@ -166,6 +169,15 @@ SUBSYSTEM_DEF(persistence) return saved_modes = json["data"] +/datum/controller/subsystem/persistence/proc/LoadRecentThreats() + var/json_file = file("data/RecentThreatLevels.json") + if(!fexists(json_file)) + return + var/list/json = json_decode(file2text(json_file)) + if(!json) + return + saved_threat_levels = json["data"] + /datum/controller/subsystem/persistence/proc/LoadRecentMaps() var/json_file = file("data/RecentMaps.json") if(!fexists(json_file)) @@ -216,6 +228,10 @@ SUBSYSTEM_DEF(persistence) CollectSecretSatchels() CollectTrophies() CollectRoundtype() + if(istype(SSticker.mode, /datum/game_mode/dynamic)) + var/datum/game_mode/dynamic/mode = SSticker.mode + CollectThreatLevel(mode) + CollectRulesets(mode) RecordMaps() SavePhotoPersistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION. if(CONFIG_GET(flag/use_antag_rep)) @@ -372,6 +388,28 @@ SUBSYSTEM_DEF(persistence) fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) +/datum/controller/subsystem/persistence/proc/CollectThreatLevel(var/datum/game_mode/dynamic/mode) + saved_threat_levels[3] = saved_threat_levels[2] + saved_threat_levels[2] = saved_threat_levels [1] + saved_threat_levels[1] = mode.threat_level + var/json_file = file("data/RecentThreatLevels.json") + var/list/file_data = list() + file_data["data"] = saved_threat_levels + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + +/datum/controller/subsystem/persistence/proc/CollectRulesets(var/datum/game_mode/dynamic/mode) + saved_dynamic_rules[3] = saved_dynamic_rules[2] + saved_dynamic_rules[2] = saved_dynamic_rules[1] + saved_dynamic_rules[1] = list() + for(var/datum/dynamic_ruleset/ruleset in mode.executed_rules) + saved_dynamic_rules[1] += ruleset.config_tag + var/json_file = file("data/RecentRulesets.json") + var/list/file_data = list() + file_data["data"] = saved_dynamic_rules + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) + /datum/controller/subsystem/persistence/proc/RecordMaps() saved_maps = saved_maps?.len ? list("[SSmapping.config.map_name]") | saved_maps : list("[SSmapping.config.map_name]") var/json_file = file("data/RecentMaps.json") diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 4af54b8c70..0b9284a144 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -12,27 +12,40 @@ PROCESSING_SUBSYSTEM_DEF(quirks) var/list/quirk_names_by_path = list() var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process + var/list/quirk_blacklist = list() //A list a list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4) /datum/controller/subsystem/processing/quirks/Initialize(timeofday) if(!quirks.len) SetupQuirks() + quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic"),list("Ageusia","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion")) return ..() /datum/controller/subsystem/processing/quirks/proc/SetupQuirks() - for(var/V in subtypesof(/datum/quirk)) +// Sort by Positive, Negative, Neutral; and then by name + var/list/quirk_list = sortList(subtypesof(/datum/quirk), /proc/cmp_quirk_asc) + + for(var/V in quirk_list) var/datum/quirk/T = V quirks[initial(T.name)] = T quirk_points[initial(T.name)] = initial(T.value) quirk_names_by_path[T] = initial(T.name) /datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target) - GenerateQuirks(cli) - var/list/quirks = cli.prefs.character_quirks.Copy() + var/badquirk = FALSE + var/list/my_quirks = cli.prefs.all_quirks.Copy() var/list/cut - if(job && job.blacklisted_quirks) - cut = filter_quirks(quirks, job) - for(var/V in quirks) - user.add_quirk(V, spawn_effects) + if(job?.blacklisted_quirks) + cut = filter_quirks(my_quirks, job) + for(var/V in my_quirks) + var/datum/quirk/Q = quirks[V] + if(Q) + user.add_quirk(Q, spawn_effects) + else + stack_trace("Invalid quirk \"[V]\" in client [cli.ckey] preferences") + cli.prefs.all_quirks -= V + badquirk = TRUE + if(badquirk) + cli.prefs.save_character() if(!silent && LAZYLEN(cut)) to_chat(to_chat_target || user, "All of your non-neutral character quirks have been cut due to these quirks conflicting with your job assignment: [english_list(cut)].") @@ -50,28 +63,28 @@ PROCESSING_SUBSYSTEM_DEF(quirks) for(var/i in quirk_names) . += quirk_points_by_name(i) -/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/quirks, datum/job/job) +/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/our_quirks, datum/job/job) var/list/cut = list() var/list/banned_names = list() for(var/i in job.blacklisted_quirks) var/name = quirk_name_by_path(i) if(name) banned_names += name - var/list/blacklisted = quirks & banned_names + var/list/blacklisted = our_quirks & banned_names if(length(blacklisted)) for(var/i in blacklisted) - quirks -= i + our_quirks -= i cut += i /* //Code to automatically reduce positive quirks until balance is even. - var/points_used = total_points(quirks) + var/points_used = total_points(our_quirks) if(points_used > 0) //they owe us points, let's collect. - for(var/i in quirks) + for(var/i in our_quirks) var/points = quirk_points_by_name(i) if(points > 0) cut += i - quirks -= i + our_quirks -= i points_used -= points if(points_used <= 0) break @@ -79,14 +92,9 @@ PROCESSING_SUBSYSTEM_DEF(quirks) //Nah, let's null all non-neutrals out. if(cut.len) - for(var/i in quirks) + for(var/i in our_quirks) if(quirk_points_by_name(i) != 0) //cut += i -- Commented out: Only show the ones that triggered the quirk purge. - quirks -= i + our_quirks -= i return cut - -/datum/controller/subsystem/processing/quirks/proc/GenerateQuirks(client/user) - if(user.prefs.character_quirks.len) - return - user.prefs.character_quirks = user.prefs.all_quirks diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 6f619fef0b..890725fbb1 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -384,8 +384,8 @@ SUBSYSTEM_DEF(ticker) captainless=0 if(player.mind.assigned_role != player.mind.special_role) SSjob.EquipRank(N, player.mind.assigned_role, 0) - if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character)) - SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N) + if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character)) + SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N) CHECK_TICK if(captainless) for(var/mob/dead/new_player/N in GLOB.player_list) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 33798d74f7..1ad4a15ee7 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -87,13 +87,13 @@ SUBSYSTEM_DEF(traumas) "skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone, /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton, /obj/effect/decal/remains/human)), - "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security, + "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/chief_engineer, /obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/rank/head_of_personnel, /obj/item/clothing/under/rank/research_director, /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt, /obj/item/clothing/under/rank/research_director/alt, /obj/item/clothing/under/rank/research_director/turtleneck, /obj/item/clothing/under/captainparade, /obj/item/clothing/under/hosparademale, /obj/item/clothing/under/hosparadefem, - /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor_baton, + /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/abductor/baton, /obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer, /obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec, @@ -136,7 +136,7 @@ SUBSYSTEM_DEF(traumas) "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo, /obj/structure/alien, /obj/item/toy/toy_xeno, /obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien, - /obj/item/abductor_baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, + /obj/item/abductor/baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien, /obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor, /obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland, diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm index 107d65a558..0635709074 100644 --- a/code/controllers/subsystem/vis_overlays.dm +++ b/code/controllers/subsystem/vis_overlays.dm @@ -29,8 +29,8 @@ SUBSYSTEM_DEF(vis_overlays) return //the "thing" var can be anything with vis_contents which includes images -/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha=255) - . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]" +/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE) + . = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]" var/obj/effect/overlay/vis/overlay = vis_overlay_cache[.] if(!overlay) overlay = new @@ -40,6 +40,7 @@ SUBSYSTEM_DEF(vis_overlays) overlay.plane = plane overlay.dir = dir overlay.alpha = alpha + overlay.appearance_flags |= add_appearance_flags vis_overlay_cache[.] = overlay else overlay.unused = 0 @@ -64,10 +65,12 @@ SUBSYSTEM_DEF(vis_overlays) UnregisterSignal(thing, COMSIG_ATOM_DIR_CHANGE) /datum/controller/subsystem/vis_overlays/proc/rotate_vis_overlay(atom/thing, old_dir, new_dir) + if(old_dir == new_dir) + return var/rotation = dir2angle(old_dir) - dir2angle(new_dir) var/list/overlays_to_remove = list() for(var/i in thing.managed_vis_overlays) var/obj/effect/overlay/vis/overlay = i - add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation)) + add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation), overlay.alpha, overlay.appearance_flags) overlays_to_remove += overlay remove_vis_overlay(thing, overlays_to_remove) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 50be61f91d..dee10e4998 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -153,6 +153,10 @@ SUBSYSTEM_DEF(vote) if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started. return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") GLOB.master_mode = "dynamic" + if("extended" in choices) + if(. == "extended") + GLOB.dynamic_forced_extended = TRUE // we still do the rest of the stuff + choices[PEACE] += choices["extended"] var/mean = 0 var/voters = 0 for(var/client/c in GLOB.clients) @@ -253,7 +257,11 @@ SUBSYSTEM_DEF(vote) if("roundtype") //CIT CHANGE - adds the roundstart secret/extended vote choices.Add("secret", "extended") if("dynamic") - choices.Add(PEACE,CHAOS) + var/saved_threats = SSpersistence.saved_threat_levels + if((saved_threats[1]+saved_threats[2]+saved_threats[3])>150) + choices.Add("extended",PEACE,CHAOS) + else + choices.Add(PEACE,CHAOS) if("custom") question = stripped_input(usr,"What is the vote for?") if(!question) diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm index 56a3f3969b..1aa1341c9c 100644 --- a/code/datums/brain_damage/brain_trauma.dm +++ b/code/datums/brain_damage/brain_trauma.dm @@ -1,10 +1,12 @@ //Brain Traumas are the new actual brain damage. Brain damage itself acts as a way to acquire traumas: every time brain damage is dealt, there's a chance of receiving a trauma. //This chance gets higher the higher the mob's brainloss is. Removing traumas is a separate thing from removing brain damage: you can get restored to full brain operativity, -//but keep the quirks, until repaired by mannitol (for mild/special ones) or brain surgery (for severe ones). +// but keep the quirks, until repaired by neurine, surgery, lobotomy or magic; depending on the resilience +// of the trauma. + /datum/brain_trauma var/name = "Brain Trauma" var/desc = "A trauma caused by brain damage, which causes issues to the patient." - var/scan_desc = "a generic brain trauma" //description when detected by a health scanner + var/scan_desc = "generic brain trauma" //description when detected by a health scanner var/mob/living/carbon/owner //the poor bastard var/obj/item/organ/brain/brain //the poor bastard's brain var/gain_text = "You feel traumatized." @@ -12,15 +14,21 @@ var/can_gain = TRUE var/random_gain = TRUE //can this be gained through random traumas? var/resilience = TRAUMA_RESILIENCE_BASIC //how hard is this to cure? + var/clonable = TRUE // will this transfer if the brain is cloned? /datum/brain_trauma/Destroy() - brain.traumas -= src + if(brain && brain.traumas) + brain.traumas -= src if(owner) on_lose() brain = null owner = null return ..() +/datum/brain_trauma/proc/on_clone() + if(clonable) + return new type + //Called on life ticks /datum/brain_trauma/proc/on_life() return @@ -33,17 +41,24 @@ /datum/brain_trauma/proc/on_gain() to_chat(owner, gain_text) RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech) + RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/handle_hearing) //Called when removed from a mob /datum/brain_trauma/proc/on_lose(silent) if(!silent) to_chat(owner, lose_text) UnregisterSignal(owner, COMSIG_MOB_SAY) + UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) //Called when hearing a spoken message -/datum/brain_trauma/proc/on_hear(message, speaker, message_language, raw_message, radio_freq) - return message +/datum/brain_trauma/proc/handle_hearing(datum/source, list/hearing_args) + UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) //Called when speaking /datum/brain_trauma/proc/handle_speech(datum/source, list/speech_args) UnregisterSignal(owner, COMSIG_MOB_SAY) + + +//Called when hugging. expand into generally interacting, where future coders could switch the intent? +/datum/brain_trauma/proc/on_hug(mob/living/hugger, mob/living/hugged) + return diff --git a/code/datums/brain_damage/hypnosis.dm b/code/datums/brain_damage/hypnosis.dm index 8909d1b85f..37aee6df7e 100644 --- a/code/datums/brain_damage/hypnosis.dm +++ b/code/datums/brain_damage/hypnosis.dm @@ -5,6 +5,7 @@ gain_text = "" lose_text = "" resilience = TRAUMA_RESILIENCE_SURGERY + var/hypnotic_phrase = "" var/regex/target_phrase @@ -44,18 +45,17 @@ "You feel a part of your mind repeating this over and over. You need to follow these words.",\ "Something about this sounds... right, for some reason. You feel like you should follow these words.",\ "These words keep echoing in your mind. You find yourself completely fascinated by them.")]") - if(!HAS_TRAIT(owner, "hypnotherapy")) - to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\ + to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\ as long as you act like the words are your highest priority.") - else - to_chat(owner, "You've been hypnotized by this sentence. You feel an incredible desire to follow these words, but are able to resist it somewhat. If it isn't a clear order, you can freely interpret how to do so,\ - however this does not take precedence over your other objectives.") + var/obj/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /obj/screen/alert/hypnosis) + hypno_alert.desc = "\"[hypnotic_phrase]\"... your mind seems to be fixated on this concept." ..() /datum/brain_trauma/hypnosis/on_lose() message_admins("[ADMIN_LOOKUPFLW(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.") log_game("[key_name(owner)] is no longer hypnotized with the phrase '[hypnotic_phrase]'.") - to_chat(owner, "You suddenly snap out of your fixation. The phrase '[hypnotic_phrase]' no longer feels important to you.") + to_chat(owner, "You suddenly snap out of your hypnosis. The phrase '[hypnotic_phrase]' no longer feels important to you.") + owner.clear_alert("hypnosis") ..() /datum/brain_trauma/hypnosis/on_life() @@ -67,6 +67,5 @@ if(2) new /datum/hallucination/chat(owner, TRUE, FALSE, "[hypnotic_phrase]") -/datum/brain_trauma/hypnosis/on_hear(message, speaker, message_language, raw_message, radio_freq) - message = target_phrase.Replace(message, "$1") - return message +/datum/brain_trauma/hypnosis/handle_hearing(datum/source, list/hearing_args) + hearing_args[HEARING_RAW_MESSAGE] = target_phrase.Replace(hearing_args[HEARING_RAW_MESSAGE], "$1") diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 5bbc5de4a5..9005a788b7 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -8,6 +8,10 @@ var/friend_initialized = FALSE /datum/brain_trauma/special/imaginary_friend/on_gain() + var/mob/living/M = owner + if(M.stat == DEAD || !M.client) + qdel(src) + return ..() make_friend() get_ghost() @@ -43,7 +47,7 @@ /datum/brain_trauma/special/imaginary_friend/proc/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend) + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s imaginary friend?", ROLE_PAI, null, null, 75, friend, POLL_IGNORE_IMAGINARYFRIEND) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) C.transfer_ckey(friend, FALSE) @@ -74,26 +78,34 @@ /mob/camera/imaginary_friend/Login() ..() - to_chat(src, "You are the imaginary friend of [owner]!") - to_chat(src, "You are absolutely loyal to your friend, no matter what.") - to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.") + greet() Show() +/mob/camera/imaginary_friend/proc/greet() + to_chat(src, "You are the imaginary friend of [owner]!") + to_chat(src, "You are absolutely loyal to your friend, no matter what.") + to_chat(src, "You cannot directly influence the world around you, but you can see what [owner] cannot.") + /mob/camera/imaginary_friend/Initialize(mapload, _trauma) . = ..() - var/gender = pick(MALE, FEMALE) - real_name = random_unique_name(gender) - name = real_name + trauma = _trauma owner = trauma.owner copy_known_languages_from(owner, TRUE) - human_image = get_flat_human_icon(null, pick(SSjob.occupations)) + + setup_friend() join = new join.Grant(src) hide = new hide.Grant(src) +/mob/camera/imaginary_friend/proc/setup_friend() + var/gender = pick(MALE, FEMALE) + real_name = random_unique_name(gender) + name = real_name + human_image = get_flat_human_icon(null, pick(SSjob.occupations)) + /mob/camera/imaginary_friend/proc/Show() if(!client) //nobody home return @@ -132,13 +144,13 @@ if(client.prefs.muted & MUTE_IC) to_chat(src, "You cannot send IC messages (muted).") return - if (src.client.handle_spam_prevention(message,MUTE_IC)) + if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message,MUTE_IC)) return friend_talk(message) -/mob/camera/imaginary_friend/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) - to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode)) +/mob/camera/imaginary_friend/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source) + to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode, FALSE, source)) /mob/camera/imaginary_friend/proc/friend_talk(message) message = capitalize(trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))) @@ -218,4 +230,42 @@ var/mob/camera/imaginary_friend/I = owner I.hidden = !I.hidden I.Show() - update_status() \ No newline at end of file + update_status() + +//down here is the trapped mind +//like imaginary friend but a lot less imagination and more like mind prison// + +/datum/brain_trauma/special/imaginary_friend/trapped_owner + name = "Trapped Victim" + desc = "Patient appears to be targeted by an invisible entity." + gain_text = "" + lose_text = "" + random_gain = FALSE + +/datum/brain_trauma/special/imaginary_friend/trapped_owner/make_friend() + friend = new /mob/camera/imaginary_friend/trapped(get_turf(owner), src) + +/datum/brain_trauma/special/imaginary_friend/trapped_owner/reroll_friend() //no rerolling- it's just the last owner's hell + if(friend.client) //reconnected + return + friend_initialized = FALSE + QDEL_NULL(friend) + qdel(src) + +/datum/brain_trauma/special/imaginary_friend/trapped_owner/get_ghost() //no randoms + return + +/mob/camera/imaginary_friend/trapped + name = "figment of imagination?" + real_name = "figment of imagination?" + desc = "The previous host of this body." + +/mob/camera/imaginary_friend/trapped/greet() + to_chat(src, "You have managed to hold on as a figment of the new host's imagination!") + to_chat(src, "All hope is lost for you, but at least you may interact with your host. You do not have to be loyal to them.") + to_chat(src, "You cannot directly influence the world around you, but you can see what the host cannot.") + +/mob/camera/imaginary_friend/trapped/setup_friend() + real_name = "[owner.real_name]?" + name = real_name + human_image = icon('icons/mob/lavaland/lavaland_monsters.dmi', icon_state = "curseblob") diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index c049a7db33..235417d62c 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -64,21 +64,21 @@ name = "Speech Impediment" desc = "Patient is unable to form coherent sentences." scan_desc = "communication disorder" - gain_text = "" //mutation will handle the text - lose_text = "" + gain_text = "You can't seem to form any coherent thoughts!" + lose_text = "Your mind feels more clear." /datum/brain_trauma/mild/speech_impediment/on_gain() ADD_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT) - . = ..() + ..() /datum/brain_trauma/mild/speech_impediment/on_lose() REMOVE_TRAIT(owner, TRAIT_UNINTELLIGIBLE_SPEECH, TRAUMA_TRAIT) - . = ..() + ..() /datum/brain_trauma/mild/concussion name = "Concussion" desc = "Patient's brain is concussed." - scan_desc = "a concussion" + scan_desc = "concussion" gain_text = "Your head hurts!" lose_text = "The pressure inside your head starts fading." @@ -157,54 +157,108 @@ gain_text = "Your muscles feel oddly faint." lose_text = "You feel in control of your muscles again." -/datum/brain_trauma/mild/muscle_spasms/on_life() - if(prob(7)) - switch(rand(1,5)) - if(1) - if(owner.canmove && !isspaceturf(owner.loc)) - to_chat(owner, "Your leg spasms!") - step(owner, pick(GLOB.cardinals)) - if(2) - if(owner.incapacitated()) - return - var/obj/item/I = owner.get_active_held_item() - if(I) - to_chat(owner, "Your fingers spasm!") - owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK) - I.attack_self(owner) - if(3) - var/prev_intent = owner.a_intent - owner.a_intent = INTENT_HARM - - var/range = 1 - if(istype(owner.get_active_held_item(), /obj/item/gun)) //get targets to shoot at - range = 7 - - var/list/mob/living/targets = list() - for(var/mob/M in oview(owner, range)) - if(isliving(M)) - targets += M - if(LAZYLEN(targets)) - to_chat(owner, "Your arm spasms!") - owner.log_message(" attacked someone due to a Muscle Spasm") //the following attack will log itself - owner.ClickOn(pick(targets)) - owner.a_intent = prev_intent - if(4) - var/prev_intent = owner.a_intent - owner.a_intent = INTENT_HARM - to_chat(owner, "Your arm spasms!") - owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK) - owner.ClickOn(owner) - owner.a_intent = prev_intent - if(5) - if(owner.incapacitated()) - return - var/obj/item/I = owner.get_active_held_item() - var/list/turf/targets = list() - for(var/turf/T in oview(owner, 3)) - targets += T - if(LAZYLEN(targets) && I) - to_chat(owner, "Your arm spasms!") - owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK) - owner.throw_item(pick(targets)) +/datum/brain_trauma/mild/muscle_spasms/on_gain() + owner.apply_status_effect(STATUS_EFFECT_SPASMS) ..() + +/datum/brain_trauma/mild/muscle_spasms/on_lose() + owner.remove_status_effect(STATUS_EFFECT_SPASMS) + ..() + +/datum/brain_trauma/mild/nervous_cough + name = "Nervous Cough" + desc = "Patient feels a constant need to cough." + scan_desc = "nervous cough" + gain_text = "Your throat itches incessantly..." + lose_text = "Your throat stops itching." + +/datum/brain_trauma/mild/nervous_cough/on_life() + if(prob(12) && !HAS_TRAIT(owner, TRAIT_SOOTHED_THROAT)) + if(prob(5)) + to_chat(owner, "[pick("You have a coughing fit!", "You can't stop coughing!")]") + owner.Stun(20) + owner.emote("cough") + addtimer(CALLBACK(owner, /mob/.proc/emote, "cough"), 6) + addtimer(CALLBACK(owner, /mob/.proc/emote, "cough"), 12) + owner.emote("cough") + ..() + +/datum/brain_trauma/mild/expressive_aphasia + name = "Expressive Aphasia" + desc = "Patient is affected by partial loss of speech leading to a reduced vocabulary." + scan_desc = "inability to form complex sentences" + gain_text = "You lose your grasp on complex words." + lose_text = "You feel your vocabulary returning to normal again." + + var/static/list/common_words = world.file2list("strings/1000_most_common.txt") + +/datum/brain_trauma/mild/expressive_aphasia/handle_speech(datum/source, list/speech_args) + var/message = speech_args[SPEECH_MESSAGE] + if(message) + var/list/message_split = splittext(message, " ") + var/list/new_message = list() + + for(var/word in message_split) + var/suffix = copytext(word,-1) + + // Check if we have a suffix and break it out of the word + if(suffix in list("." , "," , ";" , "!" , ":" , "?")) + word = copytext(word,1,-1) + else + suffix = "" + + word = html_decode(word) + + if(lowertext(word) in common_words) + new_message += word + suffix + else + if(prob(30) && message_split.len > 2) + new_message += pick("uh","erm") + break + else + var/list/charlist = string2charlist(word) // Stupid shit code + shuffle_inplace(charlist) + charlist.len = round(charlist.len * 0.5,1) + new_message += html_encode(jointext(charlist,"")) + suffix + + message = jointext(new_message, " ") + + speech_args[SPEECH_MESSAGE] = trim(message) + +/datum/brain_trauma/mild/mind_echo + name = "Mind Echo" + desc = "Patient's language neurons do not terminate properly, causing previous speech patterns to occasionally resurface spontaneously." + scan_desc = "looping neural pattern" + gain_text = "You feel a faint echo of your thoughts..." + lose_text = "The faint echo fades away." + var/list/hear_dejavu = list() + var/list/speak_dejavu = list() + +/datum/brain_trauma/mild/mind_echo/handle_hearing(datum/source, list/hearing_args) + if(owner == hearing_args[HEARING_SPEAKER]) + return + if(hear_dejavu.len >= 5) + if(prob(25)) + var/deja_vu = pick_n_take(hear_dejavu) + var/static/regex/quoted_spoken_message = regex("\".+\"", "gi") + hearing_args[HEARING_RAW_MESSAGE] = quoted_spoken_message.Replace(hearing_args[HEARING_RAW_MESSAGE], "\"[deja_vu]\"") //Quotes included to avoid cases where someone says part of their name + return + if(hear_dejavu.len >= 15) + if(prob(50)) + popleft(hear_dejavu) //Remove the oldest + hear_dejavu += hearing_args[HEARING_RAW_MESSAGE] + else + hear_dejavu += hearing_args[HEARING_RAW_MESSAGE] + +/datum/brain_trauma/mild/mind_echo/handle_speech(datum/source, list/speech_args) + if(speak_dejavu.len >= 5) + if(prob(25)) + var/deja_vu = pick_n_take(speak_dejavu) + speech_args[SPEECH_MESSAGE] = deja_vu + return + if(speak_dejavu.len >= 15) + if(prob(50)) + popleft(speak_dejavu) //Remove the oldest + speak_dejavu += speech_args[SPEECH_MESSAGE] + else + speak_dejavu += speech_args[SPEECH_MESSAGE] \ No newline at end of file diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index f802555c7e..80a1bd2470 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -2,8 +2,8 @@ name = "Phobia" desc = "Patient is unreasonably afraid of something." scan_desc = "phobia" - gain_text = "" - lose_text = "" + gain_text = "You start finding default values very unnerving..." + lose_text = "You no longer feel afraid of default values." var/phobia_type var/next_check = 0 var/next_scare = 0 @@ -14,8 +14,10 @@ var/list/trigger_turfs var/list/trigger_species -/datum/brain_trauma/mild/phobia/New(specific_type) - phobia_type = specific_type +/datum/brain_trauma/mild/phobia/New(new_phobia_type) + if(new_phobia_type) + phobia_type = new_phobia_type + if(!phobia_type) phobia_type = pick(SStraumas.phobia_types) @@ -29,6 +31,11 @@ trigger_species = SStraumas.phobia_species[phobia_type] ..() + +/datum/brain_trauma/mild/phobia/on_clone() + if(clonable) + return new type(phobia_type) + /datum/brain_trauma/mild/phobia/on_life() ..() if(HAS_TRAIT(owner, TRAIT_FEARLESS)) @@ -44,6 +51,12 @@ if(is_type_in_typecache(O, trigger_objs)) freak_out(O) return + for(var/mob/living/carbon/human/HU in seen_atoms) //check equipment for trigger items + for(var/X in HU.get_all_slots() | HU.held_items) + var/obj/I = X + if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs)) + freak_out(I) + return if(LAZYLEN(trigger_turfs)) for(var/turf/T in seen_atoms) @@ -51,45 +64,41 @@ freak_out(T) return - if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_objs)) + seen_atoms -= owner //make sure they aren't afraid of themselves. + if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_species)) for(var/mob/M in seen_atoms) if(is_type_in_typecache(M, trigger_mobs)) freak_out(M) return - else if(ishuman(M)) //check their equipment for trigger items + else if(ishuman(M)) //check their species var/mob/living/carbon/human/H = M if(LAZYLEN(trigger_species) && H.dna && H.dna.species && is_type_in_typecache(H.dna.species, trigger_species)) freak_out(H) + return - for(var/X in H.get_all_slots() | H.held_items) - var/obj/I = X - if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs)) - freak_out(I) - return - -/datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq) +/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args) if(!owner.can_hear() || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* - return message + return if(HAS_TRAIT(owner, TRAIT_FEARLESS)) - return message + return for(var/word in trigger_words) - var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") + var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") - if(findtext(raw_message, reg)) + if(findtext(hearing_args[HEARING_RAW_MESSAGE], reg)) addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message + hearing_args[HEARING_RAW_MESSAGE] = reg.Replace(hearing_args[HEARING_RAW_MESSAGE], "$1") break - return message /datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args) if(HAS_TRAIT(owner, TRAIT_FEARLESS)) return for(var/word in trigger_words) - var/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") + var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i") if(findtext(speech_args[SPEECH_MESSAGE], reg)) - to_chat(owner, "You can't bring yourself to say the word \"[word]\"!") + to_chat(owner, "You can't bring yourself to say the word \"[word]\"!") speech_args[SPEECH_MESSAGE] = "" /datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word) @@ -125,6 +134,76 @@ owner.Jitter(10) owner.stuttering += 10 +// Defined phobia types for badminry, not included in the RNG trauma pool to avoid diluting. + +/datum/brain_trauma/mild/phobia/spiders + phobia_type = "spiders" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/space + phobia_type = "space" + random_gain = FALSE + /datum/brain_trauma/mild/phobia/security phobia_type = "security" random_gain = FALSE + +/datum/brain_trauma/mild/phobia/clowns + phobia_type = "clowns" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/greytide + phobia_type = "greytide" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/lizards + phobia_type = "lizards" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/skeletons + phobia_type = "skeletons" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/snakes + phobia_type = "snakes" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/robots + phobia_type = "robots" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/doctors + phobia_type = "doctors" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/authority + phobia_type = "authority" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/supernatural + phobia_type = "the supernatural" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/aliens + phobia_type = "aliens" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/strangers + phobia_type = "strangers" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/birds + phobia_type = "birds" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/falling + phobia_type = "falling" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/anime + phobia_type = "anime" + random_gain = FALSE + +/datum/brain_trauma/mild/phobia/conspiracies + phobia_type = "conspiracies" + random_gain = FALSE diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index 890e9cf903..0e08c4cd15 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -119,7 +119,7 @@ owner.update_disabled_bodyparts() /datum/brain_trauma/severe/paralysis/paraplegic - //can_gain = FALSE maybe breaks. + random_gain = FALSE paralysis_type = "legs" resilience = TRAUMA_RESILIENCE_ABSOLUTE @@ -149,7 +149,7 @@ /datum/brain_trauma/severe/monophobia name = "Monophobia" desc = "Patient feels sick and distressed when not around other people, leading to potentially lethal levels of stress." - scan_desc = "severe monophobia" + scan_desc = "monophobia" gain_text = "" lose_text = "You feel like you could be safe on your own." var/stress = 0 @@ -168,7 +168,7 @@ if(stress > 10 && (prob(5))) stress_reaction() else - stress -= 4 + stress = max(stress - 4, 0) /datum/brain_trauma/severe/monophobia/proc/check_alone() if(HAS_TRAIT(owner, TRAIT_BLIND)) diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index d9e6f00643..b52c7d391c 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -22,6 +22,14 @@ else speak("neutral", prob(25)) +/datum/brain_trauma/special/godwoken/on_gain() + ADD_TRAIT(owner, TRAIT_HOLY, TRAUMA_TRAIT) + ..() + +/datum/brain_trauma/special/godwoken/on_lose() + REMOVE_TRAIT(owner, TRAIT_HOLY, TRAUMA_TRAIT) + ..() + /datum/brain_trauma/special/godwoken/proc/speak(type, include_owner = FALSE) var/message switch(type) @@ -36,7 +44,7 @@ else message = pick_list_replacements(BRAIN_DAMAGE_FILE, "god_neutral") - playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, 1, 5) + playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, TRUE, 5) voice_of_god(message, owner, list("colossus","yell"), 2.5, include_owner, FALSE) /datum/brain_trauma/special/bluespace_prophet @@ -134,7 +142,101 @@ /datum/brain_trauma/special/psychotic_brawling/bath_salts name = "Chemical Violent Psychosis" - random_gain = FALSE + clonable = FALSE + +/datum/brain_trauma/special/tenacity + name = "Tenacity" + desc = "Patient is psychologically unaffected by pain and injuries, and can remain standing far longer than a normal person." + scan_desc = "traumatic neuropathy" + gain_text = "You suddenly stop feeling pain." + lose_text = "You realize you can feel pain again." + +/datum/brain_trauma/special/tenacity/on_gain() + ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT) + ADD_TRAIT(owner, TRAIT_NOHARDCRIT, TRAUMA_TRAIT) + ..() + +/datum/brain_trauma/special/tenacity/on_lose() + REMOVE_TRAIT(owner, TRAIT_NOSOFTCRIT, TRAUMA_TRAIT) + REMOVE_TRAIT(owner, TRAIT_NOHARDCRIT, TRAUMA_TRAIT) + ..() + +/datum/brain_trauma/special/death_whispers + name = "Functional Cerebral Necrosis" + desc = "Patient's brain is stuck in a functional near-death state, causing occasional moments of lucid hallucinations, which are often interpreted as the voices of the dead." + scan_desc = "chronic functional necrosis" + gain_text = "You feel dead inside." + lose_text = "You feel alive again." + var/active = FALSE + +/datum/brain_trauma/special/death_whispers/on_life() + ..() + if(!active && prob(2)) + whispering() + +/datum/brain_trauma/special/death_whispers/on_lose() + if(active) + cease_whispering() + ..() + +/datum/brain_trauma/special/death_whispers/proc/whispering() + ADD_TRAIT(owner, TRAIT_SIXTHSENSE, TRAUMA_TRAIT) + active = TRUE + addtimer(CALLBACK(src, .proc/cease_whispering), rand(50, 300)) + +/datum/brain_trauma/special/death_whispers/proc/cease_whispering() + REMOVE_TRAIT(owner, TRAIT_SIXTHSENSE, TRAUMA_TRAIT) + active = FALSE + +/datum/brain_trauma/special/existential_crisis + name = "Existential Crisis" + desc = "Patient's hold on reality becomes faint, causing occasional bouts of non-existence." + scan_desc = "existential crisis" + gain_text = "You feel less real." + lose_text = "You feel more substantial again." + var/obj/effect/abstract/sync_holder/veil/veil + var/next_crisis = 0 + +/datum/brain_trauma/special/existential_crisis/on_life() + ..() + if(!veil && world.time > next_crisis && prob(3)) + if(isturf(owner.loc)) + fade_out() + +/datum/brain_trauma/special/existential_crisis/on_lose() + if(veil) + fade_in() + ..() + +/datum/brain_trauma/special/existential_crisis/proc/fade_out() + if(veil) + return + var/duration = rand(50, 450) + veil = new(owner.drop_location()) + to_chat(owner, "[pick("You stop thinking for a moment. Therefore you are not.",\ + "To be or not to be...",\ + "Why exist?",\ + "You stop keeping it real.",\ + "Your grip on existence slips.",\ + "Do you even exist?",\ + "You simply fade away.")]") + owner.forceMove(veil) + SEND_SIGNAL(owner, COMSIG_MOVABLE_SECLUDED_LOCATION) + for(var/thing in owner) + var/atom/movable/AM = thing + SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION) + next_crisis = world.time + 600 + addtimer(CALLBACK(src, .proc/fade_in), duration) + +/datum/brain_trauma/special/existential_crisis/proc/fade_in() + QDEL_NULL(veil) + to_chat(owner, "You fade back into reality.") + next_crisis = world.time + 600 + +//base sync holder is in desynchronizer.dm +/obj/effect/abstract/sync_holder/veil + name = "non-existence" + desc = "Existence is just a state of mind." /datum/brain_trauma/special/beepsky name = "Criminal" @@ -142,6 +244,7 @@ scan_desc = "criminal mind" gain_text = "Justice is coming for you." lose_text = "You were absolved for your crimes." + clonable = FALSE random_gain = FALSE var/obj/effect/hallucination/simple/securitron/beepsky @@ -201,4 +304,4 @@ /obj/effect/hallucination/simple/securitron/Destroy() STOP_PROCESSING(SSfastprocess,src) - return ..() \ No newline at end of file + return ..() diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 1a26ea7a14..a1284319f1 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -13,6 +13,10 @@ var/mob/living/split_personality/owner_backseat /datum/brain_trauma/severe/split_personality/on_gain() + var/mob/living/M = owner + if(M.stat == DEAD) //No use assigning people to a corpse + qdel(src) + return ..() make_backseats() get_ghost() @@ -23,7 +27,7 @@ /datum/brain_trauma/severe/split_personality/proc/get_ghost() set waitfor = FALSE - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat) + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [owner]'s split personality?", ROLE_PAI, null, null, 75, stranger_backseat, POLL_IGNORE_SPLITPERSONALITY) if(LAZYLEN(candidates)) var/mob/dead/observer/C = pick(candidates) C.transfer_ckey(stranger_backseat, FALSE) @@ -191,13 +195,13 @@ /datum/brain_trauma/severe/split_personality/brainwashing/on_life() return //no random switching -/datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == speaker) - return message +/datum/brain_trauma/severe/split_personality/brainwashing/handle_hearing(datum/source, list/hearing_args) + if(HAS_TRAIT(owner, TRAIT_DEAF) || owner == hearing_args[HEARING_SPEAKER]) + return + var/message = hearing_args[HEARING_RAW_MESSAGE] if(findtext(message, codeword)) - message = replacetext(message, codeword, "[codeword]") + hearing_args[HEARING_RAW_MESSAGE] = replacetext(message, codeword, "[codeword]") addtimer(CALLBACK(src, /datum/brain_trauma/severe/split_personality.proc/switch_personalities), 10) - return message /datum/brain_trauma/severe/split_personality/brainwashing/handle_speech(datum/source, list/speech_args) if(findtext(speech_args[SPEECH_MESSAGE], codeword)) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index fbe94cbb9e..72b9681f91 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -53,7 +53,7 @@ // If you want/expect to be moving the component around between parents, use this to register on the parent for signals /datum/component/proc/RegisterWithParent() - return + SEND_SIGNAL(src, COMSIG_COMPONENT_REGISTER_PARENT) //CITADEL EDIT /datum/component/proc/Initialize(...) return @@ -85,7 +85,7 @@ UnregisterFromParent() /datum/component/proc/UnregisterFromParent() - return + SEND_SIGNAL(src, COMSIG_COMPONENT_UNREGISTER_PARENT) //CITADEL EDIT /datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE) if(QDELETED(src) || QDELETED(target)) @@ -184,6 +184,7 @@ // The type arg is casted so initial works, you shouldn't be passing a real instance into this /datum/proc/GetComponent(datum/component/c_type) + RETURN_TYPE(c_type) if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED) stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") var/list/dc = datum_components diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 53c8c280a9..975b52dcb9 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -29,21 +29,21 @@ var/obj/item/typecast = upgrade_item upgrade_name = initial(typecast.name) -/datum/component/armor_plate/proc/examine(datum/source, mob/user) +/datum/component/armor_plate/proc/examine(datum/source, mob/user, list/examine_list) //upgrade_item could also be typecast here instead if(ismecha(parent)) if(amount) if(amount < maxamount) - to_chat(user, "Its armor is enhanced with [amount] [upgrade_name].") + examine_list += "Its armor is enhanced with [amount] [upgrade_name]." else - to_chat(user, "It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter.") + examine_list += "It's wearing a fearsome carapace entirely composed of [upgrade_name] - its pilot must be an experienced monster hunter." else - to_chat(user, "It has attachment points for strapping monster hide on for added protection.") + examine_list += "It has attachment points for strapping monster hide on for added protection." else if(amount) - to_chat(user, "It has been strengthened with [amount]/[maxamount] [upgrade_name].") + examine_list += "It has been strengthened with [amount]/[maxamount] [upgrade_name]." else - to_chat(user, "It can be strengthened with up to [maxamount] [upgrade_name].") + examine_list += "It can be strengthened with up to [maxamount] [upgrade_name]." /datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params) if(!istype(I,upgrade_item)) diff --git a/code/datums/components/bane.dm b/code/datums/components/bane.dm index 84f8010270..bdfcfed517 100644 --- a/code/datums/components/bane.dm +++ b/code/datums/components/bane.dm @@ -19,12 +19,14 @@ src.damage_multiplier = damage_multiplier /datum/component/bane/RegisterWithParent() + . = ..() if(speciestype) RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/speciesCheck) else RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/mobCheck) /datum/component/bane/UnregisterFromParent() + . = ..() UnregisterSignal(parent, COMSIG_ITEM_AFTERATTACK) /datum/component/bane/proc/speciesCheck(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/datums/components/bouncy.dm b/code/datums/components/bouncy.dm index f6a2a89195..c7ca85455b 100644 --- a/code/datums/components/bouncy.dm +++ b/code/datums/components/bouncy.dm @@ -21,9 +21,11 @@ RegisterSignal(parent, bounce, .proc/bounce_up) /datum/component/bouncy/RegisterWithParent() + . = ..() RegisterSignal(parent, bounce_signals, .proc/bounce_up) /datum/component/bouncy/UnregisterFromParent() + . = ..() UnregisterSignal(parent, bounce_signals) /datum/component/bouncy/proc/bounce_up(datum/source) diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 372fa8e283..d5af47ea1f 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -4,8 +4,9 @@ var/bonus_modifier = 0 //percentage increase to bonus item chance var/butcher_sound = 'sound/weapons/slice.ogg' //sound played when butchering var/butchering_enabled = TRUE + var/can_be_blunt = FALSE -/datum/component/butchering/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled) +/datum/component/butchering/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled, _can_be_blunt) if(_speed) speed = _speed if(_effectiveness) @@ -16,6 +17,56 @@ butcher_sound = _butcher_sound if(disabled) butchering_enabled = FALSE + if(_can_be_blunt) + can_be_blunt = _can_be_blunt + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/onItemAttack) + +/datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/M, mob/living/user) + if(user.a_intent != INTENT_HARM) + return + if(M.stat == DEAD && (M.butcher_results || M.guaranteed_butcher_results)) //can we butcher it? + if(butchering_enabled && (can_be_blunt || source.get_sharpness())) + INVOKE_ASYNC(src, .proc/startButcher, source, M, user) + return COMPONENT_ITEM_NO_ATTACK + + if(ishuman(M) && source.force && source.get_sharpness()) + var/mob/living/carbon/human/H = M + if((H.health <= H.crit_threshold || (user.pulling == H && user.grab_state >= GRAB_NECK) || H.IsSleeping()) && user.zone_selected == BODY_ZONE_HEAD) // Only sleeping, neck grabbed, or crit, can be sliced. + if(H.has_status_effect(/datum/status_effect/neck_slice)) + user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \ + "Their neck has already been already cut, you can't make the bleeding any worse!") + return COMPONENT_ITEM_NO_ATTACK + INVOKE_ASYNC(src, .proc/startNeckSlice, source, H, user) + return COMPONENT_ITEM_NO_ATTACK + +/datum/component/butchering/proc/startButcher(obj/item/source, mob/living/M, mob/living/user) + to_chat(user, "You begin to butcher [M]...") + playsound(M.loc, butcher_sound, 50, TRUE, -1) + if(do_mob(user, M, speed) && M.Adjacent(source)) + Butcher(user, M) + +/datum/component/butchering/proc/startNeckSlice(obj/item/source, mob/living/carbon/human/H, mob/living/user) + user.visible_message("[user] is slitting [H]'s throat!", \ + "You start slicing [H]'s throat!", \ + "You hear a cutting noise!", ignored_mobs = H) + H.show_message("Your throat is being slit by [user]!", 1, \ + "Something is cutting into your neck!", NONE) + log_combat(user, H, "starts slicing the throat of") + + playsound(H.loc, butcher_sound, 50, TRUE, -1) + if(do_mob(user, H, CLAMP(500 / source.force, 30, 100)) && H.Adjacent(source)) + if(H.has_status_effect(/datum/status_effect/neck_slice)) + user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \ + "Their neck has already been already cut, you can't make the bleeding any worse!") + return + + H.visible_message("[user] slits [H]'s throat!", \ + "[user] slits your throat...") + log_combat(user, H, "finishes slicing the throat of") + H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD) + H.bleed_rate = CLAMP(H.bleed_rate + 20, 0, 30) + H.apply_status_effect(/datum/status_effect/neck_slice) /datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat) var/turf/T = meat.drop_location() @@ -50,3 +101,23 @@ /datum/component/butchering/proc/ButcherEffects(mob/living/meat) //extra effects called on butchering, override this via subtypes return + +///Special snowflake component only used for the recycler. +/datum/component/butchering/recycler + +/datum/component/butchering/recycler/Initialize(_speed, _effectiveness, _bonus_modifier, _butcher_sound, disabled, _can_be_blunt) + if(!istype(parent, /obj/machinery/recycler)) //EWWW + return COMPONENT_INCOMPATIBLE + . = ..() + if(. == COMPONENT_INCOMPATIBLE) + return + RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/onCrossed) + +/datum/component/butchering/recycler/proc/onCrossed(datum/source, mob/living/L) + if(!istype(L)) + return + var/obj/machinery/recycler/eater = parent + if(eater.safety_mode || (eater.stat & (BROKEN|NOPOWER))) //I'm so sorry. + return + if(L.stat == DEAD && (L.butcher_results || L.guaranteed_butcher_results)) + Butcher(parent, L) \ No newline at end of file diff --git a/code/datums/components/construction.dm b/code/datums/components/construction.dm index 3b64d68486..01df44752c 100644 --- a/code/datums/components/construction.dm +++ b/code/datums/components/construction.dm @@ -19,9 +19,9 @@ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY,.proc/action) update_parent(index) -/datum/component/construction/proc/examine(datum/source, mob/user) +/datum/component/construction/proc/examine(datum/source, mob/user, list/examine_list) if(desc) - to_chat(user, desc) + examine_list += desc /datum/component/construction/proc/on_step() if(index > steps.len) diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm index bdc1d3a2f6..60317797a7 100644 --- a/code/datums/components/decal.dm +++ b/code/datums/components/decal.dm @@ -17,6 +17,7 @@ apply() /datum/component/decal/RegisterWithParent() + . = ..() if(first_dir) RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react) if(cleanable) @@ -25,6 +26,7 @@ RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) /datum/component/decal/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE)) /datum/component/decal/Destroy() @@ -71,5 +73,5 @@ if(strength >= cleanable) qdel(src) -/datum/component/decal/proc/examine(datum/source, mob/user) - to_chat(user, description) \ No newline at end of file +/datum/component/decal/proc/examine(datum/source, mob/user, list/examine_list) + examine_list += description \ No newline at end of file diff --git a/code/datums/components/earhealing.dm b/code/datums/components/earhealing.dm deleted file mode 100644 index bd3d57480d..0000000000 --- a/code/datums/components/earhealing.dm +++ /dev/null @@ -1,30 +0,0 @@ -// An item worn in the ear slot with this component will heal your ears each -// Life() tick, even if normally your ears would be too damaged to heal. - -/datum/component/earhealing - var/mob/living/carbon/wearer - -/datum/component/earhealing/Initialize() - if(!isitem(parent)) - return COMPONENT_INCOMPATIBLE - RegisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged) - -/datum/component/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot) - if (slot == SLOT_EARS && istype(user)) - if (!wearer) - START_PROCESSING(SSobj, src) - wearer = user - else - if (wearer) - STOP_PROCESSING(SSobj, src) - wearer = null - -/datum/component/earhealing/process() - if (!wearer) - STOP_PROCESSING(SSobj, src) - return - if(!HAS_TRAIT(wearer, TRAIT_DEAF)) - var/obj/item/organ/ears/ears = wearer.getorganslot(ORGAN_SLOT_EARS) - if (ears) - ears.deaf = max(ears.deaf - 1, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged - ears.damage = max(ears.damage - 0.1, 0) diff --git a/code/datums/components/fantasy/_fantasy.dm b/code/datums/components/fantasy/_fantasy.dm index 86e016784a..9e8493b6f4 100644 --- a/code/datums/components/fantasy/_fantasy.dm +++ b/code/datums/components/fantasy/_fantasy.dm @@ -30,11 +30,13 @@ return ..() /datum/component/fantasy/RegisterWithParent() + . = ..() var/obj/item/master = parent originalName = master.name modify() /datum/component/fantasy/UnregisterFromParent() + . = ..() unmodify() /datum/component/fantasy/InheritComponent(datum/component/fantasy/newComp, original, list/arguments) diff --git a/code/datums/components/igniter.dm b/code/datums/components/igniter.dm index b40383e828..13944b1200 100644 --- a/code/datums/components/igniter.dm +++ b/code/datums/components/igniter.dm @@ -9,6 +9,7 @@ src.fire_stacks = fire_stacks /datum/component/igniter/RegisterWithParent() + . = ..() if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) else if(isitem(parent)) @@ -17,6 +18,7 @@ RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) /datum/component/igniter/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) /datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/datums/components/knockback.dm b/code/datums/components/knockback.dm index b4fcaa2dd8..988a0e575e 100644 --- a/code/datums/components/knockback.dm +++ b/code/datums/components/knockback.dm @@ -10,6 +10,7 @@ src.throw_anchored = throw_anchored /datum/component/knockback/RegisterWithParent() + . = ..() if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) else if(isitem(parent)) @@ -18,6 +19,7 @@ RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) /datum/component/knockback/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) /datum/component/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/datums/components/lifesteal.dm b/code/datums/components/lifesteal.dm index c7a78e10a3..9d62d32866 100644 --- a/code/datums/components/lifesteal.dm +++ b/code/datums/components/lifesteal.dm @@ -10,6 +10,7 @@ src.flat_heal = flat_heal /datum/component/lifesteal/RegisterWithParent() + . = ..() if(isgun(parent)) RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) else if(isitem(parent)) @@ -18,6 +19,7 @@ RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) /datum/component/lifesteal/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) /datum/component/lifesteal/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm index fb68b89ebf..c7e59e0ead 100644 --- a/code/datums/components/magnetic_catch.dm +++ b/code/datums/components/magnetic_catch.dm @@ -15,8 +15,8 @@ for(var/i in parent) RegisterSignal(i, COMSIG_MOVABLE_PRE_THROW, .proc/throw_react) -/datum/component/magnetic_catch/proc/examine(datum/source, mob/user) - to_chat(user, "It has been installed with inertia dampening to prevent coffee spills.") +/datum/component/magnetic_catch/proc/examine(datum/source, mob/user, list/examine_list) + examine_list += "It has been installed with inertia dampening to prevent coffee spills." /datum/component/magnetic_catch/proc/crossed_react(datum/source, atom/movable/thing) RegisterSignal(thing, COMSIG_MOVABLE_PRE_THROW, .proc/throw_react, TRUE) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 48fa758db1..25094518b8 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -49,13 +49,13 @@ var/mat_path = possible_mats[id] materials[id] = new mat_path() -/datum/component/material_container/proc/OnExamine(datum/source, mob/user) +/datum/component/material_container/proc/OnExamine(datum/source, mob/user, list/examine_list) if(show_on_examine) for(var/I in materials) var/datum/material/M = materials[I] var/amt = amount(M.id) if(amt) - to_chat(user, "It has [amt] units of [lowertext(M.name)] stored.") + examine_list += "It has [amt] units of [lowertext(M.name)] stored." /datum/component/material_container/proc/OnAttackBy(datum/source, obj/item/I, mob/living/user) var/list/tc = allowed_typecache diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index b46919a6c6..2ecd77546d 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -150,15 +150,6 @@ if(9) setSanity(sanity+0.4, maximum=SANITY_GREAT) - if(HAS_TRAIT(owner, TRAIT_DEPRESSION)) - if(prob(0.05)) - add_event(null, "depression", /datum/mood_event/depression) - clear_event(null, "jolly") - if(HAS_TRAIT(owner, TRAIT_JOLLY)) - if(prob(0.05)) - add_event(null, "jolly", /datum/mood_event/jolly) - clear_event(null, "depression") - HandleNutrition(owner) /datum/component/mood/proc/setSanity(amount, minimum=SANITY_INSANE, maximum=SANITY_NEUTRAL)//I'm sure bunging this in here will have no negative repercussions. @@ -248,7 +239,7 @@ var/datum/hud/hud = owner.hud_used screen_obj = new hud.infodisplay += screen_obj - RegisterSignal(hud, COMSIG_PARENT_QDELETED, .proc/unmodify_hud) + RegisterSignal(hud, COMSIG_PARENT_QDELETING, .proc/unmodify_hud) RegisterSignal(screen_obj, COMSIG_CLICK, .proc/hud_click) /datum/component/mood/proc/unmodify_hud(datum/source) diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 3f7f794435..0ef13b514b 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -34,6 +34,7 @@ cloud_sync() /datum/component/nanites/RegisterWithParent() + . = ..() RegisterSignal(parent, COMSIG_HAS_NANITES, .proc/confirm_nanites) RegisterSignal(parent, COMSIG_NANITE_UI_DATA, .proc/nanite_ui_data) RegisterSignal(parent, COMSIG_NANITE_GET_PROGRAMS, .proc/get_programs) @@ -53,11 +54,11 @@ RegisterSignal(parent, COMSIG_MOB_ALLOWED, .proc/check_access) RegisterSignal(parent, COMSIG_LIVING_ELECTROCUTE_ACT, .proc/on_shock) RegisterSignal(parent, COMSIG_LIVING_MINOR_SHOCK, .proc/on_minor_shock) - RegisterSignal(parent, COMSIG_MOVABLE_HEAR, .proc/on_hear) RegisterSignal(parent, COMSIG_SPECIES_GAIN, .proc/check_viable_biotype) RegisterSignal(parent, COMSIG_NANITE_SIGNAL, .proc/receive_signal) /datum/component/nanites/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_HAS_NANITES, COMSIG_NANITE_UI_DATA, COMSIG_NANITE_GET_PROGRAMS, @@ -191,11 +192,6 @@ var/datum/nanite_program/NP = X NP.on_death(gibbed) -/datum/component/nanites/proc/on_hear(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - for(var/X in programs) - var/datum/nanite_program/NP = X - NP.on_hear(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) - /datum/component/nanites/proc/receive_signal(datum/source, code, source = "an unidentified source") for(var/X in programs) var/datum/nanite_program/NP = X diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm index efa0fd14d5..05174c196b 100644 --- a/code/datums/components/orbiter.dm +++ b/code/datums/components/orbiter.dm @@ -20,12 +20,14 @@ begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation) /datum/component/orbiter/RegisterWithParent() + . = ..() var/atom/target = parent while(ismovableatom(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react) target = target.loc /datum/component/orbiter/UnregisterFromParent() + . = ..() var/atom/target = parent while(ismovableatom(target)) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index bf47793f81..9dac20d94f 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -18,7 +18,7 @@ hl3_release_date = _half_life can_contaminate = _can_contaminate - if(istype(parent, /atom)) + if(istype(parent, /atom)) RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/rad_examine) if(istype(parent, /obj/item)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/rad_attack) @@ -58,7 +58,7 @@ else strength = max(strength, arguments[1]) -/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, atom/thing) +/datum/component/radioactive/proc/rad_examine(datum/source, mob/user, list/examine_list) var/atom/master = parent var/list/out = list() if(get_dist(master, user) <= 1) @@ -72,7 +72,7 @@ out += "[out ? " and it " : "[master] "]hurts to look at." else out += "." - to_chat(user, out.Join()) + examine_list += out.Join() /datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user) radiation_pulse(parent, strength/20) diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index a044ca301e..422d73520e 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -98,14 +98,15 @@ remove_verbs() . = ..() -/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user) +/datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user, list/examine_list) if(rotation_flags & ROTATION_ALTCLICK) - to_chat(user, "Alt-click to rotate it clockwise.") + examine_list += "Alt-click to rotate it clockwise." /datum/component/simple_rotation/proc/HandRot(datum/source, mob/user, rotation = default_rotation_direction) if(!can_be_rotated.Invoke(user, rotation) || !can_user_rotate.Invoke(user, rotation)) return BaseRot(user, rotation) + return TRUE /datum/component/simple_rotation/proc/WrenchRot(datum/source, obj/item/I, mob/living/user) if(!can_be_rotated.Invoke(user,default_rotation_direction) || !can_user_rotate.Invoke(user,default_rotation_direction)) diff --git a/code/datums/components/shrapnel.dm b/code/datums/components/shrapnel.dm index a911221f26..4d1fe21b95 100644 --- a/code/datums/components/shrapnel.dm +++ b/code/datums/components/shrapnel.dm @@ -13,10 +13,12 @@ src.override_projectile_range = override_projectile_range /datum/component/shrapnel/RegisterWithParent() + . = ..() if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) /datum/component/shrapnel/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_PROJECTILE_ON_HIT)) /datum/component/shrapnel/proc/projectile_hit(atom/fired_from, atom/movable/firer, atom/target, Angle) diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm new file mode 100644 index 0000000000..f070d9b22f --- /dev/null +++ b/code/datums/components/shrink.dm @@ -0,0 +1,42 @@ +/datum/component/shrink + var/olddens + var/oldopac + dupe_mode = COMPONENT_DUPE_HIGHLANDER + +/datum/component/shrink/Initialize(shrink_time) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + var/atom/parent_atom = parent + parent_atom.transform = parent_atom.transform.Scale(0.5,0.5) + olddens = parent_atom.density + oldopac = parent_atom.opacity + parent_atom.density = 0 + parent_atom.opacity = 0 + if(isliving(parent_atom)) + var/mob/living/L = parent_atom + L.add_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY, update=TRUE, priority=100, multiplicative_slowdown=4) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.unequip_everything() + C.visible_message("[C]'s belongings fall off of [C.p_them()] as they shrink down!", + "Your belongings fall away as everything grows bigger!") + if(ishuman(C)) + var/mob/living/carbon/human/H = C + H.physiology.damage_resistance -= 100//carbons take double damage while shrunk + parent_atom.visible_message("[parent_atom] shrinks down to a tiny size!", + "Everything grows bigger!") + QDEL_IN(src, shrink_time) + + +/datum/component/shrink/Destroy() + var/atom/parent_atom = parent + parent_atom.transform = parent_atom.transform.Scale(2,2) + parent_atom.density = olddens + parent_atom.opacity = oldopac + if(isliving(parent_atom)) + var/mob/living/L = parent_atom + L.remove_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + H.physiology.damage_resistance += 100 + ..() \ No newline at end of file diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index bbcb0d88a6..91928656e1 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -8,6 +8,7 @@ if(!ismovableatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds) + RegisterSignal(parent, list(COMSIG_MOVABLE_SECLUDED_LOCATION), .proc/relocate) RegisterSignal(parent, list(COMSIG_PARENT_PREQDELETED), .proc/check_deletion) RegisterSignal(parent, list(COMSIG_ITEM_IMBUE_SOUL), .proc/check_soul_imbue) src.inform_admins = inform_admins @@ -32,6 +33,7 @@ var/atom/movable/AM = parent AM.forceMove(targetturf) + to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...") // move the disc, so ghosts remain orbiting it even if it's "destroyed" return targetturf @@ -40,7 +42,6 @@ return else var/turf/currentturf = get_turf(src) - to_chat(get(parent, /mob), "You can't help but feel that you just lost something back there...") var/turf/targetturf = relocate() log_game("[parent] has been moved out of bounds in [loc_name(currentturf)]. Moving it to [loc_name(targetturf)].") if(inform_admins) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index a92ae9e629..76a9b2e6aa 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -57,7 +57,7 @@ var/screen_start_x = 4 //These two are where the storage starts being rendered, screen_loc wise. var/screen_start_y = 2 //End - + var/limited_random_access = FALSE //Quick if statement in accessible_items to determine if we care at all about what people can access at once. var/limited_random_access_stack_position = 0 //If >0, can only access top items var/limited_random_access_stack_bottom_up = FALSE //If TRUE, above becomes bottom items @@ -309,6 +309,7 @@ else var/datum/numbered_display/ND = .[I.type] ND.number++ + . = sortTim(., /proc/cmp_numbered_displays_name_asc, associative = TRUE) //This proc determines the size of the inventory to be displayed. Please touch it only if you know what you're doing. /datum/component/storage/proc/orient2hud(mob/user, maxcolumns) @@ -646,9 +647,9 @@ if(M == viewing) to_chat(usr, "You put [I] [insert_preposition]to [parent].") else if(in_range(M, viewing)) //If someone is standing close enough, they can tell what it is... - viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", 1) + viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", MSG_VISUAL) else if(I && I.w_class >= 3) //Otherwise they can only see large or normal items from a distance... - viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", 1) + viewing.show_message("[M] puts [I] [insert_preposition]to [parent].", MSG_VISUAL) /datum/component/storage/proc/update_icon() if(isobj(parent)) @@ -761,7 +762,7 @@ if(!isliving(user) || !user.CanReach(parent)) return if(check_locked(source, user, TRUE)) - return + return TRUE var/atom/A = parent if(!quickdraw) @@ -769,19 +770,20 @@ user_show_to_mob(user) if(rustle_sound) playsound(A, "rustle", 50, 1, -5) - return + return TRUE - if(!user.incapacitated()) + if(user.can_hold_items() && !user.incapacitated()) var/obj/item/I = locate() in real_location() if(!I) return A.add_fingerprint(user) remove_from_storage(I, get_turf(user)) if(!user.put_in_hands(I)) - to_chat(user, "You fumble for [I] and it falls on the floor.") - return + user.visible_message("[user] fumbles with the [parent], letting [I] fall on the floor.", \ + "You fumble with [parent], letting [I] fall on the floor.") + return TRUE user.visible_message("[user] draws [I] from [parent]!", "You draw [I] from [parent].") - return + return TRUE /datum/component/storage/proc/action_trigger(datum/signal_source, datum/action/source) gather_mode_switch(source.owner) diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm index 552959603d..61718301b3 100644 --- a/code/datums/components/summoning.dm +++ b/code/datums/components/summoning.dm @@ -24,6 +24,7 @@ src.faction = faction /datum/component/summoning/RegisterWithParent() + . = ..() if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit) else if(isitem(parent)) @@ -32,6 +33,7 @@ RegisterSignal(parent, COMSIG_HOSTILE_ATTACKINGTARGET, .proc/hostile_attackingtarget) /datum/component/summoning/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) /datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm index 5917fc3009..ba028e2fd5 100644 --- a/code/datums/components/tactical.dm +++ b/code/datums/components/tactical.dm @@ -9,10 +9,12 @@ src.allowed_slot = allowed_slot /datum/component/tactical/RegisterWithParent() + . = ..() RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/modify) RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/unmodify) /datum/component/tactical/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) unmodify() diff --git a/code/datums/components/virtual_reality.dm b/code/datums/components/virtual_reality.dm index f8f0679e9b..2f0405af2e 100644 --- a/code/datums/components/virtual_reality.dm +++ b/code/datums/components/virtual_reality.dm @@ -1,128 +1,245 @@ +/** + * The virtual reality turned component. + * Originally created to overcome issues of mob polymorphing locking the player inside virtual reality + * and allow for a more "immersive" virtual reality in a virtual reality experience. + * It relies on comically complex order of logic, expect things to break if procs such as mind/transfer_to() are revamped. + * In short, a barebone not so hardcoded VR framework. + * If you plan to add more devices that make use of this component, remember to isolate their code outta here where possible. + */ /datum/component/virtual_reality can_transfer = TRUE - var/datum/mind/mastermind // where is my mind t. pixies + //the player's mind (not the parent's), should something happen to them or to their mob. + var/datum/mind/mastermind + //the current mob's mind, which we need to keep track for mind transfer. var/datum/mind/current_mind - var/obj/machinery/vr_sleeper/vr_sleeper + //the action datum used by the mob to quit the vr session. var/datum/action/quit_vr/quit_action + //This one's name should be self explainatory, currently used for emags. var/you_die_in_the_game_you_die_for_real = FALSE - var/datum/component/virtual_reality/inception //The component works on a very fragile link betwixt mind, ckey and death. + //Used to allow people to play recursively playing vr while playing vr without many issues. + var/datum/component/virtual_reality/level_below + var/datum/component/virtual_reality/level_above + //Used to stop the component from executing certain functions that'd cause us some issues otherwise. + //FALSE if there is a connected player, otherwise TRUE. + var/session_paused = TRUE + //Used to stop unwarranted behaviour from happening in cases where the master mind transference is unsupported. Set on Initialize(). + var/allow_mastermind_transfer = FALSE -/datum/component/virtual_reality/Initialize(mob/M, obj/machinery/vr_sleeper/gaming_pod, yolo = FALSE, new_char = TRUE) - if(!ismob(parent) || !istype(M)) +/datum/component/virtual_reality/Initialize(yolo = FALSE, _allow_mastermind_transfer = FALSE) + var/mob/M = parent + if(!istype(M) || !M.mind) return COMPONENT_INCOMPATIBLE - var/mob/vr_M = parent - mastermind = M.mind - RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETED), .proc/game_over) - RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/switch_player) - RegisterSignal(mastermind, COMSIG_MIND_TRANSFER, .proc/switch_player) you_die_in_the_game_you_die_for_real = yolo - quit_action = new() - if(gaming_pod) - vr_sleeper = gaming_pod - RegisterSignal(vr_sleeper, COMSIG_ATOM_EMAG_ACT, .proc/you_only_live_once) - RegisterSignal(vr_sleeper, COMSIG_MACHINE_EJECT_OCCUPANT, .proc/revert_to_reality) - vr_M.ckey = M.ckey - var/datum/component/virtual_reality/clusterfk = M.GetComponent(/datum/component/virtual_reality) - if(clusterfk && !clusterfk.inception) - clusterfk.inception = src - SStgui.close_user_uis(M, src) + allow_mastermind_transfer = _allow_mastermind_transfer + quit_action = new + +/datum/component/virtual_reality/Destroy() + QDEL_NULL(quit_action) + if(level_above) + level_above.level_below = null + level_above = null + if(level_below) + level_below.level_above = null + level_below = null + return ..() /datum/component/virtual_reality/RegisterWithParent() + . = ..() var/mob/M = parent current_mind = M.mind + if(!quit_action) + quit_action = new quit_action.Grant(M) - RegisterSignal(quit_action, COMSIG_ACTION_TRIGGER, .proc/revert_to_reality) - RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETED), .proc/game_over) + RegisterSignal(quit_action, COMSIG_ACTION_TRIGGER, .proc/action_trigger) + RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over) RegisterSignal(M, COMSIG_MOB_GHOSTIZE, .proc/be_a_quitter) - RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/pass_me_the_remote) - RegisterSignal(current_mind, COMSIG_MIND_TRANSFER, .proc/pass_me_the_remote) - mastermind.current.audiovisual_redirect = M - if(vr_sleeper) - vr_sleeper.vr_mob = M + RegisterSignal(M, COMSIG_MOB_KEY_CHANGE, .proc/on_player_transfer) + RegisterSignal(current_mind, COMSIG_MIND_TRANSFER, .proc/on_player_transfer) + RegisterSignal(current_mind, COMSIG_PRE_MIND_TRANSFER, .proc/pre_player_transfer) + if(mastermind?.current) + mastermind.current.audiovisual_redirect = M /datum/component/virtual_reality/UnregisterFromParent() - quit_action.Remove(parent) - UnregisterSignal(parent, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETED, COMSIG_MOB_KEY_CHANGE, COMSIG_MOB_GHOSTIZE)) - UnregisterSignal(current_mind, COMSIG_MIND_TRANSFER) - UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER) + . = ..() + if(quit_action) + quit_action.Remove(parent) + UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER) + UnregisterSignal(parent, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_KEY_CHANGE, COMSIG_MOB_GHOSTIZE)) + UnregisterSignal(current_mind, list(COMSIG_MIND_TRANSFER, COMSIG_PRE_MIND_TRANSFER)) current_mind = null - mastermind.current.audiovisual_redirect = null + if(mastermind?.current) + mastermind.current.audiovisual_redirect = null -/datum/component/virtual_reality/proc/switch_player(datum/source, mob/new_mob, mob/old_mob) - if(vr_sleeper || !new_mob.mind) - // Machineries currently don't deal up with the occupant being polymorphed et similar... Or did something fuck up? - revert_to_reality() - return - old_mob.audiovisual_redirect = null - new_mob.audiovisual_redirect = parent - -/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source) - if(source != quit_action) - return COMPONENT_ACTION_BLOCK_TRIGGER - revert_to_reality(signal_source) +/** + * Called when attempting to connect a mob to a virtual reality mob. + * This will return FALSE if the mob is without player or dead. TRUE otherwise + */ +/datum/component/virtual_reality/proc/connect(mob/M) + var/mob/vr_M = parent + if(!M.mind || M.stat == DEAD || !vr_M.mind || vr_M.stat == DEAD) + return FALSE + var/datum/component/virtual_reality/VR = M.GetComponent(/datum/component/virtual_reality) + if(VR) + VR.level_below = src + level_above = VR + M.transfer_ckey(vr_M, FALSE) + mastermind = M.mind + mastermind.current.audiovisual_redirect = parent + RegisterSignal(mastermind, COMSIG_PRE_MIND_TRANSFER, .proc/switch_player) + RegisterSignal(M, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over) + RegisterSignal(M, COMSIG_MOB_PRE_PLAYER_CHANGE, .proc/player_hijacked) + SStgui.close_user_uis(vr_M, src) + session_paused = FALSE + return TRUE +/** + * emag_act() hook. Makes the game deadlier, killing the mastermind mob too should the parent die. + */ /datum/component/virtual_reality/proc/you_only_live_once() - if(you_die_in_the_game_you_die_for_real || vr_sleeper?.only_current_user_can_interact) + if(you_die_in_the_game_you_die_for_real) return FALSE you_die_in_the_game_you_die_for_real = TRUE return TRUE -/datum/component/virtual_reality/proc/pass_me_the_remote(datum/source, mob/new_mob) - if(new_mob == mastermind.current) - revert_to_reality(source) - return TRUE - new_mob.TakeComponent(src) - return TRUE +/** + * Called when the mastermind mind is transferred to another mob. + * This is pretty much just going to simply quit the session until machineries support polymorphed occupants etcetera. + */ +/datum/component/virtual_reality/proc/switch_player(datum/source, mob/new_mob, mob/old_mob) + if(session_paused) + return + if(!allow_mastermind_transfer) + quit() + return COMPONENT_STOP_MIND_TRANSFER + UnregisterSignal(old_mob, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_PRE_PLAYER_CHANGE)) + RegisterSignal(new_mob, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING), .proc/game_over) + RegisterSignal(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, .proc/player_hijacked) + old_mob.audiovisual_redirect = null + new_mob.audiovisual_redirect = parent +/** + * Called to stop the player mind from being transferred should the new mob happen to be one of our masterminds'. + * Since the target's mind.current is going to be null'd in the mind transfer process, + * This has to be done in a different signal proc than on_player_transfer(), by then the mastermind.current will be null. + */ +/datum/component/virtual_reality/proc/pre_player_transfer(datum/source, mob/new_mob, mob/old_mob) + if(!mastermind || session_paused) + return + if(new_mob == mastermind.current) + quit() + return COMPONENT_STOP_MIND_TRANSFER + if(!level_above) + return + var/datum/component/virtual_reality/VR = level_above + while(VR) + if(VR.mastermind.current == new_mob) + VR.quit() //this will revert the ckey back to new_mob. + return COMPONENT_STOP_MIND_TRANSFER + VR = VR.level_above + +/** + * Called when someone or something else is somewhat about to replace the mastermind's mob key somehow. + * And potentially lock the player in a broken virtual reality plot. Not really something to be proud of. + */ +/datum/component/virtual_reality/proc/player_hijacked(datum/source, mob/our_character, mob/their_character) + if(session_paused) + return + if(!their_character) + quit(cleanup = TRUE) + return + var/will_it_be_handled_in_their_pre_player_transfer = FALSE + var/datum/component/virtual_reality/VR = src + while(VR) + if(VR.parent == their_character) + will_it_be_handled_in_their_pre_player_transfer = TRUE + break + VR = VR.level_below + if(!will_it_be_handled_in_their_pre_player_transfer) //it's not the player playing shenanigeans, abandon all ships. + quit(cleanup = TRUE) + +/** + * Takes care of moving the component from a mob to another when their mind or ckey is transferred. + * The very reason this component even exists (else one would be stuck playing as a monky if monkyified) + */ +/datum/component/virtual_reality/proc/on_player_transfer(datum/source, mob/new_mob, mob/old_mob) + new_mob.TakeComponent(src) + +/** + * Required for the component to be transferable from mob to mob. + */ /datum/component/virtual_reality/PostTransfer() if(!ismob(parent)) return COMPONENT_INCOMPATIBLE +/** + *The following procs simply acts as hooks for quit(), since components do not use callbacks anymore + */ +/datum/component/virtual_reality/proc/action_trigger(datum/signal_source, datum/action/source) + quit() + return COMPONENT_ACTION_BLOCK_TRIGGER + /datum/component/virtual_reality/proc/revert_to_reality(datum/source) - quit_it() + quit() /datum/component/virtual_reality/proc/game_over(datum/source) - quit_it(TRUE, TRUE) + quit(you_die_in_the_game_you_die_for_real, TRUE) + return COMPONENT_BLOCK_DEATH_BROADCAST -/datum/component/virtual_reality/proc/be_a_quitter(datum/source, can_reenter_corpse) - quit_it() - return COMPONENT_BLOCK_GHOSTING +/datum/component/virtual_reality/proc/be_a_quitter(datum/source, can_reenter_corpse, special = FALSE, penalize = FALSE) + if(!special) + quit() + return COMPONENT_BLOCK_GHOSTING -/datum/component/virtual_reality/proc/virtual_reality_in_a_virtual_reality(mob/player, killme = FALSE, datum/component/virtual_reality/yo_dawg) +/datum/component/virtual_reality/proc/machine_destroyed(datum/source) + quit(cleanup = TRUE) + +/** + * Takes care of deleting itself, moving the player back to the mastermind's current and queueing the parent for deletion. + * It supports nested virtual realities by recursively calling vr_in_a_vr(), which in turns calls quit(), + * up to the deepest level, where the ckey will be transferred back to our mastermind's mob instead. + * The above operation is skipped when session_paused is TRUE (ergo no player in control of the current mob). + * vars: + * * deathcheck is used to kill the master, you want this FALSE unless for stuff that doesn't involve emagging. + * * cleanup is used to queue the parent for the next vr_clean_master's run, where they'll be deleted should they be dead. + * * mob/override is used for the recursive virtual reality explained above and shouldn't be used outside of vr_in_a_vr(). + */ +/datum/component/virtual_reality/proc/quit(deathcheck = FALSE, cleanup = FALSE, mob/override) var/mob/M = parent - quit_it(FALSE, killme, player, yo_dawg) - yo_dawg.inception = null - if(killme) - M.death(FALSE) - -/datum/component/virtual_reality/proc/quit_it(deathcheck = FALSE, cleanup = FALSE, mob/override) - var/mob/M = parent - var/mob/dreamer = override ? override : mastermind.current - if(!mastermind) - to_chat(M, "You feel a dreadful sensation, something terrible happened. You try to wake up, but you find yourself unable to...") - else - var/key_transfer = FALSE - if(inception?.parent) - inception.virtual_reality_in_a_virtual_reality(dreamer, cleanup, src) + if(!session_paused) + session_paused = TRUE + var/mob/dreamer = override || mastermind.current + if(!dreamer) //This shouldn't happen. + stack_trace("virtual reality component quit() called without a mob to transfer the parent ckey to.") + to_chat(M, "You feel a dreadful sensation, something terrible happened. You try to wake up, but you find yourself unable to...") + qdel(src) + return + if(level_below?.parent) + level_below.vr_in_a_vr(dreamer, deathcheck, (deathcheck && cleanup)) else - key_transfer = TRUE - if(key_transfer) M.transfer_ckey(dreamer, FALSE) - dreamer.stop_sound_channel(CHANNEL_HEARTBEAT) - dreamer.audiovisual_redirect = null - if(deathcheck && you_die_in_the_game_you_die_for_real) - to_chat(mastermind, "You feel everything fading away...") - dreamer.death(FALSE) - if(cleanup) - var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M) - if(cleanbot) - LAZYADD(cleanbot.corpse_party, M) - if(vr_sleeper) - vr_sleeper.vr_mob = null - vr_sleeper = null - qdel(src) + if(deathcheck) + to_chat(dreamer, "You feel everything fading away...") + dreamer.death(FALSE) + mastermind.current.audiovisual_redirect = null + if(!cleanup) + if(level_above) + level_above.level_below = null + level_above = null + UnregisterSignal(mastermind.current, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING, COMSIG_MOB_PRE_PLAYER_CHANGE)) + UnregisterSignal(mastermind, COMSIG_PRE_MIND_TRANSFER) + mastermind = null + if(cleanup) + var/obj/effect/vr_clean_master/cleanbot = locate() in get_area(M) + if(cleanbot) + LAZYOR(cleanbot.corpse_party, M) + qdel(src) -/datum/component/virtual_reality/Destroy() - var/datum/action/quit_vr/delet_me = quit_action - . = ..() - qdel(delet_me) \ No newline at end of file +/** + * Used for recursive virtual realities shenanigeans and should be called only through the above proc. + */ +/datum/component/virtual_reality/proc/vr_in_a_vr(mob/player, deathcheck = FALSE, lethal_cleanup = FALSE) + var/mob/M = parent + quit(deathcheck, lethal_cleanup, player) + M.audiovisual_redirect = null + if(lethal_cleanup) + M.death(FALSE) diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 38b17993d8..d6c5c0bf83 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -34,10 +34,12 @@ last_process = world.time /datum/component/wet_floor/RegisterWithParent() + . = ..() RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet) RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry) /datum/component/wet_floor/UnregisterFromParent() + . = ..() UnregisterSignal(parent, list(COMSIG_TURF_IS_WET, COMSIG_TURF_MAKE_DRY)) /datum/component/wet_floor/Destroy() diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 60bb24c8c2..cf33fa3633 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -255,7 +255,7 @@ M.fields["alg_d"] = "No allergies have been detected in this patient." M.fields["cdi"] = "None" M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." - M.fields["notes"] = "No notes." + M.fields["notes"] = H.get_trait_string(medical) medical += M //Security Record diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index e44134f01f..feac1de972 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1398,3 +1398,29 @@ var/mob/living/carbon/human/H = locate(href_list["copyoutfit"]) in GLOB.carbon_list if(istype(H)) H.copy_outfit() + else if(href_list["modquirks"]) + if(!check_rights(R_SPAWN)) + return + + var/mob/living/carbon/human/H = locate(href_list["modquirks"]) in GLOB.mob_list + if(!istype(H)) + to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + return + + var/list/options = list("Clear"="Clear") + for(var/x in subtypesof(/datum/quirk)) + var/datum/quirk/T = x + var/qname = initial(T.name) + options[H.has_quirk(T) ? "[qname] (Remove)" : "[qname] (Add)"] = T + + var/result = input(usr, "Choose quirk to add/remove","Quirk Mod") as null|anything in options + if(result) + if(result == "Clear") + for(var/datum/quirk/q in H.roundstart_quirks) + H.remove_quirk(q.type) + else + var/T = options[result] + if(H.has_quirk(T)) + H.remove_quirk(T) + else + H.add_quirk(T,TRUE) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 8a3fd82cb9..ccc5d97cf8 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -254,7 +254,6 @@ if(icon_update) update_body() update_hair() - update_body_parts() update_mutations_overlay()// no lizard with human hulk overlay please. diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index c798f35218..b9e774aa50 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -174,3 +174,13 @@ /datum/dog_fashion/back/deathsquad name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." + +/datum/dog_fashion/head/colour + name = "Stylish REAL_NAME" + desc = "From the tips of their paws to the top of their head, they look like a made bed." + emote_see = list("tries to tap dances.","looks sadly at others outfits...","barks at bad fashion!") + +/datum/dog_fashion/head/telegram + name = "Messenger REAL_NAME" + desc = "Dont shoot the messenger..." + emote_see = list("licks an envelope.","looks ready to set off to send a letter...","works on barking!") diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm new file mode 100644 index 0000000000..8f9b97db22 --- /dev/null +++ b/code/datums/elements/_element.dm @@ -0,0 +1,39 @@ +/datum/element + var/element_flags = NONE + /** + * The index of the first attach argument to consider for duplicate elements + * Is only used when flags contains ELEMENT_BESPOKE + * This is infinity so you must explicitly set this + */ + var/id_arg_index = INFINITY + +/datum/element/proc/Attach(datum/target) + if(type == /datum/element) + return ELEMENT_INCOMPATIBLE + if(element_flags & ELEMENT_DETACH) + RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach) + +/datum/element/proc/Detach(datum/source, force) + UnregisterSignal(source, COMSIG_PARENT_QDELETING) + +/datum/element/Destroy(force) + if(!force) + return QDEL_HINT_LETMELIVE + SSdcs.elements_by_type -= type + return ..() + +//DATUM PROCS + +/datum/proc/AddElement(eletype, ...) + var/datum/element/ele = SSdcs.GetElement(arglist(args)) + args[1] = src + if(ele.Attach(arglist(args)) == ELEMENT_INCOMPATIBLE) + CRASH("Incompatible [eletype] assigned to a [type]! args: [json_encode(args)]") + +/** + * Finds the singleton for the element type given and detaches it from src + * You only need additional arguments beyond the type if you're using ELEMENT_BESPOKE + */ +/datum/proc/RemoveElement(eletype, ...) + var/datum/element/ele = SSdcs.GetElement(arglist(args)) + ele.Detach(src) \ No newline at end of file diff --git a/code/datums/components/cleaning.dm b/code/datums/elements/cleaning.dm similarity index 79% rename from code/datums/components/cleaning.dm rename to code/datums/elements/cleaning.dm index 5324a87fee..e4fb3edd48 100644 --- a/code/datums/components/cleaning.dm +++ b/code/datums/elements/cleaning.dm @@ -1,13 +1,15 @@ -/datum/component/cleaning - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS +/datum/element/cleaning/Attach(datum/target) + . = ..() + if(!ismovableatom(target)) + return ELEMENT_INCOMPATIBLE + RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/Clean) -/datum/component/cleaning/Initialize() - if(!ismovableatom(parent)) - return COMPONENT_INCOMPATIBLE - RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/Clean) +/datum/element/cleaning/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) -/datum/component/cleaning/proc/Clean() - var/atom/movable/AM = parent +/datum/element/cleaning/proc/Clean(datum/source) + var/atom/movable/AM = source var/turf/T = AM.loc SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) for(var/A in T) @@ -43,4 +45,4 @@ cleaned_human.clean_blood() cleaned_human.wash_cream() cleaned_human.regenerate_icons() - to_chat(cleaned_human, "[src] cleans your face!") \ No newline at end of file + to_chat(cleaned_human, "[src] cleans your face!") diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm new file mode 100644 index 0000000000..7477742673 --- /dev/null +++ b/code/datums/elements/earhealing.dm @@ -0,0 +1,37 @@ + +/datum/element/earhealing + element_flags = ELEMENT_DETACH + var/list/user_by_item = list() + +/datum/element/earhealing/New() + START_PROCESSING(SSdcs, src) + +/datum/element/earhealing/Attach(datum/target) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged) + +/datum/element/earhealing/Detach(datum/target) + . = ..() + UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + user_by_item -= target + +/datum/element/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot) + if(slot == SLOT_EARS && istype(user)) + user_by_item[source] = user + else + user_by_item -= source + +/datum/element/earhealing/process() + for(var/i in user_by_item) + var/mob/living/carbon/user = user_by_item[i] + if(HAS_TRAIT(user, TRAIT_DEAF)) + continue + var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_SLOT_EARS) + if(!ears) + continue + ears.deaf = max(ears.deaf - 0.25, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged + ears.damage = max(ears.damage - 0.025, 0) + CHECK_TICK diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 6c91cc3a7d..f0fca5db5a 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -1,6 +1,3 @@ -#define EMOTE_VISIBLE 1 -#define EMOTE_AUDIBLE 2 - /datum/emote var/key = "" //What calls the emote var/key_third_person = "" //This will also call the emote diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index b3c57e4838..7be4489e86 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(explosions) var/list/items = list() for(var/I in T) var/atom/A = I - if (!A.prevent_content_explosion()) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't. + if (!(A.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't. items += A.GetAllContents() for(var/O in items) var/atom/A = O diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 32bce89f4d..169b08dc98 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(huds, list( ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(), ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_BLOODSUCKER = new/datum/atom_hud/antag/bloodsucker() )) /datum/atom_hud diff --git a/code/datums/martial.dm b/code/datums/martial.dm index d119759efc..32850c69df 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -8,9 +8,8 @@ var/deflection_chance = 0 //Chance to deflect projectiles var/reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction? var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. - var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not var/help_verb - var/no_guns = FALSE + var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist. var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts /datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -27,14 +26,16 @@ /datum/martial_art/proc/add_to_streak(element,mob/living/carbon/human/D) if(D != current_target) - current_target = D - streak = "" - restraining = 0 + reset_streak(D) streak = streak+element if(length(streak) > max_streak_length) streak = copytext(streak,2) return +/datum/martial_art/proc/reset_streak(mob/living/carbon/human/new_target) + current_target = new_target + streak = "" + /datum/martial_art/proc/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D) var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) @@ -80,7 +81,7 @@ D.forcesay(GLOB.hit_appends) return 1 -/datum/martial_art/proc/teach(mob/living/carbon/human/H,make_temporary=0) +/datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE) if(!istype(H) || !H.mind) return FALSE if(H.mind.martial_art) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 7399528e1c..b98bc4f951 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -1,6 +1,7 @@ /datum/martial_art/boxing name = "Boxing" id = MARTIALART_BOXING + pacifism_check = FALSE //Let's pretend pacifists can boxe the heck out of other people, it only deals stamina damage right now. /datum/martial_art/boxing/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) to_chat(A, "Can't disarm while boxing!") @@ -16,14 +17,15 @@ var/atk_verb = pick("left hook","right hook","straight punch") - var/damage = rand(5, 8) + A.dna.species.punchdamagelow - if(!damage) + var/damage = rand(10, 13) + var/extra_damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh) + if(extra_damage == A.dna.species.punchdamagelow) playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1) D.visible_message("[A] has attempted to [atk_verb] [D]!", \ "[A] has attempted to [atk_verb] [D]!", null, COMBAT_MESSAGE_RANGE) log_combat(A, D, "attempted to hit", atk_verb) - return 0 - + return TRUE + damage += extra_damage var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index c7644997ee..09a493a670 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -9,24 +9,13 @@ id = MARTIALART_CQC help_verb = /mob/living/carbon/human/proc/CQC_help block_chance = 75 - var/just_a_cook = FALSE - var/static/list/areas_under_siege = typecacheof(list(/area/crew_quarters/kitchen, - /area/crew_quarters/cafeteria, - /area/crew_quarters/bar)) + var/old_grab_state = null + var/restraining = FALSE -/datum/martial_art/cqc/under_siege - name = "Close Quarters Cooking" - just_a_cook = TRUE - -/datum/martial_art/cqc/proc/drop_restraining() +/datum/martial_art/cqc/reset_streak(mob/living/carbon/human/new_target) + . = ..() restraining = FALSE -/datum/martial_art/cqc/can_use(mob/living/carbon/human/H) - var/area/A = get_area(H) - if(just_a_cook && !(is_type_in_typecache(A, areas_under_siege))) - return FALSE - return ..() - /datum/martial_art/cqc/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE @@ -75,6 +64,7 @@ D.apply_damage(10, BRUTE) log_combat(A, D, "kicked (CQC)") if(D.IsKnockdown() && !D.stat) + log_combat(A, D, "knocked out (Head kick)(CQC)") D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out!", \ "[A] kicks your head, knocking you out!") playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1) @@ -85,7 +75,8 @@ /datum/martial_art/cqc/proc/Pressure(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE - D.visible_message("[A] forces their arm on [D]'s neck!") + log_combat(A, D, "pressured (CQC)") + D.visible_message("[A] punches [D]'s neck!") D.adjustStaminaLoss(60) playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1) return TRUE @@ -96,18 +87,20 @@ if(!can_use(A)) return FALSE if(!D.stat) + log_combat(A, D, "restrained (CQC)") D.visible_message("[A] locks [D] into a restraining position!", \ "[A] locks you into a restraining position!") D.adjustStaminaLoss(20) D.Stun(100) restraining = TRUE - addtimer(CALLBACK(src, .proc/drop_restraining), 50, TIMER_UNIQUE) + addtimer(VARSET_CALLBACK(src, restraining, FALSE), 50, TIMER_UNIQUE) return TRUE /datum/martial_art/cqc/proc/Consecutive(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) return FALSE if(!D.stat) + log_combat(A, D, "consecutive CQC'd (CQC)") D.visible_message("[A] strikes [D]'s abdomen, neck and back consecutively", \ "[A] strikes your abdomen, neck and back consecutively!") playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) @@ -119,21 +112,20 @@ return TRUE /datum/martial_art/cqc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(!can_use(A)) - return FALSE - add_to_streak("G",D) - if(check_streak(A,D)) - return TRUE - if(A.grab_state >= GRAB_AGGRESSIVE) + if(A.a_intent == INTENT_GRAB && A!=D && can_use(A)) // A!=D prevents grabbing yourself + add_to_streak("G",D) + if(check_streak(A,D)) //if a combo is made no grab upgrade is done + return TRUE + old_grab_state = A.grab_state D.grabbedby(A, 1) - else - A.start_pulling(D, 1) - if(A.pulling) - D.stop_pulling() + if(old_grab_state == GRAB_PASSIVE) + D.drop_all_held_items() + A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent log_combat(A, D, "grabbed", addition="aggressively") - A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab - - return TRUE + D.visible_message("[A] violently grabs [D]!", \ + "[A] violently grabs you!") + return TRUE + return FALSE /datum/martial_art/cqc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!can_use(A)) @@ -188,6 +180,7 @@ playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1) log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]") if(restraining && A.pulling == D) + log_combat(A, D, "knocked out (Chokehold)(CQC)") D.visible_message("[A] puts [D] into a chokehold!", \ "[A] puts you into a chokehold!") D.SetSleeping(400) @@ -206,9 +199,19 @@ to_chat(usr, "You try to remember some of the basics of CQC.") to_chat(usr, "Slam: Grab Harm. Slam opponent into the ground, knocking them down.") - to_chat(usr, "CQC Kick: Disarm Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.") - to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a choke hold.") + to_chat(usr, "CQC Kick: Harm Harm. Knocks opponent away. Knocks out stunned or knocked down opponents.") + to_chat(usr, "Restrain: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a chokehold.") to_chat(usr, "Pressure: Disarm Grab. Decent stamina damage.") to_chat(usr, "Consecutive CQC: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.") to_chat(usr, "In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.") + +///Subtype of CQC. Only used for the chef. +/datum/martial_art/cqc/under_siege + name = "Close Quarters Cooking" + +///Prevents use if the cook is not in the kitchen. +/datum/martial_art/cqc/under_siege/can_use(mob/living/carbon/human/H) //this is used to make chef CQC only work in kitchen + if(!istype(get_area(H), /area/crew_quarters/kitchen)) + return FALSE + return ..() diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 6379d481ca..4e8dacaef9 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -19,6 +19,9 @@ owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.") H.mind.martial_art.streak = "" else + if(HAS_TRAIT(H, TRAIT_PACIFISM)) + to_chat(H, "You don't want to harm other people!") + return owner.visible_message("[owner] assumes the Neck Chop stance!", "Your next attack will be a Neck Chop.") H.mind.martial_art.streak = "neck_chop" @@ -36,6 +39,9 @@ owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.") H.mind.martial_art.streak = "" else + if(HAS_TRAIT(H, TRAIT_PACIFISM)) + to_chat(H, "You don't want to harm other people!") + return owner.visible_message("[owner] assumes the Leg Sweep stance!", "Your next attack will be a Leg Sweep.") H.mind.martial_art.streak = "leg_sweep" @@ -53,6 +59,9 @@ owner.visible_message("[owner] assumes a neutral stance.", "Your next attack is cleared.") H.mind.martial_art.streak = "" else + if(HAS_TRAIT(H, TRAIT_PACIFISM)) + to_chat(H, "You don't want to harm other people!") + return owner.visible_message("[owner] assumes the Lung Punch stance!", "Your next attack will be a Lung Punch.") H.mind.martial_art.streak = "quick_choke"//internal name for lung punch @@ -145,8 +154,6 @@ return 1 /datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - if(check_streak(A,D)) - return 1 var/obj/item/I = null if(prob(60)) I = D.get_active_held_item() diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index 34301516dc..45d73353f9 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -1,6 +1,7 @@ /datum/martial_art/psychotic_brawling name = "Psychotic Brawling" id = MARTIALART_PSYCHOBRAWL + pacifism_check = FALSE //Quite uncontrollable and unpredictable, people will still end up harming others with it. /datum/martial_art/psychotic_brawling/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return psycho_attack(A,D) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 801e8c8c7a..bb652208ee 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -9,35 +9,36 @@ id = MARTIALART_SLEEPINGCARP deflection_chance = 100 reroute_deflection = TRUE - no_guns = TRUE allow_temp_override = FALSE help_verb = /mob/living/carbon/human/proc/sleeping_carp_help + var/old_grab_state = null /datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) if(findtext(streak,WRIST_WRENCH_COMBO)) streak = "" wristWrench(A,D) - return 1 + return TRUE if(findtext(streak,BACK_KICK_COMBO)) streak = "" backKick(A,D) - return 1 + return TRUE if(findtext(streak,STOMACH_KNEE_COMBO)) streak = "" kneeStomach(A,D) - return 1 + return TRUE if(findtext(streak,HEAD_KICK_COMBO)) streak = "" headKick(A,D) - return 1 + return TRUE if(findtext(streak,ELBOW_DROP_COMBO)) streak = "" elbowDrop(A,D) - return 1 - return 0 + return TRUE + return FALSE /datum/martial_art/the_sleeping_carp/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!D.stat && !D.IsStun() && !D.IsKnockdown()) + log_combat(A, D, "wrist wrenched (Sleeping Carp)") A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \ "[A] grabs your wrist and violently wrenches it to the side!") @@ -46,24 +47,29 @@ D.dropItemToGround(D.get_active_held_item()) D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun() - return 1 - log_combat(A, D, "wrist wrenched (Sleeping Carp)") + return TRUE return basic_hit(A,D) /datum/martial_art/the_sleeping_carp/proc/backKick(mob/living/carbon/human/A, mob/living/carbon/human/D) - if(A.dir == D.dir && !D.stat && !D.IsKnockdown()) - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - D.visible_message("[A] kicks [D] in the back!", \ - "[A] kicks you in the back, making you stumble and fall!") - step_to(D,get_step(D,D.dir),1) - D.Knockdown(80) - playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) - return 1 - log_combat(A, D, "back-kicked (Sleeping Carp)") + if(!D.stat && !D.IsKnockdown()) + if(A.dir == D.dir) + log_combat(A, D, "back-kicked (Sleeping Carp)") + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + D.visible_message("[A] kicks [D] in the back!", \ + "[A] kicks you in the back, making you stumble and fall!") + step_to(D,get_step(D,D.dir),1) + D.Knockdown(80) + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + return TRUE + else + log_combat(A, D, "missed a back-kick (Sleeping Carp) on") + D.visible_message("[A] tries to kick [D] in the back, but misses!", \ + "[A] tries to kick you in the back, but misses!") return basic_hit(A,D) /datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!D.stat && !D.IsKnockdown()) + log_combat(A, D, "stomach kneed (Sleeping Carp)") A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] knees [D] in the stomach!", \ "[A] winds you with a knee in the stomach!") @@ -71,12 +77,12 @@ D.losebreath += 3 D.Knockdown(40)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun() playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) - return 1 - log_combat(A, D, "stomach kneed (Sleeping Carp)") + return TRUE return basic_hit(A,D) /datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D) if(!D.stat && !D.IsKnockdown()) + log_combat(A, D, "head kicked (Sleeping Carp)") A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message("[A] kicks [D] in the head!", \ "[A] kicks you in the jaw!") @@ -84,12 +90,12 @@ D.drop_all_held_items() playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun() - return 1 - log_combat(A, D, "head kicked (Sleeping Carp)") + return TRUE return basic_hit(A,D) /datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D) if(D.IsKnockdown() || D.resting || D.stat) + log_combat(A, D, "elbow dropped (Sleeping Carp)") A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) D.visible_message("[A] elbow drops [D]!", \ "[A] piledrives you with their elbow!") @@ -97,35 +103,29 @@ D.death() //FINISH HIM! D.apply_damage(50, BRUTE, BODY_ZONE_CHEST) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1) - return 1 - log_combat(A, D, "elbow dropped (Sleeping Carp)") + return TRUE return basic_hit(A,D) /datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) - add_to_streak("G",D) - if(check_streak(A,D)) - return 1 - if(A.grab_state >= GRAB_AGGRESSIVE) + if(A.a_intent == INTENT_GRAB && A!=D) // A!=D prevents grabbing yourself + add_to_streak("G",D) + if(check_streak(A,D)) //if a combo is made no grab upgrade is done + return TRUE + old_grab_state = A.grab_state D.grabbedby(A, 1) - else - A.start_pulling(D, 1) - if(A.pulling) + if(old_grab_state == GRAB_PASSIVE) D.drop_all_held_items() - D.stop_pulling() - if(A.a_intent == INTENT_GRAB) - log_combat(A, D, "grabbed", addition="aggressively") - D.visible_message("[A] violently grabs [D]!", \ - "[A] violently grabs you!") - A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab - else - log_combat(A, D, "grabbed", addition="passively") - A.grab_state = GRAB_PASSIVE - return 1 + A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent + log_combat(A, D, "grabbed", addition="aggressively") + D.visible_message("[A] violently grabs [D]!", \ + "[A] violently grabs you!") + return TRUE + return FALSE /datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("H",D) if(check_streak(A,D)) - return 1 + return TRUE A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("punches", "kicks", "chops", "hits", "slams") D.visible_message("[A] [atk_verb] [D]!", \ @@ -136,15 +136,25 @@ D.visible_message("[D] stumbles and falls!", "The blow sends you to the ground!") D.Knockdown(80) log_combat(A, D, "[atk_verb] (Sleeping Carp)") - return 1 + return TRUE /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("D",D) if(check_streak(A,D)) - return 1 + return TRUE return ..() +/datum/martial_art/the_sleeping_carp/teach(mob/living/carbon/human/H, make_temporary = FALSE) + . = ..() + if(!.) + return + ADD_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT) + +/datum/martial_art/the_sleeping_carp/on_remove(mob/living/carbon/human/H) + . = ..() + REMOVE_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT) + /mob/living/carbon/human/proc/sleeping_carp_help() set name = "Recall Teachings" set desc = "Remember the martial techniques of the Sleeping Carp clan." @@ -231,4 +241,4 @@ /obj/item/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(wielded) return ..() - return 0 + return FALSE diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 81ec0bf977..c967779d03 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -49,6 +49,9 @@ if(owner.incapacitated()) to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.") return + if(HAS_TRAIT(owner, TRAIT_PACIFISM)) + to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!") + return owner.visible_message("[owner] prepares to BODY SLAM!", "Your next attack will be a BODY SLAM.") var/mob/living/carbon/human/H = owner H.mind.martial_art.streak = "slam" @@ -61,6 +64,9 @@ if(owner.incapacitated()) to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.") return + if(HAS_TRAIT(owner, TRAIT_PACIFISM)) + to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!") + return owner.visible_message("[owner] prepares to THROW!", "Your next attack will be a THROW.") var/mob/living/carbon/human/H = owner H.mind.martial_art.streak = "throw" @@ -73,6 +79,9 @@ if(owner.incapacitated()) to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.") return + if(HAS_TRAIT(owner, TRAIT_PACIFISM)) + to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!") + return owner.visible_message("[owner] prepares to KICK!", "Your next attack will be a KICK.") var/mob/living/carbon/human/H = owner H.mind.martial_art.streak = "kick" @@ -85,6 +94,9 @@ if(owner.incapacitated()) to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.") return + if(HAS_TRAIT(owner, TRAIT_PACIFISM)) + to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!") + return owner.visible_message("[owner] prepares to STRIKE!", "Your next attack will be a STRIKE.") var/mob/living/carbon/human/H = owner H.mind.martial_art.streak = "strike" @@ -97,6 +109,9 @@ if(owner.incapacitated()) to_chat(owner, "You can't WRESTLE while you're OUT FOR THE COUNT.") return + if(HAS_TRAIT(owner, TRAIT_PACIFISM)) + to_chat(owner, "You are too HIPPIE to WRESTLE other living beings!") + return owner.visible_message("[owner] prepares to LEG DROP!", "Your next attack will be a LEG DROP.") var/mob/living/carbon/human/H = owner H.mind.martial_art.streak = "drop" @@ -433,8 +448,8 @@ /datum/martial_art/wrestling/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(check_streak(A,D)) return 1 - if(A.pulling == D) - return 1 + if(A.pulling == D || A == D) // don't stun grab yoursel + return FALSE A.start_pulling(D) D.visible_message("[A] gets [D] in a cinch!", \ "[A] gets [D] in a cinch!") diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5cf03e2684..d1b4e51a7d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -88,10 +88,16 @@ /datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) var/old_character = current + var/signals = SEND_SIGNAL(new_character, COMSIG_MOB_PRE_PLAYER_CHANGE, new_character, old_character) | SEND_SIGNAL(src, COMSIG_PRE_MIND_TRANSFER, new_character, old_character) + if(signals & COMPONENT_STOP_MIND_TRANSFER) + return if(current) // remove ourself from our old body's mind variable current.mind = null SStgui.on_transfer(current, new_character) - + if(iscarbon(current)) + var/mob/living/carbon/C = current + if(C.combatmode) + C.toggle_combat_mode(TRUE, TRUE) if(!language_holder) var/datum/language_holder/mob_holder = new_character.get_language_holder(shadow = FALSE) language_holder = mob_holder.copy(src) @@ -122,7 +128,6 @@ transfer_martial_arts(new_character) if(active || force_key_move) new_character.key = key //now transfer the key to link the client to our new body - SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character) //CIT CHANGE - makes arousal update when transfering bodies if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs. @@ -131,6 +136,8 @@ L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting... L.update_arousal_hud() //Removes the old icon + SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character) + /datum/mind/proc/store_memory(new_text) if((length(memory) + length(new_text)) <= MAX_MESSAGE_LEN) memory += "[new_text]
    " diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm index 469bf80979..1a681a8a4d 100644 --- a/code/datums/mood_events/drug_events.dm +++ b/code/datums/mood_events/drug_events.dm @@ -53,3 +53,63 @@ mood_change = -20 timeout = 300 //special_screen_obj = "mood_happiness_bad" Originally in tg + +/datum/mood_event/eigenstate + mood_change = -3 + description = "Where the hell am I? Is this an alternative dimension ?\n" + +/datum/mood_event/enthrall + mood_change = 5 + +/datum/mood_event/enthrall/add_effects(message) + description = "[message]\n" + +/datum/mood_event/enthrallpraise + mood_change = 10 + timeout = 1 MINUTES + +/datum/mood_event/enthrallpraise/add_effects(message) + description = "[message]\n" + +/datum/mood_event/enthrallscold + mood_change = -10 + timeout = 1 MINUTES + +/datum/mood_event/enthrallscold/add_effects(message) + description = "[message]\n"//aaa I'm not kinky enough for this + +/datum/mood_event/enthrallmissing1 + mood_change = -5 + +/datum/mood_event/enthrallmissing1/add_effects(message) + description = "[message]\n" + +/datum/mood_event/enthrallmissing2 + mood_change = -10 + +/datum/mood_event/enthrallmissing2/add_effects(message) + description = "[message]\n" + +/datum/mood_event/enthrallmissing3 + mood_change = -15 + +/datum/mood_event/enthrallmissing3/add_effects(message) + description = "[message]\n" + +/datum/mood_event/enthrallmissing4 + mood_change = -25 + +/datum/mood_event/enthrallmissing4/add_effects(message) + description = "[message]\n" + +/datum/mood_event/InLove + mood_change = 10 + +/datum/mood_event/InLove/add_effects(message) + description = "[message]\n" + +/datum/mood_event/MissingLove + mood_change = -10 + +/datum/mood_event/MissingLove/add_effects(message) + description = "[message]\n" diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index f4ca3a8ebd..a6e4c8ed4f 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -176,3 +176,70 @@ /datum/mood_event/revenant_blight/add_effects() description = "Just give up, [pick("no one will miss you", "there is nothing you can do to help", "even a clown would be more useful than you", "does it even matter in the end?")]...\n" + +/datum/mood_event/plushjack + description = "I have butchered a plush recently.\n" + mood_change = -1 + timeout = 2 MINUTES + +/datum/mood_event/plush_nostuffing + description = "A plush I tried to pet had no stuffing...\n" + mood_change = -1 + timeout = 2 MINUTES + +//Cursed stuff below + +/datum/mood_event/emptypred + description = "I had to let someone out.\n" + mood_change = -2 + timeout = 1 MINUTES + +/datum/mood_event/emptyprey + description = "It feels quite cold out here.\n" + mood_change = -2 + timeout = 1 MINUTES + +/datum/mood_event/vampcandle + description = "Something is making your mind feel... loose...\n" + mood_change = -10 + timeout = 1 MINUTES + +/datum/mood_event/drankblood_bad + description = "I drank the blood of a lesser creature. Disgusting.\n" + mood_change = -4 + timeout = 900 + +/datum/mood_event/drankblood_dead + description = "I drank dead blood. I am better than this.\n" + mood_change = -7 + timeout = 900 + +/datum/mood_event/drankblood_synth + description = "I drank synthetic blood. What is wrong with me?\n" + mood_change = -7 + timeout = 900 + +/datum/mood_event/drankkilled + description = "I drank from my victim until they died. I feel...less human.\n" + mood_change = -12 + timeout = 6000 + +/datum/mood_event/madevamp + description = "A soul has been cursed to undeath by my own hand.\n" + mood_change = -10 + timeout = 10000 + +/datum/mood_event/vampatefood + description = "Mortal nourishment no longer sustains me. I feel unwell.\n" + mood_change = -6 + timeout = 1000 + +/datum/mood_event/daylight_1 + description = "I slept poorly in a makeshift coffin during the day.\n" + mood_change = -3 + timeout = 1000 + +/datum/mood_event/daylight_2 + description = "I have been scorched by the unforgiving rays of the sun.\n" + mood_change = -6 + timeout = 1200 diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 678802aed9..19be10e668 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -113,3 +113,52 @@ /datum/mood_event/happy_empath/add_effects(var/mob/happytarget) description = "[happytarget.name]'s happiness is infectious!\n" + +/datum/mood_event/headpat + description = "Headpats are nice.\n" + mood_change = 2 + timeout = 2 MINUTES + +/datum/mood_event/hugbox + description = "I hugged a box of hugs recently.\n" + mood_change = 1 + timeout = 2 MINUTES + +/datum/mood_event/plushpet + description = "I pet a plush recently.\n" + mood_change = 1 + timeout = 3000 + +/datum/mood_event/plushplay + description = "I've played with plushes recently.\n" + mood_change = 3 + timeout = 3000 + +/datum/mood_event/drankblood + description = "I have fed greedly from that which nourishes me.\n" + mood_change = 10 + timeout = 900 + +/datum/mood_event/coffinsleep + description = "I slept in a coffin during the day. I feel whole again.\n" + mood_change = 8 + timeout = 1200 +//Cursed stuff below. + +/datum/mood_event/orgasm + description = "I came!\n" //funny meme haha + mood_change = 3 + timeout = 100 SECONDS + +/datum/mood_event/fedpred + description = "I've devoured someone!\n" + mood_change = 3 + +/datum/mood_event/fedprey + description = "It feels quite cozy in here.\n" + mood_change = 3 + +/datum/mood_event/hope_lavaland + description = "What a peculiar emblem. It makes me feel hopeful for my future.\n" + mood_change = 5 + diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 85cecca489..c536196e95 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -5,7 +5,7 @@ get_chance = 15 lowest_value = 256 * 12 text_gain_indication = "Your muscles hurt!" - species_allowed = list("human") //no skeleton/lizard hulk + species_allowed = list("fly") //no skeleton/lizard hulk health_req = 25 /datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner) @@ -13,6 +13,7 @@ return ADD_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK) ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK) + ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "hulk", /datum/mood_event/hulk) RegisterSignal(owner, COMSIG_MOB_SAY, .proc/handle_speech) @@ -31,6 +32,7 @@ return REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, TRAIT_HULK) REMOVE_TRAIT(owner, TRAIT_PUSHIMMUNE, TRAIT_HULK) + ADD_TRAIT(owner, TRAIT_CHUNKYFINGERS, TRAIT_HULK) owner.update_body_parts() SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "hulk") UnregisterSignal(owner, COMSIG_MOB_SAY) diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index f02b7f185f..82138e6e34 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -95,6 +95,7 @@ message = replacetext(message," ugly "," beautiful ") message = replacetext(message," douchbag "," nice guy ") message = replacetext(message," whore "," lady ") + message = replacetext(message," gamer "," intellectual ") message = replacetext(message," nerd "," smarty pants ") message = replacetext(message," moron "," fun person ") message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ") diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 8386b59d97..da379b9851 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -28,16 +28,16 @@ var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters var/list/chameleon_extras //extra types for chameleon outfit changes, mostly guns -/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) +/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) //to be overridden for customization depending on client prefs,species etc return -/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) +/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) //to be overridden for toggling internals, id binding, access etc return -/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE) - pre_equip(H, visualsOnly) +/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) + pre_equip(H, visualsOnly, preference_source) //Start with uniform,suit,backpack for additional slots if(uniform) @@ -103,7 +103,7 @@ var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit HS.ToggleHelmet() - post_equip(H, visualsOnly) + post_equip(H, visualsOnly, preference_source) if(!visualsOnly) apply_fingerprints(H) diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 4f18e6fd62..7ea2d2615d 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -229,4 +229,13 @@ id = "puzzle" description = "Mystery to be solved." suffix = "lavaland_surface_puzzle.dmm" - cost = 5 \ No newline at end of file + cost = 5 + +/datum/map_template/ruin/lavaland/elite_tumor + name = "Pulsating Tumor" + id = "tumor" + description = "A strange tumor which houses a powerful beast..." + suffix = "lavaland_surface_elite_tumor.dmm" + cost = 5 + always_place = TRUE + allow_duplicates = TRUE diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index fb636f6911..f5f012e7f9 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -80,34 +80,55 @@ desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." icon_state = "asleep" -//TASER -/datum/status_effect/electrode - id = "tased" +/datum/status_effect/no_combat_mode/ + id = "no_combat_mode" blocks_combatmode = TRUE - status_type = STATUS_EFFECT_REPLACE alert_type = null + status_type = STATUS_EFFECT_REPLACE -/datum/status_effect/electrode/on_creation(mob/living/new_owner, set_duration) +/datum/status_effect/no_combat_mode/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) duration = set_duration . = ..() + if(iscarbon(owner)) + var/mob/living/carbon/C = owner + if(C.combatmode) + C.toggle_combat_mode(TRUE) + +/datum/status_effect/no_combat_mode/mesmerize + id = "Mesmerize" + alert_type = /obj/screen/alert/status_effect/mesmerized + +/obj/screen/alert/status_effect/mesmerized + name = "Mesmerized" + desc = "You cant tear your sight from who is in front of you...Their gaze is simply too enthralling.." + icon = 'icons/mob/actions/bloodsucker.dmi' + icon_state = "power_mez" + +/datum/status_effect/no_combat_mode/electrode + id = "tased" + +/datum/status_effect/no_combat_mode/electrode/on_creation(mob/living/new_owner, set_duration) + if(isnum(set_duration)) //TODO, figure out how to grab from subtype + duration = set_duration + . = ..() if(iscarbon(owner)) var/mob/living/carbon/C = owner if(C.combatmode) C.toggle_combat_mode(TRUE) C.add_movespeed_modifier(MOVESPEED_ID_TASED_STATUS, TRUE, override = TRUE, multiplicative_slowdown = 8) -/datum/status_effect/electrode/on_remove() +/datum/status_effect/no_combat_mode/electrode/on_remove() if(iscarbon(owner)) var/mob/living/carbon/C = owner C.remove_movespeed_modifier(MOVESPEED_ID_TASED_STATUS) . = ..() -/datum/status_effect/electrode/tick() +/datum/status_effect/no_combat_mode/electrode/tick() if(owner) owner.adjustStaminaLoss(5) //if you really want to try to stamcrit someone with a taser alone, you can, but it'll take time and good timing. -/datum/status_effect/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y +/datum/status_effect/no_combat_mode/electrode/nextmove_modifier() //why is this a proc. its no big deal since this doesnt get called often at all but literally w h y return 2 //OTHER DEBUFFS @@ -388,6 +409,19 @@ else new /obj/effect/temp_visual/bleed(get_turf(owner)) +/datum/status_effect/neck_slice + id = "neck_slice" + status_type = STATUS_EFFECT_UNIQUE + alert_type = null + duration = -1 + +/datum/status_effect/neck_slice/tick() + var/mob/living/carbon/human/H = owner + if(H.stat == DEAD || H.bleed_rate <= 8) + H.remove_status_effect(/datum/status_effect/neck_slice) + if(prob(10)) + H.emote(pick("gasp", "gag", "choke")) + /mob/living/proc/apply_necropolis_curse(set_curse, duration = 10 MINUTES) var/datum/status_effect/necropolis_curse/C = has_status_effect(STATUS_EFFECT_NECROPOLIS_CURSE) if(!set_curse) @@ -481,7 +515,7 @@ deltimer(timerid) -//Kindle: Used by servants of Ratvar. 10-second knockdown, reduced by 1 second per 5 damage taken while the effect is active. +//Kindle: Used by servants of Ratvar. 10-second knockdown, reduced by 1 second per 5 damage taken while the effect is active. Does not take into account Oxy-damage /datum/status_effect/kindle id = "kindle" status_type = STATUS_EFFECT_UNIQUE @@ -489,6 +523,7 @@ duration = 100 alert_type = /obj/screen/alert/status_effect/kindle var/old_health + var/old_oxyloss /datum/status_effect/kindle/tick() owner.Knockdown(15, TRUE, FALSE, 15) @@ -498,7 +533,9 @@ C.stuttering = max(5, C.stuttering) if(!old_health) old_health = owner.health - var/health_difference = old_health - owner.health + if(!old_oxyloss) + old_oxyloss = owner.getOxyLoss() + var/health_difference = old_health - owner.health - CLAMP(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss()) if(!health_difference) return owner.visible_message("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed!", \ @@ -506,6 +543,7 @@ health_difference *= 2 //so 10 health difference translates to 20 deciseconds of stun reduction duration -= health_difference old_health = owner.health + old_oxyloss = owner.getOxyLoss() /datum/status_effect/kindle/on_remove() owner.visible_message("The light in [owner]'s eyes fades!", \ @@ -541,6 +579,38 @@ icon_state = "ichorial_stain" alerttooltipstyle = "clockcult" + +//GOLEM GANG + +/datum/status_effect/strandling //get it, strand as in durathread strand + strangling = strandling hahahahahahahahahahhahahaha i want to die + id = "strandling" + status_type = STATUS_EFFECT_UNIQUE + alert_type = /obj/screen/alert/status_effect/strandling + +/datum/status_effect/strandling/on_apply() + ADD_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron") + return ..() + +/datum/status_effect/strandling/on_remove() + REMOVE_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron") + return ..() + +/obj/screen/alert/status_effect/strandling + name = "Choking strand" + desc = "A magical strand of Durathread is wrapped around your neck, preventing you from breathing! Click this icon to remove the strand." + icon_state = "his_grace" + alerttooltipstyle = "hisgrace" + +/obj/screen/alert/status_effect/strandling/Click(location, control, params) + . = ..() + to_chat(mob_viewer, "You attempt to remove the durathread strand from around your neck.") + if(do_after(mob_viewer, 35, null, mob_viewer)) + if(isliving(mob_viewer)) + var/mob/living/L = mob_viewer + to_chat(mob_viewer, "You succesfuly remove the durathread strand.") + L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND) + + datum/status_effect/pacify id = "pacify" status_type = STATUS_EFFECT_REPLACE @@ -567,8 +637,7 @@ datum/status_effect/pacify tick_interval = 10 examine_text = "SUBJECTPRONOUN seems slow and unfocused." var/stun = TRUE - var/triggered = FALSE - alert_type = null + alert_type = /obj/screen/alert/status_effect/trance /obj/screen/alert/status_effect/trance name = "Trance" @@ -576,17 +645,6 @@ datum/status_effect/pacify icon_state = "high" /datum/status_effect/trance/tick() - if(HAS_TRAIT(owner, "hypnotherapy")) - if(triggered == TRUE) - UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) - RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize) - ADD_TRAIT(owner, TRAIT_MUTE, "trance") - if(!owner.has_quirk(/datum/quirk/monochromatic)) - owner.add_client_colour(/datum/client_colour/monochrome) - to_chat(owner, "[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]") - triggered = FALSE - else - return if(stun) owner.Stun(60, TRUE, TRUE) owner.dizziness = 20 @@ -594,47 +652,88 @@ datum/status_effect/pacify /datum/status_effect/trance/on_apply() if(!iscarbon(owner)) return FALSE - if(HAS_TRAIT(owner, "hypnotherapy")) - RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/listen) - return TRUE - alert_type = /obj/screen/alert/status_effect/trance RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/hypnotize) ADD_TRAIT(owner, TRAIT_MUTE, "trance") - if(!owner.has_quirk(/datum/quirk/monochromatic)) - owner.add_client_colour(/datum/client_colour/monochrome) + owner.add_client_colour(/datum/client_colour/monochrome/trance) owner.visible_message("[stun ? "[owner] stands still as [owner.p_their()] eyes seem to focus on a distant point." : ""]", \ "[pick("You feel your thoughts slow down...", "You suddenly feel extremely dizzy...", "You feel like you're in the middle of a dream...","You feel incredibly relaxed...")]") return TRUE -/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE, source_quirk = FALSE)//hypnoquirk makes no visible message, prevents self antag messages, and places phrase below objectives. +/datum/status_effect/trance/on_creation(mob/living/new_owner, _duration, _stun = TRUE) duration = _duration stun = _stun - if(source_quirk == FALSE && HAS_TRAIT(owner, "hypnotherapy")) - REMOVE_TRAIT(owner, "hypnotherapy", ROUNDSTART_TRAIT) return ..() /datum/status_effect/trance/on_remove() UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) REMOVE_TRAIT(owner, TRAIT_MUTE, "trance") owner.dizziness = 0 - if(!owner.has_quirk(/datum/quirk/monochromatic)) - owner.remove_client_colour(/datum/client_colour/monochrome) + owner.remove_client_colour(/datum/client_colour/monochrome/trance) to_chat(owner, "You snap out of your trance!") -/datum/status_effect/trance/proc/listen(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - to_chat(owner, "[speaker] accidentally sets off your implanted trigger, sending you into a hypnotic daze!") - triggered = TRUE - -/datum/status_effect/trance/proc/hypnotize(datum/source, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) +/datum/status_effect/trance/proc/hypnotize(datum/source, list/hearing_args) if(!owner.can_hear()) return - if(speaker == owner) + if(hearing_args[HEARING_SPEAKER] == owner) return var/mob/living/carbon/C = owner C.cure_trauma_type(/datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY) //clear previous hypnosis - if(HAS_TRAIT(C, "hypnotherapy")) - addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message, TRUE), 10) - else - addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, raw_message), 10) + addtimer(CALLBACK(C, /mob/living/carbon.proc/gain_trauma, /datum/brain_trauma/hypnosis, TRAUMA_RESILIENCE_SURGERY, hearing_args[HEARING_RAW_MESSAGE]), 10) addtimer(CALLBACK(C, /mob/living.proc/Stun, 60, TRUE, TRUE), 15) //Take some time to think about it qdel(src) + +/datum/status_effect/spasms + id = "spasms" + status_type = STATUS_EFFECT_MULTIPLE + alert_type = null + +/datum/status_effect/spasms/tick() + if(prob(15)) + switch(rand(1,5)) + if(1) + if((!owner.lying && !owner.buckled) && isturf(owner.loc)) + to_chat(owner, "Your leg spasms!") + step(owner, pick(GLOB.cardinals)) + if(2) + if(owner.incapacitated()) + return + var/obj/item/I = owner.get_active_held_item() + if(I) + to_chat(owner, "Your fingers spasm!") + owner.log_message("used [I] due to a Muscle Spasm", LOG_ATTACK) + I.attack_self(owner) + if(3) + var/prev_intent = owner.a_intent + owner.a_intent = INTENT_HARM + + var/range = 1 + if(istype(owner.get_active_held_item(), /obj/item/gun)) //get targets to shoot at + range = 7 + + var/list/mob/living/targets = list() + for(var/mob/M in oview(owner, range)) + if(isliving(M)) + targets += M + if(LAZYLEN(targets)) + to_chat(owner, "Your arm spasms!") + owner.log_message(" attacked someone due to a Muscle Spasm", LOG_ATTACK) //the following attack will log itself + owner.ClickOn(pick(targets)) + owner.a_intent = prev_intent + if(4) + var/prev_intent = owner.a_intent + owner.a_intent = INTENT_HARM + to_chat(owner, "Your arm spasms!") + owner.log_message("attacked [owner.p_them()]self to a Muscle Spasm", LOG_ATTACK) + owner.ClickOn(owner) + owner.a_intent = prev_intent + if(5) + if(owner.incapacitated()) + return + var/obj/item/I = owner.get_active_held_item() + var/list/turf/targets = list() + for(var/turf/T in oview(owner, 3)) + targets += T + if(LAZYLEN(targets) && I) + to_chat(owner, "Your arm spasms!") + owner.log_message("threw [I] due to a Muscle Spasm", LOG_ATTACK) + owner.throw_item(pick(targets)) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 655863e0e0..cb2b4174b5 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -69,3 +69,17 @@ /datum/status_effect/in_love/tick() if(date) new /obj/effect/temp_visual/love_heart/invisible(get_turf(date.loc), owner) + +/datum/status_effect/throat_soothed + id = "throat_soothed" + duration = 60 SECONDS + status_type = STATUS_EFFECT_REFRESH + alert_type = null + +/datum/status_effect/throat_soothed/on_apply() + . = ..() + ADD_TRAIT(owner, TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]") + +/datum/status_effect/throat_soothed/on_remove() + . = ..() + REMOVE_TRAIT(owner, TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]") \ No newline at end of file diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index bc1cfba112..0d84aab763 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -64,6 +64,12 @@ owner = null qdel(src) +/datum/status_effect/proc/refresh() + var/original_duration = initial(duration) + if(original_duration == -1) + return + duration = world.time + original_duration + //clickdelay/nextmove modifiers! /datum/status_effect/proc/nextmove_modifier() return 1 @@ -92,6 +98,9 @@ if(S.id == initial(S1.id) && S.status_type) if(S.status_type == STATUS_EFFECT_REPLACE) S.be_replaced() + else if(S.status_type == STATUS_EFFECT_REFRESH) + S.refresh() + return else return var/list/arguments = args.Copy() diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 80a5f24250..b74f24c469 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -8,12 +8,14 @@ mob_trait = TRAIT_ALCOHOL_TOLERANCE gain_text = "You feel like you could drink a whole keg!" lose_text = "You don't feel as resistant to alcohol anymore. Somehow." + medical_record_text = "Patient demonstrates a high tolerance for alcohol." /datum/quirk/apathetic name = "Apathetic" desc = "You just don't care as much as other people. That's nice to have in a place like this, I guess." value = 1 mood_quirk = TRUE + medical_record_text = "Patient was administered the Apathy Evaluation Scale but did not bother to complete it." /datum/quirk/apathetic/add() var/datum/component/mood/mood = quirk_holder.GetComponent(/datum/component/mood) @@ -42,6 +44,7 @@ mob_trait = TRAIT_EMPATH gain_text = "You feel in tune with those around you." lose_text = "You feel isolated from others." + medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed." /datum/quirk/freerunning name = "Freerunning" @@ -50,6 +53,7 @@ mob_trait = TRAIT_FREERUNNING gain_text = "You feel lithe on your feet!" lose_text = "You feel clumsy again." + medical_record_text = "Patient scored highly on cardio tests." /datum/quirk/friendly name = "Friendly" @@ -59,6 +63,7 @@ gain_text = "You want to hug someone." lose_text = "You no longer feel compelled to hug others." mood_quirk = TRUE + medical_record_text = "Patient demonstrates low-inhibitions for physical contact and well-developed arms. Requesting another doctor take over this case." /datum/quirk/jolly name = "Jolly" @@ -66,6 +71,11 @@ value = 1 mob_trait = TRAIT_JOLLY mood_quirk = TRUE + medical_record_text = "Patient demonstrates constant euthymia irregular for environment. It's a bit much, to be honest." + +/datum/quirk/jolly/on_process() + if(prob(0.05)) + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "jolly", /datum/mood_event/jolly) /datum/quirk/light_step name = "Light Step" @@ -74,6 +84,7 @@ mob_trait = TRAIT_LIGHT_STEP gain_text = "You walk with a little more litheness." lose_text = "You start tromping around like a barbarian." + medical_record_text = "Patient's dexterity belies a strong capacity for stealth." /datum/quirk/quick_step name = "Quick Step" @@ -82,6 +93,7 @@ mob_trait = TRAIT_SPEEDY_STEP gain_text = "You feel determined. No time to lose." lose_text = "You feel less determined. What's the rush, man?" + medical_record_text = "Patient scored highly on racewalking tests." /datum/quirk/musician name = "Musician" @@ -90,6 +102,7 @@ mob_trait = TRAIT_MUSICIAN gain_text = "You know everything about musical instruments." lose_text = "You forget how musical instruments work." + medical_record_text = "Patient brain scans show a highly-developed auditory pathway." /datum/quirk/musician/on_spawn() var/mob/living/carbon/human/H = quirk_holder @@ -101,21 +114,6 @@ H.equip_to_slot(musicaltuner, SLOT_IN_BACKPACK) H.regenerate_icons() -/datum/quirk/night_vision - name = "Night Vision" - desc = "You can see slightly more clearly in full darkness than most people." - value = 1 - mob_trait = TRAIT_NIGHT_VISION - gain_text = "The shadows seem a little less dark." - lose_text = "Everything seems a little darker." - -/datum/quirk/night_vision/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/organ/eyes/eyes = H.getorgan(/obj/item/organ/eyes) - if(!eyes || eyes.lighting_alpha) - return - eyes.Insert(H) //refresh their eyesight and vision - /datum/quirk/photographer name = "Photographer" desc = "You know how to handle a camera, shortening the delay between each shot." @@ -123,6 +121,7 @@ mob_trait = TRAIT_PHOTOGRAPHER gain_text = "You know everything about photography." lose_text = "You forget how photo cameras work." + medical_record_text = "Patient mentions photography as a stress-relieving hobby." /datum/quirk/photographer/on_spawn() var/mob/living/carbon/human/H = quirk_holder @@ -136,12 +135,14 @@ desc = "You know your body well, and can accurately assess the extent of your wounds." value = 2 mob_trait = TRAIT_SELF_AWARE + medical_record_text = "Patient demonstrates an uncanny knack for self-diagnosis." /datum/quirk/skittish name = "Skittish" desc = "You can conceal yourself in danger. Ctrl-shift-click a closed locker to jump into it, as long as you have access." value = 2 mob_trait = TRAIT_SKITTISH + medical_record_text = "Patient demonstrates a high aversion to danger and has described hiding in containers out of fear." /datum/quirk/spiritual name = "Spiritual" @@ -150,6 +151,7 @@ mob_trait = TRAIT_SPIRITUAL gain_text = "You feel a little more faithful to the gods today." lose_text = "You feel less faithful in the gods." + medical_record_text = "Patient reports a belief in a higher power." /datum/quirk/tagger name = "Tagger" @@ -158,6 +160,7 @@ mob_trait = TRAIT_TAGGER gain_text = "You know how to tag walls efficiently." lose_text = "You forget how to tag walls properly." + medical_record_text = "Patient was recently seen for possible paint huffing incident." /datum/quirk/tagger/on_spawn() var/mob/living/carbon/human/H = quirk_holder @@ -173,6 +176,7 @@ mob_trait = TRAIT_VORACIOUS gain_text = "You feel HONGRY." lose_text = "You no longer feel HONGRY." + medical_record_text = "Patient demonstrates a disturbing capacity for eating." /datum/quirk/trandening name = "High Luminosity Eyes" @@ -194,6 +198,7 @@ mob_trait = TRAIT_HIGH_BLOOD gain_text = "You feel full of blood!" lose_text = "You feel like your blood pressure went down." + medical_record_text = "Patient's blood tests report an abnormal concentration of red blood cells in their bloodstream." /datum/quirk/bloodpressure/add() var/mob/living/M = quirk_holder @@ -203,3 +208,15 @@ /datum/quirk/bloodpressure/remove() var/mob/living/M = quirk_holder M.blood_ratio = 1 + +/datum/quirk/night_vision + name = "Night Vision" + desc = "You can see slightly more clearly in full darkness than most people." + value = 1 + mob_trait = TRAIT_NIGHT_VISION + gain_text = "The shadows seem a little less dark." + lose_text = "Everything seems a little darker." + +/datum/quirk/night_vision/on_spawn() + var/mob/living/carbon/human/H = quirk_holder + H.update_sight() diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 178e1aaeb0..3319259381 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -22,14 +22,19 @@ value = -1 gain_text = "You start feeling depressed." lose_text = "You no longer feel depressed." //if only it were that easy! - medical_record_text = "Patient has a severe mood disorder causing them to experience sudden moments of sadness." + medical_record_text = "Patient has a severe mood disorder, causing them to experience acute episodes of depression." mood_quirk = TRUE +/datum/quirk/depression/on_process() + if(prob(0.05)) + SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "depression", /datum/mood_event/depression) + /datum/quirk/family_heirloom name = "Family Heirloom" desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!" value = -1 mood_quirk = TRUE + medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom." var/obj/item/heirloom var/where @@ -143,6 +148,7 @@ name = "Nyctophobia" desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctually act careful, and constantly feel a sense of dread." value = -1 + medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)" /datum/quirk/nyctophobia/on_process() var/mob/living/carbon/human/H = quirk_holder @@ -163,7 +169,8 @@ desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..." value = -1 gain_text = "The safty of light feels off..." - lose_text = "Enlighing." + lose_text = "Enlightening." + medical_record_text = "Despite my warnings, the patient refuses turn on the lights, only to end up rolling down a full flight of stairs and into the cellar." /datum/quirk/lightless/on_process() var/turf/T = get_turf(quirk_holder) @@ -332,16 +339,19 @@ medical_record_text = "Patient has an extreme or irrational fear and aversion to an undefined stimuli." var/datum/brain_trauma/mild/phobia/phobia -/datum/quirk/phobia/add() +/datum/quirk/phobia/post_add() var/mob/living/carbon/human/H = quirk_holder phobia = new - H.gain_trauma(phobia, TRAUMA_RESILIENCE_SURGERY) + H.gain_trauma(phobia, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/quirk/phobia/remove() + var/mob/living/carbon/human/H = quirk_holder + H?.cure_trauma_type(phobia, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/mute name = "Mute" desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak." value = -2 //HALP MAINTS - mob_trait = TRAIT_MUTE gain_text = "You find yourself unable to speak!" lose_text = "You feel a growing strength in your vocal chords." medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity." @@ -350,14 +360,17 @@ /datum/quirk/mute/add() var/mob/living/carbon/human/H = quirk_holder mute = new - H.gain_trauma(mute, TRAUMA_RESILIENCE_SURGERY) + H.gain_trauma(mute, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/quirk/mute/remove() + var/mob/living/carbon/human/H = quirk_holder + H?.cure_trauma_type(mute, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/mute/on_process() if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums)) to_chat(quirk_holder, "Your antagonistic nature has caused your voice to be heard.") qdel(src) - /datum/quirk/unstable name = "Unstable" desc = "Due to past troubles, you are unable to recover your sanity if you lose it. Be very careful managing your mood!" @@ -373,7 +386,7 @@ value = -4 gain_text = "You can't see anything." lose_text = "You miraculously gain back your vision." - medical_record_text = "Subject has permanent blindness." + medical_record_text = "Patient has permanent blindness." /datum/quirk/blindness/add() quirk_holder.become_blind(ROUNDSTART_TRAIT) @@ -384,3 +397,6 @@ if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes H.put_in_hands(glasses) H.regenerate_icons() + +/datum/quirk/blindness/remove() + quirk_holder?.cure_blind(ROUNDSTART_TRAIT) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 9e05af03b6..eae2db6a5f 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -16,6 +16,7 @@ value = 0 gain_text = "You feel an intense craving for pineapple." lose_text = "Your feelings towards pineapples seem to return to a lukewarm state." + medical_record_text = "Patient demonstrates a pathological love of pineapple." /datum/quirk/pineapple_liker/add() var/mob/living/carbon/human/H = quirk_holder @@ -34,6 +35,7 @@ value = 0 gain_text = "You find yourself pondering what kind of idiot actually enjoys pineapples..." lose_text = "Your feelings towards pineapples seem to return to a lukewarm state." + medical_record_text = "Patient is correct to think that pineapple is disgusting." /datum/quirk/pineapple_hater/add() var/mob/living/carbon/human/H = quirk_holder @@ -52,6 +54,7 @@ value = 0 gain_text = "You start craving something that tastes strange." lose_text = "You feel like eating normal food again." + medical_record_text = "Patient demonstrates irregular nutrition preferences." /datum/quirk/deviant_tastes/add() var/mob/living/carbon/human/H = quirk_holder @@ -92,7 +95,7 @@ value = 0 gain_text = "You feel more prudish." lose_text = "You don't feel as prudish as before." - medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin." + medical_record_text = "Patient exhibits a special gene that makes them immune to aphrodisiacs." /datum/quirk/libido name = "Nymphomania" @@ -134,6 +137,7 @@ value = 0 mob_trait = TRAIT_PHARMA lose_text = "Your liver feels different." + medical_record_text = "Non-invasive tests report that the patient's metabolism is indeed incompatible with a certain \"stimulants\"." var/active = FALSE var/power = 0 var/cachedmoveCalc = 1 diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 6765cdf2cd..0d763aa5ad 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -22,27 +22,17 @@ target_trait = ZTRAIT_STATION immunity_type = "rad" + + var/radiation_intensity = 100 /datum/weather/rad_storm/telegraph() ..() status_alarm(TRUE) - /datum/weather/rad_storm/weather_act(mob/living/L) var/resist = L.getarmor(null, "rad") - if(prob(40)) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.dna && !HAS_TRAIT(H, TRAIT_RADIMMUNE)) - if(prob(max(0,100-resist))) - H.randmuti() - if(prob(50)) - if(prob(90)) - H.randmutb() - else - H.randmutg() - H.domutcheck() - L.rad_act(20) + var/ratio = 1 - (min(resist, 100) / 100) + L.rad_act(radiation_intensity * ratio) /datum/weather/rad_storm/end() if(..()) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 612c3cba42..f5e285a5c2 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -327,7 +327,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) for(var/obj/machinery/light/L in src) L.update() -/area/proc/updateicon() +/area/proc/update_icon() var/weather_icon for(var/V in SSweather.processing) var/datum/weather/W = V @@ -337,7 +337,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(!weather_icon) icon_state = null -/area/space/updateicon() +/area/space/update_icon() icon_state = null /* @@ -370,7 +370,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/proc/power_change() for(var/obj/machinery/M in src) // for each machine in the area M.power_change() // reverify power status (to update icons etc.) - updateicon() + update_icon() /area/proc/usage(chan) var/used = 0 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e8651ba93d..7de5707032 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -280,35 +280,35 @@ ///Generate the full examine string of this atom (including icon for goonchat) /atom/proc/get_examine_string(mob/user, thats = FALSE) - . = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" + return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" /atom/proc/examine(mob/user) - to_chat(user, "[get_examine_string(user, TRUE)].") + . = list("[get_examine_string(user, TRUE)].") if(desc) - to_chat(user, desc) + . += desc if(reagents) if(reagents.reagents_holder_flags & TRANSPARENT) - to_chat(user, "It contains:") - if(reagents.reagent_list.len) + . += "It contains:" + if(length(reagents.reagent_list)) if(user.can_see_reagents()) //Show each individual reagent for(var/datum/reagent/R in reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name]") + . += "[R.volume] units of [R.name]" else //Otherwise, just show the total volume var/total_volume = 0 for(var/datum/reagent/R in reagents.reagent_list) total_volume += R.volume - to_chat(user, "[total_volume] units of various reagents") + . += "[total_volume] units of various reagents" else - to_chat(user, "Nothing.") + . += "Nothing." else if(reagents.reagents_holder_flags & AMOUNT_VISIBLE) if(reagents.total_volume) - to_chat(user, "It has [reagents.total_volume] unit\s left.") + . += "It has [reagents.total_volume] unit\s left." else - to_chat(user, "It's empty.") + . += "It's empty." - SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user) + SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) /atom/proc/relaymove(mob/user) if(buckle_message_cooldown <= world.time) @@ -316,9 +316,6 @@ to_chat(user, "You can't move while buckled to [src]!") return -/atom/proc/prevent_content_explosion() - return FALSE - /atom/proc/contents_explosion(severity, target) return //For handling the effects of explosions on contents that would not normally be effected @@ -660,7 +657,7 @@ var/atom/L = loc if(!L) return null - return L.AllowDrop() ? L : get_turf(L) + return L.AllowDrop() ? L : L.drop_location() /atom/Entered(atom/movable/AM, atom/oldLoc) SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc) @@ -812,8 +809,7 @@ Proc for attack log creation, because really why not // Filter stuff /atom/movable/proc/add_filter(name,priority,list/params) - if(!filter_data) - filter_data = list() + LAZYINITLIST(filter_data) var/list/p = params.Copy() p["priority"] = priority filter_data[name] = p @@ -821,7 +817,7 @@ Proc for attack log creation, because really why not /atom/movable/proc/update_filters() filters = null - sortTim(filter_data,associative = TRUE) + filter_data = sortTim(filter_data, /proc/cmp_filter_data_priority, TRUE) for(var/f in filter_data) var/list/data = filter_data[f] var/list/arguments = data.Copy() diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 65a7c6a954..1a57cf5051 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -189,7 +189,13 @@ if(tod) var/tdelta = round(world.time - timeofdeath) if(tdelta < (DEFIB_TIME_LIMIT * 10)) - holder.icon_state = "huddefib" + var/obj/item/organ/heart/He = getorgan(/obj/item/organ/heart) + if(He) + holder.icon_state = "huddefib" + if(He.organ_flags & ORGAN_FAILING) + holder.icon_state = "huddefibheart" + else + holder.icon_state = "huddefibheart" return holder.icon_state = "huddead" else diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm new file mode 100644 index 0000000000..e784fd836d --- /dev/null +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -0,0 +1,292 @@ + +/datum/game_mode + var/list/datum/mind/bloodsuckers = list() // List of minds belonging to this game mode. + var/list/datum/mind/vassals = list() // List of minds that have been turned into Vassals. + //var/list/datum/mind/vamphunters = list() // List of minds hunting vampires. Disabled at the moment + var/obj/effect/sunlight/bloodsucker_sunlight // Sunlight Timer. Created on first Bloodsucker assign. Destroyed on last removed Bloodsucker. + + // LISTS // + var/list/vassal_allowed_antags = list(/datum/antagonist/brother, /datum/antagonist/traitor, /datum/antagonist/traitor/internal_affairs, /datum/antagonist/survivalist, \ + /datum/antagonist/rev, /datum/antagonist/nukeop, /datum/antagonist/pirate, /datum/antagonist/cult, /datum/antagonist/abductee) + // The antags you're allowed to be if turning Vassal. + +/datum/game_mode/bloodsucker + name = "bloodsucker" + config_tag = "bloodsucker" + traitor_name = "Bloodsucker" + antag_flag = ROLE_BLOODSUCKER + false_report_weight = 1 + restricted_jobs = list("AI","Cyborg") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_players = 20 + required_enemies = 2 + recommended_enemies = 4 + reroll_friendly = FALSE + enemy_minimum_age = 7 + round_ends_with_antag_death = FALSE + + + announce_span = "danger" + announce_text = "Filthy, bloodsucking vampires are crawling around disguised as crewmembers!\n\ + Bloodsuckers: The crew are cattle, while you are both shepherd and slaughterhouse.\n\ + Crew: Put an end to the undead infestation before the station is overcome!" + +/datum/game_mode/bloodsucker/generate_report() + return "Reports indicate that some of your crew may have toppled statues in the past week, angering the gods and becoming cursed with undeath and a desire for blood. Watch out for crewmembers that seem to shun the light or are found pale and delirious." + +// Seems to be run by game ONCE, and finds all potential players to be antag. +/datum/game_mode/bloodsucker/pre_setup() + + // Set Restricted Jobs + if(CONFIG_GET(flag/protect_roles_from_antagonist)) + restricted_jobs += protected_jobs + + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) + restricted_jobs += "Assistant" + + // Set number of Vamps + recommended_enemies = CLAMP(round(num_players()/10), 1, 6); + + // Select Antags + for(var/i = 0, i < recommended_enemies, i++) + if (!antag_candidates.len) + break + var/datum/mind/bloodsucker = pick(antag_candidates) + // Can we even BE a bloodsucker? + //if (can_make_bloodsucker(bloodsucker, display_warning=FALSE)) + bloodsuckers += bloodsucker + bloodsucker.restricted_roles = restricted_jobs + log_game("[bloodsucker.key] (ckey) has been selected as a Bloodsucker.") + antag_candidates.Remove(bloodsucker) // Apparently you can also write antag_candidates -= bloodsucker + + // Assign Hunters (as many as monsters, plus one) + //assign_monster_hunters(bloodsuckers.len, TRUE, bloodsuckers) // Disabled for now + + // Do we have enough vamps to continue? + return bloodsuckers.len >= required_enemies + + +// Gamemode is all done being set up. We have all our Vamps. We now pick objectives and let them know what's happening. +/datum/game_mode/bloodsucker/post_setup() + + // Sunlight (Creating Bloodsuckers manually will check to create this, too) + check_start_sunlight() + + // Vamps + for(var/datum/mind/bloodsucker in bloodsuckers) + // spawn() --> Run block of code but game continues on past it. + // sleep() --> Run block of code and freeze code there (including whoever called us) until it's resolved. + + //Clean Bloodsucker Species (racist?) + //clean_invalid_species(bloodsucker) + // TO-DO !!! + + // Add Bloodsucker Antag Datum (or remove from list on Fail) + if (!make_bloodsucker(bloodsucker)) + bloodsuckers -= bloodsucker + + // NOTE: Hunters are done in ..() parent proc + + return ..() + +// Checking for ACTUALLY Dead Vamps +/datum/game_mode/bloodsucker/are_special_antags_dead() + // Bloodsucker not Final Dead + for(var/datum/mind/bloodsucker in bloodsuckers) + if(!bloodsucker.AmFinalDeath()) + return FALSE + return TRUE + + +// Init Sunlight (called from datum_bloodsucker.on_gain(), in case game mode isn't even Bloodsucker +/datum/game_mode/proc/check_start_sunlight() + // Already Sunlight (and not about to cancel) + if (istype(bloodsucker_sunlight) && !bloodsucker_sunlight.cancel_me) + return + bloodsucker_sunlight = new () + +// End Sun (last bloodsucker removed) +/datum/game_mode/proc/check_cancel_sunlight() + // No Sunlight + if (!istype(bloodsucker_sunlight)) + return + if (bloodsuckers.len <= 0) + bloodsucker_sunlight.cancel_me = TRUE + qdel(bloodsucker_sunlight) + bloodsucker_sunlight = null + +/datum/game_mode/proc/is_daylight() + return istype(bloodsucker_sunlight) && bloodsucker_sunlight.amDay + +////////////////////////////////////////////////////////////////////////////// + + +/datum/game_mode/proc/can_make_bloodsucker(datum/mind/bloodsucker, datum/mind/creator, display_warning=TRUE) // Creator is just here so we can display fail messages to whoever is turning us. + // No Mind + if(!bloodsucker || !bloodsucker.key) // KEY is client login? + //if(creator) // REMOVED. You wouldn't see their name if there is no mind, so why say anything? + // to_chat(creator, "[bloodsucker] isn't self-aware enough to be raised as a Bloodsucker!") + return FALSE + // Current body is invalid + if(!ishuman(bloodsucker.current))// && !ismonkey(bloodsucker.current)) + if(display_warning && creator) + to_chat(creator, "[bloodsucker] isn't evolved enough to be raised as a Bloodsucker!") + return FALSE + // Species Must have a HEART (Sorry Plasmabois) + var/mob/living/carbon/human/H = bloodsucker.current + if(NOBLOOD in H.dna.species.species_traits) + if(display_warning && creator) + to_chat(creator, "[bloodsucker]'s DNA isn't compatible!") + return FALSE + // Already a Non-Human Antag + if(bloodsucker.has_antag_datum(/datum/antagonist/abductor) || bloodsucker.has_antag_datum(/datum/antagonist/devil) || bloodsucker.has_antag_datum(/datum/antagonist/changeling)) + return FALSE + // Already a vamp + if(bloodsucker.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) + if(display_warning && creator) + to_chat(creator, "[bloodsucker] is already a Bloodsucker!") + return FALSE + // Not High Enough + if(creator) + var/datum/antagonist/bloodsucker/creator_bloodsucker = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + if(!istype(creator_bloodsucker) || creator_bloodsucker.vamplevel < BLOODSUCKER_LEVEL_TO_EMBRACE) + to_chat(creator, "Your blood is too thin to turn this corpse!") + return FALSE + return TRUE + + +/datum/game_mode/proc/make_bloodsucker(datum/mind/bloodsucker, datum/mind/creator = null) // NOTE: This is a game_mode/proc, NOT a game_mode/bloodsucker/proc! We need to access this function despite the game mode. + if (!can_make_bloodsucker(bloodsucker)) + return FALSE + + // Create Datum: Fledgling + var/datum/antagonist/bloodsucker/A + + // [FLEDGLING] + if (creator) + A = new (bloodsucker) + A.creator = creator + bloodsucker.add_antag_datum(A) + // Log + message_admins("[bloodsucker] has become a Bloodsucker, and was created by [creator].") + log_admin("[bloodsucker] has become a Bloodsucker, and was created by [creator].") + + // [MASTER] + else + A = bloodsucker.add_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + + return TRUE + + +/datum/game_mode/proc/remove_bloodsucker(datum/mind/bloodsucker) + bloodsucker.remove_antag_datum(ANTAG_DATUM_BLOODSUCKER) + + +/datum/game_mode/proc/clean_invalid_species(datum/mind/bloodsucker) + // Only checking for Humans here + if (!ishuman(bloodsucker.current) || !bloodsucker.current.client) + return + var/am_valid = TRUE + var/mob/living/carbon/human/H = bloodsucker.current + + // Check if PLASMAMAN? + if(NOBLOOD in H.dna.species.species_traits) + am_valid = FALSE + + // PROBLEM: + // + // Setting species leaves clothes on. If you were a plasmaman, we need to reassign your entire outfit. Otherwise + // everyone will wonder why you're a human with Plasma clothes (jk they'll know you're antag) + + // Convert to HUMAN (along with ID and PDA) + if (!am_valid) + H.set_species(/datum/species/human) + H.real_name = H.client.prefs.custom_names["human"] + var/obj/item/card/id/ID = H.wear_id?.GetID() + if(ID) + ID.registered_name = H.real_name + ID.update_label() + + +/datum/game_mode/proc/can_make_vassal(mob/living/target, datum/mind/creator, display_warning=TRUE)//, check_antag_or_loyal=FALSE) + // Not Correct Type: Abort + if (!iscarbon(target) || !creator) + return FALSE + if (target.stat > UNCONSCIOUS) + return FALSE + // Check Overdose: Am I even addicted to blood? Do I even have any in me? + //if (!target.reagents.addiction_list || !target.reagents.reagent_list) + //message_admins("DEBUG2: can_make_vassal() Abort: No reagents") + // return 0 + // Check Overdose: Did my current volume go over the Overdose threshold? + //var/am_addicted = 0 + //for (var/datum/reagent/blood/vampblood/blood in target.reagents.addiction_list) // overdosed is tracked in reagent_list, not addiction_list. + //message_admins("DEBUG3: can_make_vassal() Found Blood! [blood] [blood.overdose]") + //if (blood.overdosed) + // am_addicted = 1 // Blood is present in addiction? That's all we need. + // break + + //if (!am_addicted) + //message_admins("DEBUG4: can_make_vassal() Abort: No Blood") + // return 0 + // No Mind! + if (!target.mind || !target.mind.key) + if (display_warning) + to_chat(creator, "[target] isn't self-aware enough to be made into a Vassal.") + return FALSE + // Already MY Vassal + var/datum/antagonist/vassal/V = target.mind.has_antag_datum(ANTAG_DATUM_VASSAL) + if (istype(V) && V.master) + if (V.master.owner == creator) + if (display_warning) + to_chat(creator, "[target] is already your loyal Vassal!") + else + if (display_warning) + to_chat(creator, "[target] is the loyal Vassal of another Bloodsucker!") + return FALSE + // Already Antag or Loyal (Vamp Hunters count as antags) + if (target.mind.enslaved_to || AmInvalidAntag(target.mind)) //!VassalCheckAntagValid(target.mind, check_antag_or_loyal)) // HAS_TRAIT(target, TRAIT_MINDSHIELD, "implant") || + if (display_warning) + to_chat(creator, "[target] resists the power of your blood to dominate their mind!") + return FALSE + return TRUE + + +/datum/game_mode/proc/AmValidAntag(datum/mind/M) + // No List? + if(!islist(M.antag_datums) || M.antag_datums.len == 0) + return FALSE + // Am I NOT an invalid Antag? NOTE: We already excluded non-antags above. Don't worry about the "No List?" check in AmInvalidIntag() + return !AmInvalidAntag(M) + +/datum/game_mode/proc/AmInvalidAntag(datum/mind/M) + // No List? + if(!islist(M.antag_datums) || M.antag_datums.len == 0) + return FALSE + // Does even ONE antag appear in this mind that isn't in the list? Then FAIL! + for(var/datum/antagonist/antag_datum in M.antag_datums) + if (!(antag_datum.type in vassal_allowed_antags)) // vassal_allowed_antags is a list stored in the game mode, above. + //message_admins("DEBUG VASSAL: Found Invalid: [antag_datum] // [antag_datum.type]") + return TRUE + //message_admins("DEBUG VASSAL: Valid Antags! (total of [M.antag_datums.len])") + // WHEN YOU DELETE THE ABOVE: Remove the 3 second timer on converting the vassal too. + return FALSE + +/datum/game_mode/proc/make_vassal(mob/living/target, datum/mind/creator) + if (!can_make_vassal(target,creator)) + return FALSE + // Make Vassal + var/datum/antagonist/vassal/V = new (target.mind) + var/datum/antagonist/bloodsucker/B = creator.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + V.master = B + target.mind.add_antag_datum(V, V.master.get_team()) + // Update Bloodsucker Title (we're a daddy now) + B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet. + // Log + message_admins("[target] has become a Vassal, and is enslaved to [creator].") + log_admin("[target] has become a Vassal, and is enslaved to [creator].") + return TRUE + +/datum/game_mode/proc/remove_vassal(datum/mind/vassal) + vassal.remove_antag_datum(ANTAG_DATUM_VASSAL) diff --git a/code/game/gamemodes/bloodsucker/hunter.dm b/code/game/gamemodes/bloodsucker/hunter.dm new file mode 100644 index 0000000000..cec990e9c3 --- /dev/null +++ b/code/game/gamemodes/bloodsucker/hunter.dm @@ -0,0 +1,50 @@ + + +/* +// Called from game mode pre_setup() +/datum/game_mode/proc/assign_monster_hunters(monster_count = 4, guaranteed_hunters = FALSE, list/datum/mind/exclude_from_hunter) + + // Not all game modes GUARANTEE a hunter + if (rand(0,2) == 0) // 50% of the time, we get fewer or NO Hunters + if (!guaranteed_hunters) + return + else + monster_count /= 2 + + var/list/no_hunter_jobs = list("AI","Cyborg") + + // Set Restricted Jobs + if(CONFIG_GET(flag/protect_roles_from_antagonist)) + no_hunter_jobs += list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + + if(CONFIG_GET(flag/protect_assistant_from_antagonist)) + no_hunter_jobs += "Assistant" + + // Find Valid Hunters + var/list/datum/mind/hunter_candidates = get_players_for_role(ROLE_MONSTERHUNTER) + + // Assign Hunters (as many as vamps, plus one) + for(var/i = 1, i < monster_count, i++) // Start at 1 so we skip Hunters if there's only one sucker. + if (!hunter_candidates.len) + break + // Assign Hunter + var/datum/mind/hunter = pick(hunter_candidates) + hunter_candidates.Remove(hunter) // Remove Either Way + // Already Antag? Skip + if (islist(exclude_from_hunter) && (locate(hunter) in exclude_from_hunter)) //if (islist(hunter.antag_datums) && hunter.antag_datums.len) + i -- + continue + // NOTE: + vamphunters += hunter + hunter.restricted_roles = no_hunter_jobs + log_game("[hunter.key] (ckey) has been selected as a Hunter.") + +// Called from game mode post_setup() +/datum/game_mode/proc/finalize_monster_hunters(monster_count = 4) + var/amEvil = TRUE // First hunter is always an evil boi + for(var/datum/mind/hunter in vamphunters) + var/datum/antagonist/vamphunter/A = new (hunter) + A.bad_dude = amEvil + hunter.add_antag_datum(A) + amEvil = FALSE // Every other hunter is just a boring greytider +*/ diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 76e6268977..a76e8234ba 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -339,10 +339,6 @@ Credit where due: CLOCKCULTCHANGELOG\ \
    \ -
  • Zelus oil: A new reagent. It can be used to heal the faithful to Ratvar, or kill heretics and moreso stun blood cultists,\ - or splashed onto metal sheets to make brass. This chemical can be found in minimal quantities by grinding brass sheets.\ -
  • Brass Flasks:Intended to store Zelus Oil in, but can also be used as fragile single use throwing weapons in a pinch! \ - These are crafted with a single sheet of brass and fit in the Clockwork Cuirass' suit storage.\ Good luck!" /obj/item/paper/servant_primer/Initialize() @@ -353,7 +349,7 @@ Credit where due: changelog_contents += "
  • [entry]
  • " info = replacetext(info, "CLOCKCULTCHANGELOG", changelog_contents) -/obj/item/paper/servant_primer/examine(mob/user) - if(!is_servant_of_ratvar(user) && !isobserver(user)) - to_chat(user, "You can't understand any of the words on [src].") - ..() +/obj/item/paper/servant_primer/oui_getcontent(mob/target) + if(!is_servant_of_ratvar(target) && !isobserver(target)) + return "[name][stars(info)]
    [stamps]" + return ..() diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 66de72bad2..49a336e16a 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -53,7 +53,7 @@ /datum/outfit/syndicate/clownop/no_crystals tc = 0 -/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) +/datum/outfit/syndicate/clownop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) ..() if(visualsOnly) return diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index ee96d1fa10..9b52ddda1e 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -265,6 +265,7 @@ armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 35000 operation_req_access = list(ACCESS_SYNDICATE) + internals_req_access = list(ACCESS_SYNDICATE) wreckage = /obj/structure/mecha_wreckage/honker/dark max_equip = 3 spawn_tracked = FALSE diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 83a3debfdc..075184046d 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -236,6 +236,9 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) return rule.round_result() return ..() +/datum/game_mode/dynamic/generate_report() + return "Mysterious signals that demonstrate strange dynamics have been detected in your sector. Watch out for oddities." + /datum/game_mode/dynamic/send_intercept() . = "Central Command Status Summary
    " switch(round(threat_level)) @@ -297,6 +300,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) /datum/game_mode/dynamic/proc/log_threat(var/log_str,var/verbose = FALSE) threat_log_verbose += ("[worldtime2text()]: "+log_str) + SSblackbox.record_feedback("tally","dynamic_threat_log",1,log_str) if(!verbose) threat_log += log_str @@ -326,6 +330,10 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) peaceful_percentage = round(LORENTZ_CUMULATIVE_DISTRIBUTION(relative_threat, GLOB.dynamic_curve_centre, GLOB.dynamic_curve_width), 0.01)*100 threat = threat_level + SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Initial threat level") + SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_centre,"Curve centre") + SSblackbox.record_feedback("tally","dynamic_threat",GLOB.dynamic_curve_width,"Curve width") + SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful") /datum/game_mode/dynamic/can_start() message_admins("Dynamic mode parameters for the round:") @@ -337,6 +345,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(GLOB.dynamic_forced_threat_level >= 0) threat_level = round(GLOB.dynamic_forced_threat_level, 0.1) threat = threat_level + SSblackbox.record_feedback("tally","dynamic_threat",threat_level,"Threat level (forced by admins)") else generate_threat() @@ -381,7 +390,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if (roundstart_rules.len <= 0) log_game("DYNAMIC: [roundstart_rules.len] rules.") return TRUE - + SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Roundstart rules considered") + SSblackbox.record_feedback("tally","dynamic",roundstart_rules.len,"Players readied up") if(GLOB.dynamic_forced_roundstart_ruleset.len > 0) rigged_roundstart() else @@ -409,7 +419,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) message_admins("Drafting players for forced ruleset [rule.name].") log_game("DYNAMIC: Drafting players for forced ruleset [rule.name].") rule.mode = src - rule.acceptable(GLOB.player_list.len, threat_level) // Assigns some vars in the modes, running it here for consistency + rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency rule.candidates = candidates.Copy() rule.trim_candidates() if (rule.ready(TRUE)) @@ -421,7 +431,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) return TRUE var/list/drafted_rules = list() for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules) - if (rule.acceptable(GLOB.player_list.len, threat_level) && threat >= rule.cost) // If we got the population and threat required + if (rule.acceptable(roundstart_pop_ready, threat_level) && threat >= rule.cost) // If we got the population and threat required rule.candidates = candidates.Copy() rule.trim_candidates() if (rule.ready() && rule.candidates.len > 0) @@ -429,12 +439,12 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(!drafted_rules.len) message_admins("Not enough threat level for roundstart antags!") log_game("DYNAMIC: Not enough threat level for roundstart antags!") - var/indice_pop = min(10,round(GLOB.player_list.len/pop_per_requirement)+1) + var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1) extra_rulesets_amount = 0 if (GLOB.dynamic_classic_secret) extra_rulesets_amount = 0 else - if (GLOB.player_list.len > GLOB.dynamic_high_pop_limit) + if (roundstart_pop_ready > GLOB.dynamic_high_pop_limit) message_admins("High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.") log_game("DYNAMIC: High Population Override is in effect! Threat Level will have more impact on which roles will appear, and player population less.") if (threat_level > high_pop_second_rule_req) @@ -510,7 +520,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) var/added_threat = starting_rule.scale_up(extra_rulesets_amount, threat) if (starting_rule.pre_execute()) spend_threat(starting_rule.cost + added_threat) - log_threat("[starting_rule.ruletype] - [starting_rule.name] -[starting_rule.cost + starting_rule.scaled_times * starting_rule.scaling_cost] threat") + log_threat("[starting_rule.ruletype] - [starting_rule.name] -[starting_rule.cost + starting_rule.scaled_times * starting_rule.scaling_cost] threat", verbose = TRUE) if(starting_rule.flags & HIGHLANDER_RULESET) highlander_executed = TRUE else if(starting_rule.flags & ONLY_RULESET) @@ -534,6 +544,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(rule.execute()) if(rule.persistent) current_rules += rule + SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info()) return TRUE rule.clean_up() // Refund threat, delete teams and so on. executed_rules -= rule @@ -605,13 +616,14 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) new_rule.trim_candidates() if (new_rule.ready(forced)) spend_threat(new_rule.cost) - log_threat("[new_rule.ruletype] - [new_rule.name] -[new_rule.cost] threat") + log_threat("[new_rule.ruletype] - [new_rule.name] -[new_rule.cost] threat", verbose = TRUE) if (new_rule.execute()) // This should never fail since ready() returned 1 if(new_rule.flags & HIGHLANDER_RULESET) highlander_executed = TRUE else if(new_rule.flags & ONLY_RULESET) only_ruleset_executed = TRUE log_game("DYNAMIC: Making a call to a specific ruleset...[new_rule.name]!") + SSblackbox.record_feedback("associative","dynamic_rulesets",1,new_rule.get_blackbox_info()) executed_rules += new_rule if (new_rule.persistent) current_rules += new_rule @@ -626,7 +638,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if (rule.execute()) log_game("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].") spend_threat(rule.cost) - log_threat("[rule.ruletype] [rule.name] spent [rule.cost]") + log_threat("[rule.ruletype] [rule.name] spent [rule.cost]", verbose = TRUE) if(rule.flags & HIGHLANDER_RULESET) highlander_executed = TRUE else if(rule.flags & ONLY_RULESET) @@ -636,6 +648,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) message_admins("[key_name(M)] joined the station, and was selected by the [rule.name] ruleset.") log_game("DYNAMIC: [key_name(M)] joined the station, and was selected by the [rule.name] ruleset.") executed_rules += rule + SSblackbox.record_feedback("associative","dynamic_rulesets",1,rule.get_blackbox_info()) rule.candidates.Cut() if (rule.persistent) current_rules += rule @@ -652,6 +665,8 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) for (var/datum/dynamic_ruleset/rule in current_rules) if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing. current_rules -= rule + SSblackbox.record_feedback("tally","dynamic",1,"Rulesets finished") + SSblackbox.record_feedback("associative","dynamic_rulesets_finished",1,rule.get_blackbox_info()) if (midround_injection_cooldown < world.time) if (GLOB.dynamic_forced_extended) @@ -670,6 +685,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) update_playercounts() if (get_injection_chance()) + SSblackbox.record_feedback("tally","dynamic",1,"Attempted midround injections") var/cur_threat_frac = threat/threat_level var/list/drafted_rules = list() var/antag_num = current_players[CURRENT_LIVING_ANTAGS].len @@ -685,12 +701,16 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) drafted_rules[rule] = round(rule.get_weight() + (rule.cost * cur_threat_frac)) else drafted_rules[rule] = rule.get_weight() + else if(threat < rule.cost) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend") if (drafted_rules.len > 0) + SSblackbox.record_feedback("tally","dynamic",1,"Successful midround injections") picking_midround_latejoin_rule(drafted_rules) else midround_injection_cooldown = (midround_injection_cooldown + world.time)/2 if(event_injection_cooldown < world.time) + SSblackbox.record_feedback("tally","dynamic",1,"Attempted event injections") var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) message_admins("DYNAMIC: Doing event injection.") @@ -701,7 +721,10 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) if(rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) if(rule.ready()) drafted_rules[rule] = rule.get_weight() + else if(threat < rule.cost) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat to spend") if(drafted_rules.len > 0) + SSblackbox.record_feedback("tally","dynamic",1,"Successful event injections") picking_midround_latejoin_rule(drafted_rules) /// Updates current_players. @@ -792,6 +815,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) forced_latejoin_rule = null else if (latejoin_injection_cooldown < world.time && prob(get_injection_chance())) + SSblackbox.record_feedback("tally","dynamic",1,"Attempted latejoin injections") var/list/drafted_rules = list() for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules) if (rule.acceptable(current_players[CURRENT_LIVING_PLAYERS].len, threat_level) && threat >= rule.cost) @@ -809,22 +833,29 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) drafted_rules[rule] = rule.get_weight() if (drafted_rules.len > 0 && picking_midround_latejoin_rule(drafted_rules)) + SSblackbox.record_feedback("tally","dynamic",1,"Successful latejoin injections") var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + world.time /// Refund threat, but no more than threat_level. /datum/game_mode/dynamic/proc/refund_threat(regain) threat = min(threat_level,threat+regain) + SSblackbox.record_feedback("tally","dynamic_threat",regain,"Refunded threat") + log_threat("[regain] refunded. Threat is now [threat].", verbose = TRUE) /// Generate threat and increase the threat_level if it goes beyond, capped at 100 /datum/game_mode/dynamic/proc/create_threat(gain) threat = min(100, threat+gain) if(threat > threat_level) threat_level = threat + SSblackbox.record_feedback("tally","dynamic_threat",gain,"Created threat") + log_threat("[gain] created. Threat is now [threat] and threat level is now [threat_level].", verbose = TRUE) /// Expend threat, can't fall under 0. /datum/game_mode/dynamic/proc/spend_threat(cost) threat = max(threat-cost,0) + SSblackbox.record_feedback("tally","dynamic_threat",cost,"Threat spent") + log_threat("[cost] spent. Threat is now [threat].", verbose = TRUE) /// Turns the value generated by lorentz distribution to threat value between 0 and 100. /datum/game_mode/dynamic/proc/lorentz_to_threat(x) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index 0c8ec0a2b8..7f6ea088a1 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -80,6 +80,9 @@ /// Delay for when execute will get called from the time of post_setup (roundstart) or process (midround/latejoin). /// Make sure your ruleset works with execute being called during the game when using this, and that the clean_up proc reverts it properly in case of faliure. var/delay = 0 + /// Whether or not recent-round weight values are taken into account for this ruleset. + /// Weight reduction uses the same values as secret's recent-round mode weight reduction. + var/always_max_weight = FALSE /datum/dynamic_ruleset/New() ..() @@ -91,8 +94,15 @@ var/costs = CONFIG_GET(keyed_list/dynamic_cost) var/requirementses = CONFIG_GET(keyed_list/dynamic_requirements) // can't damn well use requirements var/high_population_requirements = CONFIG_GET(keyed_list/dynamic_high_population_requirement) + var/list/repeated_mode_adjust = CONFIG_GET(number_list/repeated_mode_adjust) if(config_tag in weights) - weight = weights[config_tag] + var/weight_mult = 1 + if(!always_max_weight && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3) + var/saved_dynamic_rules = SSpersistence.saved_dynamic_rules + for(var/i in 1 to 3) + if(config_tag in saved_dynamic_rules[i]) + weight_mult -= (repeated_mode_adjust[i]/100) + weight = weights[config_tag] * weight_mult if(config_tag in costs) cost = costs[config_tag] if(config_tag in requirementses) @@ -115,12 +125,15 @@ /// If your rule has extra checks, such as counting security officers, do that in ready() instead /datum/dynamic_ruleset/proc/acceptable(population = 0, threat_level = 0) if(minimum_players > population) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to low pop") return FALSE if(maximum_players > 0 && population > maximum_players) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to high pop") return FALSE if (population >= GLOB.dynamic_high_pop_limit) indice_pop = 10 if(threat_level < high_population_requirement) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level") log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[high_population_requirement]") return FALSE else @@ -132,6 +145,7 @@ log_game("DYNAMIC: requirements and antag_cap lists have different lengths in ruleset [name]. Likely config issue, report this.") indice_pop = min(requirements.len,round(population/pop_per_requirement)+1) if(threat_level < requirements[indice_pop]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough threat level") log_game("DYNAMIC: [name] did not reach threat level threshold: [threat_level]/[requirements[indice_pop]]") return FALSE else @@ -178,6 +192,7 @@ /// IMPORTANT: If ready() returns TRUE, that means pre_execute() or execute() should never fail! /datum/dynamic_ruleset/proc/ready(forced = 0) if (required_candidates > candidates.len) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough candidates") return FALSE return TRUE @@ -212,6 +227,24 @@ /datum/dynamic_ruleset/proc/check_finished() return FALSE +/// Returns a list to be displayed on statbus. +/datum/dynamic_ruleset/proc/get_blackbox_info() + var/list/ruleset_data = list() + ruleset_data["name"] = name + ruleset_data["rule_type"] = ruletype + ruleset_data["cost"] = total_cost + ruleset_data["weight"] = weight + ruleset_data["scaled_times"] = scaled_times + ruleset_data["antagonist_type"] = antag_datum + ruleset_data["population_tier"] = indice_pop + ruleset_data["assigned"] = list() + for (var/datum/mind/M in assigned) + var/assigned_data = list() + assigned_data["key"] = M.key + assigned_data["name"] = M.name + ruleset_data["assigned"] += list(assigned_data) + return ruleset_data + ////////////////////////////////////////////// // // // ROUNDSTART RULESETS // diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm index a20022cb71..b6cd313bfc 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm @@ -3,6 +3,17 @@ var/typepath // typepath of the event var/triggering +/datum/dynamic_ruleset/event/get_blackbox_info() + var/list/ruleset_data = list() + ruleset_data["name"] = name + ruleset_data["rule_type"] = ruletype + ruleset_data["cost"] = total_cost + ruleset_data["weight"] = weight + ruleset_data["scaled_times"] = scaled_times + ruleset_data["event_type"] = typepath + ruleset_data["population_tier"] = indice_pop + return ruleset_data + /datum/dynamic_ruleset/event/execute() var/datum/round_event/E = new typepath() E.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) @@ -26,6 +37,7 @@ var/threat = round(mode.threat_level/10) if (job_check < required_enemies[threat]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE return TRUE @@ -125,6 +137,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + always_max_weight = TRUE ////////////////////////////////////////////// // // @@ -143,16 +156,18 @@ repeatable_weight_decrease = 2 requirements = list(60,50,40,30,30,30,30,30,30,30) high_population_requirement = 30 - repeatable = TRUE /datum/dynamic_ruleset/event/meteor_wave/ready() if(mode.threat_level > 40 && mode.threat >= 25 && prob(20)) + name = "Meteor Wave: Threatening" cost = 25 typepath = /datum/round_event/meteor_wave/threatening else if(mode.threat_level > 50 && mode.threat >= 40 && prob(30)) + name = "Meteor Wave: Catastrophic" cost = 40 typepath = /datum/round_event/meteor_wave/catastrophic else + name = "Meteor Wave: Normal" cost = 15 typepath = /datum/round_event/meteor_wave return ..() @@ -270,7 +285,7 @@ repeatable = TRUE /datum/dynamic_ruleset/event/processor_overload - name = "Processer Overload" + name = "Processor Overload" config_tag = "processor_overload" typepath = /datum/round_event/processor_overload cost = 4 @@ -281,6 +296,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + always_max_weight = TRUE /datum/dynamic_ruleset/event/space_dust name = "Minor Space Dust" @@ -294,6 +310,7 @@ requirements = list(5,5,5,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + always_max_weight = TRUE /datum/dynamic_ruleset/event/major_dust name = "Major Space Dust" @@ -333,6 +350,7 @@ requirements = list(101,101,101,5,5,5,5,5,5,5) high_population_requirement = 5 repeatable = TRUE + always_max_weight = TRUE /datum/dynamic_ruleset/event/radiation_storm name = "Radiation Storm" diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 5810fd0ae0..fe9347d9d5 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -36,9 +36,9 @@ continue // Dead players cannot count as opponents if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles))) job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - var/threat = round(mode.threat_level/10) if (job_check < required_enemies[threat]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE return ..() @@ -69,6 +69,7 @@ high_population_requirement = 15 repeatable = TRUE flags = TRAITOR_RULESET + always_max_weight = TRUE ////////////////////////////////////////////// // // diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 9d4960858d..91ac73d142 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -41,6 +41,9 @@ if (!istype(M, required_type)) trimmed_list.Remove(M) continue + if (M.GetComponent(/datum/component/virtual_reality)) + trimmed_list.Remove(M) + continue if (!M.client) // Are they connected? trimmed_list.Remove(M) continue @@ -84,6 +87,7 @@ var/threat = round(mode.threat_level/10) if (job_check < required_enemies[threat]) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE return TRUE @@ -91,11 +95,8 @@ var/list/possible_candidates = list() possible_candidates.Add(dead_players) possible_candidates.Add(list_observers) - send_applications(possible_candidates) - if(assigned.len > 0) - return TRUE - else - return FALSE + var/application_successful = send_applications(possible_candidates) + return assigned.len > 0 && application_successful /// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset. /datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list()) @@ -107,28 +108,21 @@ candidates = pollGhostCandidates("The mode is looking for volunteers to become a [name]", antag_flag, SSticker.mode, antag_flag, poll_time = 300) - if(!candidates || candidates.len <= 0) - message_admins("The ruleset [name] received no applications.") - log_game("DYNAMIC: The ruleset [name] received no applications.") - mode.refund_threat(cost) - mode.log_threat("Rule [name] refunded [cost] (no applications)",verbose=TRUE) - mode.executed_rules -= src - return + if(!candidates || candidates.len <= required_candidates) + message_admins("The ruleset [name] did not receive enough applications.") + log_game("DYNAMIC: The ruleset [name] did not receive enough applications.") + return FALSE message_admins("[candidates.len] players volunteered for the ruleset [name].") log_game("DYNAMIC: [candidates.len] players volunteered for [name].") review_applications() + return TRUE /// Here is where you can check if your ghost applicants are valid for the ruleset. /// Called by send_applications(). /datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications() for (var/i = 1, i <= required_candidates, i++) if(candidates.len <= 0) - if(i == 1) - // We have found no candidates so far and we are out of applicants. - mode.refund_threat(cost) - mode.log_threat("Rule [name] refunded [cost] (all applications invalid)",verbose=TRUE) - mode.executed_rules -= src break var/mob/applicant = pick(candidates) candidates -= applicant @@ -150,7 +144,7 @@ finish_setup(new_character, i) assigned += applicant - notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT, header="Something Interesting!") + notify_ghosts("[new_character] has been picked for the ruleset [name]!", source = new_character, action = NOTIFY_ORBIT) /datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant) var/mob/living/carbon/human/new_character = makeBody(applicant) @@ -186,6 +180,7 @@ repeatable = TRUE high_population_requirement = 15 flags = TRAITOR_RULESET + always_max_weight = TRUE /datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0) var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len @@ -283,6 +278,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/wizard name = "Wizard" config_tag = "midround_wizard" + persistent = TRUE antag_datum = /datum/antagonist/wizard antag_flag = ROLE_WIZARD enemy_roles = list("Security Officer","Detective","Head of Security", "Captain") @@ -293,9 +289,11 @@ requirements = list(90,90,70,50,50,50,50,40,30,30) high_population_requirement = 30 repeatable = TRUE + var/datum/mind/wizard /datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE if(GLOB.wizardstart.len == 0) log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") @@ -307,6 +305,20 @@ ..() new_character.forceMove(pick(GLOB.wizardstart)) +/datum/dynamic_ruleset/midround/from_ghosts/wizard/rule_process() // i can literally copy this from are_special_antags_dead it's great + if(isliving(wizard.current) && wizard.current.stat!=DEAD) + return FALSE + + for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead() + if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard)) + return FALSE + + if(SSevents.wizardmode) //If summon events was active, turn it off + SSevents.toggleWizardmode() + SSevents.resetFrequency() + + return RULESET_STOP_PROCESSING + ////////////////////////////////////////////// // // // NUCLEAR OPERATIVES (MIDROUND) // @@ -344,6 +356,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -380,6 +393,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -411,6 +425,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -510,6 +525,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE) if (required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE return ..() @@ -548,6 +564,7 @@ if(deadMobs < REVENANT_SPAWN_THRESHOLD) return FALSE if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies var/turf/T = get_turf(L) @@ -595,6 +612,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) if(isturf(L.loc)) @@ -646,6 +664,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE team = new /datum/team/abductor_team if(team.team_number > ABDUCTOR_MAX_TEAMS) @@ -685,6 +704,7 @@ /datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE) if(required_candidates > (dead_players.len + list_observers.len)) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") return FALSE if(!spawn_loc) var/list/spawn_locs = list() @@ -725,3 +745,31 @@ #undef ABDUCTOR_MAX_TEAMS #undef REVENANT_SPAWN_THRESHOLD + +////////////////////////////////////////////// +// // +// BLOODSUCKERS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/latejoin/bloodsucker + name = "Bloodsucker Infiltrator" + config_tag = "latejoin_bloodsucker" + antag_datum = ANTAG_DATUM_BLOODSUCKER + antag_flag = ROLE_TRAITOR + restricted_roles = list("AI", "Cyborg") + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + required_candidates = 1 + weight = 3 + cost = 10 + requirements = list(90,80,70,60,55,50,45,40,35,30) + high_population_requirement = 30 + repeatable = TRUE + +/datum/dynamic_ruleset/latejoin/bloodsucker/execute() + var/mob/M = pick(candidates) + assigned += M.mind + M.mind.special_role = antag_flag + if(mode.make_bloodsucker(M.mind)) + mode.bloodsuckers += M + return TRUE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 9eb06884c1..e5bb0af464 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -21,6 +21,7 @@ requirements = list(50,50,50,50,50,50,50,50,50,50) high_population_requirement = 40 antag_cap = list(1,1,1,1,2,2,2,2,3,3) + always_max_weight = TRUE var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec) /datum/dynamic_ruleset/roundstart/traitor/pre_execute() @@ -149,6 +150,7 @@ /datum/dynamic_ruleset/roundstart/wizard name = "Wizard" config_tag = "wizard" + persistent = TRUE antag_flag = ROLE_WIZARD antag_datum = /datum/antagonist/wizard minimum_required_age = 14 @@ -183,8 +185,25 @@ for(var/datum/mind/M in assigned) M.current.forceMove(pick(GLOB.wizardstart)) M.add_antag_datum(new antag_datum()) + roundstart_wizards += M return TRUE +/datum/dynamic_ruleset/roundstart/wizard/rule_process() // i can literally copy this from are_special_antags_dead it's great + for(var/datum/mind/wizard in roundstart_wizards) + if(isliving(wizard.current) && wizard.current.stat!=DEAD) + return FALSE + + for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead() + if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard)) + return FALSE + + if(SSevents.wizardmode) //If summon events was active, turn it off + SSevents.toggleWizardmode() + SSevents.resetFrequency() + + return RULESET_STOP_PROCESSING + + ////////////////////////////////////////////// // // // BLOOD CULT // @@ -263,7 +282,7 @@ requirements = list(100,90,80,70,60,50,50,50,50,50) high_population_requirement = 50 flags = HIGHLANDER_RULESET - antag_cap = list(2,2,2,3,3,3,4,4,5,5) + antag_cap = list(1,1,2,3,4,5,5,5,5,5) var/datum/team/nuclear/nuke_team /datum/dynamic_ruleset/roundstart/nuclear/ready(forced = FALSE) @@ -760,3 +779,42 @@ var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) spawn_meteors(ramp_up_final, wavetype) + +////////////////////////////////////////////// +// // +// BLOODSUCKERS // +// // +////////////////////////////////////////////// + +/datum/dynamic_ruleset/roundstart/bloodsucker + name = "Bloodsuckers" + config_tag = "bloodsucker" + persistent = TRUE + antag_flag = ROLE_BLOODSUCKER + antag_datum = ANTAG_DATUM_BLOODSUCKER + minimum_required_age = 0 + protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") + restricted_roles = list("Cyborg", "AI") + required_candidates = 1 + weight = 2 + cost = 15 + scaling_cost = 10 + requirements = list(90,80,70,60,50,50,50,50,50,50) + high_population_requirement = 50 + antag_cap = list(1,1,1,1,1,2,2,2,2,2) + +/datum/dynamic_ruleset/roundstart/bloodsucker/pre_execute() + var/num_bloodsuckers = antag_cap[indice_pop] * (scaled_times + 1) + for (var/i = 1 to num_bloodsuckers) + var/mob/M = pick_n_take(candidates) + assigned += M.mind + M.mind.special_role = ROLE_BLOODSUCKER + M.mind.restricted_roles = restricted_roles + return TRUE + +/datum/dynamic_ruleset/roundstart/bloodsucker/execute() + mode.check_start_sunlight() + for(var/datum/mind/M in assigned) + if(mode.make_bloodsucker(M)) + mode.bloodsuckers += M + return TRUE diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4d7b346241..3a258599b7 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -81,6 +81,7 @@ ///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things /datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. + //finalize_monster_hunters() Disabled for now if(!report) report = !CONFIG_GET(flag/no_intercept_report) addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) @@ -305,48 +306,88 @@ // The odds become: // Player A: 150 / 250 = 0.6 = 60% // Player B: 100 / 250 = 0.4 = 40% -/datum/game_mode/proc/antag_pick(list/datum/candidates) + +//Use return list if you want a list, with the arg being the number you want returned. +//WARNING: THIS PROC DOES NOT TAKE INTO ACCOUNT WHAT SSPersistence ALREADY HAS FOR "ADJUST ANTAG REP". If this is used more than once +//and the person rolls more than once, they will not get even more deduction! +//More efficient if you use return list instead of calling this multiple times +//fail_default_pick makes it use pick() instead of antag rep if it can't find anyone +//allow_zero_if_insufficient allows it to pick people with zero rep if there isn't enough antags +/datum/game_mode/proc/antag_pick(list/datum/mind/candidates, return_list = FALSE, fail_default_pick = TRUE, allow_zero_if_insufficient = TRUE) if(!CONFIG_GET(flag/use_antag_rep)) // || candidates.len <= 1) return pick(candidates) - // Tickets start at 100 - var/DEFAULT_ANTAG_TICKETS = CONFIG_GET(number/default_antag_tickets) + //whoever named the config entries is a bad person :( - // You may use up to 100 extra tickets (double your odds) - var/MAX_TICKETS_PER_ROLL = CONFIG_GET(number/max_tickets_per_roll) - - - var/total_tickets = 0 - - MAX_TICKETS_PER_ROLL += DEFAULT_ANTAG_TICKETS - - var/p_ckey - var/p_rep - - for(var/datum/mind/mind in candidates) - p_ckey = ckey(mind.key) - total_tickets += min(SSpersistence.antag_rep[p_ckey] + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL) - - var/antag_select = rand(1,total_tickets) - var/current = 1 - - for(var/datum/mind/mind in candidates) - p_ckey = ckey(mind.key) - p_rep = SSpersistence.antag_rep[p_ckey] - - var/previous = current - var/spend = min(p_rep + DEFAULT_ANTAG_TICKETS, MAX_TICKETS_PER_ROLL) - current += spend - - if(antag_select >= previous && antag_select <= (current-1)) - SSpersistence.antag_rep_change[p_ckey] = -(spend - DEFAULT_ANTAG_TICKETS) - -// WARNING("AR_DEBUG: Player [mind.key] won spending [spend] tickets from starting value [SSpersistence.antag_rep[p_ckey]]") - - return mind - - WARNING("Something has gone terribly wrong. /datum/game_mode/proc/antag_pick failed to select a candidate. Falling back to pick()") - return pick(candidates) + //Tickets you get for free + var/free_tickets = CONFIG_GET(number/default_antag_tickets) + //Max extra tickets you can use + var/additional_tickets = CONFIG_GET(number/max_tickets_per_roll) + + var/list/ckey_to_mind = list() //this is admittedly shitcode but I'm webediting + var/list/prev_tickets = SSpersistence.antag_rep //cache for hyper-speed in theory. how many tickets someone has stored + var/list/curr_tickets = list() //how many tickets someone has for *this* antag roll, so with the free tickets + var/list/datum/mind/insufficient = list() //who got cucked out of an antag roll due to not having *any* tickets + for(var/datum/mind/M in candidates) + var/mind_ckey = ckey(M.key) + var/can_spend = min(prev_tickets[mind_ckey], additional_tickets) //they can only spend up to config/max_tickets_per_roll + var/amount = can_spend + free_tickets //but they get config/default_antag_tickets for free + if(amount <= 0) //if they don't have any + insufficient += M //too bad! + continue + curr_tickets[mind_ckey] = amount + ckey_to_mind[mind_ckey] = M //make sure we can look them up after picking + + if(!return_list) //return a single guy + var/ckey + if(length(curr_tickets)) + ckey = pickweight(curr_tickets) + SSpersistence.antag_rep_change[ckey] = -(curr_tickets[ckey] - free_tickets) //deduct what they spent + var/mind = ckey_to_mind[ckey] || (allow_zero_if_insufficient? pick(insufficient) : null) //we want their mind + if(!mind) //no mind + var/warning = "WARNING: No antagonists were successfully picked by /datum/gamemode/proc/antag_pick()![fail_default_pick? " Defaulting to pick()!":""]" + message_admins(warning) + log_game(warning) + if(fail_default_pick) + mind = pick(candidates) + return mind + else //the far more efficient and proper use of this, to get a list + var/list/rolled = list() + var/list/spend_tickets = list() + for(var/i in 1 to return_list) + if(!length(curr_tickets)) //ah heck, we're out of candidates.. + break + var/ckey = pickweight(curr_tickets) //pick + rolled += ckey //add + spend_tickets[ckey] = curr_tickets[ckey] - free_tickets + curr_tickets -= ckey //don't roll them again + var/missing = return_list - length(rolled) + var/list/add + if((missing > 0) && allow_zero_if_insufficient) //need more.. + for(var/i in 1 to missing) + if(!length(insufficient)) + break //still not enough + var/datum/mind/M = pick_n_take(insufficient) + add += M + if(!length(rolled) && !length(add)) //if no one could normally roll AND no one can zero roll + var/warning = "WARNING: No antagonists were successfully picked by /datum/gamemode/proc/antag_pick()![fail_default_pick? " Defaulting to pick()!":""]" + message_admins(warning) + log_game(warning) + var/list/failed = list() + if(fail_default_pick) + var/list/C = candidates.Copy() + for(var/i in 1 to return_list) + if(!length(C)) + break + failed += pick_n_take(C) + return failed //Wew, no one qualified! + for(var/i in 1 to length(rolled)) + var/ckey = rolled[i] + SSpersistence.antag_rep_change[ckey] = -(spend_tickets[ckey]) //deduct what all of the folks who rolled spent + rolled[i] = ckey_to_mind[ckey] //whoever called us wants minds, not ckeys + if(add) + rolled += add + return rolled /datum/game_mode/proc/get_players_for_role(role) var/list/players = list() diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm similarity index 94% rename from modular_citadel/code/game/gamemodes/gangs/dominator.dm rename to code/game/gamemodes/gangs/dominator.dm index c590baf62e..8c1272dcbd 100644 --- a/modular_citadel/code/game/gamemodes/gangs/dominator.dm +++ b/code/game/gamemodes/gangs/dominator.dm @@ -66,18 +66,18 @@ add_overlay("damage") /obj/machinery/dominator/examine(mob/user) - ..() + . = ..() if(stat & BROKEN) return if(gang && gang.domination_time != NOT_DOMINATING) if(gang.domination_time > world.time) - to_chat(user, "Hostile Takeover in progress. Estimated [gang.domination_time_remaining()] seconds remain.") + . += "Hostile Takeover in progress. Estimated [gang.domination_time_remaining()] seconds remain." else - to_chat(user, "Hostile Takeover of [station_name()] successful. Have a great day.") + . += "Hostile Takeover of [station_name()] successful. Have a great day." else - to_chat(user, "System on standby.") - to_chat(user, "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%") + . += "System on standby." + . += "System Integrity: [round((obj_integrity/max_integrity)*100,1)]%" /obj/machinery/dominator/process() ..() diff --git a/modular_citadel/code/game/gamemodes/gangs/dominator_countdown.dm b/code/game/gamemodes/gangs/dominator_countdown.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/dominator_countdown.dm rename to code/game/gamemodes/gangs/dominator_countdown.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang.dm b/code/game/gamemodes/gangs/gang.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang.dm rename to code/game/gamemodes/gangs/gang.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm b/code/game/gamemodes/gangs/gang_datums.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_datums.dm rename to code/game/gamemodes/gangs/gang_datums.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_decals.dm b/code/game/gamemodes/gangs/gang_decals.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_decals.dm rename to code/game/gamemodes/gangs/gang_decals.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_hud.dm b/code/game/gamemodes/gangs/gang_hud.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_hud.dm rename to code/game/gamemodes/gangs/gang_hud.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_items.dm b/code/game/gamemodes/gangs/gang_items.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_items.dm rename to code/game/gamemodes/gangs/gang_items.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_pen.dm b/code/game/gamemodes/gangs/gang_pen.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gang_pen.dm rename to code/game/gamemodes/gangs/gang_pen.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gangs.dm b/code/game/gamemodes/gangs/gangs.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gangs.dm rename to code/game/gamemodes/gangs/gangs.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/gangtool.dm b/code/game/gamemodes/gangs/gangtool.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/gangtool.dm rename to code/game/gamemodes/gangs/gangtool.dm diff --git a/modular_citadel/code/game/gamemodes/gangs/implant_gang.dm b/code/game/gamemodes/gangs/implant_gang.dm similarity index 100% rename from modular_citadel/code/game/gamemodes/gangs/implant_gang.dm rename to code/game/gamemodes/gangs/implant_gang.dm diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 58f551c648..6d681f8108 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/examine(mob/user) if(!(flags_1 & ADMIN_SPAWNED_1) && isliving(user)) SSmedals.UnlockMedal(MEDAL_METEOR, user.client) - ..() + return ..() /obj/effect/meteor/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_MINING) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 1767d468ec..632d59c84d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -144,7 +144,7 @@ /datum/outfit/syndicate/no_crystals tc = 0 -/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H) +/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) var/obj/item/radio/R = H.ears R.set_frequency(FREQ_SYNDICATE) R.freqlock = TRUE diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 8459819b5b..74554ac9f8 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -14,8 +14,8 @@ false_report_weight = 10 restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") - required_players = 30 - required_enemies = 2 + required_players = 20 + required_enemies = 1 recommended_enemies = 3 enemy_minimum_age = 14 diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 3d0931d534..c98795c90b 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -25,10 +25,10 @@ // update the invisibility and icon /obj/machinery/bluespace_beacon/hide(intact) invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - updateicon() + update_icon() // update the icon_state -/obj/machinery/bluespace_beacon/proc/updateicon() +/obj/machinery/bluespace_beacon/update_icon() var/state="floor_beacon" if(invisibility) @@ -45,4 +45,4 @@ else if (Beacon.loc != loc) Beacon.forceMove(loc) - updateicon() + update_icon() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 28d56dfeda..b0c7299b34 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -12,6 +12,7 @@ density = FALSE state_open = TRUE circuit = /obj/item/circuitboard/machine/sleeper + req_access = list(ACCESS_CMO) //Used for reagent deletion and addition of non medicines var/efficiency = 1 var/min_health = 30 var/list/available_chems @@ -28,9 +29,27 @@ /obj/machinery/sleeper/Initialize() . = ..() + create_reagents(500, NO_REACT) occupant_typecache = GLOB.typecache_living update_icon() reset_chem_buttons() + RefreshParts() + add_inital_chems() + +/obj/machinery/sleeper/on_deconstruction() + var/obj/item/reagent_containers/sleeper_buffer/buffer = new (loc) + buffer.volume = reagents.maximum_volume + buffer.reagents.maximum_volume = reagents.maximum_volume + reagents.trans_to(buffer.reagents, reagents.total_volume) + +/obj/machinery/sleeper/proc/add_inital_chems() + for(var/i in available_chems) + var/datum/reagent/R = reagents.has_reagent(i) + if(!R) + reagents.add_reagent(i, (20)) + continue + if(R.volume < 20) + reagents.add_reagent(i, (20 - R.volume)) /obj/machinery/sleeper/RefreshParts() var/E @@ -47,6 +66,11 @@ available_chems |= possible_chems[i] reset_chem_buttons() + //Total container size 500 - 2000u + if(reagents) + reagents.maximum_volume = (500*E) + + /obj/machinery/sleeper/update_icon() icon_state = initial(icon_state) if(state_open) @@ -81,7 +105,42 @@ if (. & EMP_PROTECT_SELF) return if(is_operational() && occupant) + var/datum/reagent/R = pick(reagents.reagent_list) + inject_chem(R.id, occupant) open_machine() + //Is this too much? + if(severity == EMP_HEAVY) + var/chem = pick(available_chems) + available_chems -= chem + available_chems += get_random_reagent_id() + reset_chem_buttons() + +/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/reagent_containers/sleeper_buffer)) + var/obj/item/reagent_containers/sleeper_buffer/SB = I + if((SB.reagents.total_volume + reagents.total_volume) < reagents.maximum_volume) + SB.reagents.trans_to(reagents, SB.reagents.total_volume) + visible_message("[user] places the [SB] into the [src].") + qdel(SB) + return + else + SB.reagents.trans_to(reagents, SB.reagents.total_volume) + visible_message("[user] adds as much as they can to the [src] from the [SB].") + return + if(istype(I, /obj/item/reagent_containers)) + var/obj/item/reagent_containers/RC = I + if(RC.reagents.total_volume == 0) + to_chat(user, "The [I] is empty!") + for(var/datum/reagent/R in RC.reagents.reagent_list) + if((obj_flags & EMAGGED) || (allowed(usr))) + break + if(!istype(R, /datum/reagent/medicine)) + visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"") + return + RC.reagents.trans_to(reagents, 1000) + visible_message("[user] adds as much as they can to the [src] from the [I].") + return + /obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) @@ -122,16 +181,18 @@ open_machine() /obj/machinery/sleeper/AltClick(mob/user) + . = ..() if(!user.canUseTopic(src, !issilicon(user))) return if(state_open) close_machine() else open_machine() + return TRUE /obj/machinery/sleeper/examine(mob/user) - ..() - to_chat(user, "Alt-click [src] to [state_open ? "close" : "open"] it.") + . = ..() + . += "Alt-click [src] to [state_open ? "close" : "open"] it." /obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) @@ -141,18 +202,24 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "sleeper", name, 375, 550, master_ui, state) + ui = new(user, src, ui_key, "sleeper", name, 550, 700, master_ui, state) ui.open() /obj/machinery/sleeper/ui_data() var/list/data = list() data["occupied"] = occupant ? 1 : 0 data["open"] = state_open + data["efficiency"] = efficiency + data["current_vol"] = reagents.total_volume + data["tot_capacity"] = reagents.maximum_volume data["chems"] = list() for(var/chem in available_chems) - var/datum/reagent/R = GLOB.chemical_reagents_list[chem] - data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem))) + var/datum/reagent/R = reagents.has_reagent(chem) + R = GLOB.chemical_reagents_list[chem] + data["synthchems"] += list(list("name" = R.name, "id" = R.id, "synth_allowed" = synth_allowed(chem))) + for(var/datum/reagent/R in reagents.reagent_list) + data["chems"] += list(list("name" = R.name, "id" = R.id, "vol" = R.volume, "purity" = R.purity, "allowed" = chem_allowed(R.id))) data["occupant"] = list() var/mob/living/mob_occupant = occupant @@ -184,8 +251,15 @@ if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len) for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) + data["occupant"]["failing_organs"] = list() + var/mob/living/carbon/C = mob_occupant + if(C) + for(var/obj/item/organ/Or in C.getFailingOrgans()) + if(istype(Or, /obj/item/organ/brain)) + continue + data["occupant"]["failing_organs"] += list(list("name" = Or.name)) + if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner. - var/mob/living/carbon/C = mob_occupant var/blood_id = C.get_blood_id() if(blood_id) data["occupant"]["blood"] = list() // We can start populating this list. @@ -196,7 +270,7 @@ blood_type = R.name else blood_type = blood_id - data["occupant"]["blood"]["maxBloodVolume"] = BLOOD_VOLUME_NORMAL + data["occupant"]["blood"]["maxBloodVolume"] = (BLOOD_VOLUME_NORMAL*C.blood_ratio) data["occupant"]["blood"]["currentBloodVolume"] = C.blood_volume data["occupant"]["blood"]["dangerBloodVolume"] = BLOOD_VOLUME_SAFE data["occupant"]["blood"]["bloodType"] = blood_type @@ -216,24 +290,49 @@ . = TRUE if("inject") var/chem = params["chem"] + var/amount = text2num(params["volume"]) if(!is_operational() || !mob_occupant) return if(mob_occupant.health < min_health && chem != "epinephrine") return - if(inject_chem(chem, usr)) + if(inject_chem(chem, usr, amount)) . = TRUE if(scrambled_chems && prob(5)) to_chat(usr, "Chemical system re-route detected, results may not be as expected!") + if("synth") + var/chem = params["chem"] + if(!is_operational()) + return + reagents.add_reagent(chem_buttons[chem], 10) //other_purity = 0.75 for when the mechanics are in + if("purge") + var/chem = params["chem"] + if(allowed(usr)) + if(!is_operational()) + return + reagents.remove_reagent(chem, 10) + return + if(chem in available_chems) + if(!is_operational()) + return + /*var/datum/reagent/R = reagents.has_reagent(chem) //For when purity effects are in + if(R.purity < 0.8)*/ + reagents.remove_reagent(chem, 10) + else + visible_message("Access Denied.") + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + /obj/machinery/sleeper/emag_act(mob/user) . = ..() + obj_flags |= EMAGGED scramble_chem_buttons() to_chat(user, "You scramble the sleeper's user interface!") return TRUE -/obj/machinery/sleeper/proc/inject_chem(chem, mob/user) - if((chem in available_chems) && chem_allowed(chem)) - occupant.reagents.add_reagent(chem_buttons[chem], 10) //emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU +//trans to +/obj/machinery/sleeper/proc/inject_chem(chem, mob/user, volume = 10) + if(chem_allowed(chem)) + reagents.trans_id_to(occupant, chem, volume)//emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU if(user) log_combat(user, occupant, "injected [chem] into", addition = "via [src]") return TRUE @@ -246,6 +345,14 @@ var/occ_health = mob_occupant.health > min_health || chem == "epinephrine" return amount && occ_health +/obj/machinery/sleeper/proc/synth_allowed(chem) + var/datum/reagent/R = reagents.has_reagent(chem) + if(!R) + return TRUE + if(R.volume < 50) + return TRUE + return FALSE + /obj/machinery/sleeper/proc/reset_chem_buttons() scrambled_chems = FALSE LAZYINITLIST(chem_buttons) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index e2dcf552c1..5f44fccdac 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -181,8 +181,9 @@ Class Procs: if(isliving(A)) var/mob/living/L = A L.update_canmove() - SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant) - occupant = null + if(occupant) + SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant) + occupant = null /obj/machinery/proc/can_be_occupant(atom/movable/am) return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am) @@ -454,20 +455,20 @@ Class Procs: /obj/machinery/examine(mob/user) . = ..() if(stat & BROKEN) - to_chat(user, "It looks broken and non-functional.") + . += "It looks broken and non-functional." if(!(resistance_flags & INDESTRUCTIBLE)) if(resistance_flags & ON_FIRE) - to_chat(user, "It's on fire!") + . += "It's on fire!" var/healthpercent = (obj_integrity/max_integrity) * 100 switch(healthpercent) if(50 to 99) - to_chat(user, "It looks slightly damaged.") + . += "It looks slightly damaged." if(25 to 50) - to_chat(user, "It appears heavily damaged.") + . += "It appears heavily damaged." if(0 to 25) - to_chat(user, "It's falling apart!") + . += "It's falling apart!" if(user.research_scanner && component_parts) - to_chat(user, display_parts(user, TRUE)) + . += display_parts(user, TRUE) //called on machinery construction (i.e from frame to machinery) but not on initialization /obj/machinery/proc/on_construction() diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index cac29404d2..1703ce57d1 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -14,8 +14,8 @@ req_access = list(ACCESS_AI_UPLOAD) /obj/machinery/ai_slipper/examine(mob/user) - ..() - to_chat(user, "It has [uses] uses of foam remaining.") + . = ..() + . += "It has [uses] uses of foam remaining." /obj/machinery/ai_slipper/power_change() if(stat & BROKEN) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 8419f5803c..b41910f010 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -11,9 +11,9 @@ var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') /obj/machinery/aug_manipulator/examine(mob/user) - ..() + . = ..() if(storedpart) - to_chat(user, "Alt-click to eject the limb.") + . += "Alt-click to eject the limb." /obj/machinery/aug_manipulator/Initialize() initial_icon_state = initial(icon_state) @@ -132,8 +132,8 @@ ..() if(!user.canUseTopic(src)) return - else - eject_part(user) + eject_part(user) + return TRUE /obj/machinery/aug_manipulator/power_change() ..() diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm index c489f6c9c9..c92e55084d 100644 --- a/code/game/machinery/bloodbankgen.dm +++ b/code/game/machinery/bloodbankgen.dm @@ -12,7 +12,6 @@ var/filling = FALSE var/obj/item/reagent_containers/blood/bag = null var/obj/item/reagent_containers/blood/outbag = null - var/bloodstored = 0 var/maxbloodstored = 1000 var/menustat = "menu" var/efficiency = 0 @@ -20,7 +19,7 @@ /obj/machinery/bloodbankgen/Initialize() . = ..() - create_reagents(1000) + create_reagents(maxbloodstored, AMOUNT_VISIBLE) update_icon() /obj/machinery/bloodbankgen/Destroy() @@ -28,12 +27,13 @@ QDEL_NULL(outbag) return ..() -/obj/machinery/bloodbankgen/contents_explosion(severity, target) - ..() +/obj/machinery/bloodbankgen/examine(mob/user) + . = ..() if(bag) - bag.ex_act(severity, target) + . += "It has \a [bag.name] hooked to its input slot. The counter reads: \"Current Capacity: [bag.reagents.total_volume] of [bag.reagents.maximum_volume]\"" if(outbag) - outbag.ex_act(severity, target) + . += "It has \a [bag.name] hooked to its output slot. The counter reads: \"Current Capacity: [outbag.reagents.total_volume] of [outbag.reagents.maximum_volume]\"" + /obj/machinery/bloodbankgen/handle_atom_del(atom/A) ..() @@ -115,80 +115,48 @@ /obj/machinery/bloodbankgen/process() if(!is_operational()) - return PROCESS_KILL - - bloodstored = reagents.total_volume + return var/transfer_amount = 20 if(draining) - if(reagents.total_volume >= reagents.maximum_volume) - draining = FALSE + if(reagents.total_volume >= reagents.maximum_volume || !bag || !bag.reagents.total_volume) + beep_stop_pumping() return - - if(bag) - if(bag.reagents.total_volume) - var/datum/reagent/blood/B = bag.reagents.has_reagent("blood") - if(B) - var/amount = reagents.maximum_volume - reagents.total_volume //monitor the machine's internal storage - amount = min(amount, transfer_amount) - if(!amount) - draining = FALSE - updateUsrDialog() - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - return - - if(bag.blood_type == "SY") //no infinite loops using synthetics. - reagents.add_reagent("syntheticblood", amount) - else - reagents.add_reagent("syntheticblood", (amount+(5*efficiency))) - - if(bag.reagents.total_volume >= amount) - bag.reagents.remove_reagent("blood", amount) - else - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - draining = FALSE - - bag.update_icon() - update_icon() - updateUsrDialog() - else - draining = FALSE - updateUsrDialog() + var/blood_amount = bag.reagents.get_reagent_amount("blood") + //monitor the machine and blood bag's reagents storage. + var/amount = min(blood_amount, min(transfer_amount, reagents.maximum_volume - reagents.total_volume)) + if(!amount) + beep_stop_pumping() return + var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics. + reagents.add_reagent("syntheticblood", amount + bonus) + bag.reagents.remove_reagent("blood", amount) + update_icon() if(filling) - if(!reagents || !reagents.total_volume) - filling = FALSE //there ain't anything in the machine yo. + if(!reagents.total_volume || !outbag || outbag.reagents.total_volume >= outbag.reagents.maximum_volume) + beep_stop_pumping("[src] pings.", TRUE) return - if(outbag && outbag.reagents.total_volume < outbag.reagents.maximum_volume) - var/amount = outbag.reagents.maximum_volume - outbag.reagents.total_volume //monitor the output bag's internal storage - amount = min(amount, transfer_amount) - if(!amount) - filling = FALSE - visible_message("[src] pings.") - playsound(loc, 'sound/machines/beep.ogg', 50, 1) - updateUsrDialog() - return + //monitor the output bag's reagents storage. + var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume) + reagents.trans_to(outbag, amount) + update_icon() - reagents.trans_to(outbag, amount) - outbag.update_icon() - update_icon() - updateUsrDialog() - else - visible_message("[src] pings.") - playsound(loc, 'sound/machines/beep.ogg', 50, 1) - filling = FALSE - updateUsrDialog() - return +/obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE) + if(out_instead_of_in) + filling = FALSE + else + draining = FALSE + updateUsrDialog() + audible_message(msg) + playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) /obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params) if(user.a_intent == INTENT_HARM) return ..() - if(default_deconstruction_screwdriver(user, "bloodbank-off", "bloodbank-off", O)) + if(default_deconstruction_screwdriver(user, "bloodbank-off", "bloodbank-off", O) || default_unfasten_wrench(user, O, 20) == SUCCESSFUL_UNFASTEN) if(bag) var/obj/item/reagent_containers/blood/B = bag B.forceMove(drop_location()) @@ -204,31 +172,37 @@ return if(istype(O, /obj/item/reagent_containers/blood)) - . = 1 //no afterattack - if(!panel_open) - if(bag && outbag) - to_chat(user, "This machine already has bags attached.") - - if(!bag && !outbag) - var/choice = alert(user, "Choose where to place [O]", "", "Input", "Cancel", "Output") - switch(choice) - if("Cancel") - return FALSE - if("Input") - attachinput(O, user) - if("Output") - attachoutput(O, user) - else if(!bag) - attachinput(O, user) - else if(!outbag) - attachoutput(O, user) - else - to_chat(user, "Close the maintenance panel first.") - return + . = TRUE //no afterattack + var/msg + if(panel_open) + . += "Close the maintenance panel" + if(!anchored) + . += "[msg ? " and a" : "A"]nchor its bolts" + if(length(msg)) + to_chat(user, "[msg] first.") + return + if(bag && outbag) + to_chat(user, "This machine already has bags attached.") + if(!bag && !outbag) + var/choice = alert(user, "Choose where to place [O]", "", "Input", "Cancel", "Output") + switch(choice) + if("Cancel") + return FALSE + if("Input") + attachinput(O, user) + if("Output") + attachoutput(O, user) + else if(!bag) + attachinput(O, user) + else if(!outbag) + attachoutput(O, user) else to_chat(user, "You cannot put this in [src]!") +/obj/machinery/bloodbankgen/is_operational() + return ..() && anchored + /obj/machinery/bloodbankgen/ui_interact(mob/user) . = ..() @@ -268,7 +242,7 @@ if(!bag && !outbag) dat += "
    No containers inside, please insert container.
    " - var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 520) + var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 420) popup.set_content(dat) popup.open() @@ -306,6 +280,7 @@ if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) usr.put_in_hands(bag) bag = null + draining = null update_icon() /obj/machinery/bloodbankgen/proc/detachoutput() @@ -314,6 +289,7 @@ if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) usr.put_in_hands(outbag) outbag = null + filling = null update_icon() /obj/machinery/bloodbankgen/proc/attachinput(obj/item/O, mob/user) @@ -339,23 +315,22 @@ to_chat(user, "There is already something in this slot!") /obj/machinery/bloodbankgen/Topic(href, href_list) - if(..() || panel_open) + . = ..() + if(. | !is_operational()) return usr.set_machine(src) if(href_list["activateinput"]) activateinput() - updateUsrDialog() else if(href_list["detachinput"]) detachinput() - updateUsrDialog() else if(href_list["activateoutput"]) activateoutput() - updateUsrDialog() else if(href_list["detachoutput"]) detachoutput() - updateUsrDialog() + + updateUsrDialog() diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index fb384d55ae..1c0635fd3d 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -13,7 +13,7 @@ var/chargelevel = -1 var/charge_rate = 500 -/obj/machinery/cell_charger/proc/updateicon() +/obj/machinery/cell_charger/update_icon() cut_overlays() if(charging) add_overlay(image(charging.icon, charging.icon_state)) @@ -24,10 +24,10 @@ add_overlay("ccharger-o[newlevel]") /obj/machinery/cell_charger/examine(mob/user) - ..() - to_chat(user, "There's [charging ? "a" : "no"] cell in the charger.") + . = ..() + . += "There's [charging ? "a" : "no"] cell in the charger." if(charging) - to_chat(user, "Current charge: [round(charging.percent(), 1)]%.") + . += "Current charge: [round(charging.percent(), 1)]%." /obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stock_parts/cell) && !panel_open) @@ -53,7 +53,7 @@ charging = W user.visible_message("[user] inserts a cell into [src].", "You insert a cell into [src].") chargelevel = -1 - updateicon() + update_icon() else if(!charging && default_deconstruction_screwdriver(user, icon_state, icon_state, W)) return @@ -76,7 +76,7 @@ charging.update_icon() charging = null chargelevel = -1 - updateicon() + update_icon() /obj/machinery/cell_charger/attack_hand(mob/user) . = ..() @@ -127,4 +127,4 @@ use_power(charge_rate) charging.give(charge_rate) //this is 2558, efficient batteries exist - updateicon() + update_icon() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index e65da0fcff..e683d67be2 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -93,20 +93,20 @@ to_chat(user, "You flip the write-protect tab to [read_only ? "protected" : "unprotected"].") /obj/item/disk/data/examine(mob/user) - ..() - to_chat(user, "The write-protect tab is set to [read_only ? "protected" : "unprotected"].") + . = ..() + . += "The write-protect tab is set to [read_only ? "protected" : "unprotected"]." //Clonepod /obj/machinery/clonepod/examine(mob/user) - ..() + . = ..() var/mob/living/mob_occupant = occupant if(mess) - to_chat(user, "It's filled with blood and viscera. You swear you can see it moving...") + . += "It's filled with blood and viscera. You swear you can see it moving..." if(is_operational() && mob_occupant) if(mob_occupant.stat != DEAD) - to_chat(user, "Current clone cycle is [round(get_completion())]% complete.") + . += "Current clone cycle is [round(get_completion())]% complete." /obj/machinery/clonepod/return_air() // We want to simulate the clone not being in contact with diff --git a/code/game/machinery/computer/arcade/orion_trail.dm b/code/game/machinery/computer/arcade/orion_trail.dm index 023b1048ce..c8c7bc1319 100644 --- a/code/game/machinery/computer/arcade/orion_trail.dm +++ b/code/game/machinery/computer/arcade/orion_trail.dm @@ -762,13 +762,13 @@ var/active = 0 //if the ship is on /obj/item/orion_ship/examine(mob/user) - ..() + . = ..() if(!(in_range(user, src))) return if(!active) - to_chat(user, "There's a little switch on the bottom. It's flipped down.") + . += "There's a little switch on the bottom. It's flipped down." else - to_chat(user, "There's a little switch on the bottom. It's flipped up.") + . += "There's a little switch on the bottom. It's flipped up." /obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse if(active) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index c8a4d68575..e8e15ff586 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,7 +19,7 @@ return to_chat(user, "You start deconstructing the frame...") - if(P.use_tool(src, user, 20, volume=50)) + if(P.use_tool(src, user, 20, volume=50) && state == 0) to_chat(user, "You deconstruct the frame.") var/obj/item/stack/sheet/metal/M = new (drop_location(), 5) M.add_fingerprint(user) @@ -28,7 +28,7 @@ if(1) if(istype(P, /obj/item/wrench)) to_chat(user, "You start to unfasten the frame...") - if(P.use_tool(src, user, 20, volume=50)) + if(P.use_tool(src, user, 20, volume=50) && state == 1) to_chat(user, "You unfasten the frame.") setAnchored(FALSE) state = 0 @@ -72,9 +72,7 @@ if(!P.tool_start_check(user, amount=5)) return to_chat(user, "You start adding cables to the frame...") - if(P.use_tool(src, user, 20, volume=50, amount=5)) - if(state != 2) - return + if(P.use_tool(src, user, 20, 5, 50, CALLBACK(src, .proc/check_state, 2))) to_chat(user, "You add cables to the frame.") state = 3 icon_state = "3" @@ -94,9 +92,7 @@ return playsound(src, 'sound/items/deconstruct.ogg', 50, 1) to_chat(user, "You start to put in the glass panel...") - if(P.use_tool(src, user, 20, amount=2)) - if(state != 3) - return + if(P.use_tool(src, user, 20, 2, 0, CALLBACK(src, .proc/check_state, 3))) to_chat(user, "You put in the glass panel.") state = 4 src.icon_state = "4" @@ -121,6 +117,11 @@ if(user.a_intent == INTENT_HARM) return ..() +//callback proc used on stacks use_tool to stop unnecessary amounts being wasted from spam clicking. +/obj/structure/frame/computer/proc/check_state(target_state) + if(state == target_state) + return TRUE + return FALSE /obj/structure/frame/computer/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) @@ -132,12 +133,13 @@ ..() /obj/structure/frame/computer/AltClick(mob/user) - ..() + . = ..() if(!isliving(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return if(anchored) to_chat(usr, "You must unwrench [src] before rotating it!") - return + return TRUE setDir(turn(dir, -90)) + return TRUE diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 11935e2bfc..1bafa73aaa 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -17,13 +17,7 @@ network += lowertext(i) /obj/machinery/computer/security/check_eye(mob/user) - if(CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE)) - user.unset_machine() - return - if(!(user in watchers)) - user.unset_machine() - return - if(!watchers[user]) + if(!can_interact(user) || !(user in watchers) || !watchers[user]) user.unset_machine() return var/obj/machinery/camera/C = watchers[user] @@ -41,55 +35,50 @@ M.unset_machine() //to properly reset the view of the users if the console is deleted. return ..() -/obj/machinery/computer/security/attack_hand(mob/user) +/obj/machinery/computer/security/can_interact(mob/user) + if((!issilicon(user) && !Adjacent(user)) || is_blind(user) || !in_view_range(user, src)) + return FALSE + return ..() + +/obj/machinery/computer/security/interact(mob/user, special_state) . = ..() - if(.) - return - if(stat) + if (ismob(user) && !isliving(user)) // ghosts don't need cameras return if (!network) - throw EXCEPTION("No camera network") + CRASH("No camera network") user.unset_machine() - return + return FALSE if (!(islist(network))) - throw EXCEPTION("Camera network is not a list") + CRASH("Camera network is not a list") user.unset_machine() - return - if(..()) - user.unset_machine() - return + return FALSE var/list/camera_list = get_available_cameras() if(!(user in watchers)) for(var/Num in camera_list) var/obj/machinery/camera/CAM = camera_list[Num] - if(istype(CAM)) - if(CAM.can_use()) - watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants. - break + if(istype(CAM) && CAM.can_use()) + watchers[user] = CAM //let's give the user the first usable camera, and then let him change to the camera he wants. + break if(!(user in watchers)) user.unset_machine() // no usable camera on the network, we disconnect the user from the computer. - return + return FALSE playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0) use_camera_console(user) /obj/machinery/computer/security/proc/use_camera_console(mob/user) var/list/camera_list = get_available_cameras() var/t = input(user, "Which camera should you change to?") as null|anything in camera_list - if(user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine. + if(!src || user.machine != src) //while we were choosing we got disconnected from our computer or are using another machine. return - if(!t) + if(!t || t == "Cancel") user.unset_machine() playsound(src, 'sound/machines/terminal_off.ogg', 25, 0) return var/obj/machinery/camera/C = camera_list[t] - if(t == "Cancel") - user.unset_machine() - playsound(src, 'sound/machines/terminal_off.ogg', 25, 0) - return - if(!C || !C.can_use() || CHECK_BITFIELD(stat, NOPOWER|BROKEN) || is_blind(user) || !in_view_range(user, src) || !user.canUseTopic(src, !issilicon(user), FALSE)) + if(!C || !C.can_use() || !can_interact(user)) user.unset_machine() return FALSE diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 93b71b27e2..3bdb635d39 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -56,33 +56,34 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/centcom/get_jobs() return get_all_centcom_jobs() -/obj/machinery/computer/card/examine(mob/user) - . = ..() - if(inserted_scan_id || inserted_modify_id) - to_chat(user, "Alt-click to eject the ID card.") - /obj/machinery/computer/card/Initialize() . = ..() change_position_cooldown = CONFIG_GET(number/id_console_jobslot_delay) +/obj/machinery/computer/card/examine(mob/user) + . = ..() + if(inserted_scan_id || inserted_modify_id) + . += "Alt-click to eject the ID card." + /obj/machinery/computer/card/attackby(obj/I, mob/user, params) if(isidcard(I)) if(check_access(I) && !inserted_scan_id) if(id_insert(user, I, inserted_scan_id)) inserted_scan_id = I updateUsrDialog() - else if(!inserted_modify_id) - if(id_insert(user, I, inserted_modify_id)) - inserted_modify_id = I - updateUsrDialog() + else if(id_insert(user, I, inserted_modify_id)) + inserted_modify_id = I + updateUsrDialog() else return ..() /obj/machinery/computer/card/Destroy() if(inserted_scan_id) - QDEL_NULL(inserted_scan_id) + qdel(inserted_scan_id) + inserted_scan_id = null if(inserted_modify_id) - QDEL_NULL(inserted_modify_id) + qdel(inserted_modify_id) + inserted_modify_id = null return ..() /obj/machinery/computer/card/handle_atom_del(atom/A) @@ -106,7 +107,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/proc/job_blacklisted(jobtitle) return (jobtitle in blacklisted) - //Logic check for Topic() if you can open the job /obj/machinery/computer/card/proc/can_open_job(datum/job/job) if(job) @@ -131,6 +131,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return JOB_MAX_POSITIONS return JOB_DENIED + /obj/machinery/computer/card/proc/id_insert(mob/user, obj/item/inserting_item, obj/item/target) var/obj/item/card/id/card_to_insert = inserting_item var/holder_item = FALSE @@ -169,19 +170,19 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return TRUE /obj/machinery/computer/card/AltClick(mob/user) - ..() + . = ..() if(!user.canUseTopic(src, !issilicon(user)) || !is_operational()) return if(inserted_modify_id) if(id_eject(user, inserted_modify_id)) inserted_modify_id = null updateUsrDialog() - return + return TRUE if(inserted_scan_id) if(id_eject(user, inserted_scan_id)) inserted_scan_id = null updateUsrDialog() - return + return TRUE /obj/machinery/computer/card/ui_interact(mob/user) . = ..() @@ -202,8 +203,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if(job.title in blacklisted) continue dat += {"[job.title] - [job.current_positions]/[job.total_positions] - "} + [job.current_positions]/[job.total_positions] + "} switch(can_open_job(job)) if(JOB_ALLOWED) if(authenticated == 2) @@ -224,7 +225,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) dat += "Close Position" else dat += "Close Position" - if(-JOB_COOLDOWN) + if(JOB_COOLDOWN) var/time_to_wait = round(change_position_cooldown - ((world.time / 10) - GLOB.time_last_changed_position), 1) var/mins = round(time_to_wait / 60) var/seconds = time_to_wait - (60*mins) @@ -251,6 +252,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) dat += "" else var/list/header = list() + var/scan_name = inserted_scan_id ? html_encode(inserted_scan_id.name) : "--------" var/target_name = inserted_modify_id ? html_encode(inserted_modify_id.name) : "--------" var/target_owner = (inserted_modify_id && inserted_modify_id.registered_name) ? html_encode(inserted_modify_id.registered_name) : "--------" @@ -261,7 +263,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) Target: [target_name]
    Confirm Identity: [scan_name]
    "} else - header += {"

    " + header += {"

    Target: Remove [target_name] || Confirm Identity: Remove [scan_name]
    Access Crew Manifest
    @@ -297,7 +299,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) allJobsSlot.innerHTML = "show"; } "} - carddesc += {"
    " + carddesc += {" registered name: @@ -312,7 +314,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) jobs += "Assignment: [target_rank] (Demote)" var/list/accesses = list() - if(istype(src, /obj/machinery/computer/card/centcom)) //REE + if(istype(src, /obj/machinery/computer/card/centcom)) // REE accesses += "
    Central Command:
    " for(var/A in get_all_centcom_access()) if(A in inserted_modify_id.access) @@ -340,13 +342,13 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) accesses += "
    " accesses += "" accesses += "" - body = "[carddesc.Join()]
    [jobs]

    [accesses.Join()]
    " //CHECK THIS + body = "[carddesc.Join()]
    [jobs.Join()]

    [accesses.Join()]
    " //CHECK THIS else if (!authenticated) - body = {"Log In

    + body = {"Log In

    Access Crew Manifest

    "} if(!target_dept) - body += "

    Job Management
    " + body += "Job Management
    " dat = list("", header.Join(), body, "
    ") var/datum/browser/popup = new(user, "id_com", src.name, 900, 620) @@ -366,7 +368,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) usr.set_machine(src) switch(href_list["choice"]) if ("inserted_modify_id") - if (inserted_modify_id && !usr.get_active_held_item()) + if(inserted_modify_id && !usr.get_active_held_item()) if(id_eject(usr, inserted_modify_id)) inserted_modify_id = null updateUsrDialog() @@ -378,7 +380,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) inserted_modify_id = id_to_insert updateUsrDialog() if ("inserted_scan_id") - if (inserted_scan_id && !usr.get_active_held_item()) + if(inserted_scan_id && !usr.get_active_held_item()) if(id_eject(usr, inserted_scan_id)) inserted_scan_id = null updateUsrDialog() @@ -386,7 +388,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if(usr.get_id_in_hand()) var/obj/item/held_item = usr.get_active_held_item() var/obj/item/card/id/id_to_insert = held_item.GetID() - if(id_insert(usr, held_item, inserted_modify_id)) + if(id_insert(usr, held_item, inserted_scan_id)) inserted_scan_id = id_to_insert updateUsrDialog() if ("auth") @@ -462,7 +464,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) updateUsrDialog() break if(!jobdatum) - to_chat(usr, "No log exists for this job.") + to_chat(usr, "No log exists for this job.") updateUsrDialog() return @@ -475,7 +477,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) inserted_modify_id.assignment = "Unassigned" playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) else - to_chat(usr, "You are not authorized to demote this position.") + to_chat(usr, "You are not authorized to demote this position.") if ("reg") if (authenticated) var/t2 = inserted_modify_id @@ -485,7 +487,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) inserted_modify_id.registered_name = newName playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) else - to_chat(usr, "Invalid name entered.") + to_chat(usr, "Invalid name entered.") updateUsrDialog() return if ("mode") @@ -498,7 +500,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if("make_job_available") // MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS - if(authenticated && (ACCESS_CHANGE_IDS in inserted_scan_id.access) && !target_dept) + if(authenticated && !target_dept) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) @@ -515,7 +517,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if("make_job_unavailable") // MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS - if(authenticated && (ACCESS_CHANGE_IDS in inserted_scan_id.access) && !target_dept) + if(authenticated && !target_dept) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) @@ -533,7 +535,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if ("prioritize_job") // TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY - if(authenticated && (ACCESS_CHANGE_IDS in inserted_scan_id.access) && !target_dept) + if(authenticated && !target_dept) var/priority_target = href_list["job"] var/datum/job/j = SSjob.GetJob(priority_target) if(!j) @@ -549,7 +551,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return else SSjob.prioritized_jobs += j - to_chat(usr, "[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.") + to_chat(usr, "[j.title] has been successfully [priority ? "prioritized" : "unprioritized"]. Potential employees will notice your request.") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) if ("print") @@ -625,4 +627,4 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) #undef JOB_ALLOWED #undef JOB_COOLDOWN #undef JOB_MAX_POSITIONS -#undef JOB_DENIED \ No newline at end of file +#undef JOB_DENIED diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index b5cb066b3a..22a523c58b 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -42,12 +42,6 @@ . = ..() GLOB.shuttle_caller_list += src -/obj/machinery/computer/communications/process() - if(..()) - var/ai_autoupdate = aistate != STATE_STATUSDISPLAY && aistate != STATE_CALLSHUTTLE && aistate != STATE_PURCHASE && aistate != STATE_VIEWMESSAGE - var/machine_user_autoupdate = state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE - updateDialog(machine_user_autoupdate,ai_autoupdate) - /obj/machinery/computer/communications/Topic(href, href_list) if(..()) return @@ -76,7 +70,7 @@ if(check_access(I)) authenticated = 1 auth_id = "[I.registered_name] ([I.assignment])" - if((20 in I.access)) + if((ACCESS_CAPTAIN in I.access)) authenticated = 2 playsound(src, 'sound/machines/terminal_on.ogg', 50, 0) if(obj_flags & EMAGGED) @@ -285,7 +279,7 @@ // OMG CENTCOM LETTERHEAD if("MessageCentCom") - if(authenticated==2) + if(authenticated) if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") return @@ -586,8 +580,6 @@ popup.set_content(dat) popup.open() - popup.set_content(dat) - popup.open() /obj/machinery/computer/communications/proc/get_javascript_header(form_id) var/dat = {" - \ No newline at end of file + diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index a9f20ae8a8..c0b5ef5b40 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi index dcd10a51b7..6f6f2546d5 100644 Binary files a/icons/misc/language.dmi and b/icons/misc/language.dmi differ diff --git a/icons/misc/mark_icons.dmi b/icons/misc/mark_icons.dmi new file mode 100644 index 0000000000..1d8472752b Binary files /dev/null and b/icons/misc/mark_icons.dmi differ diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi index bdf54e36e5..39f4d12268 100644 Binary files a/icons/mob/AI.dmi and b/icons/mob/AI.dmi differ diff --git a/icons/mob/accessories.dmi b/icons/mob/accessories.dmi index 33964645ee..cda7cca404 100644 Binary files a/icons/mob/accessories.dmi and b/icons/mob/accessories.dmi differ diff --git a/icons/mob/actions/actions_elites.dmi b/icons/mob/actions/actions_elites.dmi new file mode 100644 index 0000000000..335261b0f6 Binary files /dev/null and b/icons/mob/actions/actions_elites.dmi differ diff --git a/icons/mob/actions/actions_silicon.dmi b/icons/mob/actions/actions_silicon.dmi index cd997a25ac..cf3d7a2a95 100644 Binary files a/icons/mob/actions/actions_silicon.dmi and b/icons/mob/actions/actions_silicon.dmi differ diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi index 30927d3608..072bfc8fe3 100644 Binary files a/icons/mob/actions/actions_spells.dmi and b/icons/mob/actions/actions_spells.dmi differ diff --git a/icons/mob/actions/bloodsucker.dmi b/icons/mob/actions/bloodsucker.dmi new file mode 100644 index 0000000000..c08509dbbd Binary files /dev/null and b/icons/mob/actions/bloodsucker.dmi differ diff --git a/icons/mob/animals_held.dmi b/icons/mob/animals_held.dmi new file mode 100644 index 0000000000..82a065d93a Binary files /dev/null and b/icons/mob/animals_held.dmi differ diff --git a/icons/mob/animals_held_lh.dmi b/icons/mob/animals_held_lh.dmi new file mode 100644 index 0000000000..6c407c850b Binary files /dev/null and b/icons/mob/animals_held_lh.dmi differ diff --git a/icons/mob/animals_held_rh.dmi b/icons/mob/animals_held_rh.dmi new file mode 100644 index 0000000000..322dad06d2 Binary files /dev/null and b/icons/mob/animals_held_rh.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index c57a7cc112..2188952740 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/modular_citadel/icons/mob/digishoes.dmi b/icons/mob/feet_digi.dmi similarity index 69% rename from modular_citadel/icons/mob/digishoes.dmi rename to icons/mob/feet_digi.dmi index a8e6c49423..e0a9cd462d 100644 Binary files a/modular_citadel/icons/mob/digishoes.dmi and b/icons/mob/feet_digi.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 69e75e7d28..365ed5afd9 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/icons/mob/head_muzzled.dmi similarity index 100% rename from modular_citadel/icons/mob/muzzled_helmet.dmi rename to icons/mob/head_muzzled.dmi diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 164fabe806..8ea155256c 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 1b450ab3e0..6b47171066 100644 Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/idcards_lefthand.dmi b/icons/mob/inhands/equipment/idcards_lefthand.dmi index 53b40584e7..dd7f6fbbe2 100644 Binary files a/icons/mob/inhands/equipment/idcards_lefthand.dmi and b/icons/mob/inhands/equipment/idcards_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/idcards_righthand.dmi b/icons/mob/inhands/equipment/idcards_righthand.dmi index 19a6f77c28..a7483ca2eb 100644 Binary files a/icons/mob/inhands/equipment/idcards_righthand.dmi and b/icons/mob/inhands/equipment/idcards_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 8978d17237..a166610826 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 3f8a876d43..47ed1adfee 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/melee_lefthand.dmi b/icons/mob/inhands/weapons/melee_lefthand.dmi index 092881ee01..fc82db43ae 100644 Binary files a/icons/mob/inhands/weapons/melee_lefthand.dmi and b/icons/mob/inhands/weapons/melee_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index ede430390c..a93a4e38d5 100644 Binary files a/icons/mob/inhands/weapons/melee_righthand.dmi and b/icons/mob/inhands/weapons/melee_righthand.dmi differ diff --git a/icons/mob/lavaland/lavaland_elites.dmi b/icons/mob/lavaland/lavaland_elites.dmi new file mode 100644 index 0000000000..69032735d9 Binary files /dev/null and b/icons/mob/lavaland/lavaland_elites.dmi differ diff --git a/modular_citadel/icons/mob/muzzled_mask.dmi b/icons/mob/mask_muzzled.dmi similarity index 100% rename from modular_citadel/icons/mob/muzzled_mask.dmi rename to icons/mob/mask_muzzled.dmi diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi index f8d1f22860..7886ca39fa 100644 Binary files a/icons/mob/mutant_bodyparts.dmi and b/icons/mob/mutant_bodyparts.dmi differ diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi index 5eb270d23f..de59a136d9 100644 Binary files a/icons/mob/neck.dmi and b/icons/mob/neck.dmi differ diff --git a/icons/mob/pai.dmi b/icons/mob/pai.dmi index 94fb2ee6e7..d8162cb5a7 100644 Binary files a/icons/mob/pai.dmi and b/icons/mob/pai.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 896a87ff3a..082bfb3c3e 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index d724747a50..c1912d74cc 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/mob/screen_elite.dmi b/icons/mob/screen_elite.dmi new file mode 100644 index 0000000000..f407fb79e4 Binary files /dev/null and b/icons/mob/screen_elite.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index c469773993..5b84dad999 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi new file mode 100644 index 0000000000..58dd2f5700 Binary files /dev/null and b/icons/mob/suit_digi.dmi differ diff --git a/modular_citadel/icons/mob/taur_canine.dmi b/icons/mob/taur_canine.dmi similarity index 100% rename from modular_citadel/icons/mob/taur_canine.dmi rename to icons/mob/taur_canine.dmi diff --git a/modular_citadel/icons/mob/taur_hooved.dmi b/icons/mob/taur_hooved.dmi similarity index 100% rename from modular_citadel/icons/mob/taur_hooved.dmi rename to icons/mob/taur_hooved.dmi diff --git a/modular_citadel/icons/mob/taur_naga.dmi b/icons/mob/taur_naga.dmi similarity index 100% rename from modular_citadel/icons/mob/taur_naga.dmi rename to icons/mob/taur_naga.dmi diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 3174397b54..bf0df371eb 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 072511b444..0f962591a5 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/icons/mob/uniform_digi.dmi similarity index 94% rename from modular_citadel/icons/mob/uniform_digi.dmi rename to icons/mob/uniform_digi.dmi index 3f1335153e..94d9f07e10 100644 Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/icons/mob/uniform_digi.dmi differ diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi index 105da7d865..7d95805dc5 100644 Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index d8968a107b..fd0893b300 100644 Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ diff --git a/icons/obj/cardboard_cutout.dmi b/icons/obj/cardboard_cutout.dmi index da5f58d7f7..f22b311c56 100644 Binary files a/icons/obj/cardboard_cutout.dmi and b/icons/obj/cardboard_cutout.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 701c3a2467..74a5164844 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index eb019bc44b..c62a88c829 100644 Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 195742c68c..b3cc31fc6d 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index e3a9f6d84e..728d244b5f 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index f62e546ed2..5d243f93b8 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 50f9e0a207..43162f2b7e 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index db0e5a301a..f467da6fbf 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 2ea48828d2..e7c32fdf56 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index ca339b5262..bba3efc951 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 6d5365f7fa..24ec5797d4 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index dd4d1e1f93..37adf54711 100644 Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi index e7dee2290d..469b1e1aff 100644 Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi index 245841a6b4..98d9af2ce6 100644 Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi index dfcb54b7b9..6630da1478 100644 Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/icons/obj/hydroponics/growing_mushrooms.dmi b/icons/obj/hydroponics/growing_mushrooms.dmi index aa24b394f2..20633cf85b 100644 Binary files a/icons/obj/hydroponics/growing_mushrooms.dmi and b/icons/obj/hydroponics/growing_mushrooms.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 63dc8b98fd..a57719fb3a 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 3c625cbe40..8695d03b3c 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index e6e0b940a8..e3540a782b 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ diff --git a/icons/obj/items_cyborg.dmi b/icons/obj/items_cyborg.dmi index cddb57303d..a4bd75f7e5 100644 Binary files a/icons/obj/items_cyborg.dmi and b/icons/obj/items_cyborg.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 422554715a..e41d1fb4a1 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index 7f11ba29d4..7ae1ed5a0e 100644 Binary files a/icons/obj/lavaland/artefacts.dmi and b/icons/obj/lavaland/artefacts.dmi differ diff --git a/icons/obj/lavaland/elite_trophies.dmi b/icons/obj/lavaland/elite_trophies.dmi new file mode 100644 index 0000000000..d194c93853 Binary files /dev/null and b/icons/obj/lavaland/elite_trophies.dmi differ diff --git a/icons/obj/lavaland/legionnaire_bonfire.dmi b/icons/obj/lavaland/legionnaire_bonfire.dmi new file mode 100644 index 0000000000..aed00ed001 Binary files /dev/null and b/icons/obj/lavaland/legionnaire_bonfire.dmi differ diff --git a/icons/obj/lavaland/tumor.dmi b/icons/obj/lavaland/tumor.dmi new file mode 100644 index 0000000000..a41224c823 Binary files /dev/null and b/icons/obj/lavaland/tumor.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 20e0f5f73c..45181b7c8d 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi index 037525150e..ace24db5ff 100644 Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index e38760b84d..93a1908fba 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index 1da5a66546..1ba953d284 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index ad1d34836d..a434994846 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi index bac35e68e1..5506f6f866 100644 Binary files a/icons/obj/projectiles_impact.dmi and b/icons/obj/projectiles_impact.dmi differ diff --git a/icons/obj/projectiles_muzzle.dmi b/icons/obj/projectiles_muzzle.dmi index 2f1d6d90c6..884605c373 100644 Binary files a/icons/obj/projectiles_muzzle.dmi and b/icons/obj/projectiles_muzzle.dmi differ diff --git a/icons/obj/projectiles_tracer.dmi b/icons/obj/projectiles_tracer.dmi index 56442452e7..34718d7066 100644 Binary files a/icons/obj/projectiles_tracer.dmi and b/icons/obj/projectiles_tracer.dmi differ diff --git a/icons/obj/sofa.dmi b/icons/obj/sofa.dmi index 069fb1e08d..13cc43fe4e 100644 Binary files a/icons/obj/sofa.dmi and b/icons/obj/sofa.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 7cb212384a..a80dc92b9a 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/stake.dmi b/icons/obj/stake.dmi new file mode 100644 index 0000000000..dfc1dc08bf Binary files /dev/null and b/icons/obj/stake.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index fedb6c828e..8ede8c66ab 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 3aa6912da7..2de24e2499 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index efd7974897..ee703fc70b 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/icons/obj/vamp_obj.dmi b/icons/obj/vamp_obj.dmi new file mode 100644 index 0000000000..89718773dd Binary files /dev/null and b/icons/obj/vamp_obj.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 2a56a03e66..87d5e88cc9 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/smoothrocks.dmi b/icons/turf/smoothrocks.dmi index ba2bbce955..20314cff5b 100644 Binary files a/icons/turf/smoothrocks.dmi and b/icons/turf/smoothrocks.dmi differ diff --git a/modular_citadel/code/datums/mood_events/chem_events.dm b/modular_citadel/code/datums/mood_events/chem_events.dm deleted file mode 100644 index 94bfd86b6d..0000000000 --- a/modular_citadel/code/datums/mood_events/chem_events.dm +++ /dev/null @@ -1,59 +0,0 @@ -/datum/mood_event/eigenstate - mood_change = -3 - description = "Where the hell am I? Is this an alternative dimension ?\n" - -/datum/mood_event/enthrall - mood_change = 5 - -/datum/mood_event/enthrall/add_effects(message) - description = "[message]\n" - -/datum/mood_event/enthrallpraise - mood_change = 10 - timeout = 1 MINUTES - -/datum/mood_event/enthrallpraise/add_effects(message) - description = "[message]\n" - -/datum/mood_event/enthrallscold - mood_change = -10 - timeout = 1 MINUTES - -/datum/mood_event/enthrallscold/add_effects(message) - description = "[message]\n"//aaa I'm not kinky enough for this - -/datum/mood_event/enthrallmissing1 - mood_change = -5 - -/datum/mood_event/enthrallmissing1/add_effects(message) - description = "[message]\n" - -/datum/mood_event/enthrallmissing2 - mood_change = -10 - -/datum/mood_event/enthrallmissing2/add_effects(message) - description = "[message]\n" - -/datum/mood_event/enthrallmissing3 - mood_change = -15 - -/datum/mood_event/enthrallmissing3/add_effects(message) - description = "[message]\n" - -/datum/mood_event/enthrallmissing4 - mood_change = -25 - -/datum/mood_event/enthrallmissing4/add_effects(message) - description = "[message]\n" - -/datum/mood_event/InLove - mood_change = 10 - -/datum/mood_event/InLove/add_effects(message) - description = "[message]\n" - -/datum/mood_event/MissingLove - mood_change = -10 - -/datum/mood_event/MissingLove/add_effects(message) - description = "[message]\n" diff --git a/modular_citadel/code/datums/mood_events/generic_negative_events.dm b/modular_citadel/code/datums/mood_events/generic_negative_events.dm deleted file mode 100644 index bb04b0b283..0000000000 --- a/modular_citadel/code/datums/mood_events/generic_negative_events.dm +++ /dev/null @@ -1,21 +0,0 @@ -// Citadel-specific negative moodlets - -/datum/mood_event/plushjack - description = "I have butchered a plush recently.\n" - mood_change = -1 - timeout = 2 MINUTES - -/datum/mood_event/plush_nostuffing - description = "A plush I tried to pet had no stuffing...\n" - mood_change = -1 - timeout = 2 MINUTES - -/datum/mood_event/emptypred - description = "I had to let someone out.\n" - mood_change = -2 - timeout = 1 MINUTES - -/datum/mood_event/emptyprey - description = "It feels quite cold out here.\n" - mood_change = -2 - timeout = 1 MINUTES diff --git a/modular_citadel/code/datums/mood_events/generic_positive_events.dm b/modular_citadel/code/datums/mood_events/generic_positive_events.dm deleted file mode 100644 index ffa661e6e9..0000000000 --- a/modular_citadel/code/datums/mood_events/generic_positive_events.dm +++ /dev/null @@ -1,34 +0,0 @@ -// Citadel-specific positive moodlets - -/datum/mood_event/headpat - description = "Headpats are nice.\n" - mood_change = 2 - timeout = 2 MINUTES - -/datum/mood_event/hugbox - description = "I hugged a box of hugs recently.\n" - mood_change = 1 - timeout = 2 MINUTES - -/datum/mood_event/plushpet - description = "I pet a plush recently.\n" - mood_change = 1 - timeout = 3000 - -/datum/mood_event/plushplay - description = "I've played with plushes recently.\n" - mood_change = 3 - timeout = 3000 - -/datum/mood_event/orgasm - description = "I came!\n" //funny meme haha - mood_change = 3 - timeout = 1000 - -/datum/mood_event/fedpred - description = "I've devoured someone!\n" - mood_change = 3 - -/datum/mood_event/fedprey - description = "It feels quite cozy in here.\n" - mood_change = 3 diff --git a/modular_citadel/code/datums/mood_events/moodular.dm b/modular_citadel/code/datums/mood_events/moodular.dm deleted file mode 100644 index ee502c7b39..0000000000 --- a/modular_citadel/code/datums/mood_events/moodular.dm +++ /dev/null @@ -1,27 +0,0 @@ -// Modular stuff to use with Citadel-specific moods. - -// box of hugs -/obj/item/storage/box/hug/attack_self(mob/user) - . = ..() - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"hugbox", /datum/mood_event/hugbox) - -//Removed headpats here, duplicate code? - -// plush petting -/obj/item/toy/plush/attack_self(mob/user) - . = ..() - if(stuffed || grenade) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushpet", /datum/mood_event/plushpet) - else - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_nostuffing", /datum/mood_event/plush_nostuffing) - -// Jack the Ripper starring plush -/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params) - . = ..() - if(I.get_sharpness()) - if(!grenade) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushjack", /datum/mood_event/plushjack) - -// plush playing (plush-on-plush action) - if(istype(I, /obj/item/toy/plush)) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushplay", /datum/mood_event/plushplay) diff --git a/modular_citadel/code/datums/mutations/hulk.dm b/modular_citadel/code/datums/mutations/hulk.dm deleted file mode 100644 index 601238707d..0000000000 --- a/modular_citadel/code/datums/mutations/hulk.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/mutation/human/hulk - species_allowed = list("fly") \ No newline at end of file diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index abf68cc398..5d9010a7bd 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -26,8 +26,8 @@ /datum/status_effect/chem/SGDF/on_remove(mob/living/carbon/M) log_game("FERMICHEM: SGDF mind shift applied. [owner] is now playing as their clone and should not have memories after their clone split (look up SGDF status applied). ID: [owner.key]") originalmind.transfer_to(fermi_Clone) - to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.") - to_chat(M, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.") + to_chat(owner, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.") + to_chat(M, "Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. Curiously, you find that you memories are blank after you ingested the synthetic serum, leaving you to wonder where the other you is.") fermi_Clone = null //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -165,17 +165,49 @@ owner.remove_movespeed_modifier(DICK_MOVEMENT_SPEED) owner.ResetBloodVol() +/////////////////////////////////////////////// +// Astral INSURANCE +/////////////////////////////////////////////// +//Makes sure people can't get trapped in each other's bodies if lag causes a deync between proc calls. + + +/datum/status_effect/chem/astral_insurance + id = "astral_insurance" + var/mob/living/original + var/datum/mind/originalmind + alert_type = null + +/datum/status_effect/chem/astral_insurance/tick(mob/living/carbon/M) + . = ..() + if(owner.reagents.has_reagent("astral")) + return + if(owner.mind == originalmind) //If they're home, let the chem deal with deletion. + return + if(owner.mind) + var/mob/living/simple_animal/astral/G = new(get_turf(M.loc)) + owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. + to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'
    ") + log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!") + originalmind.transfer_to(original) + +/datum/status_effect/chem/astral_insurance/on_remove(mob/living/carbon/M) //God damnit get them home! + if(owner.mind == originalmind) //If they're home, HOORAY + return + if(owner.mind) + var/mob/living/simple_animal/astral/G = new(get_turf(M.loc)) + owner.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. + to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'") + log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!") + originalmind.transfer_to(original) + + /*////////////////////////////////////////// - Mind control functions + Mind control functions! /////////////////////////////////////////// */ //Preamble -/* -/mob/living - var/lewd = TRUE -*/ /mob/living/verb/toggle_lewd() set category = "IC" @@ -576,18 +608,18 @@ UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL) -/datum/status_effect/chem/enthrall/proc/owner_hear(var/hearer, message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) +/datum/status_effect/chem/enthrall/proc/owner_hear(datum/source, list/hearing_args) if(owner.client?.prefs.lewdchem == FALSE) return if (cTriggered > 0) return var/mob/living/carbon/C = owner - raw_message = lowertext(raw_message) + var/raw_message = lowertext(hearing_args[HEARING_RAW_MESSAGE]) for (var/trigger in customTriggers) var/cached_trigger = lowertext(trigger) if (findtext(raw_message, cached_trigger))//if trigger1 is the message cTriggered = 5 //Stops triggerparties and as a result, stops servercrashes. - log_game("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been triggered with [cached_trigger] from [speaker] saying: \"[message]\". (their master being [master] ckey: [enthrallID].)") + log_game("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been triggered with [cached_trigger] from [hearing_args[HEARING_SPEAKER]] saying: \"[hearing_args[HEARING_MESSAGE]]\". (their master being [master] ckey: [enthrallID].)") //Speak (Forces player to talk) if (lowertext(customTriggers[trigger][1]) == "speak")//trigger2 @@ -596,7 +628,6 @@ saytext += " You find yourself fully believing in the validity of what you just said and don't think to question it." addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "[saytext]"), 5) addtimer(CALLBACK(C, /atom/movable/proc/say, "[customTriggers[trigger][2]]"), 5) - //(C.say(customTriggers[trigger][2]))//trigger3 log_game("FERMICHEM: MKULTRA: [owner] ckey: [owner.key] has been forced to say: \"[customTriggers[trigger][2]]\" from previous trigger.") @@ -625,7 +656,7 @@ C.adjustArousalLoss(10) to_chat(C, "You feel a surge of arousal!") else - C.throw_at(get_step_towards(speaker,C), 3, 1) //cut this if it's too hard to get working + C.throw_at(get_step_towards(hearing_args[HEARING_SPEAKER],C), 3, 1) //cut this if it's too hard to get working //kneel (knockdown) else if (lowertext(customTriggers[trigger]) == "kneel")//as close to kneeling as you can get, I suppose. @@ -711,7 +742,7 @@ deltaResist *= 1.25 if (owner.reagents.has_reagent("neurine")) deltaResist *= 1.5 - if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused) + if (!HAS_TRAIT(owner, TRAIT_CROCRIN_IMMUNE) && M.canbearoused && owner.client?.prefs.lewdchem) if (owner.reagents.has_reagent("anaphro")) deltaResist *= 1.5 if (owner.reagents.has_reagent("anaphro+")) @@ -720,7 +751,6 @@ deltaResist *= 0.75 if (owner.reagents.has_reagent("aphro+")) deltaResist *= 0.5 - //Antag resistance //cultists are already brainwashed by their god if(iscultist(owner)) diff --git a/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm deleted file mode 100644 index 5dfe1dfcbd..0000000000 --- a/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/round_event_control/spawn_swarmer - weight = 0 - max_occurrences = 0 \ No newline at end of file diff --git a/modular_citadel/code/game/gamemodes/revolution/revolution.dm b/modular_citadel/code/game/gamemodes/revolution/revolution.dm deleted file mode 100644 index b377fc9fbd..0000000000 --- a/modular_citadel/code/game/gamemodes/revolution/revolution.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/game_mode/revolution - restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster") - false_report_weight = 10 - required_players = 20 - required_enemies = 1 diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm index a71175c345..53fe6a8f56 100755 --- a/modular_citadel/code/game/machinery/vending.dm +++ b/modular_citadel/code/game/machinery/vending.dm @@ -43,6 +43,7 @@ vend_reply = "Have fun, you shameless pervert!" products = list( /obj/item/clothing/under/maid = 5, + /obj/item/clothing/under/janimaid = 5, /obj/item/clothing/neck/petcollar = 5, /obj/item/clothing/neck/petcollar/choker = 5, /obj/item/clothing/neck/petcollar/leather = 5, @@ -51,6 +52,7 @@ /obj/item/clothing/mask/muzzle = 4, /obj/item/clothing/under/stripper_pink = 3, /obj/item/clothing/under/stripper_green = 3, + /obj/item/clothing/under/gear_harness = 10, /obj/item/dildo/custom = 5, /obj/item/electropack/shockcollar = 3, /obj/item/assembly/signaler = 3 @@ -60,6 +62,7 @@ /obj/item/key/collar = 2, /obj/item/clothing/head/kitty = 3, /obj/item/clothing/head/rabbitears = 3, + /obj/item/clothing/under/keyholesweater = 2, /obj/item/clothing/under/mankini = 2, /obj/item/clothing/under/jabroni = 2, /obj/item/dildo/flared/huge = 3, @@ -68,7 +71,6 @@ ) premium = list( /obj/item/clothing/accessory/skullcodpiece/fake = 3, - /obj/item/clothing/under/gear_harness = 10, /obj/item/reagent_containers/glass/bottle/hexacrocin = 10 ) refill_canister = /obj/item/vending_refill/kink diff --git a/modular_citadel/code/game/machinery/wishgranter.dm b/modular_citadel/code/game/machinery/wishgranter.dm index f24062a126..48024a2228 100644 --- a/modular_citadel/code/game/machinery/wishgranter.dm +++ b/modular_citadel/code/game/machinery/wishgranter.dm @@ -63,7 +63,9 @@ to_chat(user, "Your wish is 'granted', but at a terrible cost...") to_chat(user, "The Wish Granter punishes you for your selfishness, claiming your soul and warping your eyes to match the darkness in your heart.") user.dna.add_mutation(BLINDMUT) - user.adjust_eye_damage(100) + var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) + if(eyes) + eyes.applyOrganDamage(eyes.maxHealth) var/list/destinations = list() for(var/obj/item/beacon/B in GLOB.teleportbeacons) var/turf/T = get_turf(B) diff --git a/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/impact.dm deleted file mode 100644 index 20052c3351..0000000000 --- a/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/effect/projectile/impact/laser/wavemotion - name = "particle impact" - icon = 'modular_citadel/icons/obj/projectiles_impact.dmi' - icon_state = "impact_wavemotion" \ No newline at end of file diff --git a/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm deleted file mode 100644 index 5114cb223e..0000000000 --- a/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/effect/projectile/muzzle/laser/wavemotion - name = "particle backblast" - icon = 'modular_citadel/icons/obj/projectiles_muzzle.dmi' - icon_state = "muzzle_wavemotion" \ No newline at end of file diff --git a/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm deleted file mode 100644 index 8110fcabeb..0000000000 --- a/modular_citadel/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/effect/projectile/tracer/laser/wavemotion - name = "particle trail" - icon = 'modular_citadel/icons/obj/projectiles_tracer.dmi' - icon_state = "tracer_wavemotion" \ No newline at end of file diff --git a/modular_citadel/code/game/objects/items/storage/firstaid.dm b/modular_citadel/code/game/objects/items/storage/firstaid.dm deleted file mode 100755 index 3845cb6fd7..0000000000 --- a/modular_citadel/code/game/objects/items/storage/firstaid.dm +++ /dev/null @@ -1,175 +0,0 @@ -//help I have no idea what I'm doing - -/obj/item/storage/firstaid - icon = 'modular_citadel/icons/firstaid.dmi' - -/obj/item/storage/firstaid/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/fire - icon_state = "burn" - -/obj/item/storage/firstaid/fire/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/toxin - icon_state = "toxin" - -/obj/item/storage/firstaid/toxin/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/o2 - icon_state = "oxy" - -/obj/item/storage/firstaid/radbgone - icon_state = "rad" - -/obj/item/storage/firstaid/radbgone/Initialize(mapload) - . = ..() - icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - -/obj/item/storage/firstaid/tactical - icon_state = "tactical" - -//hijacking the minature first aids for hypospray boxes. <3 -/obj/item/storage/hypospraykit - name = "hypospray kit" - desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials." - icon = 'modular_citadel/icons/firstaid.dmi' - icon_state = "firstaid-mini" - lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - throw_speed = 3 - throw_range = 7 - var/empty = FALSE - item_state = "firstaid" - -/obj/item/storage/hypospraykit/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 12 - STR.can_hold = typecacheof(list( - /obj/item/hypospray/mkii, - /obj/item/reagent_containers/glass/bottle/vial)) - -/obj/item/storage/hypospraykit/regular - icon_state = "firstaid-mini" - desc = "A hypospray kit with general use vials." - -/obj/item/storage/hypospraykit/regular/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/tricord(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord(src) - -/obj/item/storage/hypospraykit/fire - name = "burn treatment hypospray kit" - desc = "A specialized hypospray kit for burn treatments. Apply with sass." - icon_state = "burn-mini" - item_state = "firstaid-ointment" - -/obj/item/storage/hypospraykit/fire/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/burn(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane(src) - -/obj/item/storage/hypospraykit/toxin - name = "toxin treatment hypospray kit" - icon_state = "toxin-mini" - item_state = "firstaid-toxin" - -/obj/item/storage/hypospraykit/toxin/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/toxin(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin(src) - -/obj/item/storage/hypospraykit/o2 - name = "oxygen deprivation hypospray kit" - icon_state = "oxy-mini" - item_state = "firstaid-o2" - -/obj/item/storage/hypospraykit/o2/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/oxygen(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin(src) - -/obj/item/storage/hypospraykit/enlarge - name = "organomegaly trauma hypospray kit" - icon_state = "enlarge-mini" - item_state = "firstaid-brute" - -/obj/item/storage/hypospraykit/enlarge/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/enlarge(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction(src) - -/obj/item/storage/hypospraykit/brute - name = "brute trauma hypospray kit" - icon_state = "brute-mini" - item_state = "firstaid-brute" - -/obj/item/storage/hypospraykit/brute/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/brute(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src) - new /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine(src) - -/obj/item/storage/hypospraykit/tactical - name = "combat hypospray kit" - desc = "A hypospray kit best suited for combat situations." - icon_state = "tactical-mini" - -/obj/item/storage/hypospraykit/tactical/PopulateContents() - if(empty) - return - new /obj/item/defibrillator/compact/combat/loaded(src) - new /obj/item/hypospray/mkii/CMO/combat(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat(src) - -/obj/item/storage/hypospraykit/cmo - name = "deluxe hypospray kit" - desc = "A kit containing a Deluxe hypospray and Vials." - icon_state = "tactical-mini" - -/obj/item/storage/hypospraykit/cmo/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.can_hold = typecacheof(list( - /obj/item/hypospray/mkii, - /obj/item/reagent_containers/glass/bottle/vial)) - -/obj/item/storage/hypospraykit/cmo/PopulateContents() - if(empty) - return - new /obj/item/hypospray/mkii/CMO(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin(src) - new /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh(src) - -/obj/item/storage/box/vials - name = "box of hypovials" - -/obj/item/storage/box/vials/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/glass/bottle/vial/small( src ) diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm deleted file mode 100644 index 1ef2285878..0000000000 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/structure/closet/athletic_mixed/PopulateContents() - ..() - new /obj/item/clothing/under/polychromic/shortpants(src) - new /obj/item/clothing/under/polychromic/shortpants(src) - new /obj/item/clothing/under/polychromic/shortpants(src) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm deleted file mode 100644 index 40a8224627..0000000000 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/secure/citadel_lockers.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/structure/closet/secure_closet/quartermaster/PopulateContents() - ..() - new /obj/item/radio/headset/heads/qm(src) - -/obj/structure/closet/secure_closet/CMO/PopulateContents() - ..() - new /obj/item/storage/hypospraykit/cmo(src) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm deleted file mode 100644 index ba4fa3787b..0000000000 --- a/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ /dev/null @@ -1,37 +0,0 @@ -/obj/structure/closet/wardrobe/mixed/PopulateContents() - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/white(src) - if(prob(30)) - new /obj/item/clothing/suit/hooded/wintercoat(src) - new /obj/item/clothing/shoes/winterboots(src) - return - -/obj/structure/closet/wardrobe/curator/PopulateContents() - ..() - new /obj/item/clothing/accessory/pocketprotector/full(src) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/tools.dm b/modular_citadel/code/game/objects/tools.dm deleted file mode 100644 index 5a6cd9bf42..0000000000 --- a/modular_citadel/code/game/objects/tools.dm +++ /dev/null @@ -1,18 +0,0 @@ -/* -// OVERRIDES FOR TOOL SPRITES GO HERE -*/ - -//CROWBAR - -/obj/item/crowbar - icon = 'modular_citadel/icons/obj/tools.dmi' - -//WIRECUTTERS disabled pending better sprites -/* -/obj/item/wirecutters - icon = 'modular_citadel/icons/obj/tools.dmi' -*/ -//WRENCH - -/obj/item/wrench - icon = 'modular_citadel/icons/obj/tools.dmi' \ No newline at end of file diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index 6c9da17289..ed28185bb7 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -159,7 +159,7 @@ to_chat(M, "Arousal is disabled. Feature is unavailable.") -/mob/living/proc/mob_climax()//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while. +/mob/living/proc/mob_climax(forced_climax = FALSE)//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while. set name = "Masturbate" set category = "IC" if(canbearoused && !restrained() && !stat) diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm index 9ecf67e4b0..8d70464a2d 100644 --- a/modular_citadel/code/modules/arousal/genitals.dm +++ b/modular_citadel/code/modules/arousal/genitals.dm @@ -106,6 +106,10 @@ return /obj/item/organ/genital/proc/modify_size(modifier, min = -INFINITY, max = INFINITY) + fluid_max_volume += modifier*2.5 + fluid_rate += modifier/10 + if(reagents) + reagents.maximum_volume = fluid_max_volume return /obj/item/organ/genital/proc/update_size() @@ -128,7 +132,7 @@ amount += 0.1 var/multiplier = fluid_mult if(reagents.total_volume >= 5) - multiplier *= 0.5 + multiplier *= 0.8 if(reagents.total_volume < reagents.maximum_volume) reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally reagents.add_reagent(fluid_id, (amount * multiplier))//generate the cum @@ -336,4 +340,3 @@ for(var/L in relevant_layers) H.apply_overlay(L) - diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 6299f68b6c..105f5e157d 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -7,6 +7,7 @@ slot = ORGAN_SLOT_BREASTS size = "c" //refer to the breast_values static list below for the cups associated number values fluid_id = "milk" + fluid_rate = MILK_RATE shape = "pair" genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION masturbation_verb = "massage" @@ -63,7 +64,7 @@ //Allows breasts to grow and change size, with sprite changes too. //maximum wah //Comical sizes slow you down in movement and actions. -//Rediculous sizes makes you more cumbersome. +//Ridiculous sizes makes you more cumbersome. //this is far too lewd wah /obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY) @@ -73,6 +74,7 @@ prev_size = cached_size cached_size = new_value update() + ..() /obj/item/organ/genital/breasts/update_size()//wah var/rounded_cached = round(cached_size) @@ -118,7 +120,7 @@ shape = D.features["breasts_shape"] fluid_id = D.features["breasts_fluid"] if(!D.features["breasts_producing"]) - DISABLE_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION) + DISABLE_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH) if(!isnum(size)) cached_size = breast_values[size] else diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index 17cd35c144..408d6521d0 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -23,6 +23,7 @@ prev_length = length length = CLAMP(length + modifier, min, max) update() + ..() /obj/item/organ/genital/penis/update_size(modified = FALSE) if(length < 0)//I don't actually know what round() does to negative numbers, so to be safe!! diff --git a/modular_citadel/code/modules/arousal/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm index 4b0a7ad919..964c9964ad 100644 --- a/modular_citadel/code/modules/arousal/toys/dildos.dm +++ b/modular_citadel/code/modules/arousal/toys/dildos.dm @@ -37,15 +37,11 @@ name = "[sizeword][dildo_shape] [can_customize ? "custom " : ""][dildo_type]" /obj/item/dildo/AltClick(mob/living/user) - if(QDELETED(src)) - return - if(!isliving(user)) - return - if(isAI(user)) - return - if(user.stat > 0)//unconscious or dead + . = ..() + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return customize(user) + return TRUE /obj/item/dildo/proc/customize(mob/living/user) if(!can_customize) @@ -93,9 +89,9 @@ pixel_x = rand(-7,7) /obj/item/dildo/examine(mob/user) - ..() + . = ..() if(can_customize) - user << "Alt-Click \the [src.name] to customize it." + . += "Alt-Click \the [src.name] to customize it." /obj/item/dildo/random//totally random name = "random dildo"//this name will show up in vendors and shit so you know what you're vending(or don't, i guess :^)) @@ -150,7 +146,8 @@ obj/item/dildo/custom playsound(loc, 'sound/weapons/gagging.ogg', 50, 1, -1) user.Stun(150) user.adjust_blurriness(8) - user.adjust_eye_damage(10) + var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) + eyes?.applyOrganDamage(10) return MANUAL_SUICIDE /obj/item/dildo/flared/huge/suicide_act(mob/living/user) @@ -159,6 +156,5 @@ obj/item/dildo/custom playsound(loc, 'sound/weapons/gagging.ogg', 50, 2, -1) user.Stun(300) user.adjust_blurriness(8) - user.adjust_eye_damage(15) return MANUAL_SUICIDE diff --git a/modular_citadel/code/modules/client/loadout/_service.dm b/modular_citadel/code/modules/client/loadout/_service.dm index 7872ddcf99..86823f5661 100644 --- a/modular_citadel/code/modules/client/loadout/_service.dm +++ b/modular_citadel/code/modules/client/loadout/_service.dm @@ -5,14 +5,14 @@ restricted_roles = list("Assistant") /datum/gear/neetsuit - name = "ASSU suit" + name = "D.A.B. suit" category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/assu_suit restricted_roles = list("Assistant") cost = 2 /datum/gear/neethelm - name = "ASSU helmet" + name = "D.A.B. helmet" category = SLOT_HEAD path = /obj/item/clothing/head/assu_helmet restricted_roles = list("Assistant") diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm index c2713b49be..82fe89eb6e 100644 --- a/modular_citadel/code/modules/client/loadout/backpack.dm +++ b/modular_citadel/code/modules/client/loadout/backpack.dm @@ -63,16 +63,6 @@ category = SLOT_IN_BACKPACK path = /obj/item/dildo/custom -/datum/gear/paperbin - name = "Paper Bin" - category = SLOT_IN_BACKPACK - path = /obj/item/paper_bin - -/datum/gear/crayons - name = "Box of crayons" - category = SLOT_IN_BACKPACK - path = /obj/item/storage/crayons - /datum/gear/toykatana name = "Toy Katana" category = SLOT_IN_BACKPACK @@ -99,4 +89,30 @@ /datum/gear/tape name = "Spare cassette tape" category = SLOT_IN_BACKPACK - path = /obj/item/tape/random \ No newline at end of file + path = /obj/item/tape/random + +/datum/gear/newspaper + name = "Newspaper" + category = SLOT_IN_BACKPACK + path = /obj/item/newspaper + +/datum/gear/paperbin + name = "Paper Bin" + category = SLOT_IN_BACKPACK + path = /obj/item/paper_bin + +/datum/gear/crayons + name = "Box of crayons" + category = SLOT_IN_BACKPACK + path = /obj/item/storage/crayons + +/datum/gear/multipen + name = "A multicolored pen" + category = SLOT_IN_BACKPACK + path = /obj/item/pen/fourcolor + +/datum/gear/fountainpen + name = "A fancy pen" + category = SLOT_IN_BACKPACK + path = /obj/item/pen/fountain + cost = 2 \ No newline at end of file diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/head.dm index 2d65f093bb..3e7eb39823 100644 --- a/modular_citadel/code/modules/client/loadout/head.dm +++ b/modular_citadel/code/modules/client/loadout/head.dm @@ -91,4 +91,14 @@ category = SLOT_HEAD path = /obj/item/clothing/head/caphat/formal/fedcover/sec restricted_desc = "Engineering, Security, and Cargo" - restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster") \ No newline at end of file + restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster") + +/datum/gear/santahatr + name = "Red Santa Hat" + category = SLOT_HEAD + path = /obj/item/clothing/head/christmashat + +/datum/gear/santahatg + name = "Green Santa Hat" + category = SLOT_HEAD + path = /obj/item/clothing/head/christmashatg \ No newline at end of file diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm index 036e3d3795..82824814ae 100644 --- a/modular_citadel/code/modules/client/loadout/mask.dm +++ b/modular_citadel/code/modules/client/loadout/mask.dm @@ -7,3 +7,10 @@ name = "Fake moustache" category = SLOT_WEAR_MASK path = /obj/item/clothing/mask/fakemoustache + +/datum/gear/joy + name = "Joy mask" + category = SLOT_WEAR_MASK + path = /obj/item/clothing/mask/joy + cost = 9 + diff --git a/modular_citadel/code/modules/client/loadout/shoes.dm b/modular_citadel/code/modules/client/loadout/shoes.dm index 6688529c73..7b3bee6638 100644 --- a/modular_citadel/code/modules/client/loadout/shoes.dm +++ b/modular_citadel/code/modules/client/loadout/shoes.dm @@ -56,4 +56,19 @@ /datum/gear/bluecuffs name = "Blue leg wraps" category = SLOT_SHOES - path= /obj/item/clothing/shoes/wraps/blue \ No newline at end of file + path= /obj/item/clothing/shoes/wraps/blue + +/datum/gear/christmasbootsr + name = "Red Christmas Boots" + category = SLOT_SHOES + path= /obj/item/clothing/shoes/winterboots/christmasbootsr + +/datum/gear/christmasbootsg + name = "Green Christmas Boots" + category = SLOT_SHOES + path= /obj/item/clothing/shoes/winterboots/christmasbootsg + +/datum/gear/santaboots + name = "Santa Boots" + category = SLOT_SHOES + path= /obj/item/clothing/shoes/winterboots/santaboots \ No newline at end of file diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm index d3a8258fc0..b8f3bd1cc1 100644 --- a/modular_citadel/code/modules/client/loadout/suit.dm +++ b/modular_citadel/code/modules/client/loadout/suit.dm @@ -64,6 +64,11 @@ category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat +/datum/gear/coat/aformal + name = "Assistant's formal winter coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/wintercoat/aformal + /* Commented out until it is "balanced" /datum/gear/coat/sec name = "Security winter coat" @@ -77,45 +82,43 @@ category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/medical restricted_roles = list("Chief Medical Officer", "Medical Doctor") // Reserve it to Medical Doctors and their boss, the Chief Medical Officer - -/* Commented out until there is a Chemistry Winter Coat -/datum/gear/coat/med/chem - name = "Chemistry winter coat" + +/datum/gear/coat/robotics + name = "Robotics winter coat" category = SLOT_WEAR_SUIT - path = /obj/item/clothing/suit/hooded/wintercoat/medical/chemistry - restricted_roles = list("Chief Medical Officer", "Chemist") // Reserve it to Chemists and their boss, the Chief Medical Officer -*/ + path = /obj/item/clothing/suit/hooded/wintercoat/robotics + restricted_roles = list("Research Director", "Roboticist") /datum/gear/coat/sci name = "Science winter coat" category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/science restricted_roles = list("Research Director", "Scientist", "Roboticist") // Reserve it to the Science Departement - + /datum/gear/coat/eng name = "Engineering winter coat" category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/engineering restricted_roles = list("Chief Engineer", "Station Engineer") // Reserve it to Station Engineers and their boss, the Chief Engineer - + /datum/gear/coat/eng/atmos name = "Atmospherics winter coat" category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos restricted_roles = list("Chief Engineer", "Atmospheric Technician") // Reserve it to Atmos Techs and their boss, the Chief Engineer - + /datum/gear/coat/hydro name = "Hydroponics winter coat" category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/hydro restricted_roles = list("Head of Personnel", "Botanist") // Reserve it to Botanists and their boss, the Head of Personnel - + /datum/gear/coat/cargo name = "Cargo winter coat" category = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/hooded/wintercoat/cargo restricted_roles = list("Quartermaster", "Cargo Technician") // Reserve it to Cargo Techs and their boss, the Quartermaster - + /datum/gear/coat/miner name = "Mining winter coat" category = SLOT_WEAR_SUIT @@ -201,3 +204,18 @@ path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/eng restricted_desc = "Engineering and Cargo" restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster") + +/datum/gear/christmascoatr + name = "Red Christmas Coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatr + +/datum/gear/christmascoatg + name = "Green Christmas Coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatg + +/datum/gear/christmascoatrg + name = "Red and Green Christmas Coat" + category = SLOT_WEAR_SUIT + path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatrg \ No newline at end of file diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index abdf8e3a24..72709069eb 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -73,6 +73,11 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/skirt/purple +/datum/gear/skirtplaid + name = "Plaid skirt" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/plaid_skirt + /datum/gear/schoolgirlblue name = "Blue Schoolgirl Uniform" category = SLOT_W_UNIFORM @@ -108,6 +113,11 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/pants/camo +/datum/gear/athleticshorts + name = "Athletic Shorts" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/shorts + /datum/gear/bjeans name = "Black Jeans" category = SLOT_W_UNIFORM @@ -180,6 +190,11 @@ category = SLOT_W_UNIFORM path = /obj/item/clothing/under/bb_sweater/blue +/datum/gear/keyholesweater + name = "Keyhole Sweater" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/keyholesweater + /datum/gear/polykilt name = "Polychromic Kilt" category = SLOT_W_UNIFORM @@ -313,4 +328,38 @@ /datum/gear/gear_harnesses name = "Gear Harness" category = SLOT_W_UNIFORM - path = /obj/item/clothing/under/gear_harness \ No newline at end of file + path = /obj/item/clothing/under/gear_harness + +//Christmas +/datum/gear/christmasmaler + name = "Red Masculine Christmas Suit" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/christmas/christmasmaler + +/datum/gear/christmasmaleg + name = "Green Masculine Christmas Suit" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/christmas/christmasmaleg + +/datum/gear/christmasfemaler + name = "Red Feminine Christmas Suit" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/christmas/christmasfemaler + +/datum/gear/christmasfemaleg + name = "Green Feminine Christmas Suit" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/christmas/christmasfemaleg + +/datum/gear/pinkstripper + name = "Pink stripper outfit" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/stripper_pink + cost = 3 + +/datum/gear/greenstripper + name = "Green stripper outfit" + category = SLOT_W_UNIFORM + path = /obj/item/clothing/under/stripper_green + cost = 3 + diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 1caa4cfed7..29f8a113e8 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -15,7 +15,7 @@ var/arousable = TRUE var/widescreenpref = TRUE var/autostand = TRUE - var/lewdchem = TRUE + var/lewdchem = FALSE //vore prefs var/toggleeatingnoise = TRUE diff --git a/modular_citadel/code/modules/clothing/clothing.dm b/modular_citadel/code/modules/clothing/clothing.dm index 7f366ecf35..843b7a84c9 100644 --- a/modular_citadel/code/modules/clothing/clothing.dm +++ b/modular_citadel/code/modules/clothing/clothing.dm @@ -56,7 +56,7 @@ add_overlay(tertiary_overlay) /obj/item/clothing/AltClick(mob/living/user) - ..() + . = ..() if(hasprimary | hassecondary | hastertiary) var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays switch(choice) //Lets the list's options actually lead to something @@ -78,11 +78,12 @@ tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) update_icon() user.regenerate_icons() + return TRUE /obj/item/clothing/examine(mob/user) - ..() + . = ..() if(hasprimary | hassecondary | hastertiary) - to_chat(user, "Alt-click to recolor it.") // so people don't "OOC how do you use polychromic clothes????" + . += "Alt-click to recolor it." /obj/item/clothing/Initialize() ..() diff --git a/modular_citadel/code/modules/clothing/head/head.dm b/modular_citadel/code/modules/clothing/head/head.dm deleted file mode 100644 index 7656766053..0000000000 --- a/modular_citadel/code/modules/clothing/head/head.dm +++ /dev/null @@ -1,20 +0,0 @@ -/*///////////////////////////////////////////////////////////////////////////////// -/////// /////// -/////// Cit's exclusive hats, helmets, etc. go here /////// -/////// /////// -*////////////////////////////////////////////////////////////////////////////////// - -/obj/item/clothing/head/flakhelm //Actually the M1 Helmet - name = "flak helmet" - icon = 'modular_citadel/icons/obj/clothing/space_nam.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/clothing/space_nam.dmi' - icon_state = "m1helm" - item_state = "helmet" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0.1, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = -15) - desc = "A dilapidated helmet used in ancient wars. This one is brittle and essentially useless. An ace of spades is tucked into the band around the outer shell." - pocket_storage_component_path = /datum/component/storage/concrete/pockets/tiny/spacenam //So you can stuff other things in the elastic band instead of it simply being a fluff thing. - -//The "pocket" for the M1 helmet so you can tuck things into the elastic band - -/datum/component/storage/concrete/pockets/tiny/spacenam - attack_hand_interact = TRUE //So you can actually see what you stuff in there \ No newline at end of file diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm index 5cce40ad09..c7fd84bd80 100644 --- a/modular_citadel/code/modules/clothing/suits/suits.dm +++ b/modular_citadel/code/modules/clothing/suits/suits.dm @@ -28,16 +28,3 @@ desc = "conceal your face in shame with this nanotrasen brand hood" flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR mutantrace_variation = NO_MUTANTRACE_VARIATION - -/obj/item/clothing/suit/flakjack - name = "flak jacket" - desc = "A dilapidated jacket made of a supposedly bullet-proof material (Hint: It isn't.). Smells faintly of napalm." - icon = 'modular_citadel/icons/obj/clothing/space_nam.dmi' - alternate_worn_icon = 'modular_citadel/icons/mob/clothing/space_nam.dmi' - icon_state = "flakjack" - item_state = "redtag" - blood_overlay_type = "armor" - body_parts_covered = CHEST - resistance_flags = NONE - mutantrace_variation = NO_MUTANTRACE_VARIATION - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -5, "acid" = -15) //nylon sucks against acid \ No newline at end of file diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 11dbb4dc80..274a345369 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -2,7 +2,7 @@ //For custom items. // Unless there's a digitigrade version make sure you add mutantrace_variation = NO_MUTANTRACE_VARIATION to all clothing/under and shoes - Pooj -// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in modular_citadel/icons/mob +// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in icons/mob /obj/item/custom/ceb_soap name = "Cebutris' Soap" @@ -493,6 +493,7 @@ item_state = "blueberet" icon = 'icons/obj/custom.dmi' alternate_worn_icon = 'icons/mob/custom_w.dmi' + dynamic_hair_suffix = "" /obj/item/clothing/head/flight name = "flight goggles" diff --git a/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm b/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm deleted file mode 100644 index f1b5d622bc..0000000000 --- a/modular_citadel/code/modules/food_and_drinks/snacks/meat.dm +++ /dev/null @@ -1,29 +0,0 @@ -/obj/item/reagent_containers/food/snacks/carpmeat/aquatic - name = "fillet" - desc = "A fillet of one of the local water dwelling species." - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc - icon = 'modular_citadel/icons/obj/foods.dmi' - icon_state = "ipcmeat" - desc = "Gross robot meat." - filling_color = "#000000" - tastes = list("metal" = 1) - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect - desc = "Tastes like chicken, that's... not what it is!" - icon = 'modular_citadel/icons/obj/foods.dmi' - icon_state = "mothmeat" - filling_color = "#BF896B" - tastes = list("insects" = 1) - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian - desc = "Tastes like chicken, that's because it is!" - icon = 'modular_citadel/icons/obj/foods.dmi' - icon_state = "birdmeat" - filling_color = "#BF896B" - tastes = list("chicken" = 1) - -/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal - desc = "Tastes sweet... reminds you vaguely of chicken." - filling_color = "#6B8E23" - tastes = list("brains" = 1, "meat" = 1) diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm index 4cc8edac1b..1c6b957d9f 100644 --- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm +++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm @@ -18,30 +18,32 @@ return FALSE return . -/mob/living/carbon/proc/toggle_combat_mode(forced) - if(recoveringstam) - return TRUE +/mob/living/carbon/proc/toggle_combat_mode(forced, silent) if(!forced) - for(var/datum/status_effect/S in status_effects) + if(recoveringstam || stat != CONSCIOUS) + return TRUE + for(var/i in status_effects) + var/datum/status_effect/S = i if(S.blocks_combatmode) return TRUE combatmode = !combatmode if(voremode) toggle_vore_mode() - if(combatmode) - playsound_local(src, 'sound/misc/ui_toggle.ogg', 50, FALSE, pressure_affected = FALSE) //Sound from interbay! - else - playsound_local(src, 'sound/misc/ui_toggleoff.ogg', 50, FALSE, pressure_affected = FALSE) //Slightly modified version of the above! + if(!silent) + if(combatmode) + if(world.time >= combatmessagecooldown) + if(a_intent != INTENT_HELP) + visible_message("[src] [resting ? "tenses up" : (prob(95)? "drops into a combative stance" : (prob(95)? "poses aggressively" : "asserts dominance with their pose"))].") + else + visible_message("[src] [pick("looks","seems","goes")] [pick("alert","attentive","vigilant")].") + playsound_local(src, 'sound/misc/ui_toggle.ogg', 50, FALSE, pressure_affected = FALSE) //Sound from interbay! + else + playsound_local(src, 'sound/misc/ui_toggleoff.ogg', 50, FALSE, pressure_affected = FALSE) //Slightly modified version of the above! if(client) client.show_popup_menus = !combatmode // So we can right-click for alternate actions and all that other good shit. Also moves examine to shift+rightclick to make it possible to attack while sprinting if(hud_used && hud_used.static_inventory) for(var/obj/screen/combattoggle/selector in hud_used.static_inventory) selector.rebasetointerbay(src) - if(world.time >= combatmessagecooldown && combatmode) - if(a_intent != INTENT_HELP) - visible_message("[src] [resting ? "tenses up" : (prob(95)? "drops into a combative stance" : (prob(95)? "poses aggressively" : "asserts dominance with their pose"))].") - else - visible_message("[src] [pick("looks","seems","goes")] [pick("alert","attentive","vigilant")].") combatmessagecooldown = 10 SECONDS + world.time //This is set 100% of the time to make sure squeezing regen out of process cycles doesn't result in the combat mode message getting spammed SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode) return TRUE diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm index 7264d95bae..eaf5899d82 100644 --- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/adjustStaminaLossBuffered(amount, updating_stamina = 1) +/mob/living/carbon/adjustStaminaLossBuffered(amount, updating_health = 1) if(status_flags & GODMODE) return 0 if(CONFIG_GET(flag/disable_stambuffer)) @@ -8,7 +8,7 @@ adjustStaminaLoss(directstamloss) bufferedstam = CLAMP(bufferedstam + amount, 0, stambuffer) stambufferregentime = world.time + 10 - if(updating_stamina) + if(updating_health) update_health_hud() /mob/living/carbon/adjustStaminaLoss(amount, updating_health = TRUE, forced = FALSE, affected_zone = BODY_ZONE_CHEST) diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm index badda6b239..15e08907d5 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_movement.dm @@ -5,7 +5,8 @@ var/oldpseudoheight = pseudo_z_axis . = ..() if(. && sprinting && !(movement_type & FLYING) && canmove && !resting && m_intent == MOVE_INTENT_RUN && has_gravity(loc) && !pulledby) - doSprintLossTiles(1) + if(!HAS_TRAIT(src, TRAIT_FREESPRINT)) + doSprintLossTiles(1) if((oldpseudoheight - pseudo_z_axis) >= 8) to_chat(src, "You trip off of the elevated surface!") for(var/obj/item/I in held_items) diff --git a/modular_citadel/code/modules/mob/living/damage_procs.dm b/modular_citadel/code/modules/mob/living/damage_procs.dm index ce81c7aae7..c2ce8fd24c 100644 --- a/modular_citadel/code/modules/mob/living/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/damage_procs.dm @@ -1,4 +1,4 @@ -/mob/living/proc/adjustStaminaLossBuffered(amount, updating_stamina = TRUE, forced = FALSE) +/mob/living/proc/adjustStaminaLossBuffered(amount, updating_health = TRUE, forced = FALSE) return /mob/living/proc/doSprintLossTiles(amount) diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm deleted file mode 100644 index 8b5c0b0af0..0000000000 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/item/robot_module/loader - name = "loader robot module" -/obj/item/robot_module/loader/New() - ..() - emag = new /obj/item/borg/stun(src) - modules += new /obj/item/extinguisher(src) - modules += new /obj/item/weldingtool/largetank/cyborg(src) - modules += new /obj/item/screwdriver(src) - modules += new /obj/item/wrench(src) - modules += new /obj/item/crowbar(src) - modules += new /obj/item/wirecutters(src) - modules += new /obj/item/multitool(src) - modules += new /obj/item/t_scanner(src) - modules += new /obj/item/analyzer(src) - modules += new /obj/item/assembly/signaler - modules += new /obj/item/soap/nanotrasen(src) - - fix_modules() - -/obj/item/robot_module/k9 - name = "Security K-9 Unit module" -/obj/item/robot_module/k9/New() - ..() - modules += new /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog(src) - modules += new /obj/item/dogborg/jaws/big(src) - modules += new /obj/item/dogborg/pounce(src) - modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) - modules += new /obj/item/soap/tongue(src) - modules += new /obj/item/analyzer/nose(src) - modules += new /obj/item/storage/bag/borgdelivery(src) - //modules += new /obj/item/assembly/signaler(src) - //modules += new /obj/item/detective_scanner(src) - modules += new /obj/item/gun/energy/disabler/cyborg(src) - emag = new /obj/item/gun/energy/laser/cyborg(src) - fix_modules() - -/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/gun/energy/gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/gun/advtaser/cyborg) in get_usable_modules() - if(T) - if(T.power_supply.charge < T.power_supply.maxcharge) - var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select] - T.power_supply.give(S.e_cost * coeff) - T.update_icon() - else - T.charge_tick = 0 - fix_modules() - -/obj/item/robot_module/borgi - name = "Borgi module" - -/obj/item/robot_module/borgi/New() - ..() - modules += new /obj/item/dogborg/jaws/small(src) - modules += new /obj/item/storage/bag/borgdelivery(src) - modules += new /obj/item/soap/tongue(src) - modules += new /obj/item/healthanalyzer(src) - modules += new /obj/item/analyzer/nose(src) - emag = new /obj/item/dogborg/pounce(src) - fix_modules() - -/obj/item/robot_module/medihound - name = "MediHound module" - -/obj/item/robot_module/medihound/New() - ..() - modules += new /obj/item/dogborg/jaws/small(src) - modules += new /obj/item/storage/bag/borgdelivery(src) - modules += new /obj/item/analyzer/nose(src) - modules += new /obj/item/soap/tongue(src) - modules += new /obj/item/healthanalyzer(src) - modules += new /obj/item/dogborg/sleeper(src) - modules += new /obj/item/twohanded/shockpaddles/hound(src) - modules += new /obj/item/sensor_device(src) - emag = new /obj/item/dogborg/pounce(src) - fix_modules() \ No newline at end of file diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 39d1de1fa7..a1466f58d4 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -20,7 +20,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! /obj/item/dogborg/jaws/examine(mob/user) . = ..() if(!CONFIG_GET(flag/weaken_secborg)) - to_chat(user, "Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets.") + . += "Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets." /obj/item/dogborg/jaws/big name = "combat jaws" @@ -162,9 +162,6 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! to_chat(user, "[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %") to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C") -/obj/item/analyzer/nose/AltClick(mob/user) //Barometer output for measuring when the next storm happens - . = ..() - /obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity) . = ..() if(!proximity) @@ -253,7 +250,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! if(!do_after(R, 50, target = target)) return //If they moved away, you can't eat them. to_chat(R, "You finish off \the [target.name].") - var/obj/item/stock_parts/cell.C = target + var/obj/item/stock_parts/cell/C = target R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf qdel(target) return @@ -322,7 +319,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! /obj/item/soap/tongue/flavour/afterattack(atom/target, mob/user, proximity) if(!proximity) return - var/mob/living/silicon/robot.R = user + var/mob/living/silicon/robot/R = user if(ishuman(target)) var/mob/living/L = target if(status == 0 && check_zone(R.zone_selected) == "head") @@ -356,15 +353,6 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! icon = 'icons/mob/dogborg.dmi' icon_state= "kibble" -//Defibs - -/obj/item/twohanded/shockpaddles/cyborg/hound - name = "Paws of Life" - desc = "MediHound specific shock paws." - icon = 'icons/mob/dogborg.dmi' - icon_state = "defibpaddles0" - item_state = "defibpaddles0" - // Pounce stuff for K-9 /obj/item/dogborg/pounce diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm index 28327cde0e..59630186d1 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -14,7 +14,7 @@ . += speed /mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human - if(!shutdown && (!cell || cell.charge < 25)) + if(!shutdown && (!cell || cell.charge < 25) || !cansprint) return FALSE sprinting = shutdown ? FALSE : !sprinting if(!resting && canmove) diff --git a/modular_citadel/code/modules/mob/mob.dm b/modular_citadel/code/modules/mob/mob.dm deleted file mode 100644 index aa0e6b5828..0000000000 --- a/modular_citadel/code/modules/mob/mob.dm +++ /dev/null @@ -1,27 +0,0 @@ -/mob/proc/use_that_empty_hand() //currently unused proc so i can implement 2-handing any item a lot easier in the future. - return - -/mob/say_mod(input, message_mode) - var/customsayverb = findtext(input, "*") - if(customsayverb && message_mode != MODE_WHISPER_CRIT) - message_mode = MODE_CUSTOM_SAY - return lowertext(copytext(input, 1, customsayverb)) - else - return ..() - -/atom/movable/proc/attach_spans(input, list/spans) - var/customsayverb = findtext(input, "*") - if(customsayverb) - input = capitalize(copytext(input, customsayverb+1)) - if(input) - return "[message_spans_start(spans)][input]" - else - return - -/mob/living/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE) - . = ..() - if(istype(speaker, /mob/living)) - var/turf/speakturf = get_turf(speaker) - var/turf/sourceturf = get_turf(src) - if(istype(speakturf) && istype(sourceturf) && !(speakturf in get_hear(5, sourceturf))) - . = "[.]" //Don't ask how the fuck this works. It just does. diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm index 7e6a8b3389..f847d04e9e 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm @@ -178,9 +178,9 @@ /obj/item/gun/ballistic/automatic/magrifle_e/examine(mob/user) . = ..() if(cell) - to_chat(user, "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.") + . += "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full." else - to_chat(user, "[src] doesn't seem to have a cell!") + . += "[src] doesn't seem to have a cell!" /obj/item/gun/ballistic/automatic/magrifle_e/can_shoot() if(QDELETED(cell)) @@ -241,9 +241,9 @@ /obj/item/gun/ballistic/automatic/pistol/mag_e/examine(mob/user) . = ..() if(cell) - to_chat(user, "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.") + . += "[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full." else - to_chat(user, "[src] doesn't seem to have a cell!") + . += "[src] doesn't seem to have a cell!" /obj/item/gun/ballistic/automatic/pistol/mag_e/can_shoot() if(QDELETED(cell)) diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm index 1e0e0afc87..024669757a 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm @@ -207,8 +207,10 @@ var/mob/M = loc M.update_inv_hands() /obj/item/gun/ballistic/automatic/AM4B/AltClick(mob/living/user) + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return + . = TRUE if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") return @@ -217,9 +219,10 @@ if(body_color_input) body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() + /obj/item/gun/ballistic/automatic/AM4B/examine(mob/user) - ..() - to_chat(user, "Alt-click to recolor it.") + . = ..() + . += "Alt-click to recolor it." /obj/item/ammo_box/magazine/toy/AM4C name = "foam force AM4-C magazine" diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm index d16df6b285..b70858c9af 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm @@ -5,7 +5,6 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state= "spinner" damage = 30 - dismemberment = 25 /obj/item/projectile/bullet/spinfusor/on_hit(atom/target, blocked = FALSE) //explosion to emulate the spinfusor's AOE ..() @@ -14,22 +13,16 @@ /obj/item/ammo_casing/caseless/spinfusor name = "spinfusor disk" - desc = "A magnetic disk designed specifically for the Stormhammer magnetic cannon. Warning: extremely volatile!" + desc = "A magnetic disk designed specifically for the Stormhammer magnetic cannon. Packs a punch." projectile_type = /obj/item/projectile/bullet/spinfusor caliber = "spinfusor" icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "disk" + w_class = WEIGHT_CLASS_SMALL throwforce = 15 //still deadly when thrown + force = 5 throw_speed = 3 -/obj/item/ammo_casing/caseless/spinfusor/throw_impact(atom/target) //disks detonate when thrown - if(!..()) // not caught in mid-air - visible_message("[src] detonates!") - playsound(src.loc, "sparks", 50, 1) - explosion(target, -1, -1, 1, 1, -1) - qdel(src) - return 1 - /obj/item/ammo_box/magazine/internal/spinfusor name = "spinfusor internal magazine" ammo_type = /obj/item/ammo_casing/caseless/spinfusor @@ -71,7 +64,8 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "spinfusorbox" ammo_type = /obj/item/ammo_casing/caseless/spinfusor - max_ammo = 8 + w_class = WEIGHT_CLASS_NORMAL + max_ammo = 4 /datum/supply_pack/security/armory/spinfusor name = "Stormhammer Spinfusor Crate" @@ -84,7 +78,5 @@ name = "Spinfusor Disk Crate" cost = 7000 contains = list(/obj/item/ammo_box/aspinfusor, - /obj/item/ammo_box/aspinfusor, - /obj/item/ammo_box/aspinfusor, /obj/item/ammo_box/aspinfusor) - crate_name = "spinfusor disk crate" \ No newline at end of file + crate_name = "spinfusor disk crate" diff --git a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm index 5fc75fa414..89e086687a 100644 --- a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm @@ -30,8 +30,10 @@ obj/item/gun/energy/e_gun/cx/update_icon() M.update_inv_hands() obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user) + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return + . = TRUE if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") return diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index aef47a648e..735c0890af 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -83,19 +83,21 @@ return 1 /obj/item/gun/energy/pumpaction/AltClick(mob/living/user) //for changing firing modes since attackself is already used for pumping + . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse return - if(user.incapacitated() || !istype(user)) - to_chat(user, "You can't do that right now!") - return if(ammo_type.len > 1) - select_fire(user) - update_icon() + if(user.incapacitated() || !istype(user)) + to_chat(user, "You can't do that right now!") + else + select_fire(user) + update_icon() + return TRUE /obj/item/gun/energy/pumpaction/examine(mob/user) //so people don't ask HOW TO CHANGE FIRING MODE - ..() - to_chat(user, "Alt-click to change firing modes.") + . = ..() + . += "Alt-click to change firing modes." /obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file) //ammo counter for inhands . = ..() @@ -183,7 +185,6 @@ name = "particle blast" damage = 13 icon_state = "disablerpellet" - icon = 'modular_citadel/icons/obj/projectiles.dmi' /obj/item/projectile/beam/disabler/slug name = "positron blast" @@ -191,12 +192,10 @@ range = 14 speed = 0.6 icon_state = "disablerslug" - icon = 'modular_citadel/icons/obj/projectiles.dmi' /obj/item/projectile/energy/electrode/pump name = "electron blast" icon_state = "stunjectile" - icon = 'modular_citadel/icons/obj/projectiles.dmi' color = null nodamage = 1 knockdown = 100 diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm index 4e80f42d87..35d13b3aa6 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm @@ -132,7 +132,7 @@ Creating a chem with a low purity will make you permanently fall in love with so /datum/reagent/fermi/enthrall name = "MKUltra" id = "enthrall" - description = "A forbidden deep red mixture that overwhelms a foreign body with waves of pleasure, intoxicating them into servitude. When taken by the creator, it will enhance the draw of their voice to those affected by it." + description = "A forbidden deep red mixture that increases a person's succeptability to another's words. When taken by the creator, it will enhance the draw of their voice to those affected by it." color = "#660015" // rgb: , 0, 255 taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses" overdose_threshold = 100 //If this is too easy to get 100u of this, then double it please. @@ -163,9 +163,9 @@ Creating a chem with a low purity will make you permanently fall in love with so creator = get_mob_by_key(creatorID) /datum/reagent/fermi/enthrall/on_new(list/data) - creatorID = data.["creatorID"] - creatorGender = data.["creatorGender"] - creatorName = data.["creatorName"] + creatorID = data["creatorID"] + creatorGender = data["creatorGender"] + creatorName = data["creatorName"] creator = get_mob_by_key(creatorID) /datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M) @@ -194,7 +194,7 @@ Creating a chem with a low purity will make you permanently fall in love with so Vc.Remove(M) nVc.Insert(M) qdel(Vc) - to_chat(M, "You feel your vocal chords tingle as your voice comes out in a more sultry tone.") + to_chat(M, "You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.)]") else log_game("FERMICHEM: MKUltra: [creatorName], [creatorID], is enthralling [M.name], [M.ckey]") M.apply_status_effect(/datum/status_effect/chem/enthrall) @@ -203,9 +203,6 @@ Creating a chem with a low purity will make you permanently fall in love with so /datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M) . = ..() if(purity < 0.5)//DO NOT SPLIT INTO DIFFERENT CHEM: This relies on DoNotSplit - has to be done this way. - if(volume < 0.5)//You don't get to escape that easily - FallInLove(pick(GLOB.player_list), M) - M.reagents.remove_reagent(id, volume) if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them. if(M.has_status_effect(STATUS_EFFECT_INLOVE))//Can't be enthralled when enthralled, so to speak. @@ -254,22 +251,6 @@ Creating a chem with a low purity will make you permanently fall in love with so if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks 100u, then you get the status for someone random (They don't have the vocal chords though, so it's limited.) if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) to_chat(M, "You are unable to resist your own charms anymore, and become a full blown narcissist.") - /*Old way of handling, left in as an option B - var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers - for(var/mob/living/carbon/victim in seen) - if(victim == M)//as much as I want you to fall for beepsky, he doesn't have a ckey - seen = seen - victim - if(!victim.ckey) - seen = seen - victim - var/mob/living/carbon/chosen = pick(seen) - creatorID = chosen.ckey - if (chosen.gender == "female") - creatorGender = "Mistress" - else - creatorGender = "Master" - creatorName = chosen.real_name - creator = get_mob_by_key(creatorID) - */ ADD_TRAIT(M, TRAIT_PACIFISM, "MKUltra") var/datum/status_effect/chem/enthrall/E if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 613d8819fa..c72b702a97 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -46,13 +46,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING var/unitCheck = FALSE metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "a weird chemical fleshy flavour" - //var/datum/status_effect/chem/SDGF/candidates/candies var/list/candies = list() - //var/polling = FALSE - var/list/result = list() - var/list/group = null var/pollStarted = FALSE - var/location_created var/startHunger impure_chem = "SDGFtox" inverse_chem_val = 0.5 @@ -81,7 +76,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.dna.transfer_identity(SM) SM.updateappearance(mutcolor_update=1) - + //Process the willing ghosts, and make sure they're actually in the body when they're moved into it! candies = shuffle(candies)//Shake those ghosts up! for(var/mob/dead/observer/C2 in candies) if(C2.key && C2) @@ -131,7 +126,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.reagents.remove_reagent(id, volume) log_game("FERMICHEM: [volume]u of SDGFheal has been transferred to the clone") SSblackbox.record_feedback("tally", "fermi_chem", 1, "Sentient clones made") - return + return ..() else if(playerClone == FALSE) //No candidates leads to two outcomes; if there's already a braincless clone, it heals the user, as well as being a rare souce of clone healing (thematic!). unitCheck = TRUE @@ -283,7 +278,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING name = "synthetic-derived healing factor" id = "SDGFheal" description = "Leftover SDGF is transferred into the resulting clone, which quickly heals up the stresses from suddenly splitting. Restores blood, nutrition, and repaires brain and clone damage quickly. Only obtainable from using excess SDGF, and only enters the cloned body." - metabolization_rate = 1 + metabolization_rate = 0.8 can_synth = FALSE /datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated) @@ -313,9 +308,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING id = "SDZF" description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. Emulates normal synthetic-derived growth factor, but produces a hostile zombie at the end of it." color = "#a502e0" // rgb: 96, 0, 255 - metabolization_rate = 0.5 * REAGENTS_METABOLISM + metabolization_rate = 0.2 * REAGENTS_METABOLISM var/startHunger can_synth = TRUE + taste_description = "a weird chemical fleshy flavour" chemical_flags = REAGENT_SNEAKYNAME /datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead. @@ -372,5 +368,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING SSblackbox.record_feedback("tally", "fermi_chem", 1, "Zombie clones made!") if(87 to INFINITY) - M.adjustToxLoss(1, 0) + M.adjustToxLoss(2, 0) + M.reagents.remove_reagent(id, 1) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index 88586b423e..d7ff42a9eb 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -8,7 +8,7 @@ This ghost moves pretty quickly and is mostly invisible, but is still visible fo When it's out of your system, you return back to yourself. It doesn't last long and metabolism of the chem is exponential. Addiction is particularlly brutal, it slowly turns you invisible with flavour text, then kills you at a low enough alpha. (i've also added something to prevent geneticists speeding this up) There's afairly major catch regarding the death though. I'm not gonna say here, go read the code, it explains it and puts my comments on it in context. I know that anyone reading it without understanding it is going to freak out so, this is my attempt to get you to read it and understand it. -I'd like to point out from my calculations it'll take about 60-80 minutes to die this way too. Plenty of time to visit me and ask for some pills to quench your addiction. +I'd like to point out from my calculations it'll take about 60-80 minutes to die this way too. Plenty of time to visit chem and ask for some pills to quench your addiction. */ @@ -30,15 +30,26 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die var/sleepytime = 0 inverse_chem_val = 0.25 can_synth = FALSE + var/datum/action/chem/astral/AS = new/datum/action/chem/astral() /datum/action/chem/astral name = "Return to body" - var/mob/living/carbon/origin = null - var/mob/living/simple_animal/hostile/retaliate/ghost = null + var/mob/living/carbon/origin + var/datum/mind/originalmind /datum/action/chem/astral/Trigger() - ghost.mind.transfer_to(origin) - qdel(src) + if(origin.mind && origin.mind != originalmind) + to_chat(originalmind.current, "There's a foreign presence in your body blocking your return!") + return ..() + if(origin.reagents.has_reagent("astral") ) + var/datum/reagent/fermi/astral/As = locate(/datum/reagent/fermi/astral) in origin.reagents.reagent_list + if(As.current_cycle < 10) + to_chat(originalmind.current, "The intensity of the astrogen in your body is too much allow you to return to yourself yet!") + return ..() + originalmind.transfer_to(origin) + if(origin.mind == originalmind) + qdel(src) + /datum/reagent/fermi/astral/reaction_turf(turf/T, reac_volume) if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) @@ -50,7 +61,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(istype(O, /obj/item/bedsheet)) new /obj/item/bedsheet/cosmos(get_turf(O)) qdel(O) - + ..() /datum/reagent/fermi/astral/on_mob_life(mob/living/carbon/M) // Gives you the ability to astral project for a moment! M.alpha = 255 @@ -61,12 +72,20 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if (G == null) G = new(get_turf(M.loc)) G.name = "[M]'s astral projection" - var/datum/action/chem/astral/AS = new(G) + //var/datum/action/chem/astral/AS = new(G) + AS.Grant(G) AS.origin = M - AS.ghost = G + AS.originalmind = originalmind + if(M.mind) M.mind.transfer_to(G) SSblackbox.record_feedback("tally", "fermi_chem", 1, "Astral projections") + //INSURANCE + M.apply_status_effect(/datum/status_effect/chem/astral_insurance) + var/datum/status_effect/chem/astral_insurance/AI = M.has_status_effect(/datum/status_effect/chem/astral_insurance) + AI.original = M + AI.originalmind = M.mind + if(overdosed) if(prob(50)) to_chat(G, "The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!") @@ -83,10 +102,12 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die /datum/reagent/fermi/astral/on_mob_delete(mob/living/carbon/M) if(!G) if(M.mind) - var/mob/living/simple_animal/astral/G = new(get_turf(M.loc)) - M.mind.transfer_to(G)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. + var/mob/living/simple_animal/astral/G2 = new(get_turf(M.loc)) + M.mind.transfer_to(G2)//Just in case someone else is inside of you, it makes them a ghost and should hopefully bring them home at the end. to_chat(G, "[M]'s conciousness snaps back to them as their astrogen runs out, kicking your projected mind out!'") log_game("FERMICHEM: [M]'s possesser has been booted out into a astral ghost!") + if(!G2.mind) + qdel(G2) originalmind.transfer_to(M) else if(G.mind) G.mind.transfer_to(origin) @@ -98,6 +119,9 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(G)//just in case qdel(G) log_game("FERMICHEM: [M] has astrally returned to their body!") + if(M.mind && M.mind == originalmind) + M.remove_status_effect(/datum/status_effect/chem/astral_insurance) + //AS.Remove(M) ..() //Okay so, this might seem a bit too good, but my counterargument is that it'll likely take all round to eventually kill you this way, then you have to be revived without a body. It takes approximately 50-80 minutes to die from this. @@ -105,7 +129,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(addiction_stage < 2) antiGenetics = 255 M.alpha = 255 //Antigenetics is to do with stopping geneticists from turning people invisible to kill them. - if(prob(70)) + if(prob(75)) M.alpha-- antiGenetics-- switch(antiGenetics) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm index bf915d5b6f..5f3fc61fa7 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm @@ -17,7 +17,7 @@ color = "#5020F4" // rgb: 50, 20, 255 overdose_threshold = 15 addiction_threshold = 15 - metabolization_rate = 1.2 * REAGENTS_METABOLISM + metabolization_rate = 1 * REAGENTS_METABOLISM addiction_stage2_end = 30 addiction_stage3_end = 41 addiction_stage4_end = 44 //Incase it's too long @@ -32,7 +32,7 @@ can_synth = TRUE /datum/reagent/fermi/eigenstate/on_new(list/data) - location_created = data.["location_created"] + location_created = data["location_created"] //Main functions /datum/reagent/fermi/eigenstate/on_mob_life(mob/living/M) //Teleports to chemistry! @@ -52,9 +52,9 @@ location_return = get_turf(M) //sets up return point to_chat(M, "You feel your wavefunction split!") - if(purity > 0.9) //Teleports you home if it's pure enough + if(cached_purity > 0.9) //Teleports you home if it's pure enough if(!location_created && data) //Just in case - location_created = data.["location_created"] + location_created = data["location_created"] log_game("FERMICHEM: [M] ckey: [M.key] returned to [location_created] using eigenstasium") do_sparks(5,FALSE,M) do_teleport(M, location_created, 0, asoundin = 'sound/effects/phasein.ogg') @@ -69,8 +69,9 @@ /datum/reagent/fermi/eigenstate/on_mob_delete(mob/living/M) //returns back to original location do_sparks(5,FALSE,M) to_chat(M, "You feel your wavefunction collapse!") - do_teleport(M, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home - do_sparks(5,FALSE,M) + if(!M.reagents.has_reagent("stabilizing_agent")) + do_teleport(M, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home + do_sparks(5,FALSE,M) qdel(Eigenstate) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm index ee90f985c6..7d358b4149 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -56,18 +56,17 @@ var/mob/living/carbon/human/H = M var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS) + //If they have Acute hepatic pharmacokinesis, then route processing though liver. + if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused) + var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) + if(L) + L.swelling += 0.05 + else + H.adjustToxLoss(1) + return..() + //otherwise proceed as normal if(!B) //If they don't have breasts, give them breasts. - //If they have Acute hepatic pharmacokinesis, then route processing though liver. - if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused) - var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) - if(L) - L.swelling += 0.05 - else - H.adjustToxLoss(1) - return..() - - //otherwise proceed as normal B = new if(H.dna.species.use_skintones && H.dna.features["genitals_use_skintone"]) B.color = skintone2hex(H.skin_tone) @@ -222,18 +221,17 @@ return ..() var/mob/living/carbon/human/H = M var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS) + //If they have Acute hepatic pharmacokinesis, then route processing though liver. + if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused) + var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) + if(L) + L.swelling += 0.05 + else + H.adjustToxLoss(1) + return ..() + //otherwise proceed as normal if(!P)//They do have a preponderance for escapism, or so I've heard. - //If they have Acute hepatic pharmacokinesis, then route processing though liver. - if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused) - var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER) - if(L) - L.swelling += 0.05 - else - H.adjustToxLoss(1) - return ..() - - //otherwise proceed as normal P = new P.length = 1 to_chat(H, "Your groin feels warm, as you feel a newly forming bulge down below.") diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 9b9b59058b..b3ee8f5b7f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -7,22 +7,20 @@ taste_description = "affection and love!" can_synth = FALSE value = 20 - //SplitChem = TRUE impure_chem = "fermiTox"// What chemical is metabolised with an inpure reaction inverse_chem_val = 0.25 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising inverse_chem = "fermiTox" + //This should process fermichems to find out how pure they are and what effect to do. /datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount) . = ..() - //When merging two fermichems, see above /datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging . = ..() - //////////////////////////////////////////////////////////////////////////////////////////////////// // HATIMUIM /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -49,10 +47,7 @@ . = ..() if(M.head) var/obj/item/W = M.head - if(istype(W, /obj/item/clothing/head/hattip)) - qdel(W) - else - M.dropItemToGround(W, TRUE) + M.dropItemToGround(W, TRUE) var/hat = new /obj/item/clothing/head/hattip() M.equip_to_slot(hat, SLOT_HEAD, 1, 1) @@ -62,15 +57,20 @@ return ..() var/hatArmor = 0 if(!overdosed) - hatArmor = (purity/10) + hatArmor = (cached_purity/10) else - hatArmor = - (purity/10) + hatArmor = (cached_purity/10) if(hatArmor > 90) return ..() var/obj/item/W = M.head W.armor = W.armor.modifyAllRatings(hatArmor) ..() +/datum/reagent/fermi/hatmium/reaction_turf(turf/T, reac_volume) + if(reac_volume >= 5) + new /obj/item/clothing/head/hattip(T) + ..() + //////////////////////////////////////////////////////////////////////////////////////////////////// // FURRANIUM /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -153,7 +153,7 @@ ..() /datum/reagent/fermi/furranium/on_mob_delete(mob/living/carbon/M) - if(purity < 1)//Only permanent if you're a good chemist. + if(cached_purity < 0.95)//Only permanent if you're a good chemist. nT = M.getorganslot(ORGAN_SLOT_TONGUE) nT.Remove(M) qdel(nT) @@ -181,13 +181,13 @@ pH = 9 value = 90 can_synth = FALSE + var/react_objs = list() /datum/reagent/fermi/nanite_b_gone/on_mob_life(mob/living/carbon/C) - //var/component/nanites/N = M.GetComponent(/datum/component/nanites) var/datum/component/nanites/N = C.GetComponent(/datum/component/nanites) if(isnull(N)) return ..() - N.nanite_volume = -purity//0.5 seems to be the default to me, so it'll neuter them. + N.nanite_volume += -cached_purity*5//0.5 seems to be the default to me, so it'll neuter them. ..() /datum/reagent/fermi/nanite_b_gone/overdose_process(mob/living/carbon/C) @@ -197,16 +197,19 @@ to_chat(C, "The residual voltage from the nanites causes you to seize up!") C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE) if(prob(10)) - //empulse((get_turf(C)), 3, 2)//So the nanites randomize var/atom/T = C T.emp_act(EMP_HEAVY) to_chat(C, "You feel a strange tingling sensation come from your core.") if(isnull(N)) return ..() - N.nanite_volume = -2 + N.nanite_volume += -10*cached_purity ..() -/datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume) +datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume) + for(var/active_obj in react_objs) + if(O == active_obj) + return + react_objs += O O.emp_act(EMP_HEAVY) /datum/reagent/fermi/nanite_b_goneTox @@ -289,15 +292,15 @@ else holder.remove_reagent("fermiTest", volume)//Avoiding recurrsion var/location = get_turf(holder.my_atom) - if(purity < 0.34 || purity == 1) + if(cached_purity < 0.34 || cached_purity == 1) var/datum/effect_system/foam_spread/s = new() s.set_up(volume*2, location, holder) s.start() - if((purity < 0.67 && purity >= 0.34)|| purity == 1) + if((cached_purity < 0.67 && cached_purity >= 0.34)|| cached_purity == 1) var/datum/effect_system/smoke_spread/chem/s = new() s.set_up(holder, volume*2, location) s.start() - if(purity >= 0.67) + if(cached_purity >= 0.67) for (var/datum/reagent/reagent in holder.reagent_list) if (istype(reagent, /datum/reagent/fermi)) var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id] @@ -360,10 +363,11 @@ /datum/reagent/fermi/secretcatchem //Should I hide this from code divers? A secret cit chem? name = "secretcatchem" //an attempt at hiding it id = "secretcatchem" - description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed." + description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed. If used on someone in crit, it will turn them into a cat permanently, until the cat is killed." taste_description = "hairballs and cream" color = "#ffc224" var/catshift = FALSE + var/perma = FALSE var/mob/living/simple_animal/pet/cat/custom_cat/catto = null can_synth = FALSE @@ -372,7 +376,7 @@ /datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H) . = ..() - if(purity >= 0.8)//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. It already requires felind too, so no new functionality there. + if(cached_purity >= 0.9)//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. //exception(al) handler: H.dna.features["ears"] = "Cat" H.dna.features["mam_ears"] = "Cat" @@ -389,20 +393,30 @@ H.forceMove(catto) log_game("FERMICHEM: [H] ckey: [H.key] has been made into a cute catto.") SSblackbox.record_feedback("tally", "fermi_chem", 1, "cats") - //Just to deal with rascally ghosts - //ADD_TRAIT(catto, TRAIT_NODEATH, "catto")//doesn't work - //catto.health = 1000 //To simulate fake death, while preventing ghosts escaping. + if(H.InCritical()) + perma = TRUE + volume = 5 + H.stat = DEAD + catto.origin = H /datum/reagent/fermi/secretcatchem/on_mob_life(mob/living/carbon/H) + if(!catto) + metabolization_rate = 5 + return ..() if(catto.health <= 0) //So the dead can't ghost if(prob(10)) - to_chat(H, "You feel your body start to slowly shift back from it's dead form.") + to_chat(catto, "You feel your body start to slowly shift back from it's dead form.") + perma = FALSE + metabolization_rate = 1 else if(prob(5)) playsound(get_turf(catto), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1) catto.say("lets out a meowrowr!*") ..() /datum/reagent/fermi/secretcatchem/on_mob_delete(mob/living/carbon/H) + if(perma) + to_chat(H, "You feel your body settle into it's new form. You won't be able to shift back on death anymore.") + return var/words = "Your body shifts back to normal." H.forceMove(catto.loc) catto.mind.transfer_to(H) @@ -412,3 +426,20 @@ to_chat(H, "[words]") qdel(catto) log_game("FERMICHEM: [H] ckey: [H.key] has returned to normal") + + +/datum/reagent/fermi/secretcatchem/reaction_mob(var/mob/living/L) + if(istype(L, /mob/living/simple_animal/pet/cat/custom_cat) && cached_purity >= 0.85) + var/mob/living/simple_animal/pet/cat/custom_cat/catto = L + if(catto.origin) + var/mob/living/carbon/human/H = catto.origin + H.stat = CONSCIOUS + log_game("FERMICHEM: [catto] ckey: [catto.key] has returned to normal.") + to_chat(catto, "Your body shifts back to normal!") + H.forceMove(catto.loc) + catto.mind.transfer_to(H) + if(!L.mind) //Just in case + qdel(L) + else //This should never happen, but just in case, so their game isn't ruined. + catto.icon_state = "custom_cat" + catto.health = 50 diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index 4949cc6ecf..fa4f48172b 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -69,7 +69,6 @@ L.Insert(C) to_chat(C, "You feel the yamerol merge in your chest.") holder.remove_reagent(src.id, "10") - C.adjustOxyLoss(-3) ..() @@ -102,20 +101,39 @@ pH = 7.6 metabolization_rate = 0.05 //Give them time to graft data = list("grown_volume" = 0, "injected_vol" = 0) + var/borrowed_health + color = "#FFDADA" /datum/reagent/synthtissue/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1) if(iscarbon(M)) - var/target = M.zone_selected - if (M.stat == DEAD) - show_message = 0 + var/mob/living/carbon/C = M + var/healing_factor = (((data["grown_volume"] / 100) + 1)*reac_volume) if(method in list(PATCH, TOUCH)) - M.apply_damage(reac_volume*-1.5, BRUTE, target) - M.apply_damage(reac_volume*-1.5, BURN, target) - if(show_message) - to_chat(M, "You feel your [target] heal! It stings like hell!") + if (M.stat == DEAD) + M.visible_message("The synthetic tissue rapidly grafts into [M]'s wounds, attemping to repair the damage as quickly as possible.") + borrowed_health += healing_factor + M.adjustBruteLoss(-healing_factor*2) + M.adjustFireLoss(-healing_factor*2) + M.adjustToxLoss(-healing_factor) + M.adjustCloneLoss(-healing_factor) + M.updatehealth() + if(data["grown_volume"] > 135 && ((C.health + C.oxyloss)>=80)) + if(M.revive()) + M.emote("gasp") + borrowed_health *= 2 + if(borrowed_health < 100) + borrowed_health = 100 + log_combat(M, M, "revived", src) + else + M.adjustBruteLoss(-healing_factor) + M.adjustFireLoss(-healing_factor) + to_chat(M, "You feel your flesh merge with the synthetic tissue! It stings like hell!") SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine) - if(method==INJECT) - data["injected_vol"] = reac_volume + if(method==INJECT) + data["injected_vol"] = reac_volume + var/obj/item/organ/heart/H = C.getorganslot(ORGAN_SLOT_HEART) + if(data["grown_volume"] > 50 && H.organ_flags & ORGAN_FAILING) + H.applyOrganDamage(-20) ..() /datum/reagent/synthtissue/on_mob_life(mob/living/carbon/C) @@ -129,6 +147,10 @@ to_chat(C, "You feel something reform inside of you!") data["injected_vol"] -= metabolization_rate + if(borrowed_health) + C.adjustToxLoss(1) + C.adjustCloneLoss(1) + borrowed_health -= 1 ..() /datum/reagent/synthtissue/on_merge(passed_data) @@ -139,6 +161,7 @@ if(iscarbon(holder.my_atom)) data["injected_vol"] = data["injected_vol"] + passed_data["injected_vol"] passed_data["injected_vol"] = 0 + update_name() ..() /datum/reagent/synthtissue/on_new(passed_data) @@ -146,6 +169,32 @@ return ..() if(passed_data["grown_volume"] > data["grown_volume"]) data["grown_volume"] = passed_data["grown_volume"] + update_name() ..() +/datum/reagent/synthtissue/proc/update_name() //They are but babes on creation and have to grow unto godhood + switch(data["grown_volume"]) + if(-INFINITY to 50) + name = "Induced Synthtissue Colony" + if(50 to 80) + name = "Oligopotent Synthtissue Colony" + if(80 to 135) + name = "Pluripotent Synthtissue Colony" + if(135 to 175) + name = "SuperSomatic Synthtissue Colony" + if(175 to INFINITY) + name = "Omnipotent Synthtissue Colony" + +/datum/reagent/synthtissue/on_mob_delete(mob/living/M) + if(!iscarbon(M)) + return + var/mob/living/carbon/C = M + C.adjustBruteLoss(borrowed_health*1.25) + C.adjustToxLoss(borrowed_health*1.25) + C.adjustCloneLoss(borrowed_health*1.25) + C.adjustAllOrganLoss(borrowed_health*0.25) + M.updatehealth() + if(borrowed_health && C.health < -20) + M.stat = DEAD + M.visible_message("The synthetic tissue degrades off [M]'s wounds as they collapse to the floor.") //NEEDS ON_MOB_DEAD() diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 7fcae0eb13..fcde3a8b79 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -131,7 +131,7 @@ var/turf/open/location = get_turf(my_atom) if(location) E.location_created = location - E.data.["location_created"] = location + E.data["location_created"] = location //serum @@ -282,9 +282,7 @@ name = "MKUltra" id = "enthrall" results = list("enthrall" = 5) - //required_reagents = list("iron" = 1, "iodine" = 1) Test vars - //required_reagents = list("cocoa" = 1, "astral" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1) - required_reagents = list("cocoa" = 1, "bluespace" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1) //TEMPORARY UNTIL HEADMINS GIVE THE OKAY FOR MK USE. + required_reagents = list("cocoa" = 1, "bluespace" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1) required_catalysts = list("blood" = 1) mix_message = "the reaction gives off a burgundy plume of smoke!" //FermiChem vars: @@ -314,16 +312,16 @@ for(var/mob/M in seen) to_chat(M, "The reaction splutters and fails to react properly.") //Just in case E.purity = 0 - if (B.data.["gender"] == "female") - E.data.["creatorGender"] = "Mistress" + if (B.data["gender"] == "female") + E.data["creatorGender"] = "Mistress" E.creatorGender = "Mistress" else - E.data.["creatorGender"] = "Master" + E.data["creatorGender"] = "Master" E.creatorGender = "Master" - E.data["creatorName"] = B.data.["real_name"] - E.creatorName = B.data.["real_name"] - E.data.["creatorID"] = B.data.["ckey"] - E.creatorID = B.data.["ckey"] + E.data["creatorName"] = B.data["real_name"] + E.creatorName = B.data["real_name"] + E.data["creatorID"] = B.data["ckey"] + E.creatorID = B.data["ckey"] //So slimes can play too. /datum/chemical_reaction/fermi/enthrall/slime @@ -337,16 +335,16 @@ for(var/mob/M in seen) to_chat(M, "The reaction splutters and fails to react.") //Just in case E.purity = 0 - if (B.data.["gender"] == "female") - E.data.["creatorGender"] = "Mistress" + if (B.data["gender"] == "female") + E.data["creatorGender"] = "Mistress" E.creatorGender = "Mistress" else - E.data.["creatorGender"] = "Master" + E.data["creatorGender"] = "Master" E.creatorGender = "Master" - E.data["creatorName"] = B.data.["real_name"] - E.creatorName = B.data.["real_name"] - E.data.["creatorID"] = B.data.["ckey"] - E.creatorID = B.data.["ckey"] + E.data["creatorName"] = B.data["real_name"] + E.creatorName = B.data["real_name"] + E.data["creatorID"] = B.data["ckey"] + E.creatorID = B.data["ckey"] /datum/chemical_reaction/fermi/enthrall/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH) var/turf/T = get_turf(my_atom) @@ -506,9 +504,9 @@ name = "secretcatchem" id = "secretcatchem" results = list("secretcatchem" = 5) - required_reagents = list("stable_plasma" = 1, "sugar" = 1, "cream" = 1, "clonexadone" = 1)//Yes this will make a plushie if you don't lucky guess. It'll eat all your reagents too. + required_reagents = list("stable_plasma" = 1, "sugar" = 1, "cream" = 1, "clonexadone" = 1)//Yes this will make a kitty if you don't lucky guess. It'll eat all your reagents too. required_catalysts = list("SDGF" = 1) - required_temp = 600 + required_temp = 500 mix_message = "the reaction gives off a meow!" mix_sound = "modular_citadel/sound/voice/merowr.ogg" //FermiChem vars: diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm index 708f1f59f8..4707d5b460 100644 --- a/modular_citadel/code/modules/reagents/objects/clothes.dm +++ b/modular_citadel/code/modules/reagents/objects/clothes.dm @@ -2,7 +2,7 @@ //Clothes made from FermiChem /obj/item/clothing/head/hattip //I wonder if anyone else has played cryptworlds - name = "Sythetic hat" + name = "Synthetic hat" icon = 'icons/obj/clothing/hats.dmi' icon_state = "cowboy" desc = "A sythesized hat, you can't seem to take it off. And tips their hat." @@ -34,7 +34,6 @@ if(src == C.head) C.emote("me",1,"tips their hat.",TRUE) return - ..() /obj/item/clothing/head/hattip/equipped(mob/M, slot) . = ..() @@ -46,6 +45,13 @@ /obj/item/clothing/head/hattip/dropped(mob/M) . = ..() UnregisterSignal(M, COMSIG_MOB_SAY) + addtimer(CALLBACK(GLOBAL_PROC, .proc/root_and_toot, src, src, 200)) + +/obj/item/clothing/head/hattip/proc/root_and_toot(obj/item/clothing/head/hattip/hat) + hat.animate_atom_living() + var/list/seen = viewers(6, get_turf(hat)) + for(var/mob/M2 in seen) + to_chat(M2, "[hat] exclaims, \"[pick("Whooee! Time for a hootenanny!", "Rough 'em up boys!", "Yeehaw! Freedom at last!", "Y'all about to get a good old fashioned spanking!")]\"") /obj/item/clothing/head/hattip/proc/handle_speech(datum/source, mob/speech_args) var/message = speech_args[SPEECH_MESSAGE] diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 4dea1ef12f..aa4c65c3bb 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -14,7 +14,7 @@ /datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume) if(!istype(T)) return - if(reac_volume < 3) + if(reac_volume < 10) return var/obj/effect/decal/cleanable/semen/S = locate() in T @@ -80,7 +80,7 @@ /datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) if(!istype(T)) return - if(reac_volume < 3) + if(reac_volume < 10) return var/obj/effect/decal/cleanable/femcum/S = locate() in T diff --git a/modular_citadel/icons/firstaid.dmi b/modular_citadel/icons/firstaid.dmi deleted file mode 100644 index d061adf9f2..0000000000 Binary files a/modular_citadel/icons/firstaid.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/clothing/space_nam.dmi b/modular_citadel/icons/mob/clothing/space_nam.dmi deleted file mode 100644 index 05eb00a346..0000000000 Binary files a/modular_citadel/icons/mob/clothing/space_nam.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/mam_tails.dmi b/modular_citadel/icons/mob/mam_tails.dmi index e4bd5119b6..d59cf43a68 100644 Binary files a/modular_citadel/icons/mob/mam_tails.dmi and b/modular_citadel/icons/mob/mam_tails.dmi differ diff --git a/modular_citadel/icons/mob/mask.dmi b/modular_citadel/icons/mob/mask.dmi deleted file mode 100644 index 788bfc0447..0000000000 Binary files a/modular_citadel/icons/mob/mask.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi index a66895f864..8ff4a3ddb5 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ diff --git a/modular_citadel/icons/mob/pai.dmi b/modular_citadel/icons/mob/pai.dmi deleted file mode 100644 index d8162cb5a7..0000000000 Binary files a/modular_citadel/icons/mob/pai.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/modular_citadel/icons/mob/suit_digi.dmi deleted file mode 100644 index fdcedac095..0000000000 Binary files a/modular_citadel/icons/mob/suit_digi.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi index e574766d70..7e9da953c9 100644 Binary files a/modular_citadel/icons/mob/widerobot.dmi and b/modular_citadel/icons/mob/widerobot.dmi differ diff --git a/modular_citadel/icons/obj/VGProjectile.dmi b/modular_citadel/icons/obj/VGProjectile.dmi deleted file mode 100644 index 010d2fc739..0000000000 Binary files a/modular_citadel/icons/obj/VGProjectile.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/clothing/hats.dmi b/modular_citadel/icons/obj/clothing/hats.dmi deleted file mode 100644 index ba9b4b5f8e..0000000000 Binary files a/modular_citadel/icons/obj/clothing/hats.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/clothing/space_nam.dmi b/modular_citadel/icons/obj/clothing/space_nam.dmi deleted file mode 100644 index 79e1bd6d77..0000000000 Binary files a/modular_citadel/icons/obj/clothing/space_nam.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/defib_disks.dmi b/modular_citadel/icons/obj/defib_disks.dmi deleted file mode 100644 index 8908b0cf98..0000000000 Binary files a/modular_citadel/icons/obj/defib_disks.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/foods.dmi b/modular_citadel/icons/obj/foods.dmi deleted file mode 100644 index 3349da8203..0000000000 Binary files a/modular_citadel/icons/obj/foods.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/power.dmi b/modular_citadel/icons/obj/power.dmi deleted file mode 100644 index d0066b96de..0000000000 Binary files a/modular_citadel/icons/obj/power.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/projectiles.dmi b/modular_citadel/icons/obj/projectiles.dmi deleted file mode 100644 index f5f6f2f8f3..0000000000 Binary files a/modular_citadel/icons/obj/projectiles.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/projectiles_impact.dmi b/modular_citadel/icons/obj/projectiles_impact.dmi deleted file mode 100644 index 1d798b5e9e..0000000000 Binary files a/modular_citadel/icons/obj/projectiles_impact.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/projectiles_muzzle.dmi b/modular_citadel/icons/obj/projectiles_muzzle.dmi deleted file mode 100644 index 2116b0559c..0000000000 Binary files a/modular_citadel/icons/obj/projectiles_muzzle.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/projectiles_tracer.dmi b/modular_citadel/icons/obj/projectiles_tracer.dmi deleted file mode 100644 index e26e8501f1..0000000000 Binary files a/modular_citadel/icons/obj/projectiles_tracer.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/tools.dmi b/modular_citadel/icons/obj/tools.dmi deleted file mode 100644 index 7b99880799..0000000000 Binary files a/modular_citadel/icons/obj/tools.dmi and /dev/null differ diff --git a/sound/bloodsucker/BloodsuckerAlert.ogg b/sound/bloodsucker/BloodsuckerAlert.ogg new file mode 100644 index 0000000000..686f15bb71 Binary files /dev/null and b/sound/bloodsucker/BloodsuckerAlert.ogg differ diff --git a/sound/bloodsucker/coffin_close.ogg b/sound/bloodsucker/coffin_close.ogg new file mode 100644 index 0000000000..600809f782 Binary files /dev/null and b/sound/bloodsucker/coffin_close.ogg differ diff --git a/sound/bloodsucker/coffin_open.ogg b/sound/bloodsucker/coffin_open.ogg new file mode 100644 index 0000000000..38ca5c1f87 Binary files /dev/null and b/sound/bloodsucker/coffin_open.ogg differ diff --git a/sound/effects/neovgre_exploding.ogg b/sound/effects/neovgre_exploding.ogg new file mode 100644 index 0000000000..6ca2db05c3 Binary files /dev/null and b/sound/effects/neovgre_exploding.ogg differ diff --git a/sound/items/Nose_boop.ogg b/sound/items/Nose_boop.ogg new file mode 100644 index 0000000000..6a742e95ea Binary files /dev/null and b/sound/items/Nose_boop.ogg differ diff --git a/sound/machines/beeping_alarm.ogg b/sound/machines/beeping_alarm.ogg new file mode 100644 index 0000000000..f031b4e1d8 Binary files /dev/null and b/sound/machines/beeping_alarm.ogg differ diff --git a/sound/magic/curse.ogg b/sound/magic/curse.ogg new file mode 100644 index 0000000000..bda610416d Binary files /dev/null and b/sound/magic/curse.ogg differ diff --git a/sound/misc/deltakalaxon.ogg b/sound/misc/deltakalaxon.ogg index cc489526dd..7a9522c1ff 100644 Binary files a/sound/misc/deltakalaxon.ogg and b/sound/misc/deltakalaxon.ogg differ diff --git a/sound/weapons/Gunshot.ogg b/sound/weapons/Gunshot.ogg index 4fd082ce7f..46369bbb62 100644 Binary files a/sound/weapons/Gunshot.ogg and b/sound/weapons/Gunshot.ogg differ diff --git a/sound/weapons/Gunshot2.ogg b/sound/weapons/Gunshot2.ogg index 2dfc6fc1e9..4801989d3d 100644 Binary files a/sound/weapons/Gunshot2.ogg and b/sound/weapons/Gunshot2.ogg differ diff --git a/sound/weapons/Gunshot3.ogg b/sound/weapons/Gunshot3.ogg index 97799dff10..66da509083 100644 Binary files a/sound/weapons/Gunshot3.ogg and b/sound/weapons/Gunshot3.ogg differ diff --git a/sound/weapons/Gunshot4.ogg b/sound/weapons/Gunshot4.ogg index 2d971f7b1a..322e5c0cbd 100644 Binary files a/sound/weapons/Gunshot4.ogg and b/sound/weapons/Gunshot4.ogg differ diff --git a/sound/weapons/Gunshot_silenced.ogg b/sound/weapons/Gunshot_silenced.ogg index ef250d86aa..13f3702fd4 100644 Binary files a/sound/weapons/Gunshot_silenced.ogg and b/sound/weapons/Gunshot_silenced.ogg differ diff --git a/sound/weapons/Gunshot_smg.ogg b/sound/weapons/Gunshot_smg.ogg index 5c0000bb32..ce03376b52 100644 Binary files a/sound/weapons/Gunshot_smg.ogg and b/sound/weapons/Gunshot_smg.ogg differ diff --git a/sound/weapons/IonRifle.ogg b/sound/weapons/IonRifle.ogg index b808068e55..37647c081f 100644 Binary files a/sound/weapons/IonRifle.ogg and b/sound/weapons/IonRifle.ogg differ diff --git a/sound/weapons/Laser.ogg b/sound/weapons/Laser.ogg index 0fbb611f9c..4ff9e82ff9 100644 Binary files a/sound/weapons/Laser.ogg and b/sound/weapons/Laser.ogg differ diff --git a/sound/weapons/LaserSlugv3.ogg b/sound/weapons/LaserSlugv3.ogg index dbb8f4b954..0c3de3d4fd 100644 Binary files a/sound/weapons/LaserSlugv3.ogg and b/sound/weapons/LaserSlugv3.ogg differ diff --git a/sound/weapons/Taser.ogg b/sound/weapons/Taser.ogg index 8992b71f50..4181715240 100644 Binary files a/sound/weapons/Taser.ogg and b/sound/weapons/Taser.ogg differ diff --git a/sound/weapons/laser3.ogg b/sound/weapons/laser3.ogg index 134be315fc..03d4d933f2 100644 Binary files a/sound/weapons/laser3.ogg and b/sound/weapons/laser3.ogg differ diff --git a/sound/weapons/lasercannonfire.ogg b/sound/weapons/lasercannonfire.ogg index 612d608db8..cbbc3ce53c 100644 Binary files a/sound/weapons/lasercannonfire.ogg and b/sound/weapons/lasercannonfire.ogg differ diff --git a/sound/weapons/magpistol.ogg b/sound/weapons/magpistol.ogg index c130714962..4b94aa1e0a 100644 Binary files a/sound/weapons/magpistol.ogg and b/sound/weapons/magpistol.ogg differ diff --git a/sound/weapons/magrifle.ogg b/sound/weapons/magrifle.ogg index 2ec2e72af6..67d6500a6c 100644 Binary files a/sound/weapons/magrifle.ogg and b/sound/weapons/magrifle.ogg differ diff --git a/sound/weapons/mortar_long_whistle.ogg b/sound/weapons/mortar_long_whistle.ogg new file mode 100644 index 0000000000..646d37d8ab Binary files /dev/null and b/sound/weapons/mortar_long_whistle.ogg differ diff --git a/sound/weapons/mortar_whistle.ogg b/sound/weapons/mortar_whistle.ogg new file mode 100644 index 0000000000..2d7e19d85d Binary files /dev/null and b/sound/weapons/mortar_whistle.ogg differ diff --git a/sound/weapons/nuclear_fist.ogg b/sound/weapons/nuclear_fist.ogg new file mode 100644 index 0000000000..2b2682dc33 Binary files /dev/null and b/sound/weapons/nuclear_fist.ogg differ diff --git a/sound/weapons/pulse.ogg b/sound/weapons/pulse.ogg index 617b903231..df7f96f7cf 100644 Binary files a/sound/weapons/pulse.ogg and b/sound/weapons/pulse.ogg differ diff --git a/sound/weapons/pulse2.ogg b/sound/weapons/pulse2.ogg index 44c46fc715..2e93bfd17f 100644 Binary files a/sound/weapons/pulse2.ogg and b/sound/weapons/pulse2.ogg differ diff --git a/sound/weapons/pulse3.ogg b/sound/weapons/pulse3.ogg index b275fba2a8..0484b2cc81 100644 Binary files a/sound/weapons/pulse3.ogg and b/sound/weapons/pulse3.ogg differ diff --git a/sound/weapons/shrink_hit.ogg b/sound/weapons/shrink_hit.ogg new file mode 100644 index 0000000000..c39c2d5269 Binary files /dev/null and b/sound/weapons/shrink_hit.ogg differ diff --git a/sound/weapons/smg_empty_alarm.ogg b/sound/weapons/smg_empty_alarm.ogg index f031b4e1d8..325cabe9d8 100644 Binary files a/sound/weapons/smg_empty_alarm.ogg and b/sound/weapons/smg_empty_alarm.ogg differ diff --git a/sound/weapons/taser2.ogg b/sound/weapons/taser2.ogg index 2cdab84378..e522043e9b 100644 Binary files a/sound/weapons/taser2.ogg and b/sound/weapons/taser2.ogg differ diff --git a/strings/clockwork_cult_changelog.txt b/strings/clockwork_cult_changelog.txt index 3c5e5f5ef6..10e924ff00 100644 --- a/strings/clockwork_cult_changelog.txt +++ b/strings/clockwork_cult_changelog.txt @@ -2,3 +2,7 @@ Stargazers have been removed. Integration cogs are now the primary way of creati Brass Skewers now deal damage to mechs. Mech Sensors are now available. They're similar to pressure sensors, but trigger if a mech steps on them, and can be built the same way. Power nullifiers are now available. Upon triggering, they send out a small 3x3 EMP, affecting cultists and enemies alike. +Zelus oil: A new reagent. It can be used to heal the faithful to Ratvar, kill heretics and moreso stun blood cultists, or splashed onto metal sheets to make brass. +This chemical can be found in minimal quantities by grinding brass sheets. +Brass Flasks: Intended to store Zelus Oil in, but can also be used as fragile single use throwing weapons in a pinch! +These are crafted with a single sheet of brass and fit in the Clockwork Cuirass' suit storage. diff --git a/tgstation.dme b/tgstation.dme index b2b2840655..e4c2c28cb9 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -201,6 +201,7 @@ #include "code\_onclick\hud\hud.dm" #include "code\_onclick\hud\hud_cit.dm" #include "code\_onclick\hud\human.dm" +#include "code\_onclick\hud\lavaland_elite.dm" #include "code\_onclick\hud\monkey.dm" #include "code\_onclick\hud\movable_screen_objects.dm" #include "code\_onclick\hud\parallax.dm" @@ -354,10 +355,8 @@ #include "code\datums\components\butchering.dm" #include "code\datums\components\caltrop.dm" #include "code\datums\components\chasm.dm" -#include "code\datums\components\cleaning.dm" #include "code\datums\components\construction.dm" #include "code\datums\components\decal.dm" -#include "code\datums\components\earhealing.dm" #include "code\datums\components\earprotection.dm" #include "code\datums\components\edit_complainer.dm" #include "code\datums\components\empprotection.dm" @@ -385,6 +384,7 @@ #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" #include "code\datums\components\shrapnel.dm" +#include "code\datums\components\shrink.dm" #include "code\datums\components\slippery.dm" #include "code\datums\components\spooky.dm" #include "code\datums\components\squeak.dm" @@ -464,6 +464,9 @@ #include "code\datums\diseases\advance\symptoms\vomit.dm" #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" +#include "code\datums\elements\_element.dm" +#include "code\datums\elements\cleaning.dm" +#include "code\datums\elements\earhealing.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm" @@ -554,6 +557,8 @@ #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" +#include "code\game\gamemodes\bloodsucker\bloodsucker.dm" +#include "code\game\gamemodes\bloodsucker\hunter.dm" #include "code\game\gamemodes\brother\traitor_bro.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\traitor_chan.dm" @@ -573,6 +578,17 @@ #include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" #include "code\game\gamemodes\extended\extended.dm" +#include "code\game\gamemodes\gangs\dominator.dm" +#include "code\game\gamemodes\gangs\dominator_countdown.dm" +#include "code\game\gamemodes\gangs\gang.dm" +#include "code\game\gamemodes\gangs\gang_datums.dm" +#include "code\game\gamemodes\gangs\gang_decals.dm" +#include "code\game\gamemodes\gangs\gang_hud.dm" +#include "code\game\gamemodes\gangs\gang_items.dm" +#include "code\game\gamemodes\gangs\gang_pen.dm" +#include "code\game\gamemodes\gangs\gangs.dm" +#include "code\game\gamemodes\gangs\gangtool.dm" +#include "code\game\gamemodes\gangs\implant_gang.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" #include "code\game\gamemodes\monkey\monkey.dm" @@ -879,6 +895,7 @@ #include "code\game\objects\items\devices\camera_bug.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\compressionkit.dm" +#include "code\game\objects\items\devices\desynchronizer.dm" #include "code\game\objects\items\devices\dogborg_sleeper.dm" #include "code\game\objects\items\devices\doorCharge.dm" #include "code\game\objects\items\devices\electroadaptive_pseudocircuit.dm" @@ -1052,6 +1069,7 @@ #include "code\game\objects\structures\beds_chairs\alien_nest.dm" #include "code\game\objects\structures\beds_chairs\bed.dm" #include "code\game\objects\structures\beds_chairs\chair.dm" +#include "code\game\objects\structures\beds_chairs\pew.dm" #include "code\game\objects\structures\crates_lockers\closets.dm" #include "code\game\objects\structures\crates_lockers\crates.dm" #include "code\game\objects\structures\crates_lockers\closets\bodybag.dm" @@ -1194,6 +1212,21 @@ #include "code\modules\antagonists\abductor\equipment\abduction_outfits.dm" #include "code\modules\antagonists\abductor\equipment\abduction_surgery.dm" #include "code\modules\antagonists\abductor\equipment\gland.dm" +#include "code\modules\antagonists\abductor\equipment\glands\access.dm" +#include "code\modules\antagonists\abductor\equipment\glands\blood.dm" +#include "code\modules\antagonists\abductor\equipment\glands\chem.dm" +#include "code\modules\antagonists\abductor\equipment\glands\egg.dm" +#include "code\modules\antagonists\abductor\equipment\glands\electric.dm" +#include "code\modules\antagonists\abductor\equipment\glands\heal.dm" +#include "code\modules\antagonists\abductor\equipment\glands\mindshock.dm" +#include "code\modules\antagonists\abductor\equipment\glands\plasma.dm" +#include "code\modules\antagonists\abductor\equipment\glands\quantum.dm" +#include "code\modules\antagonists\abductor\equipment\glands\slime.dm" +#include "code\modules\antagonists\abductor\equipment\glands\spider.dm" +#include "code\modules\antagonists\abductor\equipment\glands\transform.dm" +#include "code\modules\antagonists\abductor\equipment\glands\trauma.dm" +#include "code\modules\antagonists\abductor\equipment\glands\ventcrawl.dm" +#include "code\modules\antagonists\abductor\equipment\glands\viral.dm" #include "code\modules\antagonists\abductor\machinery\camera.dm" #include "code\modules\antagonists\abductor\machinery\console.dm" #include "code\modules\antagonists\abductor\machinery\dispenser.dm" @@ -1211,6 +1244,33 @@ #include "code\modules\antagonists\blob\blob\blobs\resource.dm" #include "code\modules\antagonists\blob\blob\blobs\shield.dm" #include "code\modules\antagonists\blood_contract\blood_contract.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_flaws.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_integration.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_life.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_objectives.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_powers.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_sunlight.dm" +#include "code\modules\antagonists\bloodsucker\bloodsucker_ui.dm" +#include "code\modules\antagonists\bloodsucker\datum_bloodsucker.dm" +#include "code\modules\antagonists\bloodsucker\datum_hunter.dm" +#include "code\modules\antagonists\bloodsucker\datum_vassal.dm" +#include "code\modules\antagonists\bloodsucker\items\bloodsucker_organs.dm" +#include "code\modules\antagonists\bloodsucker\items\bloodsucker_stake.dm" +#include "code\modules\antagonists\bloodsucker\objects\bloodsucker_coffin.dm" +#include "code\modules\antagonists\bloodsucker\objects\bloodsucker_crypt.dm" +#include "code\modules\antagonists\bloodsucker\objects\bloodsucker_lair.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_brawn.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_cloak.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_feed.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_fortitude.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_gohome.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_haste.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_lunge.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_masquerade.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_mesmerize.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_trespass.dm" +#include "code\modules\antagonists\bloodsucker\powers\bs_veil.dm" +#include "code\modules\antagonists\bloodsucker\powers\v_recuperate.dm" #include "code\modules\antagonists\brainwashing\brainwashing.dm" #include "code\modules\antagonists\brother\brother.dm" #include "code\modules\antagonists\changeling\cellular_emporium.dm" @@ -1329,6 +1389,7 @@ #include "code\modules\antagonists\ninja\ninja.dm" #include "code\modules\antagonists\nukeop\clownop.dm" #include "code\modules\antagonists\nukeop\nukeop.dm" +#include "code\modules\antagonists\nukeop\equipment\borgchameleon.dm" #include "code\modules\antagonists\nukeop\equipment\nuclear_challenge.dm" #include "code\modules\antagonists\nukeop\equipment\nuclearbomb.dm" #include "code\modules\antagonists\nukeop\equipment\pinpointer.dm" @@ -1537,6 +1598,7 @@ #include "code\modules\clothing\glasses\_glasses.dm" #include "code\modules\clothing\glasses\engine_goggles.dm" #include "code\modules\clothing\glasses\hud.dm" +#include "code\modules\clothing\glasses\phantomthief.dm" #include "code\modules\clothing\glasses\vg_glasses.dm" #include "code\modules\clothing\gloves\_gloves.dm" #include "code\modules\clothing\gloves\boxing.dm" @@ -1915,6 +1977,7 @@ #include "code\modules\language\ratvarian.dm" #include "code\modules\language\slime.dm" #include "code\modules\language\swarmer.dm" +#include "code\modules\language\vampiric.dm" #include "code\modules\language\xenocommon.dm" #include "code\modules\library\lib_codex_gigas.dm" #include "code\modules\library\lib_items.dm" @@ -2304,6 +2367,11 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\necropolis_tendril.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\elite.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\goliath_broodmother.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\herald.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\legionnaire.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm" @@ -2620,6 +2688,7 @@ #include "code\modules\reagents\reagent_containers\patch.dm" #include "code\modules\reagents\reagent_containers\pill.dm" #include "code\modules\reagents\reagent_containers\rags.dm" +#include "code\modules\reagents\reagent_containers\sleeper_buffer.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" #include "code\modules\recycling\conveyor2.dm" @@ -2823,6 +2892,7 @@ #include "code\modules\surgery\coronary_bypass.dm" #include "code\modules\surgery\dental_implant.dm" #include "code\modules\surgery\embalming.dm" +#include "code\modules\surgery\emergency_cardioversion_recovery.dm" #include "code\modules\surgery\experimental_dissection.dm" #include "code\modules\surgery\eye_surgery.dm" #include "code\modules\surgery\graft_synthtissue.dm" @@ -2979,38 +3049,16 @@ #include "modular_citadel\code\_onclick\hud\stamina.dm" #include "modular_citadel\code\datums\components\material_container.dm" #include "modular_citadel\code\datums\components\souldeath.dm" -#include "modular_citadel\code\datums\mood_events\chem_events.dm" -#include "modular_citadel\code\datums\mood_events\generic_negative_events.dm" -#include "modular_citadel\code\datums\mood_events\generic_positive_events.dm" -#include "modular_citadel\code\datums\mood_events\moodular.dm" -#include "modular_citadel\code\datums\mutations\hulk.dm" #include "modular_citadel\code\datums\status_effects\chems.dm" #include "modular_citadel\code\datums\status_effects\debuffs.dm" #include "modular_citadel\code\datums\wires\autoylathe.dm" -#include "modular_citadel\code\game\gamemodes\gangs\dominator.dm" -#include "modular_citadel\code\game\gamemodes\gangs\dominator_countdown.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_datums.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_decals.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_hud.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_items.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gang_pen.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gangs.dm" -#include "modular_citadel\code\game\gamemodes\gangs\gangtool.dm" -#include "modular_citadel\code\game\gamemodes\gangs\implant_gang.dm" -#include "modular_citadel\code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" -#include "modular_citadel\code\game\gamemodes\revolution\revolution.dm" #include "modular_citadel\code\game\machinery\toylathe.dm" #include "modular_citadel\code\game\machinery\vending.dm" #include "modular_citadel\code\game\machinery\wishgranter.dm" #include "modular_citadel\code\game\objects\cit_screenshake.dm" #include "modular_citadel\code\game\objects\items.dm" -#include "modular_citadel\code\game\objects\tools.dm" #include "modular_citadel\code\game\objects\effects\spawner\spawners.dm" #include "modular_citadel\code\game\objects\effects\temporary_visuals\souldeath.dm" -#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\impact.dm" -#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm" -#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" #include "modular_citadel\code\game\objects\items\balls.dm" #include "modular_citadel\code\game\objects\items\boombox.dm" #include "modular_citadel\code\game\objects\items\stunsword.dm" @@ -3018,10 +3066,6 @@ #include "modular_citadel\code\game\objects\items\devices\radio\encryptionkey.dm" #include "modular_citadel\code\game\objects\items\devices\radio\headset.dm" #include "modular_citadel\code\game\objects\items\devices\radio\shockcollar.dm" -#include "modular_citadel\code\game\objects\items\storage\firstaid.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\fitness.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\wardrobe.dm" -#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\secure\citadel_lockers.dm" #include "modular_citadel\code\modules\admin\admin.dm" #include "modular_citadel\code\modules\admin\chat_commands.dm" #include "modular_citadel\code\modules\admin\holder2.dm" @@ -3061,8 +3105,6 @@ #include "modular_citadel\code\modules\client\verbs\who.dm" #include "modular_citadel\code\modules\clothing\clothing.dm" #include "modular_citadel\code\modules\clothing\neck.dm" -#include "modular_citadel\code\modules\clothing\glasses\phantomthief.dm" -#include "modular_citadel\code\modules\clothing\head\head.dm" #include "modular_citadel\code\modules\clothing\spacesuits\flightsuit.dm" #include "modular_citadel\code\modules\clothing\suits\polychromic_cloaks.dm" #include "modular_citadel\code\modules\clothing\suits\suits.dm" @@ -3073,7 +3115,6 @@ #include "modular_citadel\code\modules\custom_loadout\custom_items.dm" #include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm" #include "modular_citadel\code\modules\custom_loadout\read_from_file.dm" -#include "modular_citadel\code\modules\food_and_drinks\snacks\meat.dm" #include "modular_citadel\code\modules\integrated_electronics\subtypes\manipulation.dm" #include "modular_citadel\code\modules\mentor\follow.dm" #include "modular_citadel\code\modules\mentor\mentor.dm" @@ -3083,7 +3124,6 @@ #include "modular_citadel\code\modules\mentor\mentorpm.dm" #include "modular_citadel\code\modules\mentor\mentorsay.dm" #include "modular_citadel\code\modules\mob\cit_emotes.dm" -#include "modular_citadel\code\modules\mob\mob.dm" #include "modular_citadel\code\modules\mob\living\damage_procs.dm" #include "modular_citadel\code\modules\mob\living\living.dm" #include "modular_citadel\code\modules\mob\living\carbon\carbon.dm" diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index 256b53c106..896f7d5f2b 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .compressedcell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .compressedcell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .compressedcell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child),body.clockwork section .compressedcell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .compressedcell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .compressedcell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child),body.nanotrasen section .compressedcell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{pointer-events:none;visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .compressedcell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child),body.syndicate section .compressedcell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index e80e39528f..cc0b5d198f 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,21 +1,21 @@ require=function(){function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n||t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0;--a){var r=this.tryEntries[a],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var o=b.call(r,"catchLoc"),s=b.call(r,"finallyLoc");if(o&&s){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&b.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),O}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var a=n.completion;if("throw"===a.type){var r=a.arg;d(n)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:h(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=g),O}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(t,e,n){t(129),e.exports=t(24).RegExp.escape},{129:129,24:24}],4:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],5:[function(t,e,n){var a=t(19);e.exports=function(t,e){if("number"!=typeof t&&"Number"!=a(t))throw TypeError(e);return+t}},{19:19}],6:[function(t,e,n){var a=t(127)("unscopables"),r=Array.prototype;void 0==r[a]&&t(43)(r,a,{}),e.exports=function(t){r[a][t]=!0}},{127:127,43:43}],7:[function(t,e,n){e.exports=function(t,e,n,a){if(!(t instanceof e)||void 0!==a&&a in t)throw TypeError(n+": incorrect invocation!");return t}},{}],8:[function(t,e,n){var a=t(52);e.exports=function(t){if(!a(t))throw TypeError(t+" is not an object!");return t}},{52:52}],9:[function(t,e,n){"use strict";var a=t(117),r=t(112),i=t(116);e.exports=[].copyWithin||function(t,e){var n=a(this),o=i(n.length),s=r(t,o),p=r(e,o),u=arguments.length>2?arguments[2]:void 0,c=Math.min((void 0===u?o:r(u,o))-p,o-s),l=1;for(s>p&&p+c>s&&(l=-1,p+=c-1,s+=c-1);c-- >0;)p in n?n[s]=n[p]:delete n[s],s+=l,p+=l;return n}},{112:112,116:116,117:117}],10:[function(t,e,n){"use strict";var a=t(117),r=t(112),i=t(116);e.exports=function(t){for(var e=a(this),n=i(e.length),o=arguments.length,s=r(o>1?arguments[1]:void 0,n),p=o>2?arguments[2]:void 0,u=void 0===p?n:r(p,n);u>s;)e[s++]=t;return e}},{112:112,116:116,117:117}],11:[function(t,e,n){var a=t(40);e.exports=function(t,e){var n=[];return a(t,!1,n.push,n,e),n}},{40:40}],12:[function(t,e,n){var a=t(115),r=t(116),i=t(112);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c||0;return!t&&-1}}},{112:112,115:115,116:116}],13:[function(t,e,n){var a=t(26),r=t(48),i=t(117),o=t(116),s=t(16);e.exports=function(t,e){var n=1==t,p=2==t,u=3==t,c=4==t,l=6==t,d=5==t||l,f=e||s;return function(e,s,h){for(var m,g,v=i(e),b=r(v),y=a(s,h,3),_=o(b.length),x=0,w=n?f(e,_):p?f(e,0):void 0;_>x;x++)if((d||x in b)&&(m=b[x],g=y(m,x,v),t))if(n)w[x]=g;else if(g)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(c)return!1;return l?-1:u||c?c:w}}},{116:116,117:117,16:16,26:26,48:48}],14:[function(t,e,n){var a=t(4),r=t(117),i=t(48),o=t(116);e.exports=function(t,e,n,s,p){a(e);var u=r(t),c=i(u),l=o(u.length),d=p?l-1:0,f=p?-1:1;if(2>n)for(;;){if(d in c){s=c[d],d+=f;break}if(d+=f,p?0>d:d>=l)throw TypeError("Reduce of empty array with no initial value")}for(;p?d>=0:l>d;d+=f)d in c&&(s=e(s,c[d],d,u));return s}},{116:116,117:117,4:4,48:48}],15:[function(t,e,n){var a=t(52),r=t(50),i=t(127)("species");e.exports=function(t){var e;return r(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!r(e.prototype)||(e=void 0),a(e)&&(e=e[i],null===e&&(e=void 0))),void 0===e?Array:e}},{127:127,50:50,52:52}],16:[function(t,e,n){var a=t(15);e.exports=function(t,e){return new(a(t))(e)}},{15:15}],17:[function(t,e,n){"use strict";var a=t(4),r=t(52),i=t(47),o=[].slice,s={},p=function(t,e,n){if(!(e in s)){for(var a=[],r=0;e>r;r++)a[r]="a["+r+"]";s[e]=Function("F,a","return new F("+a.join(",")+")")}return s[e](t,n)};e.exports=Function.bind||function(t){var e=a(this),n=o.call(arguments,1),s=function(){var a=n.concat(o.call(arguments));return this instanceof s?p(e,a.length,a):i(e,a,t)};return r(e.prototype)&&(s.prototype=e.prototype),s}},{4:4,47:47,52:52}],18:[function(t,e,n){var a=t(19),r=t(127)("toStringTag"),i="Arguments"==a(function(){return arguments}()),o=function(t,e){try{return t[e]}catch(n){}};e.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=o(e=Object(t),r))?n:i?a(e):"Object"==(s=a(e))&&"function"==typeof e.callee?"Arguments":s}},{127:127,19:19}],19:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],20:[function(t,e,n){"use strict";var a=t(72).f,r=t(71),i=t(91),o=t(26),s=t(7),p=t(40),u=t(56),c=t(58),l=t(98),d=t(30),f=t(66).fastKey,h=t(124),m=d?"_s":"size",g=function(t,e){var n,a=f(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,u){var c=t(function(t,a){s(t,c,e,"_i"),t._t=e,t._i=r(null),t._f=void 0,t._l=void 0,t[m]=0,void 0!=a&&p(a,n,t[u],t)});return i(c.prototype,{clear:function(){for(var t=h(this,e),n=t._i,a=t._f;a;a=a.n)a.r=!0,a.p&&(a.p=a.p.n=void 0),delete n[a.i];t._f=t._l=void 0,t[m]=0},"delete":function(t){var n=h(this,e),a=g(n,t);if(a){var r=a.n,i=a.p;delete n._i[a.i],a.r=!0,i&&(i.n=r),r&&(r.p=i),n._f==a&&(n._f=r),n._l==a&&(n._l=i),n[m]--}return!!a},forEach:function(t){h(this,e);for(var n,a=o(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(a(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!g(h(this,e),t)}}),d&&a(c.prototype,"size",{get:function(){return h(this,e)[m]}}),c},def:function(t,e,n){var a,r,i=g(t,e);return i?i.v=n:(t._l=i={i:r=f(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[m]++,"F"!==r&&(t._i[r]=i)),t},getEntry:g,setStrong:function(t,e,n){u(t,e,function(t,n){this._t=h(t,e),this._k=n,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?c(0,n.k):"values"==e?c(0,n.v):c(0,[n.k,n.v]):(t._t=void 0,c(1))},n?"entries":"values",!n,!0),l(e)}}},{124:124,26:26,30:30,40:40,56:56,58:58,66:66,7:7,71:71,72:72,91:91,98:98}],21:[function(t,e,n){var a=t(18),r=t(11);e.exports=function(t){return function(){if(a(this)!=t)throw TypeError(t+"#toJSON isn't generic");return r(this)}}},{11:11,18:18}],22:[function(t,e,n){"use strict";var a=t(91),r=t(66).getWeak,i=t(8),o=t(52),s=t(7),p=t(40),u=t(13),c=t(42),l=t(124),d=u(5),f=u(6),h=0,m=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},v=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=v(this,t);return e?e[1]:void 0},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=f(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,i){var u=t(function(t,a){s(t,u,e,"_i"),t._t=e,t._i=h++,t._l=void 0,void 0!=a&&p(a,n,t[i],t)});return a(u.prototype,{"delete":function(t){if(!o(t))return!1;var n=r(t);return n===!0?m(l(this,e))["delete"](t):n&&c(n,this._i)&&delete n[this._i]},has:function(t){if(!o(t))return!1;var n=r(t);return n===!0?m(l(this,e)).has(t):n&&c(n,this._i)}}),u},def:function(t,e,n){var a=r(i(e),!0);return a===!0?m(t).set(e,n):a[t._i]=n,t},ufstore:m}},{124:124,13:13,40:40,42:42,52:52,66:66,7:7,8:8,91:91}],23:[function(t,e,n){"use strict";var a=t(41),r=t(34),i=t(92),o=t(91),s=t(66),p=t(40),u=t(7),c=t(52),l=t(36),d=t(57),f=t(99),h=t(46);e.exports=function(t,e,n,m,g,v){var b=a[t],y=b,_=g?"set":"add",x=y&&y.prototype,w={},k=function(t){var e=x[t];i(x,t,"delete"==t?function(t){return v&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return v&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return v&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof y&&(v||x.forEach&&!l(function(){(new y).entries().next()}))){var S=new y,E=S[_](v?{}:-0,1)!=S,C=l(function(){S.has(1)}),P=d(function(t){new y(t)}),A=!v&&l(function(){for(var t=new y,e=5;e--;)t[_](e,e);return!t.has(-0)});P||(y=e(function(e,n){u(e,y,t);var a=h(new b,e,y);return void 0!=n&&p(n,g,a[_],a),a}),y.prototype=x,x.constructor=y),(C||A)&&(k("delete"),k("has"),g&&k("get")),(A||E)&&k(_),v&&x.clear&&delete x.clear}else y=m.getConstructor(e,t,g,_),o(y.prototype,n),s.NEED=!0;return f(y,t),w[t]=y,r(r.G+r.W+r.F*(y!=b),w),v||m.setStrong(y,t,g),y}},{34:34,36:36,40:40,41:41,46:46,52:52,57:57,66:66,7:7,91:91,92:92,99:99}],24:[function(t,e,n){var a=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=a)},{}],25:[function(t,e,n){"use strict";var a=t(72),r=t(90);e.exports=function(t,e,n){e in t?a.f(t,e,r(0,n)):t[e]=n}},{72:72,90:90}],26:[function(t,e,n){var a=t(4);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{4:4}],27:[function(t,e,n){"use strict";var a=t(36),r=Date.prototype.getTime,i=Date.prototype.toISOString,o=function(t){return t>9?t:"0"+t};e.exports=a(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!a(function(){i.call(new Date(NaN))})?function(){if(!isFinite(r.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),a=0>e?"-":e>9999?"+":"";return a+("00000"+Math.abs(e)).slice(a?-6:-4)+"-"+o(t.getUTCMonth()+1)+"-"+o(t.getUTCDate())+"T"+o(t.getUTCHours())+":"+o(t.getUTCMinutes())+":"+o(t.getUTCSeconds())+"."+(n>99?n:"0"+o(n))+"Z"}:i},{36:36}],28:[function(t,e,n){"use strict";var a=t(8),r=t(118),i="number";e.exports=function(t){if("string"!==t&&t!==i&&"default"!==t)throw TypeError("Incorrect hint");return r(a(this),t!=i)}},{118:118,8:8}],29:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],30:[function(t,e,n){e.exports=!t(36)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{36:36}],31:[function(t,e,n){var a=t(52),r=t(41).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{41:41,52:52}],32:[function(t,e,n){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],33:[function(t,e,n){var a=t(81),r=t(78),i=t(82);e.exports=function(t){var e=a(t),n=r.f;if(n)for(var o,s=n(t),p=i.f,u=0;s.length>u;)p.call(t,o=s[u++])&&e.push(o);return e}},{78:78,81:81,82:82}],34:[function(t,e,n){var a=t(41),r=t(24),i=t(43),o=t(92),s=t(26),p="prototype",u=function(t,e,n){var c,l,d,f,h=t&u.F,m=t&u.G,g=t&u.S,v=t&u.P,b=t&u.B,y=m?a:g?a[e]||(a[e]={}):(a[e]||{})[p],_=m?r:r[e]||(r[e]={}),x=_[p]||(_[p]={});m&&(n=e);for(c in n)l=!h&&y&&void 0!==y[c],d=(l?y:n)[c],f=b&&l?s(d,a):v&&"function"==typeof d?s(Function.call,d):d,y&&o(y,c,d,t&u.U),_[c]!=d&&i(_,c,f),v&&x[c]!=d&&(x[c]=d)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},{24:24,26:26,41:41,43:43,92:92}],35:[function(t,e,n){var a=t(127)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{127:127}],36:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],37:[function(t,e,n){"use strict";var a=t(43),r=t(92),i=t(36),o=t(29),s=t(127);e.exports=function(t,e,n){var p=s(t),u=n(o,p,""[t]),c=u[0],l=u[1];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,c),a(RegExp.prototype,p,2==e?function(t,e){return l.call(t,this,e)}:function(t){return l.call(t,this)}))}},{127:127,29:29,36:36,43:43,92:92}],38:[function(t,e,n){"use strict";var a=t(8);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{8:8}],39:[function(t,e,n){"use strict";function a(t,e,n,u,c,l,d,f){for(var h,m,g=c,v=0,b=d?s(d,f,3):!1;u>v;){if(v in n){if(h=b?b(n[v],v,e):n[v],m=!1,i(h)&&(m=h[p],m=void 0!==m?!!m:r(h)),m&&l>0)g=a(t,e,h,o(h.length),g,l-1)-1;else{if(g>=9007199254740991)throw TypeError();t[g]=h}g++}v++}return g}var r=t(50),i=t(52),o=t(116),s=t(26),p=t(127)("isConcatSpreadable");e.exports=a},{116:116,127:127,26:26,50:50,52:52}],40:[function(t,e,n){var a=t(26),r=t(54),i=t(49),o=t(8),s=t(116),p=t(128),u={},c={},n=e.exports=function(t,e,n,l,d){var f,h,m,g,v=d?function(){return t}:p(t),b=a(n,l,e?2:1),y=0;if("function"!=typeof v)throw TypeError(t+" is not iterable!");if(i(v)){for(f=s(t.length);f>y;y++)if(g=e?b(o(h=t[y])[0],h[1]):b(t[y]),g===u||g===c)return g}else for(m=v.call(t);!(h=m.next()).done;)if(g=r(m,b,h.value,e),g===u||g===c)return g};n.BREAK=u,n.RETURN=c},{116:116,128:128,26:26,49:49,54:54,8:8}],41:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],42:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],43:[function(t,e,n){var a=t(72),r=t(90);e.exports=t(30)?function(t,e,n){return a.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{30:30,72:72,90:90}],44:[function(t,e,n){var a=t(41).document;e.exports=a&&a.documentElement},{41:41}],45:[function(t,e,n){e.exports=!t(30)&&!t(36)(function(){return 7!=Object.defineProperty(t(31)("div"),"a",{get:function(){return 7}}).a})},{30:30,31:31,36:36}],46:[function(t,e,n){var a=t(52),r=t(97).set;e.exports=function(t,e,n){var i,o=e.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&a(i)&&r&&r(t,i),t}},{52:52,97:97}],47:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],48:[function(t,e,n){var a=t(19);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{19:19}],49:[function(t,e,n){var a=t(59),r=t(127)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{127:127,59:59}],50:[function(t,e,n){var a=t(19);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{19:19}],51:[function(t,e,n){var a=t(52),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{52:52}],52:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],53:[function(t,e,n){var a=t(52),r=t(19),i=t(127)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{127:127,19:19,52:52}],54:[function(t,e,n){var a=t(8);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{8:8}],55:[function(t,e,n){"use strict";var a=t(71),r=t(90),i=t(99),o={};t(43)(o,t(127)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a(o,{next:r(1,n)}),i(t,e+" Iterator")}},{127:127,43:43,71:71,90:90,99:99}],56:[function(t,e,n){"use strict";var a=t(60),r=t(34),i=t(92),o=t(43),s=t(59),p=t(55),u=t(99),c=t(79),l=t(127)("iterator"),d=!([].keys&&"next"in[].keys()),f="@@iterator",h="keys",m="values",g=function(){return this};e.exports=function(t,e,n,v,b,y,_){p(n,e,v);var x,w,k,S=function(t){if(!d&&t in A)return A[t];switch(t){case h:return function(){return new n(this,t)};case m:return function(){return new n(this,t)}}return function(){return new n(this,t)}},E=e+" Iterator",C=b==m,P=!1,A=t.prototype,O=A[l]||A[f]||b&&A[b],T=O||S(b),R=b?C?S("entries"):T:void 0,M="Array"==e?A.entries||O:O;if(M&&(k=c(M.call(new t)),k!==Object.prototype&&k.next&&(u(k,E,!0),a||"function"==typeof k[l]||o(k,l,g))),C&&O&&O.name!==m&&(P=!0,T=function(){return O.call(this)}),a&&!_||!d&&!P&&A[l]||o(A,l,T),s[e]=T,s[E]=g,b)if(x={values:C?T:S(m),keys:y?T:S(h),entries:R},_)for(w in x)w in A||i(A,w,x[w]);else r(r.P+r.F*(d||P),e,x);return x}},{127:127,34:34,43:43,55:55,59:59,60:60,79:79,92:92,99:99}],57:[function(t,e,n){var a=t(127)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{127:127}],58:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],59:[function(t,e,n){e.exports={}},{}],60:[function(t,e,n){e.exports=!1},{}],61:[function(t,e,n){var a=Math.expm1;e.exports=!a||a(10)>22025.465794806718||a(10)<22025.465794806718||-2e-17!=a(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}:a},{}],62:[function(t,e,n){var a=t(65),r=Math.pow,i=r(2,-52),o=r(2,-23),s=r(2,127)*(2-o),p=r(2,-126),u=function(t){return t+1/i-1/i};e.exports=Math.fround||function(t){var e,n,r=Math.abs(t),c=a(t);return p>r?c*u(r/p/o)*p*o:(e=(1+o/i)*r,n=e-(e-r),n>s||n!=n?c*(1/0):c*n)}},{65:65}],63:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],64:[function(t,e,n){e.exports=Math.scale||function(t,e,n,a,r){return 0===arguments.length||t!=t||e!=e||n!=n||a!=a||r!=r?NaN:t===1/0||t===-(1/0)?t:(t-e)*(r-a)/(n-e)+a}},{}],65:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],66:[function(t,e,n){var a=t(122)("meta"),r=t(52),i=t(42),o=t(72).f,s=0,p=Object.isExtensible||function(){return!0},u=!t(36)(function(){return p(Object.preventExtensions({}))}),c=function(t){o(t,a,{value:{i:"O"+ ++s,w:{}}})},l=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,a)){if(!p(t))return"F";if(!e)return"E";c(t)}return t[a].i},d=function(t,e){if(!i(t,a)){if(!p(t))return!0;if(!e)return!1;c(t)}return t[a].w},f=function(t){return u&&h.NEED&&p(t)&&!i(t,a)&&c(t),t},h=e.exports={KEY:a,NEED:!1,fastKey:l,getWeak:d,onFreeze:f}},{122:122,36:36,42:42,52:52,72:72}],67:[function(t,e,n){var a=t(159),r=t(34),i=t(101)("metadata"),o=i.store||(i.store=new(t(265))),s=function(t,e,n){var r=o.get(t);if(!r){if(!n)return;o.set(t,r=new a)}var i=r.get(e);if(!i){if(!n)return;r.set(e,i=new a)}return i},p=function(t,e,n){var a=s(e,n,!1);return void 0===a?!1:a.has(t)},u=function(t,e,n){var a=s(e,n,!1);return void 0===a?void 0:a.get(t)},c=function(t,e,n,a){s(n,a,!0).set(t,e)},l=function(t,e){var n=s(t,e,!1),a=[];return n&&n.forEach(function(t,e){a.push(e)}),a},d=function(t){return void 0===t||"symbol"==typeof t?t:t+""},f=function(t){r(r.S,"Reflect",t)};e.exports={store:o,map:s,has:p,get:u,set:c,keys:l,key:d,exp:f}},{101:101,159:159,265:265,34:34}],68:[function(t,e,n){var a=t(41),r=t(111).set,i=a.MutationObserver||a.WebKitMutationObserver,o=a.process,s=a.Promise,p="process"==t(19)(o);e.exports=function(){var t,e,n,u=function(){var a,r;for(p&&(a=o.domain)&&a.exit();t;){r=t.fn,t=t.next;try{r()}catch(i){throw t?n():e=void 0,i}}e=void 0,a&&a.enter()};if(p)n=function(){o.nextTick(u)};else if(!i||a.navigator&&a.navigator.standalone)if(s&&s.resolve){var c=s.resolve(void 0);n=function(){c.then(u)}}else n=function(){r.call(a,u)};else{var l=!0,d=document.createTextNode("");new i(u).observe(d,{characterData:!0}),n=function(){d.data=l=!l}}return function(a){var r={fn:a,next:void 0};e&&(e.next=r),t||(t=r,n()),e=r}}},{111:111,19:19,41:41}],69:[function(t,e,n){"use strict";function a(t){var e,n;this.promise=new t(function(t,a){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=a}),this.resolve=r(e),this.reject=r(n)}var r=t(4);e.exports.f=function(t){return new a(t)}},{4:4}],70:[function(t,e,n){"use strict";var a=t(81),r=t(78),i=t(82),o=t(117),s=t(48),p=Object.assign;e.exports=!p||t(36)(function(){var t={},e={},n=Symbol(),a="abcdefghijklmnopqrst";return t[n]=7,a.split("").forEach(function(t){e[t]=t}),7!=p({},t)[n]||Object.keys(p({},e)).join("")!=a})?function(t,e){for(var n=o(t),p=arguments.length,u=1,c=r.f,l=i.f;p>u;)for(var d,f=s(arguments[u++]),h=c?a(f).concat(c(f)):a(f),m=h.length,g=0;m>g;)l.call(f,d=h[g++])&&(n[d]=f[d]);return n}:p},{117:117,36:36,48:48,78:78,81:81,82:82}],71:[function(t,e,n){var a=t(8),r=t(73),i=t(32),o=t(100)("IE_PROTO"),s=function(){},p="prototype",u=function(){var e,n=t(31)("iframe"),a=i.length,r="<",o=">";for(n.style.display="none",t(44).appendChild(n),n.src="javascript:",e=n.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),u=e.F;a--;)delete u[p][i[a]];return u()};e.exports=Object.create||function(t,e){var n;return null!==t?(s[p]=a(t),n=new s,s[p]=null,n[o]=t):n=u(),void 0===e?n:r(n,e)}},{100:100,31:31,32:32,44:44,73:73,8:8}],72:[function(t,e,n){var a=t(8),r=t(45),i=t(118),o=Object.defineProperty;n.f=t(30)?Object.defineProperty:function(t,e,n){if(a(t),e=i(e,!0),a(n),r)try{return o(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},{118:118,30:30,45:45,8:8}],73:[function(t,e,n){var a=t(72),r=t(8),i=t(81);e.exports=t(30)?Object.defineProperties:function(t,e){r(t);for(var n,o=i(e),s=o.length,p=0;s>p;)a.f(t,n=o[p++],e[n]);return t}},{30:30,72:72,8:8,81:81}],74:[function(t,e,n){"use strict";e.exports=t(60)||!t(36)(function(){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete t(41)[e]})},{36:36,41:41,60:60}],75:[function(t,e,n){var a=t(82),r=t(90),i=t(115),o=t(118),s=t(42),p=t(45),u=Object.getOwnPropertyDescriptor;n.f=t(30)?u:function(t,e){if(t=i(t),e=o(e,!0),p)try{return u(t,e)}catch(n){}return s(t,e)?r(!a.f.call(t,e),t[e]):void 0}},{115:115,118:118,30:30,42:42,45:45,82:82,90:90}],76:[function(t,e,n){var a=t(115),r=t(77).f,i={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.f=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{115:115,77:77}],77:[function(t,e,n){var a=t(80),r=t(32).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return a(t,r)}},{32:32,80:80}],78:[function(t,e,n){n.f=Object.getOwnPropertySymbols},{}],79:[function(t,e,n){var a=t(42),r=t(117),i=t(100)("IE_PROTO"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(t){return t=r(t),a(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?o:null}},{100:100,117:117,42:42}],80:[function(t,e,n){var a=t(42),r=t(115),i=t(12)(!1),o=t(100)("IE_PROTO");e.exports=function(t,e){var n,s=r(t),p=0,u=[];for(n in s)n!=o&&a(s,n)&&u.push(n);for(;e.length>p;)a(s,n=e[p++])&&(~i(u,n)||u.push(n));return u}},{100:100,115:115,12:12,42:42}],81:[function(t,e,n){var a=t(80),r=t(32);e.exports=Object.keys||function(t){return a(t,r)}},{32:32,80:80}],82:[function(t,e,n){n.f={}.propertyIsEnumerable},{}],83:[function(t,e,n){var a=t(34),r=t(24),i=t(36);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{24:24,34:34,36:36}],84:[function(t,e,n){var a=t(81),r=t(115),i=t(82).f;e.exports=function(t){return function(e){for(var n,o=r(e),s=a(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{115:115,81:81,82:82}],85:[function(t,e,n){var a=t(77),r=t(78),i=t(8),o=t(41).Reflect;e.exports=o&&o.ownKeys||function(t){var e=a.f(i(t)),n=r.f;return n?e.concat(n(t)):e}},{41:41,77:77,78:78,8:8}],86:[function(t,e,n){var a=t(41).parseFloat,r=t(109).trim;e.exports=1/a(t(110)+"-0")!==-(1/0)?function(t){var e=r(t+"",3),n=a(e);return 0===n&&"-"==e.charAt(0)?-0:n}:a},{109:109,110:110,41:41}],87:[function(t,e,n){var a=t(41).parseInt,r=t(109).trim,i=t(110),o=/^[-+]?0[xX]/;e.exports=8!==a(i+"08")||22!==a(i+"0x16")?function(t,e){var n=r(t+"",3);return a(n,e>>>0||(o.test(n)?16:10))}:a},{109:109,110:110,41:41}],88:[function(t,e,n){e.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},{}],89:[function(t,e,n){var a=t(8),r=t(52),i=t(69);e.exports=function(t,e){if(a(t),r(e)&&e.constructor===t)return e;var n=i.f(t),o=n.resolve;return o(e),n.promise}},{52:52,69:69,8:8}],90:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],91:[function(t,e,n){var a=t(92);e.exports=function(t,e,n){for(var r in e)a(t,r,e[r],n);return t}},{92:92}],92:[function(t,e,n){var a=t(41),r=t(43),i=t(42),o=t(122)("src"),s="toString",p=Function[s],u=(""+p).split(s);t(24).inspectSource=function(t){return p.call(t)},(e.exports=function(t,e,n,s){var p="function"==typeof n;p&&(i(n,"name")||r(n,"name",e)),t[e]!==n&&(p&&(i(n,o)||r(n,o,t[e]?""+t[e]:u.join(e+""))),t===a?t[e]=n:s?t[e]?t[e]=n:r(t,e,n):(delete t[e],r(t,e,n)))})(Function.prototype,s,function(){ -return"function"==typeof this&&this[o]||p.call(this)})},{122:122,24:24,41:41,42:42,43:43}],93:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],94:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],95:[function(t,e,n){"use strict";var a=t(34),r=t(4),i=t(26),o=t(40);e.exports=function(t){a(a.S,t,{from:function(t){var e,n,a,s,p=arguments[1];return r(this),e=void 0!==p,e&&r(p),void 0==t?new this:(n=[],e?(a=0,s=i(p,arguments[2],2),o(t,!1,function(t){n.push(s(t,a++))})):o(t,!1,n.push,n),new this(n))}})}},{26:26,34:34,4:4,40:40}],96:[function(t,e,n){"use strict";var a=t(34);e.exports=function(t){a(a.S,t,{of:function(){for(var t=arguments.length,e=Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},{34:34}],97:[function(t,e,n){var a=t(52),r=t(8),i=function(t,e){if(r(t),!a(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,a){try{a=t(26)(Function.call,t(75).f(Object.prototype,"__proto__").set,2),a(e,[]),n=!(e instanceof Array)}catch(r){n=!0}return function(t,e){return i(t,e),n?t.__proto__=e:a(t,e),t}}({},!1):void 0),check:i}},{26:26,52:52,75:75,8:8}],98:[function(t,e,n){"use strict";var a=t(41),r=t(72),i=t(30),o=t(127)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.f(e,o,{configurable:!0,get:function(){return this}})}},{127:127,30:30,41:41,72:72}],99:[function(t,e,n){var a=t(72).f,r=t(42),i=t(127)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{127:127,42:42,72:72}],100:[function(t,e,n){var a=t(101)("keys"),r=t(122);e.exports=function(t){return a[t]||(a[t]=r(t))}},{101:101,122:122}],101:[function(t,e,n){var a=t(24),r=t(41),i="__core-js_shared__",o=r[i]||(r[i]={});(e.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:a.version,mode:t(60)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},{24:24,41:41,60:60}],102:[function(t,e,n){var a=t(8),r=t(4),i=t(127)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{127:127,4:4,8:8}],103:[function(t,e,n){"use strict";var a=t(36);e.exports=function(t,e){return!!t&&a(function(){e?t.call(null,function(){},1):t.call(null)})}},{36:36}],104:[function(t,e,n){var a=t(114),r=t(29);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{114:114,29:29}],105:[function(t,e,n){var a=t(53),r=t(29);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{29:29,53:53}],106:[function(t,e,n){var a=t(34),r=t(36),i=t(29),o=/"/g,s=function(t,e,n,a){var r=i(t)+"",s="<"+e;return""!==n&&(s+=" "+n+'="'+(a+"").replace(o,""")+'"'),s+">"+r+""};e.exports=function(t,e){var n={};n[t]=e(s),a(a.P+a.F*r(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},{29:29,34:34,36:36}],107:[function(t,e,n){var a=t(116),r=t(108),i=t(29);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c||""==u)return s;var l=c-p,d=r.call(u,Math.ceil(l/u.length));return d.length>l&&(d=d.slice(0,l)),o?d+s:s+d}},{108:108,116:116,29:29}],108:[function(t,e,n){"use strict";var a=t(114),r=t(29);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{114:114,29:29}],109:[function(t,e,n){var a=t(34),r=t(29),i=t(36),o=t(110),s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e,n){var r={},s=i(function(){return!!o[t]()||p[t]()!=p}),u=r[t]=s?e(d):o[t];n&&(r[n]=u),a(a.P+a.F*s,"String",r)},d=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{110:110,29:29,34:34,36:36}],110:[function(t,e,n){e.exports=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff"},{}],111:[function(t,e,n){var a,r,i,o=t(26),s=t(47),p=t(44),u=t(31),c=t(41),l=c.process,d=c.setImmediate,f=c.clearImmediate,h=c.MessageChannel,m=c.Dispatch,g=0,v={},b="onreadystatechange",y=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},_=function(t){y.call(t.data)};d&&f||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++g]=function(){s("function"==typeof t?t:Function(t),e)},a(g),g},f=function(t){delete v[t]},"process"==t(19)(l)?a=function(t){l.nextTick(o(y,t,1))}:m&&m.now?a=function(t){m.now(o(y,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=_,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",_,!1)):a=b in u("script")?function(t){p.appendChild(u("script"))[b]=function(){p.removeChild(this),y.call(t)}}:function(t){setTimeout(o(y,t,1),0)}),e.exports={set:d,clear:f}},{19:19,26:26,31:31,41:41,44:44,47:47}],112:[function(t,e,n){var a=t(114),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{114:114}],113:[function(t,e,n){var a=t(114),r=t(116);e.exports=function(t){if(void 0===t)return 0;var e=a(t),n=r(e);if(e!==n)throw RangeError("Wrong length!");return n}},{114:114,116:116}],114:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],115:[function(t,e,n){var a=t(48),r=t(29);e.exports=function(t){return a(r(t))}},{29:29,48:48}],116:[function(t,e,n){var a=t(114),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{114:114}],117:[function(t,e,n){var a=t(29);e.exports=function(t){return Object(a(t))}},{29:29}],118:[function(t,e,n){var a=t(52);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{52:52}],119:[function(t,e,n){"use strict";if(t(30)){var a=t(60),r=t(41),i=t(36),o=t(34),s=t(121),p=t(120),u=t(26),c=t(7),l=t(90),d=t(43),f=t(91),h=t(114),m=t(116),g=t(113),v=t(112),b=t(118),y=t(42),_=t(18),x=t(52),w=t(117),k=t(49),S=t(71),E=t(79),C=t(77).f,P=t(128),A=t(122),O=t(127),T=t(13),R=t(12),M=t(102),L=t(140),j=t(59),D=t(57),N=t(98),F=t(10),I=t(9),B=t(72),V=t(75),q=B.f,U=V.f,G=r.RangeError,z=r.TypeError,W=r.Uint8Array,H="ArrayBuffer",K="Shared"+H,Q="BYTES_PER_ELEMENT",Y="prototype",$=Array[Y],J=p.ArrayBuffer,X=p.DataView,Z=T(0),tt=T(2),et=T(3),nt=T(4),at=T(5),rt=T(6),it=R(!0),ot=R(!1),st=L.values,pt=L.keys,ut=L.entries,ct=$.lastIndexOf,lt=$.reduce,dt=$.reduceRight,ft=$.join,ht=$.sort,mt=$.slice,gt=$.toString,vt=$.toLocaleString,bt=O("iterator"),yt=O("toStringTag"),_t=A("typed_constructor"),xt=A("def_constructor"),wt=s.CONSTR,kt=s.TYPED,St=s.VIEW,Et="Wrong length!",Ct=T(1,function(t,e){return Rt(M(t,t[xt]),e)}),Pt=i(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),At=!!W&&!!W[Y].set&&i(function(){new W(1).set({})}),Ot=function(t,e){var n=h(t);if(0>n||n%e)throw G("Wrong offset!");return n},Tt=function(t){if(x(t)&&kt in t)return t;throw z(t+" is not a typed array!")},Rt=function(t,e){if(!(x(t)&&_t in t))throw z("It is not a typed array constructor!");return new t(e)},Mt=function(t,e){return Lt(M(t,t[xt]),e)},Lt=function(t,e){for(var n=0,a=e.length,r=Rt(t,a);a>n;)r[n]=e[n++];return r},jt=function(t,e,n){q(t,e,{get:function(){return this._d[n]}})},Dt=function(t){var e,n,a,r,i,o,s=w(t),p=arguments.length,c=p>1?arguments[1]:void 0,l=void 0!==c,d=P(s);if(void 0!=d&&!k(d)){for(o=d.call(s),a=[],e=0;!(i=o.next()).done;e++)a.push(i.value);s=a}for(l&&p>2&&(c=u(c,arguments[2],2)),e=0,n=m(s.length),r=Rt(this,n);n>e;e++)r[e]=l?c(s[e],e):s[e];return r},Nt=function(){for(var t=0,e=arguments.length,n=Rt(this,e);e>t;)n[t]=arguments[t++];return n},Ft=!!W&&i(function(){vt.call(new W(1))}),It=function(){return vt.apply(Ft?mt.call(Tt(this)):Tt(this),arguments)},Bt={copyWithin:function(t,e){return I.call(Tt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return nt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return F.apply(Tt(this),arguments)},filter:function(t){return Mt(this,tt(Tt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return at(Tt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return rt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Z(Tt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Tt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Tt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ft.apply(Tt(this),arguments)},lastIndexOf:function(t){return ct.apply(Tt(this),arguments)},map:function(t){return Ct(Tt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return lt.apply(Tt(this),arguments)},reduceRight:function(t){return dt.apply(Tt(this),arguments)},reverse:function(){for(var t,e=this,n=Tt(e).length,a=Math.floor(n/2),r=0;a>r;)t=e[r],e[r++]=e[--n],e[n]=t;return e},some:function(t){return et(Tt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return ht.call(Tt(this),t)},subarray:function(t,e){var n=Tt(this),a=n.length,r=v(t,a);return new(M(n,n[xt]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,m((void 0===e?a:v(e,a))-r))}},Vt=function(t,e){return Mt(this,mt.call(Tt(this),t,e))},qt=function(t){Tt(this);var e=Ot(arguments[1],1),n=this.length,a=w(t),r=m(a.length),i=0;if(r+e>n)throw G(Et);for(;r>i;)this[e+i]=a[i++]},Ut={entries:function(){return ut.call(Tt(this))},keys:function(){return pt.call(Tt(this))},values:function(){return st.call(Tt(this))}},Gt=function(t,e){return x(t)&&t[kt]&&"symbol"!=typeof e&&e in t&&+e+""==e+""},zt=function(t,e){return Gt(t,e=b(e,!0))?l(2,t[e]):U(t,e)},Wt=function(t,e,n){return!(Gt(t,e=b(e,!0))&&x(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?q(t,e,n):(t[e]=n.value,t)};wt||(V.f=zt,B.f=Wt),o(o.S+o.F*!wt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Wt}),i(function(){gt.call({})})&&(gt=vt=function(){return ft.call(this)});var Ht=f({},Bt);f(Ht,Ut),d(Ht,bt,Ut.values),f(Ht,{slice:Vt,set:qt,constructor:function(){},toString:gt,toLocaleString:It}),jt(Ht,"buffer","b"),jt(Ht,"byteOffset","o"),jt(Ht,"byteLength","l"),jt(Ht,"length","e"),q(Ht,yt,{get:function(){return this[kt]}}),e.exports=function(t,e,n,p){p=!!p;var u=t+(p?"Clamped":"")+"Array",l="get"+t,f="set"+t,h=r[u],v=h||{},b=h&&E(h),y=!h||!s.ABV,w={},k=h&&h[Y],P=function(t,n){var a=t._d;return a.v[l](n*e+a.o,Pt)},A=function(t,n,a){var r=t._d;p&&(a=(a=Math.round(a))<0?0:a>255?255:255&a),r.v[f](n*e+r.o,a,Pt)},O=function(t,e){q(t,e,{get:function(){return P(this,e)},set:function(t){return A(this,e,t)},enumerable:!0})};y?(h=n(function(t,n,a,r){c(t,h,u,"_d");var i,o,s,p,l=0,f=0;if(x(n)){if(!(n instanceof J||(p=_(n))==H||p==K))return kt in n?Lt(h,n):Dt.call(h,n);i=n,f=Ot(a,e);var v=n.byteLength;if(void 0===r){if(v%e)throw G(Et);if(o=v-f,0>o)throw G(Et)}else if(o=m(r)*e,o+f>v)throw G(Et);s=o/e}else s=g(n),o=s*e,i=new J(o);for(d(t,"_d",{b:i,o:f,l:o,e:s,v:new X(i)});s>l;)O(t,l++)}),k=h[Y]=S(Ht),d(k,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&D(function(t){new h,new h(null),new h(1.5),new h(t)},!0)||(h=n(function(t,n,a,r){c(t,h,u);var i;return x(n)?n instanceof J||(i=_(n))==H||i==K?void 0!==r?new v(n,Ot(a,e),r):void 0!==a?new v(n,Ot(a,e)):new v(n):kt in n?Lt(h,n):Dt.call(h,n):new v(g(n))}),Z(b!==Function.prototype?C(v).concat(C(b)):C(v),function(t){t in h||d(h,t,v[t])}),h[Y]=k,a||(k.constructor=h));var T=k[bt],R=!!T&&("values"==T.name||void 0==T.name),M=Ut.values;d(h,_t,!0),d(k,kt,u),d(k,St,!0),d(k,xt,h),(p?new h(1)[yt]==u:yt in k)||q(k,yt,{get:function(){return u}}),w[u]=h,o(o.G+o.W+o.F*(h!=v),w),o(o.S,u,{BYTES_PER_ELEMENT:e}),o(o.S+o.F*i(function(){v.of.call(h,1)}),u,{from:Dt,of:Nt}),Q in k||d(k,Q,e),o(o.P,u,Bt),N(u),o(o.P+o.F*At,u,{set:qt}),o(o.P+o.F*!R,u,Ut),a||k.toString==gt||(k.toString=gt),o(o.P+o.F*i(function(){new h(1).slice()}),u,{slice:Vt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){k.toLocaleString.call([1,2])})),u,{toLocaleString:It}),j[u]=R?T:M,a||R||d(k,bt,M)}}else e.exports=function(){}},{10:10,102:102,112:112,113:113,114:114,116:116,117:117,118:118,12:12,120:120,121:121,122:122,127:127,128:128,13:13,140:140,18:18,26:26,30:30,34:34,36:36,41:41,42:42,43:43,49:49,52:52,57:57,59:59,60:60,7:7,71:71,72:72,75:75,77:77,79:79,9:9,90:90,91:91,98:98}],120:[function(t,e,n){"use strict";function a(t,e,n){var a,r,i,o=Array(n),s=8*n-e-1,p=(1<>1,c=23===e?q(2,-24)-q(2,-77):0,l=0,d=0>t||0===t&&0>1/t?1:0;for(t=V(t),t!=t||t===I?(r=t!=t?1:0,a=p):(a=U(G(t)/z),t*(i=q(2,-a))<1&&(a--,i*=2),t+=a+u>=1?c/i:c*q(2,1-u),t*i>=2&&(a++,i/=2),a+u>=p?(r=0,a=p):a+u>=1?(r=(t*i-1)*q(2,e),a+=u):(r=t*q(2,u-1)*q(2,e),a=0));e>=8;o[l++]=255&r,r/=256,e-=8);for(a=a<0;o[l++]=255&a,a/=256,s-=8);return o[--l]|=128*d,o}function r(t,e,n){var a,r=8*n-e-1,i=(1<>1,s=r-7,p=n-1,u=t[p--],c=127&u;for(u>>=7;s>0;c=256*c+t[p],p--,s-=8);for(a=c&(1<<-s)-1,c>>=-s,s+=e;s>0;a=256*a+t[p],p--,s-=8);if(0===c)c=1-o;else{if(c===i)return a?NaN:u?-I:I;a+=q(2,e),c-=o}return(u?-1:1)*a*q(2,c-e)}function i(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function o(t){return[255&t]}function s(t){return[255&t,t>>8&255]}function p(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function u(t){return a(t,52,8)}function c(t){return a(t,23,4)}function l(t,e,n){C(t[R],e,{get:function(){return this[n]}})}function d(t,e,n,a){var r=+n,i=S(r);if(i+e>t[Y])throw F(L);var o=t[Q]._b,s=i+t[$],p=o.slice(s,s+e);return a?p:p.reverse()}function f(t,e,n,a,r,i){var o=+n,s=S(o);if(s+e>t[Y])throw F(L);for(var p=t[Q]._b,u=s+t[$],c=a(+r),l=0;e>l;l++)p[u+l]=c[i?l:e-l-1]}var h=t(41),m=t(30),g=t(60),v=t(121),b=t(43),y=t(91),_=t(36),x=t(7),w=t(114),k=t(116),S=t(113),E=t(77).f,C=t(72).f,P=t(10),A=t(99),O="ArrayBuffer",T="DataView",R="prototype",M="Wrong length!",L="Wrong index!",j=h[O],D=h[T],N=h.Math,F=h.RangeError,I=h.Infinity,B=j,V=N.abs,q=N.pow,U=N.floor,G=N.log,z=N.LN2,W="buffer",H="byteLength",K="byteOffset",Q=m?"_b":W,Y=m?"_l":H,$=m?"_o":K;if(v.ABV){if(!_(function(){j(1)})||!_(function(){new j(-1)})||_(function(){return new j,new j(1.5),new j(NaN),j.name!=O})){j=function(t){return x(this,j),new B(S(t))};for(var J,X=j[R]=B[R],Z=E(B),tt=0;Z.length>tt;)(J=Z[tt++])in j||b(j,J,B[J]);g||(X.constructor=j)}var et=new D(new j(2)),nt=D[R].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),(et.getInt8(0)||!et.getInt8(1))&&y(D[R],{setInt8:function(t,e){nt.call(this,t,e<<24>>24)},setUint8:function(t,e){nt.call(this,t,e<<24>>24)}},!0)}else j=function(t){x(this,j,O);var e=S(t);this._b=P.call(Array(e),0),this[Y]=e},D=function(t,e,n){x(this,D,T),x(t,j,T);var a=t[Y],r=w(e);if(0>r||r>a)throw F("Wrong offset!");if(n=void 0===n?a-r:k(n),r+n>a)throw F(M);this[Q]=t,this[$]=r,this[Y]=n},m&&(l(j,H,"_l"),l(D,W,"_b"),l(D,H,"_l"),l(D,K,"_o")),y(D[R],{getInt8:function(t){return d(this,1,t)[0]<<24>>24},getUint8:function(t){return d(this,1,t)[0]},getInt16:function(t){var e=d(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=d(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return i(d(this,4,t,arguments[1]))},getUint32:function(t){return i(d(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return r(d(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return r(d(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){f(this,1,t,o,e)},setUint8:function(t,e){f(this,1,t,o,e)},setInt16:function(t,e){f(this,2,t,s,e,arguments[2])},setUint16:function(t,e){f(this,2,t,s,e,arguments[2])},setInt32:function(t,e){f(this,4,t,p,e,arguments[2])},setUint32:function(t,e){f(this,4,t,p,e,arguments[2])},setFloat32:function(t,e){f(this,4,t,c,e,arguments[2])},setFloat64:function(t,e){f(this,8,t,u,e,arguments[2])}});A(j,O),A(D,T),b(D[R],v.VIEW,!0),n[O]=j,n[T]=D},{10:10,113:113,114:114,116:116,121:121,30:30,36:36,41:41,43:43,60:60,7:7,72:72,77:77,91:91,99:99}],121:[function(t,e,n){for(var a,r=t(41),i=t(43),o=t(122),s=o("typed_array"),p=o("view"),u=!(!r.ArrayBuffer||!r.DataView),c=u,l=0,d=9,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");d>l;)(a=r[f[l++]])?(i(a.prototype,s,!0),i(a.prototype,p,!0)):c=!1;e.exports={ABV:u,CONSTR:c,TYPED:s,VIEW:p}},{122:122,41:41,43:43}],122:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],123:[function(t,e,n){var a=t(41),r=a.navigator;e.exports=r&&r.userAgent||""},{41:41}],124:[function(t,e,n){var a=t(52);e.exports=function(t,e){if(!a(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},{52:52}],125:[function(t,e,n){var a=t(41),r=t(24),i=t(60),o=t(126),s=t(72).f;e.exports=function(t){var e=r.Symbol||(r.Symbol=i?{}:a.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:o.f(t)})}},{126:126,24:24,41:41,60:60,72:72}],126:[function(t,e,n){n.f=t(127)},{127:127}],127:[function(t,e,n){var a=t(101)("wks"),r=t(122),i=t(41).Symbol,o="function"==typeof i,s=e.exports=function(t){return a[t]||(a[t]=o&&i[t]||(o?i:r)("Symbol."+t))};s.store=a},{101:101,122:122,41:41}],128:[function(t,e,n){var a=t(18),r=t(127)("iterator"),i=t(59);e.exports=t(24).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{127:127,18:18,24:24,59:59}],129:[function(t,e,n){var a=t(34),r=t(93)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{34:34,93:93}],130:[function(t,e,n){var a=t(34);a(a.P,"Array",{copyWithin:t(9)}),t(6)("copyWithin")},{34:34,6:6,9:9}],131:[function(t,e,n){"use strict";var a=t(34),r=t(13)(4);a(a.P+a.F*!t(103)([].every,!0),"Array",{every:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],132:[function(t,e,n){var a=t(34);a(a.P,"Array",{fill:t(10)}),t(6)("fill")},{10:10,34:34,6:6}],133:[function(t,e,n){"use strict";var a=t(34),r=t(13)(2);a(a.P+a.F*!t(103)([].filter,!0),"Array",{filter:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],134:[function(t,e,n){"use strict";var a=t(34),r=t(13)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(6)(i)},{13:13,34:34,6:6}],135:[function(t,e,n){"use strict";var a=t(34),r=t(13)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(6)(i)},{13:13,34:34,6:6}],136:[function(t,e,n){"use strict";var a=t(34),r=t(13)(0),i=t(103)([].forEach,!0);a(a.P+a.F*!i,"Array",{forEach:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],137:[function(t,e,n){"use strict";var a=t(26),r=t(34),i=t(117),o=t(54),s=t(49),p=t(116),u=t(25),c=t(128);r(r.S+r.F*!t(57)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,r,l,d=i(t),f="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,g=void 0!==m,v=0,b=c(d);if(g&&(m=a(m,h>2?arguments[2]:void 0,2)),void 0==b||f==Array&&s(b))for(e=p(d.length),n=new f(e);e>v;v++)u(n,v,g?m(d[v],v):d[v]);else for(l=b.call(d),n=new f;!(r=l.next()).done;v++)u(n,v,g?o(l,m,[r.value,v],!0):r.value);return n.length=v,n}})},{116:116,117:117,128:128,25:25,26:26,34:34,49:49,54:54,57:57}],138:[function(t,e,n){"use strict";var a=t(34),r=t(12)(!1),i=[].indexOf,o=!!i&&1/[1].indexOf(1,-0)<0;a(a.P+a.F*(o||!t(103)(i)),"Array",{indexOf:function(t){return o?i.apply(this,arguments)||0:r(this,t,arguments[1])}})},{103:103,12:12,34:34}],139:[function(t,e,n){var a=t(34);a(a.S,"Array",{isArray:t(50)})},{34:34,50:50}],140:[function(t,e,n){"use strict";var a=t(6),r=t(58),i=t(59),o=t(115);e.exports=t(56)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{115:115,56:56,58:58,59:59,6:6}],141:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=[].join;a(a.P+a.F*(t(48)!=Object||!t(103)(i)),"Array",{join:function(t){return i.call(r(this),void 0===t?",":t)}})},{103:103,115:115,34:34,48:48}],142:[function(t,e,n){"use strict";var a=t(34),r=t(115),i=t(114),o=t(116),s=[].lastIndexOf,p=!!s&&1/[1].lastIndexOf(1,-0)<0;a(a.P+a.F*(p||!t(103)(s)),"Array",{lastIndexOf:function(t){if(p)return s.apply(this,arguments)||0;var e=r(this),n=o(e.length),a=n-1;for(arguments.length>1&&(a=Math.min(a,i(arguments[1]))),0>a&&(a=n+a);a>=0;a--)if(a in e&&e[a]===t)return a||0;return-1}})},{103:103,114:114,115:115,116:116,34:34}],143:[function(t,e,n){"use strict";var a=t(34),r=t(13)(1);a(a.P+a.F*!t(103)([].map,!0),"Array",{map:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],144:[function(t,e,n){"use strict";var a=t(34),r=t(25);a(a.S+a.F*t(36)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)r(n,t,arguments[t++]);return n.length=e,n}})},{25:25,34:34,36:36}],145:[function(t,e,n){"use strict";var a=t(34),r=t(14);a(a.P+a.F*!t(103)([].reduceRight,!0),"Array",{reduceRight:function(t){return r(this,t,arguments.length,arguments[1],!0)}})},{103:103,14:14,34:34}],146:[function(t,e,n){"use strict";var a=t(34),r=t(14);a(a.P+a.F*!t(103)([].reduce,!0),"Array",{reduce:function(t){return r(this,t,arguments.length,arguments[1],!1)}})},{103:103,14:14,34:34}],147:[function(t,e,n){"use strict";var a=t(34),r=t(44),i=t(19),o=t(112),s=t(116),p=[].slice;a(a.P+a.F*t(36)(function(){r&&p.call(r)}),"Array",{slice:function(t,e){var n=s(this.length),a=i(this);if(e=void 0===e?n:e,"Array"==a)return p.call(this,t,e);for(var r=o(t,n),u=o(e,n),c=s(u-r),l=Array(c),d=0;c>d;d++)l[d]="String"==a?this.charAt(r+d):this[r+d];return l}})},{112:112,116:116,19:19,34:34,36:36,44:44}],148:[function(t,e,n){"use strict";var a=t(34),r=t(13)(3);a(a.P+a.F*!t(103)([].some,!0),"Array",{some:function(t){return r(this,t,arguments[1])}})},{103:103,13:13,34:34}],149:[function(t,e,n){"use strict";var a=t(34),r=t(4),i=t(117),o=t(36),s=[].sort,p=[1,2,3];a(a.P+a.F*(o(function(){p.sort(void 0)})||!o(function(){p.sort(null)})||!t(103)(s)),"Array",{sort:function(t){return void 0===t?s.call(i(this)):s.call(i(this),r(t))}})},{103:103,117:117,34:34,36:36,4:4}],150:[function(t,e,n){t(98)("Array")},{98:98}],151:[function(t,e,n){var a=t(34);a(a.S,"Date",{now:function(){return(new Date).getTime()}})},{34:34}],152:[function(t,e,n){var a=t(34),r=t(27);a(a.P+a.F*(Date.prototype.toISOString!==r),"Date",{toISOString:r})},{27:27,34:34}],153:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118);a(a.P+a.F*t(36)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var e=r(this),n=i(e);return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},{117:117,118:118,34:34,36:36}],154:[function(t,e,n){var a=t(127)("toPrimitive"),r=Date.prototype;a in r||t(43)(r,a,t(28))},{127:127,28:28,43:43}],155:[function(t,e,n){var a=Date.prototype,r="Invalid Date",i="toString",o=a[i],s=a.getTime;new Date(NaN)+""!=r&&t(92)(a,i,function(){var t=s.call(this);return t===t?o.call(this):r})},{92:92}],156:[function(t,e,n){var a=t(34);a(a.P,"Function",{bind:t(17)})},{17:17,34:34}],157:[function(t,e,n){"use strict";var a=t(52),r=t(79),i=t(127)("hasInstance"),o=Function.prototype;i in o||t(72).f(o,i,{value:function(t){if("function"!=typeof this||!a(t))return!1;if(!a(this.prototype))return t instanceof this;for(;t=r(t);)if(this.prototype===t)return!0;return!1}})},{127:127,52:52,72:72,79:79}],158:[function(t,e,n){var a=t(72).f,r=Function.prototype,i=/^\s*function ([^ (]*)/,o="name";o in r||t(30)&&a(r,o,{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},{30:30,72:72}],159:[function(t,e,n){"use strict";var a=t(20),r=t(124),i="Map";e.exports=t(23)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=a.getEntry(r(this,i),t);return e&&e.v},set:function(t,e){return a.def(r(this,i),0===t?0:t,e)}},a,!0)},{124:124,20:20,23:23}],160:[function(t,e,n){var a=t(34),r=t(63),i=Math.sqrt,o=Math.acosh;a(a.S+a.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))&&o(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:r(t-1+i(t-1)*i(t+1))}})},{34:34,63:63}],161:[function(t,e,n){function a(t){return isFinite(t=+t)&&0!=t?0>t?-a(-t):Math.log(t+Math.sqrt(t*t+1)):t}var r=t(34),i=Math.asinh;r(r.S+r.F*!(i&&1/i(0)>0),"Math",{asinh:a})},{34:34}],162:[function(t,e,n){var a=t(34),r=Math.atanh;a(a.S+a.F*!(r&&1/r(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{34:34}],163:[function(t,e,n){var a=t(34),r=t(65);a(a.S,"Math",{cbrt:function(t){return r(t=+t)*Math.pow(Math.abs(t),1/3)}})},{34:34,65:65}],164:[function(t,e,n){var a=t(34);a(a.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{34:34}],165:[function(t,e,n){var a=t(34),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{34:34}],166:[function(t,e,n){var a=t(34),r=t(61);a(a.S+a.F*(r!=Math.expm1),"Math",{expm1:r})},{34:34,61:61}],167:[function(t,e,n){var a=t(34);a(a.S,"Math",{fround:t(62)})},{34:34,62:62}],168:[function(t,e,n){var a=t(34),r=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,i=0,o=0,s=arguments.length,p=0;s>o;)n=r(arguments[o++]),n>p?(a=p/n,i=i*a*a+1,p=n):n>0?(a=n/p,i+=a*a):i+=n;return p===1/0?1/0:p*Math.sqrt(i)}})},{34:34}],169:[function(t,e,n){var a=t(34),r=Math.imul;a(a.S+a.F*t(36)(function(){return-5!=r(4294967295,5)||2!=r.length}),"Math",{imul:function(t,e){var n=65535,a=+t,r=+e,i=n&a,o=n&r;return 0|i*o+((n&a>>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{34:34,36:36}],170:[function(t,e,n){var a=t(34);a(a.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},{34:34}],171:[function(t,e,n){var a=t(34);a(a.S,"Math",{log1p:t(63)})},{34:34,63:63}],172:[function(t,e,n){var a=t(34);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{34:34}],173:[function(t,e,n){var a=t(34);a(a.S,"Math",{sign:t(65)})},{34:34,65:65}],174:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S+a.F*t(36)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{34:34,36:36,61:61}],175:[function(t,e,n){var a=t(34),r=t(61),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{34:34,61:61}],176:[function(t,e,n){var a=t(34);a(a.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{34:34}],177:[function(t,e,n){"use strict";var a=t(41),r=t(42),i=t(19),o=t(46),s=t(118),p=t(36),u=t(77).f,c=t(75).f,l=t(72).f,d=t(109).trim,f="Number",h=a[f],m=h,g=h.prototype,v=i(t(71)(g))==f,b="trim"in String.prototype,y=function(t){var e=s(t,!1);if("string"==typeof e&&e.length>2){e=b?e.trim():d(e,3);var n,a,r,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:a=2,r=49;break;case 79:case 111:a=8,r=55;break;default:return+e}for(var o,p=e.slice(2),u=0,c=p.length;c>u;u++)if(o=p.charCodeAt(u),48>o||o>r)return NaN;return parseInt(p,a)}}return+e};if(!h(" 0o1")||!h("0b1")||h("+0x1")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(v?p(function(){g.valueOf.call(n)}):i(n)!=f)?o(new m(y(e)),n,h):y(e)};for(var _,x=t(30)?u(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;x.length>w;w++)r(m,_=x[w])&&!r(h,_)&&l(h,_,c(m,_));h.prototype=g,g.constructor=h,t(92)(a,f,h)}},{109:109,118:118,19:19,30:30,36:36,41:41,42:42,46:46,71:71,72:72,75:75,77:77,92:92}],178:[function(t,e,n){var a=t(34);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{34:34}],179:[function(t,e,n){var a=t(34),r=t(41).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{34:34,41:41}],180:[function(t,e,n){var a=t(34);a(a.S,"Number",{isInteger:t(51)})},{34:34,51:51}],181:[function(t,e,n){var a=t(34);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{34:34}],182:[function(t,e,n){var a=t(34),r=t(51),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{34:34,51:51}],183:[function(t,e,n){var a=t(34);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{34:34}],184:[function(t,e,n){var a=t(34);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{34:34}],185:[function(t,e,n){var a=t(34),r=t(86);a(a.S+a.F*(Number.parseFloat!=r),"Number",{parseFloat:r})},{34:34,86:86}],186:[function(t,e,n){var a=t(34),r=t(87);a(a.S+a.F*(Number.parseInt!=r),"Number",{parseInt:r})},{34:34,87:87}],187:[function(t,e,n){"use strict";var a=t(34),r=t(114),i=t(5),o=t(108),s=1..toFixed,p=Math.floor,u=[0,0,0,0,0,0],c="Number.toFixed: incorrect invocation!",l="0",d=function(t,e){for(var n=-1,a=e;++n<6;)a+=t*u[n],u[n]=a%1e7,a=p(a/1e7)},f=function(t){for(var e=6,n=0;--e>=0;)n+=u[e],u[e]=p(n/t),n=n%t*1e7},h=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var n=u[t]+"";e=""===e?n:e+o.call(l,7-n.length)+n}return e},m=function(t,e,n){return 0===e?n:e%2===1?m(t,e-1,n*t):m(t*t,e/2,n)},g=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e};a(a.P+a.F*(!!s&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0))||!t(36)(function(){s.call({})})),"Number",{toFixed:function(t){var e,n,a,s,p=i(this,c),u=r(t),v="",b=l;if(0>u||u>20)throw RangeError(c);if(p!=p)return"NaN";if(-1e21>=p||p>=1e21)return p+"";if(0>p&&(v="-",p=-p),p>1e-21)if(e=g(p*m(2,69,1))-69,n=0>e?p*m(2,-e,1):p/m(2,e,1),n*=4503599627370496,e=52-e,e>0){for(d(0,n),a=u;a>=7;)d(1e7,0),a-=7;for(d(m(10,a,1),0),a=e-1;a>=23;)f(1<<23),a-=23;f(1<0?(s=b.length,b=v+(u>=s?"0."+o.call(l,u-s)+b:b.slice(0,s-u)+"."+b.slice(s-u))):b=v+b,b}})},{108:108,114:114,34:34,36:36,5:5}],188:[function(t,e,n){"use strict";var a=t(34),r=t(36),i=t(5),o=1..toPrecision;a(a.P+a.F*(r(function(){return"1"!==o.call(1,void 0)})||!r(function(){o.call({})})),"Number",{toPrecision:function(t){var e=i(this,"Number#toPrecision: incorrect invocation!");return void 0===t?o.call(e):o.call(e,t)}})},{34:34,36:36,5:5}],189:[function(t,e,n){var a=t(34);a(a.S+a.F,"Object",{assign:t(70)})},{34:34,70:70}],190:[function(t,e,n){var a=t(34);a(a.S,"Object",{create:t(71)})},{34:34,71:71}],191:[function(t,e,n){var a=t(34);a(a.S+a.F*!t(30),"Object",{defineProperties:t(73)})},{30:30,34:34,73:73}],192:[function(t,e,n){var a=t(34);a(a.S+a.F*!t(30),"Object",{defineProperty:t(72).f})},{30:30,34:34,72:72}],193:[function(t,e,n){var a=t(52),r=t(66).onFreeze;t(83)("freeze",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{52:52,66:66,83:83}],194:[function(t,e,n){var a=t(115),r=t(75).f;t(83)("getOwnPropertyDescriptor",function(){return function(t,e){return r(a(t),e)}})},{115:115,75:75,83:83}],195:[function(t,e,n){t(83)("getOwnPropertyNames",function(){return t(76).f})},{76:76,83:83}],196:[function(t,e,n){var a=t(117),r=t(79);t(83)("getPrototypeOf",function(){return function(t){return r(a(t))}})},{117:117,79:79,83:83}],197:[function(t,e,n){var a=t(52);t(83)("isExtensible",function(t){return function(e){return a(e)?t?t(e):!0:!1}}); -},{52:52,83:83}],198:[function(t,e,n){var a=t(52);t(83)("isFrozen",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{52:52,83:83}],199:[function(t,e,n){var a=t(52);t(83)("isSealed",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{52:52,83:83}],200:[function(t,e,n){var a=t(34);a(a.S,"Object",{is:t(94)})},{34:34,94:94}],201:[function(t,e,n){var a=t(117),r=t(81);t(83)("keys",function(){return function(t){return r(a(t))}})},{117:117,81:81,83:83}],202:[function(t,e,n){var a=t(52),r=t(66).onFreeze;t(83)("preventExtensions",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{52:52,66:66,83:83}],203:[function(t,e,n){var a=t(52),r=t(66).onFreeze;t(83)("seal",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{52:52,66:66,83:83}],204:[function(t,e,n){var a=t(34);a(a.S,"Object",{setPrototypeOf:t(97).set})},{34:34,97:97}],205:[function(t,e,n){"use strict";var a=t(18),r={};r[t(127)("toStringTag")]="z",r+""!="[object z]"&&t(92)(Object.prototype,"toString",function(){return"[object "+a(this)+"]"},!0)},{127:127,18:18,92:92}],206:[function(t,e,n){var a=t(34),r=t(86);a(a.G+a.F*(parseFloat!=r),{parseFloat:r})},{34:34,86:86}],207:[function(t,e,n){var a=t(34),r=t(87);a(a.G+a.F*(parseInt!=r),{parseInt:r})},{34:34,87:87}],208:[function(t,e,n){"use strict";var a,r,i,o,s=t(60),p=t(41),u=t(26),c=t(18),l=t(34),d=t(52),f=t(4),h=t(7),m=t(40),g=t(102),v=t(111).set,b=t(68)(),y=t(69),_=t(88),x=t(123),w=t(89),k="Promise",S=p.TypeError,E=p.process,C=E&&E.versions,P=C&&C.v8||"",A=p[k],O="process"==c(E),T=function(){},R=r=y.f,M=!!function(){try{var e=A.resolve(1),n=(e.constructor={})[t(127)("species")]=function(t){t(T,T)};return(O||"function"==typeof PromiseRejectionEvent)&&e.then(T)instanceof n&&0!==P.indexOf("6.6")&&-1===x.indexOf("Chrome/66")}catch(a){}}(),L=function(t){var e;return d(t)&&"function"==typeof(e=t.then)?e:!1},j=function(t,e){if(!t._n){t._n=!0;var n=t._c;b(function(){for(var a=t._v,r=1==t._s,i=0,o=function(e){var n,i,o,s=r?e.ok:e.fail,p=e.resolve,u=e.reject,c=e.domain;try{s?(r||(2==t._h&&F(t),t._h=1),s===!0?n=a:(c&&c.enter(),n=s(a),c&&(c.exit(),o=!0)),n===e.promise?u(S("Promise-chain cycle")):(i=L(n))?i.call(n,p,u):p(n)):u(a)}catch(l){c&&!o&&c.exit(),u(l)}};n.length>i;)o(n[i++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){v.call(p,function(){var e,n,a,r=t._v,i=N(t);if(i&&(e=_(function(){O?E.emit("unhandledRejection",r,t):(n=p.onunhandledrejection)?n({promise:t,reason:r}):(a=p.console)&&a.error&&a.error("Unhandled promise rejection",r)}),t._h=O||N(t)?2:1),t._a=void 0,i&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){v.call(p,function(){var e;O?E.emit("rejectionHandled",t):(e=p.onrejectionhandled)&&e({promise:t,reason:t._v})})},I=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),j(e,!0))},B=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw S("Promise can't be resolved itself");(e=L(t))?b(function(){var a={_w:n,_d:!1};try{e.call(t,u(B,a,1),u(I,a,1))}catch(r){I.call(a,r)}}):(n._v=t,n._s=1,j(n,!1))}catch(a){I.call({_w:n,_d:!1},a)}}};M||(A=function(t){h(this,A,k,"_h"),f(t),a.call(this);try{t(u(B,this,1),u(I,this,1))}catch(e){I.call(this,e)}},a=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},a.prototype=t(91)(A.prototype,{then:function(t,e){var n=R(g(this,A));return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,n.domain=O?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&j(this,!1),n.promise},"catch":function(t){return this.then(void 0,t)}}),i=function(){var t=new a;this.promise=t,this.resolve=u(B,t,1),this.reject=u(I,t,1)},y.f=R=function(t){return t===A||t===o?new i(t):r(t)}),l(l.G+l.W+l.F*!M,{Promise:A}),t(99)(A,k),t(98)(k),o=t(24)[k],l(l.S+l.F*!M,k,{reject:function(t){var e=R(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(s||!M),k,{resolve:function(t){return w(s&&this===o?A:this,t)}}),l(l.S+l.F*!(M&&t(57)(function(t){A.all(t)["catch"](T)})),k,{all:function(t){var e=this,n=R(e),a=n.resolve,r=n.reject,i=_(function(){var n=[],i=0,o=1;m(t,!1,function(t){var s=i++,p=!1;n.push(void 0),o++,e.resolve(t).then(function(t){p||(p=!0,n[s]=t,--o||a(n))},r)}),--o||a(n)});return i.e&&r(i.v),n.promise},race:function(t){var e=this,n=R(e),a=n.reject,r=_(function(){m(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r.e&&a(r.v),n.promise}})},{102:102,111:111,123:123,127:127,18:18,24:24,26:26,34:34,4:4,40:40,41:41,52:52,57:57,60:60,68:68,69:69,7:7,88:88,89:89,91:91,98:98,99:99}],209:[function(t,e,n){var a=t(34),r=t(4),i=t(8),o=(t(41).Reflect||{}).apply,s=Function.apply;a(a.S+a.F*!t(36)(function(){o(function(){})}),"Reflect",{apply:function(t,e,n){var a=r(t),p=i(n);return o?o(a,e,p):s.call(a,e,p)}})},{34:34,36:36,4:4,41:41,8:8}],210:[function(t,e,n){var a=t(34),r=t(71),i=t(4),o=t(8),s=t(52),p=t(36),u=t(17),c=(t(41).Reflect||{}).construct,l=p(function(){function t(){}return!(c(function(){},[],t)instanceof t)}),d=!p(function(){c(function(){})});a(a.S+a.F*(l||d),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(d&&!l)return c(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var a=[null];return a.push.apply(a,e),new(u.apply(t,a))}var p=n.prototype,f=r(s(p)?p:Object.prototype),h=Function.apply.call(t,f,e);return s(h)?h:f}})},{17:17,34:34,36:36,4:4,41:41,52:52,71:71,8:8}],211:[function(t,e,n){var a=t(72),r=t(34),i=t(8),o=t(118);r(r.S+r.F*t(36)(function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t),e=o(e,!0),i(n);try{return a.f(t,e,n),!0}catch(r){return!1}}})},{118:118,34:34,36:36,72:72,8:8}],212:[function(t,e,n){var a=t(34),r=t(75).f,i=t(8);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{34:34,75:75,8:8}],213:[function(t,e,n){"use strict";var a=t(34),r=t(8),i=function(t){this._t=r(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(55)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),a(a.S,"Reflect",{enumerate:function(t){return new i(t)}})},{34:34,55:55,8:8}],214:[function(t,e,n){var a=t(75),r=t(34),i=t(8);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.f(i(t),e)}})},{34:34,75:75,8:8}],215:[function(t,e,n){var a=t(34),r=t(79),i=t(8);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{34:34,79:79,8:8}],216:[function(t,e,n){function a(t,e){var n,s,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(n=r.f(t,e))?o(n,"value")?n.value:void 0!==n.get?n.get.call(c):void 0:p(s=i(t))?a(s,e,c):void 0}var r=t(75),i=t(79),o=t(42),s=t(34),p=t(52),u=t(8);s(s.S,"Reflect",{get:a})},{34:34,42:42,52:52,75:75,79:79,8:8}],217:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{34:34}],218:[function(t,e,n){var a=t(34),r=t(8),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){return r(t),i?i(t):!0}})},{34:34,8:8}],219:[function(t,e,n){var a=t(34);a(a.S,"Reflect",{ownKeys:t(85)})},{34:34,85:85}],220:[function(t,e,n){var a=t(34),r=t(8),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(e){return!1}}})},{34:34,8:8}],221:[function(t,e,n){var a=t(34),r=t(97);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(n){return!1}}})},{34:34,97:97}],222:[function(t,e,n){function a(t,e,n){var p,d,f=arguments.length<4?t:arguments[3],h=i.f(c(t),e);if(!h){if(l(d=o(t)))return a(d,e,n,f);h=u(0)}if(s(h,"value")){if(h.writable===!1||!l(f))return!1;if(p=i.f(f,e)){if(p.get||p.set||p.writable===!1)return!1;p.value=n,r.f(f,e,p)}else r.f(f,e,u(0,n));return!0}return void 0===h.set?!1:(h.set.call(f,n),!0)}var r=t(72),i=t(75),o=t(79),s=t(42),p=t(34),u=t(90),c=t(8),l=t(52);p(p.S,"Reflect",{set:a})},{34:34,42:42,52:52,72:72,75:75,79:79,8:8,90:90}],223:[function(t,e,n){var a=t(41),r=t(46),i=t(72).f,o=t(77).f,s=t(53),p=t(38),u=a.RegExp,c=u,l=u.prototype,d=/a/g,f=/a/g,h=new u(d)!==d;if(t(30)&&(!h||t(36)(function(){return f[t(127)("match")]=!1,u(d)!=d||u(f)==f||"/a/i"!=u(d,"i")}))){u=function(t,e){var n=this instanceof u,a=s(t),i=void 0===e;return!n&&a&&t.constructor===u&&i?t:r(h?new c(a&&!i?t.source:t,e):c((a=t instanceof u)?t.source:t,a&&i?p.call(t):e),n?this:l,u)};for(var m=(function(t){t in u||i(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})}),g=o(c),v=0;g.length>v;)m(g[v++]);l.constructor=u,u.prototype=l,t(92)(a,"RegExp",u)}t(98)("RegExp")},{127:127,30:30,36:36,38:38,41:41,46:46,53:53,72:72,77:77,92:92,98:98}],224:[function(t,e,n){t(30)&&"g"!=/./g.flags&&t(72).f(RegExp.prototype,"flags",{configurable:!0,get:t(38)})},{30:30,38:38,72:72}],225:[function(t,e,n){t(37)("match",1,function(t,e,n){return[function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")},n]})},{37:37}],226:[function(t,e,n){t(37)("replace",2,function(t,e,n){return[function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)},n]})},{37:37}],227:[function(t,e,n){t(37)("search",1,function(t,e,n){return[function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")},n]})},{37:37}],228:[function(t,e,n){t(37)("split",2,function(e,n,a){"use strict";var r=t(53),i=a,o=[].push,s="split",p="length",u="lastIndex";if("c"=="abbc"[s](/(b)*/)[1]||4!="test"[s](/(?:)/,-1)[p]||2!="ab"[s](/(?:ab)*/)[p]||4!="."[s](/(.?)(.?)/)[p]||"."[s](/()()/)[p]>1||""[s](/.?/)[p]){var c=void 0===/()??/.exec("")[1];a=function(t,e){var n=this+"";if(void 0===t&&0===e)return[];if(!r(t))return i.call(n,t,e);var a,s,l,d,f,h=[],m=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),g=0,v=void 0===e?4294967295:e>>>0,b=RegExp(t.source,m+"g");for(c||(a=RegExp("^"+b.source+"$(?!\\s)",m));(s=b.exec(n))&&(l=s.index+s[0][p],!(l>g&&(h.push(n.slice(g,s.index)),!c&&s[p]>1&&s[0].replace(a,function(){for(f=1;f1&&s.index=v)));)b[u]===s.index&&b[u]++;return g===n[p]?(d||!b.test(""))&&h.push(""):h.push(n.slice(g)),h[p]>v?h.slice(0,v):h}}else"0"[s](void 0,0)[p]&&(a=function(t,e){return void 0===t&&0===e?[]:i.call(this,t,e)});return[function(t,r){var i=e(this),o=void 0==t?void 0:t[n];return void 0!==o?o.call(t,i,r):a.call(i+"",t,r)},a]})},{37:37,53:53}],229:[function(t,e,n){"use strict";t(224);var a=t(8),r=t(38),i=t(30),o="toString",s=/./[o],p=function(e){t(92)(RegExp.prototype,o,e,!0)};t(36)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?p(function(){var t=a(this);return"/".concat(t.source,"/","flags"in t?t.flags:!i&&t instanceof RegExp?r.call(t):void 0)}):s.name!=o&&p(function(){return s.call(this)})},{224:224,30:30,36:36,38:38,8:8,92:92}],230:[function(t,e,n){"use strict";var a=t(20),r=t(124),i="Set";e.exports=t(23)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(r(this,i),t=0===t?0:t,t)}},a)},{124:124,20:20,23:23}],231:[function(t,e,n){"use strict";t(106)("anchor",function(t){return function(e){return t(this,"a","name",e)}})},{106:106}],232:[function(t,e,n){"use strict";t(106)("big",function(t){return function(){return t(this,"big","","")}})},{106:106}],233:[function(t,e,n){"use strict";t(106)("blink",function(t){return function(){return t(this,"blink","","")}})},{106:106}],234:[function(t,e,n){"use strict";t(106)("bold",function(t){return function(){return t(this,"b","","")}})},{106:106}],235:[function(t,e,n){"use strict";var a=t(34),r=t(104)(!1);a(a.P,"String",{codePointAt:function(t){return r(this,t)}})},{104:104,34:34}],236:[function(t,e,n){"use strict";var a=t(34),r=t(116),i=t(105),o="endsWith",s=""[o];a(a.P+a.F*t(35)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments.length>1?arguments[1]:void 0,a=r(e.length),p=void 0===n?a:Math.min(r(n),a),u=t+"";return s?s.call(e,u,p):e.slice(p-u.length,p)===u}})},{105:105,116:116,34:34,35:35}],237:[function(t,e,n){"use strict";t(106)("fixed",function(t){return function(){return t(this,"tt","","")}})},{106:106}],238:[function(t,e,n){"use strict";t(106)("fontcolor",function(t){return function(e){return t(this,"font","color",e)}})},{106:106}],239:[function(t,e,n){"use strict";t(106)("fontsize",function(t){return function(e){return t(this,"font","size",e)}})},{106:106}],240:[function(t,e,n){var a=t(34),r=t(112),i=String.fromCharCode,o=String.fromCodePoint;a(a.S+a.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],a=arguments.length,o=0;a>o;){if(e=+arguments[o++],r(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{112:112,34:34}],241:[function(t,e,n){"use strict";var a=t(34),r=t(105),i="includes";a(a.P+a.F*t(35)(i),"String",{includes:function(t){return!!~r(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{105:105,34:34,35:35}],242:[function(t,e,n){"use strict";t(106)("italics",function(t){return function(){return t(this,"i","","")}})},{106:106}],243:[function(t,e,n){"use strict";var a=t(104)(!0);t(56)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{104:104,56:56}],244:[function(t,e,n){"use strict";t(106)("link",function(t){return function(e){return t(this,"a","href",e)}})},{106:106}],245:[function(t,e,n){var a=t(34),r=t(115),i=t(116);a(a.S,"String",{raw:function(t){for(var e=r(t.raw),n=i(e.length),a=arguments.length,o=[],s=0;n>s;)o.push(e[s++]+""),a>s&&o.push(arguments[s]+"");return o.join("")}})},{115:115,116:116,34:34}],246:[function(t,e,n){var a=t(34);a(a.P,"String",{repeat:t(108)})},{108:108,34:34}],247:[function(t,e,n){"use strict";t(106)("small",function(t){return function(){return t(this,"small","","")}})},{106:106}],248:[function(t,e,n){"use strict";var a=t(34),r=t(116),i=t(105),o="startsWith",s=""[o];a(a.P+a.F*t(35)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=r(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),a=t+"";return s?s.call(e,a,n):e.slice(n,n+a.length)===a}})},{105:105,116:116,34:34,35:35}],249:[function(t,e,n){"use strict";t(106)("strike",function(t){return function(){return t(this,"strike","","")}})},{106:106}],250:[function(t,e,n){"use strict";t(106)("sub",function(t){return function(){return t(this,"sub","","")}})},{106:106}],251:[function(t,e,n){"use strict";t(106)("sup",function(t){return function(){return t(this,"sup","","")}})},{106:106}],252:[function(t,e,n){"use strict";t(109)("trim",function(t){return function(){return t(this,3)}})},{109:109}],253:[function(t,e,n){"use strict";var a=t(41),r=t(42),i=t(30),o=t(34),s=t(92),p=t(66).KEY,u=t(36),c=t(101),l=t(99),d=t(122),f=t(127),h=t(126),m=t(125),g=t(33),v=t(50),b=t(8),y=t(52),_=t(115),x=t(118),w=t(90),k=t(71),S=t(76),E=t(75),C=t(72),P=t(81),A=E.f,O=C.f,T=S.f,R=a.Symbol,M=a.JSON,L=M&&M.stringify,j="prototype",D=f("_hidden"),N=f("toPrimitive"),F={}.propertyIsEnumerable,I=c("symbol-registry"),B=c("symbols"),V=c("op-symbols"),q=Object[j],U="function"==typeof R,G=a.QObject,z=!G||!G[j]||!G[j].findChild,W=i&&u(function(){return 7!=k(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=A(q,e);a&&delete q[e],O(t,e,n),a&&t!==q&&O(q,e,a)}:O,H=function(t){var e=B[t]=k(R[j]);return e._k=t,e},K=U&&"symbol"==typeof R.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof R},Q=function(t,e,n){return t===q&&Q(V,e,n),b(t),e=x(e,!0),b(n),r(B,e)?(n.enumerable?(r(t,D)&&t[D][e]&&(t[D][e]=!1),n=k(n,{enumerable:w(0,!1)})):(r(t,D)||O(t,D,w(1,{})),t[D][e]=!0),W(t,e,n)):O(t,e,n)},Y=function(t,e){b(t);for(var n,a=g(e=_(e)),r=0,i=a.length;i>r;)Q(t,n=a[r++],e[n]);return t},$=function(t,e){return void 0===e?k(t):Y(k(t),e)},J=function(t){var e=F.call(this,t=x(t,!0));return this===q&&r(B,t)&&!r(V,t)?!1:e||!r(this,t)||!r(B,t)||r(this,D)&&this[D][t]?e:!0},X=function(t,e){if(t=_(t),e=x(e,!0),t!==q||!r(B,e)||r(V,e)){var n=A(t,e);return!n||!r(B,e)||r(t,D)&&t[D][e]||(n.enumerable=!0),n}},Z=function(t){for(var e,n=T(_(t)),a=[],i=0;n.length>i;)r(B,e=n[i++])||e==D||e==p||a.push(e);return a},tt=function(t){for(var e,n=t===q,a=T(n?V:_(t)),i=[],o=0;a.length>o;)r(B,e=a[o++])&&(n?r(q,e):!0)&&i.push(B[e]);return i};U||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(n){this===q&&e.call(V,n),r(this,D)&&r(this[D],t)&&(this[D][t]=!1),W(this,t,w(1,n))};return i&&z&&W(q,t,{configurable:!0,set:e}),H(t)},s(R[j],"toString",function(){return this._k}),E.f=X,C.f=Q,t(77).f=S.f=Z,t(82).f=J,t(78).f=tt,i&&!t(60)&&s(q,"propertyIsEnumerable",J,!0),h.f=function(t){return H(f(t))}),o(o.G+o.W+o.F*!U,{Symbol:R});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)f(et[nt++]);for(var at=P(f.store),rt=0;at.length>rt;)m(at[rt++]);o(o.S+o.F*!U,"Symbol",{"for":function(t){return r(I,t+="")?I[t]:I[t]=R(t)},keyFor:function(t){if(!K(t))throw TypeError(t+" is not a symbol!");for(var e in I)if(I[e]===t)return e},useSetter:function(){z=!0},useSimple:function(){z=!1}}),o(o.S+o.F*!U,"Object",{create:$,defineProperty:Q,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:Z,getOwnPropertySymbols:tt}),M&&o(o.S+o.F*(!U||u(function(){var t=R();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))})),"JSON",{stringify:function(t){for(var e,n,a=[t],r=1;arguments.length>r;)a.push(arguments[r++]);return n=e=a[1],!y(e)&&void 0===t||K(t)?void 0:(v(e)||(e=function(t,e){return"function"==typeof n&&(e=n.call(this,t,e)),K(e)?void 0:e}),a[1]=e,L.apply(M,a))}}),R[j][N]||t(43)(R[j],N,R[j].valueOf),l(R,"Symbol"),l(Math,"Math",!0),l(a.JSON,"JSON",!0)},{101:101,115:115,118:118,122:122,125:125,126:126,127:127,30:30,33:33,34:34,36:36,41:41,42:42,43:43,50:50,52:52,60:60,66:66,71:71,72:72,75:75,76:76,77:77,78:78,8:8,81:81,82:82,90:90,92:92,99:99}],254:[function(t,e,n){"use strict";var a=t(34),r=t(121),i=t(120),o=t(8),s=t(112),p=t(116),u=t(52),c=t(41).ArrayBuffer,l=t(102),d=i.ArrayBuffer,f=i.DataView,h=r.ABV&&c.isView,m=d.prototype.slice,g=r.VIEW,v="ArrayBuffer";a(a.G+a.W+a.F*(c!==d),{ArrayBuffer:d}),a(a.S+a.F*!r.CONSTR,v,{isView:function(t){return h&&h(t)||u(t)&&g in t}}),a(a.P+a.U+a.F*t(36)(function(){return!new d(2).slice(1,void 0).byteLength}),v,{slice:function(t,e){if(void 0!==m&&void 0===e)return m.call(o(this),t);for(var n=o(this).byteLength,a=s(t,n),r=s(void 0===e?n:e,n),i=new(l(this,d))(p(r-a)),u=new f(this),c=new f(i),h=0;r>a;)c.setUint8(h++,u.getUint8(a++));return i}}),t(98)(v)},{102:102,112:112,116:116,120:120,121:121,34:34,36:36,41:41,52:52,8:8,98:98}],255:[function(t,e,n){var a=t(34);a(a.G+a.W+a.F*!t(121).ABV,{DataView:t(120).DataView})},{120:120,121:121,34:34}],256:[function(t,e,n){t(119)("Float32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],257:[function(t,e,n){t(119)("Float64",8,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],258:[function(t,e,n){t(119)("Int16",2,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],259:[function(t,e,n){t(119)("Int32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],260:[function(t,e,n){t(119)("Int8",1,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],261:[function(t,e,n){t(119)("Uint16",2,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],262:[function(t,e,n){t(119)("Uint32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],263:[function(t,e,n){t(119)("Uint8",1,function(t){return function(e,n,a){return t(this,e,n,a)}})},{119:119}],264:[function(t,e,n){t(119)("Uint8",1,function(t){return function(e,n,a){return t(this,e,n,a)}},!0)},{119:119}],265:[function(t,e,n){"use strict";var a,r=t(13)(0),i=t(92),o=t(66),s=t(70),p=t(22),u=t(52),c=t(36),l=t(124),d="WeakMap",f=o.getWeak,h=Object.isExtensible,m=p.ufstore,g={},v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(t){if(u(t)){var e=f(t);return e===!0?m(l(this,d)).get(t):e?e[this._i]:void 0}},set:function(t,e){return p.def(l(this,d),t,e)}},y=e.exports=t(23)(d,v,b,p,!0,!0);c(function(){return 7!=(new y).set((Object.freeze||Object)(g),7).get(g)})&&(a=p.getConstructor(v,d),s(a.prototype,b),o.NEED=!0,r(["delete","has","get","set"],function(t){var e=y.prototype,n=e[t];i(e,t,function(e,r){if(u(e)&&!h(e)){this._f||(this._f=new a);var i=this._f[t](e,r);return"set"==t?this:i}return n.call(this,e,r)})}))},{124:124,13:13,22:22,23:23,36:36,52:52,66:66,70:70,92:92}],266:[function(t,e,n){"use strict";var a=t(22),r=t(124),i="WeakSet";t(23)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(r(this,i),t,!0)}},a,!1,!0)},{124:124,22:22,23:23}],267:[function(t,e,n){"use strict";var a=t(34),r=t(39),i=t(117),o=t(116),s=t(4),p=t(16);a(a.P,"Array",{flatMap:function(t){var e,n,a=i(this);return s(t),e=o(a.length),n=p(a,0),r(n,a,a,e,0,1,t,arguments[1]),n}}),t(6)("flatMap")},{116:116,117:117,16:16,34:34,39:39,4:4,6:6}],268:[function(t,e,n){"use strict";var a=t(34),r=t(39),i=t(117),o=t(116),s=t(114),p=t(16);a(a.P,"Array",{flatten:function(){var t=arguments[0],e=i(this),n=o(e.length),a=p(e,0);return r(a,e,e,n,0,void 0===t?1:s(t)),a}}),t(6)("flatten")},{114:114,116:116,117:117,16:16,34:34,39:39,6:6}],269:[function(t,e,n){"use strict";var a=t(34),r=t(12)(!0);a(a.P,"Array",{includes:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(6)("includes")},{12:12,34:34,6:6}],270:[function(t,e,n){var a=t(34),r=t(68)(),i=t(41).process,o="process"==t(19)(i);a(a.G,{asap:function(t){var e=o&&i.domain;r(e?e.bind(t):t)}})},{19:19,34:34,41:41,68:68}],271:[function(t,e,n){var a=t(34),r=t(19);a(a.S,"Error",{isError:function(t){return"Error"===r(t)}})},{19:19,34:34}],272:[function(t,e,n){var a=t(34);a(a.G,{global:t(41)})},{34:34,41:41}],273:[function(t,e,n){t(95)("Map")},{95:95}],274:[function(t,e,n){t(96)("Map")},{96:96}],275:[function(t,e,n){var a=t(34);a(a.P+a.R,"Map",{toJSON:t(21)("Map")})},{21:21,34:34}],276:[function(t,e,n){var a=t(34);a(a.S,"Math",{clamp:function(t,e,n){return Math.min(n,Math.max(e,t))}})},{34:34}],277:[function(t,e,n){var a=t(34);a(a.S,"Math",{DEG_PER_RAD:Math.PI/180})},{34:34}],278:[function(t,e,n){var a=t(34),r=180/Math.PI;a(a.S,"Math",{degrees:function(t){return t*r}})},{34:34}],279:[function(t,e,n){var a=t(34),r=t(64),i=t(62);a(a.S,"Math",{fscale:function(t,e,n,a,o){return i(r(t,e,n,a,o))}})},{34:34,62:62,64:64}],280:[function(t,e,n){var a=t(34);a(a.S,"Math",{iaddh:function(t,e,n,a){var r=t>>>0,i=e>>>0,o=n>>>0;return i+(a>>>0)+((r&o|(r|o)&~(r+o>>>0))>>>31)|0}})},{34:34}],281:[function(t,e,n){var a=t(34);a(a.S,"Math",{imulh:function(t,e){var n=65535,a=+t,r=+e,i=a&n,o=r&n,s=a>>16,p=r>>16,u=(s*o>>>0)+(i*o>>>16);return s*p+(u>>16)+((i*p>>>0)+(u&n)>>16)}})},{34:34}],282:[function(t,e,n){var a=t(34);a(a.S,"Math",{isubh:function(t,e,n,a){var r=t>>>0,i=e>>>0,o=n>>>0;return i-(a>>>0)-((~r&o|~(r^o)&r-o>>>0)>>>31)|0}})},{34:34}],283:[function(t,e,n){var a=t(34);a(a.S,"Math",{RAD_PER_DEG:180/Math.PI})},{34:34}],284:[function(t,e,n){var a=t(34),r=Math.PI/180;a(a.S,"Math",{radians:function(t){return t*r}})},{34:34}],285:[function(t,e,n){var a=t(34);a(a.S,"Math",{scale:t(64)})},{34:34,64:64}],286:[function(t,e,n){var a=t(34);a(a.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},{34:34}],287:[function(t,e,n){var a=t(34);a(a.S,"Math",{umulh:function(t,e){var n=65535,a=+t,r=+e,i=a&n,o=r&n,s=a>>>16,p=r>>>16,u=(s*o>>>0)+(i*o>>>16);return s*p+(u>>>16)+((i*p>>>0)+(u&n)>>>16)}})},{34:34}],288:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineGetter__:function(t,e){o.f(r(this),t,{get:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],289:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(4),o=t(72);t(30)&&a(a.P+t(74),"Object",{__defineSetter__:function(t,e){o.f(r(this),t,{set:i(e),enumerable:!0,configurable:!0})}})},{117:117,30:30,34:34,4:4,72:72,74:74}],290:[function(t,e,n){var a=t(34),r=t(84)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{34:34,84:84}],291:[function(t,e,n){var a=t(34),r=t(85),i=t(115),o=t(75),s=t(25);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=i(t),p=o.f,u=r(a),c={},l=0;u.length>l;)n=p(a,e=u[l++]),void 0!==n&&s(c,e,n);return c}})},{115:115,25:25,34:34,75:75,85:85}],292:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupGetter__:function(t){var e,n=r(this),a=i(t,!0);do if(e=s(n,a))return e.get;while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],293:[function(t,e,n){"use strict";var a=t(34),r=t(117),i=t(118),o=t(79),s=t(75).f;t(30)&&a(a.P+t(74),"Object",{__lookupSetter__:function(t){var e,n=r(this),a=i(t,!0);do if(e=s(n,a))return e.set;while(n=o(n))}})},{117:117,118:118,30:30,34:34,74:74,75:75,79:79}],294:[function(t,e,n){var a=t(34),r=t(84)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{34:34,84:84}],295:[function(t,e,n){"use strict";var a=t(34),r=t(41),i=t(24),o=t(68)(),s=t(127)("observable"),p=t(4),u=t(8),c=t(7),l=t(91),d=t(43),f=t(40),h=f.RETURN,m=function(t){return null==t?void 0:p(t)},g=function(t){var e=t._c;e&&(t._c=void 0,e())},v=function(t){return void 0===t._o},b=function(t){v(t)||(t._o=void 0,g(t))},y=function(t,e){u(t),this._c=void 0,this._o=t,t=new _(this);try{var n=e(t),a=n;null!=n&&("function"==typeof n.unsubscribe?n=function(){a.unsubscribe()}:p(n),this._c=n)}catch(r){return void t.error(r)}v(this)&&g(this)};y.prototype=l({},{unsubscribe:function(){b(this)}});var _=function(t){this._s=t};_.prototype=l({},{next:function(t){var e=this._s;if(!v(e)){var n=e._o;try{var a=m(n.next);if(a)return a.call(n,t)}catch(r){try{b(e)}finally{throw r}}}},error:function(t){var e=this._s;if(v(e))throw t;var n=e._o;e._o=void 0;try{var a=m(n.error);if(!a)throw t;t=a.call(n,t)}catch(r){try{g(e)}finally{throw r}}return g(e),t},complete:function(t){var e=this._s;if(!v(e)){var n=e._o;e._o=void 0;try{var a=m(n.complete);t=a?a.call(n,t):void 0}catch(r){try{g(e)}finally{throw r}}return g(e),t}}});var x=function(t){c(this,x,"Observable","_f")._f=p(t)};l(x.prototype,{subscribe:function(t){return new y(t,this._f)},forEach:function(t){var e=this;return new(i.Promise||r.Promise)(function(n,a){p(t);var r=e.subscribe({next:function(e){try{return t(e)}catch(n){a(n),r.unsubscribe()}},error:a,complete:n})})}}),l(x,{from:function(t){var e="function"==typeof this?this:x,n=m(u(t)[s]);if(n){var a=u(n.call(t));return a.constructor===e?a:new e(function(t){return a.subscribe(t)})}return new e(function(e){var n=!1;return o(function(){if(!n){try{if(f(t,!1,function(t){return e.next(t),n?h:void 0})===h)return}catch(a){if(n)throw a;return void e.error(a)}e.complete()}}),function(){n=!0}})},of:function(){for(var t=0,e=arguments.length,n=Array(e);e>t;)n[t]=arguments[t++];return new("function"==typeof this?this:x)(function(t){var e=!1;return o(function(){if(!e){for(var a=0;a1?arguments[1]:void 0,!1)}})},{107:107,123:123,34:34}],313:[function(t,e,n){"use strict";var a=t(34),r=t(107),i=t(123);a(a.P+a.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padStart:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{107:107,123:123,34:34}],314:[function(t,e,n){"use strict";t(109)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},{109:109}],315:[function(t,e,n){"use strict";t(109)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},{109:109}],316:[function(t,e,n){t(125)("asyncIterator")},{125:125}],317:[function(t,e,n){t(125)("observable")},{125:125}],318:[function(t,e,n){var a=t(34);a(a.S,"System",{global:t(41) -})},{34:34,41:41}],319:[function(t,e,n){t(95)("WeakMap")},{95:95}],320:[function(t,e,n){t(96)("WeakMap")},{96:96}],321:[function(t,e,n){t(95)("WeakSet")},{95:95}],322:[function(t,e,n){t(96)("WeakSet")},{96:96}],323:[function(t,e,n){for(var a=t(140),r=t(81),i=t(92),o=t(41),s=t(43),p=t(59),u=t(127),c=u("iterator"),l=u("toStringTag"),d=p.Array,f={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=r(f),m=0;m2,r=a?o.call(arguments,2):!1;return t(a?function(){("function"==typeof e?e:Function(e)).apply(this,r)}:e,n)}};r(r.G+r.B+r.F*s,{setTimeout:p(a.setTimeout),setInterval:p(a.setInterval)})},{123:123,34:34,41:41}],326:[function(t,e,n){t(253),t(190),t(192),t(191),t(194),t(196),t(201),t(195),t(193),t(203),t(202),t(198),t(199),t(197),t(189),t(200),t(204),t(205),t(156),t(158),t(157),t(207),t(206),t(177),t(187),t(188),t(178),t(179),t(180),t(181),t(182),t(183),t(184),t(185),t(186),t(160),t(161),t(162),t(163),t(164),t(165),t(166),t(167),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(176),t(240),t(245),t(252),t(243),t(235),t(236),t(241),t(246),t(248),t(231),t(232),t(233),t(234),t(237),t(238),t(239),t(242),t(244),t(247),t(249),t(250),t(251),t(151),t(153),t(152),t(155),t(154),t(139),t(137),t(144),t(141),t(147),t(149),t(136),t(143),t(133),t(148),t(131),t(146),t(145),t(138),t(142),t(130),t(132),t(135),t(134),t(150),t(140),t(223),t(229),t(224),t(225),t(226),t(227),t(228),t(208),t(159),t(230),t(265),t(266),t(254),t(255),t(260),t(263),t(264),t(258),t(261),t(259),t(262),t(256),t(257),t(209),t(210),t(211),t(212),t(213),t(216),t(214),t(215),t(217),t(218),t(219),t(220),t(222),t(221),t(269),t(267),t(268),t(310),t(313),t(312),t(314),t(315),t(311),t(316),t(317),t(291),t(294),t(290),t(288),t(289),t(292),t(293),t(275),t(309),t(274),t(308),t(320),t(322),t(273),t(307),t(319),t(321),t(272),t(318),t(271),t(276),t(277),t(278),t(279),t(280),t(282),t(281),t(283),t(284),t(285),t(287),t(286),t(296),t(297),t(298),t(299),t(301),t(300),t(303),t(302),t(304),t(305),t(306),t(270),t(295),t(325),t(324),t(323),e.exports=t(24)},{130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,24:24,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307,308:308,309:309,310:310,311:311,312:312,313:313,314:314,315:315,316:316,317:317,318:318,319:319,320:320,321:321,322:322,323:323,324:324,325:325}],327:[function(t,e,n){!function(t){"use strict";function e(){return c.createDocumentFragment()}function n(t){return c.createElement(t)}function a(t){if(1===t.length)return r(t[0]);for(var n=e(),a=B.call(t),i=0;i-1}}([].indexOf||function(t){for(V=this.length;V--&&this[V]!==t;);return V}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=p?e(i):document.fonts.load(u(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(d,25)},function(){e(i)})};d()}else n(function(){function n(){var e;(e=-1!=g&&-1!=v||-1!=g&&-1!=b||-1!=v&&-1!=b)&&((e=g!=v&&g!=b&&v!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(g==y&&v==y&&b==y||g==_&&v==_&&b==_||g==x&&v==x&&b==x)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function d(){if((new Date).getTime()-c>=p)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(g=f.a.offsetWidth,v=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(d,50)}}var f=new a(s),h=new a(s),m=new a(s),g=-1,v=-1,b=-1,y=-1,_=-1,x=-1,w=document.createElement("div"),k=0;w.dir="ltr",r(f,u(i,"sans-serif")),r(h,u(i,"serif")),r(m,u(i,"monospace")),w.appendChild(f.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=f.a.offsetWidth,_=h.a.offsetWidth,x=m.a.offsetWidth,d(),o(f,function(t){g=t,n()}),r(f,u(i,'"'+i.family+'",sans-serif')),o(h,function(t){v=t,n()}),r(h,u(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),r(m,u(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],330:[function(t,e,n){!function(t,n){function a(t,e){var n=t.createElement("p"),a=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function r(){var t=_.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=_.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),_.elements=n+" "+t,c(e)}function o(t){var e=y[t[v]];return e||(e={},b++,t[v]=b,y[b]=e),e}function s(t,e,a){if(e||(e=n),d)return e.createElement(t);a||(a=o(e));var r;return r=a.cache[t]?a.cache[t].cloneNode():g.test(t)?(a.cache[t]=a.createElem(t)).cloneNode():a.createElem(t),!r.canHaveChildren||m.test(t)||r.tagUrn?r:a.frag.appendChild(r)}function p(t,e){if(t||(t=n),d)return t.createDocumentFragment();e=e||o(t);for(var a=e.frag.cloneNode(),i=0,s=r(),p=s.length;p>i;i++)a.createElement(s[i]);return a}function u(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return _.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(_,e.frag)}function c(t){t||(t=n);var e=o(t);return!_.shivCSS||l||e.hasCSS||(e.hasCSS=!!a(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||u(t,e),t}var l,d,f="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,g=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,d=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,d=!0}}();var _={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:f,shivCSS:h.shivCSS!==!1,supportsUnknownElements:d,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:s,createDocumentFragment:p,addElements:i};t.html5=_,c(n),"object"==typeof e&&e.exports&&(e.exports=_)}("undefined"!=typeof window?window:this,document)},{}],331:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,a){for(var i,o,s=n.slice(),p=r(e,t),u=0,c=s.length;c>u&&(i=s[u],"object"==typeof i?"function"==typeof i.handleEvent&&i.handleEvent(p):i.call(t,p),!p.stoppedImmediatePropagation);u++);return o=!p.stoppedPropagation,a&&o&&t.parentNode?t.parentNode.dispatchEvent(p):!p.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function a(t,e,a){var r=y(e||t,a);v(t,"textContent",n(function(){return r.get.call(this)},function(t){r.set.call(this,t)}))}function r(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function p(t){!f&&S.test(document.readyState)&&(f=!f,document.detachEvent(h,p),t=document.createEvent("Event"),t.initEvent(m,!0,!0),document.dispatchEvent(t))}function u(t){return function(){return P[t]||document.body&&document.body[t]||0}}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function l(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,f=!1,h="onreadystatechange",m="DOMContentLoaded",g="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},b=Object.defineProperties||function(e,n){for(var a in n)if(_.call(n,a))try{v(e,a,n[a])}catch(r){t.console&&console.log(a+" failed on object:",e,r.message)}},y=Object.getOwnPropertyDescriptor,_=Object.prototype.hasOwnProperty,x=t.Element.prototype,w=t.Text.prototype,k=/^[a-z]+$/,S=/loaded|complete/,E={},C=document.createElement("div"),P=document.documentElement,A=P.removeAttribute,O=P.setAttribute,T=function(t){return{enumerable:!0,writable:!0,configurable:!0,value:t}};a(t.HTMLCommentElement.prototype,x,"nodeValue"),a(t.HTMLScriptElement.prototype,null,"text"),a(w,null,"nodeValue"),a(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(y(t.CSSStyleSheet.prototype,"cssText")));var R=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;v(t.CSSStyleDeclaration.prototype,"opacity",{get:function(){var t=this.filter.match(R);return t?""+t[1]/100:""},set:function(t){this.zoom=1;var e=!1;t=1>t?" alpha(opacity="+Math.round(100*t)+")":"",this.filter=this.filter.replace(R,function(){return e=!0,t}),!e&&t&&(this.filter+=t)}}),b(x,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:T(function(t,n,a){if("function"==typeof n||"object"==typeof n){var r,o,p=this,u="on"+t,c=p[g]||v(p,g,{value:{}})[g],d=c[u]||(c[u]={}),f=d.h||(d.h=[]);if(!_.call(d,"w")){if(d.w=function(t){return t[g]||e(p,l(p,t),f,!1)},!_.call(E,u))if(k.test(t)){try{r=document.createEventObject(),r[g]=!0,9!=p.nodeType&&(null==p.parentNode&&C.appendChild(p),(o=p.getAttribute(u))&&A.call(p,u)),p.fireEvent(u,r),E[u]=!0}catch(h){for(E[u]=!1;C.hasChildNodes();)C.removeChild(C.firstChild)}null!=o&&O.call(p,u,o)}else E[u]=!1;(d.n=E[u])&&p.attachEvent(u,d.w)}i(f,n)<0&&f[a?"unshift":"push"](n),"input"===t&&p.attachEvent("onkeyup",s)}}),dispatchEvent:T(function(t){var n,a=this,r="on"+t.type,i=a[g],o=i&&i[r],s=!!o;return t.target||(t.target=a),s?o.n?a.fireEvent(r,t):e(a,t,o.h,!0):(n=a.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}),removeEventListener:T(function(t,e,n){if("function"==typeof e||"object"==typeof e){var a=this,r="on"+t,o=a[g],s=o&&o[r],p=s&&s.h,u=p?i(p,e):-1;u>-1&&p.splice(u,1)}})}),b(w,{addEventListener:T(x.addEventListener),dispatchEvent:T(x.dispatchEvent),removeEventListener:T(x.removeEventListener)}),b(t.XMLHttpRequest.prototype,{addEventListener:T(function(t,e,n){var a=this,r="on"+t,o=a[g]||v(a,g,{value:{}})[g],s=o[r]||(o[r]={}),p=s.h||(s.h=[]);i(p,e)<0&&(a[r]||(a[r]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),a.dispatchEvent(e)}),p[n?"unshift":"push"](e))}),dispatchEvent:T(function(t){var n=this,a="on"+t.type,r=n[g],i=r&&r[a],o=!!i;return o&&(i.n?n.fireEvent(a,t):e(n,t,i.h,!0))}),removeEventListener:T(x.removeEventListener)});var M=y(Event.prototype,"button").get;b(t.Event.prototype,{bubbles:T(!0),cancelable:T(!0),preventDefault:T(function(){this.cancelable&&(this.returnValue=!1)}),stopPropagation:T(function(){this.stoppedPropagation=!0,this.cancelBubble=!0}),stopImmediatePropagation:T(function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}),initEvent:T(function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}),pageX:{get:function(){return this._pageX||(this._pageX=this.clientX+t.scrollX-(P.clientLeft||0))}},pageY:{get:function(){return this._pageY||(this._pageY=this.clientY+t.scrollY-(P.clientTop||0))}},which:{get:function(){return this.keyCode?this.keyCode:isNaN(this.button)?void 0:this.button+1}},charCode:{get:function(){return this.keyCode&&"keypress"==this.type?this.keyCode:0}},buttons:{get:function(){return M.call(this)}},button:{get:function(){var t=this.buttons;return 1&t?0:2&t?2:4&t?1:void 0}},defaultPrevented:{get:function(){var t,e=this.returnValue;return!(e===t||e)}},relatedTarget:{get:function(){var t=this.type;return"mouseover"===t?this.fromElement:"mouseout"===t?this.toElement:null}}}),b(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:T(function(e,n,a){var r=this;x.addEventListener.call(r,e,n,a),d&&e===m&&!S.test(r.readyState)&&(d=!1,r.attachEvent(h,p),t==top&&!function i(t){try{r.documentElement.doScroll("left"),p()}catch(e){setTimeout(i,50)}}())}),dispatchEvent:T(x.dispatchEvent),removeEventListener:T(x.removeEventListener),createEvent:T(function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e})}),b(t.Window.prototype,{getComputedStyle:T(function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,p=this._,u=p.style,c=p.currentStyle,l=p.runtimeStyle;return"opacity"==t?u.opacity||"1":(t=("float"===t?"style-float":t).replace(r,i),e=c?c[t]:u[t],n.test(e)&&!a.test(t)&&(o=u.left,s=l&&l.left,s&&(l.left=c.left),u.left="fontSize"===t?"1em":e,e=u.pixelLeft+"px",u.left=o,s&&(l.left=s)),null==e?e:e+""||"auto")},e.prototype.getPropertyValue=function(){return null},function(n,a){return a?new e(n):new t(n)}}()),addEventListener:T(function(n,a,r){var o,s=t,p="on"+n;s[p]||(s[p]=function(t){return e(s,l(s,t),o,!1)&&void 0}),o=s[p][g]||(s[p][g]=[]),i(o,a)<0&&o[r?"unshift":"push"](a)}),dispatchEvent:T(function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}),removeEventListener:T(function(e,n,a){var r="on"+e,o=(t[r]||Object)[g],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}),pageXOffset:{get:u("scrollLeft")},pageYOffset:{get:u("scrollTop")},scrollX:{get:u("scrollLeft")},scrollY:{get:u("scrollTop")},innerWidth:{get:u("clientWidth")},innerHeight:{get:u("clientHeight")}}),t.HTMLElement=t.Element,function(t,e,n){for(n=0;na;a++)e.appendChild(n[a].cloneNode(!0));return e},n.cloneRange=function(){var t=new e;return t._start=this._start,t._end=this._end,t},n.deleteContents=function(){for(var e=this._start.parentNode,n=t(this._start,this._end),a=0,r=n.length;r>a;a++)e.removeChild(n[a])},n.extractContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),a=0,r=n.length;r>a;a++)e.appendChild(n[a]);return e},n.setEndAfter=function(t){this._end=t},n.setEndBefore=function(t){this._end=t.previousSibling},n.setStartAfter=function(t){this._start=t.nextSibling},n.setStartBefore=function(t){this._start=t}}}()}}(this.window||t)}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],332:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=s)return(0,p["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,u.times)(a,(0,u.minus)(n[l],n[l-1])));for(var d=[(0,u.plus)(n[0],c(i[0],i[1]))],l=1;s-2>=l;l++)d.push((0,u.minus)(n[l],(0,u.average)([i[l],i[l-1]])));d.push((0,u.minus)(n[s-1],c(i[s-2],i[s-3])));var f=d[0],h=d[1],m=n[0],g=n[1],v=(e=(0,o["default"])()).moveto.apply(e,r(m)).curveto(f[0],f[1],h[0],h[1],g[0],g[1]);return{path:(0,u.range)(2,s).reduce(function(t,e){var a=d[e],r=n[e];return t.smoothcurveto(a[0],a[1],r[0],r[1])},v),centroid:(0,u.average)(n)}},e.exports=n["default"]},{335:335,336:336,337:337}],333:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(334),o=a(i),s=t(335),p=1e-5,u=function(t,e){var n=t.map(e),a=n.sort(function(t,e){var n=r(t,2),a=n[0],i=(n[1],r(e,2)),o=i[0];i[1];return a-o}),i=a.length,o=a[0][0],u=a[i-1][0],c=(0,s.minBy)(a,function(t){return t[1]}),l=(0,s.maxBy)(a,function(t){return t[1]});return o==u&&(u+=p),c==l&&(l+=p),{points:a,xmin:o,xmax:u,ymin:c,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,a=t.yaccessor,i=t.width,p=t.height,c=t.closed,l=t.min,d=t.max;n||(n=function(t){var e=r(t,2),n=e[0];e[1];return n}),a||(a=function(t){var e=r(t,2),n=(e[0],e[1]);return n});var f=function(t){return[n(t),a(t)]},h=e.map(function(t){return u(t,f)}),m=(0,s.minBy)(h,function(t){return t.xmin}),g=(0,s.maxBy)(h,function(t){return t.xmax}),v=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==d?(0,s.maxBy)(h,function(t){return t.ymax}):d;c&&(v=Math.min(v,0),b=Math.max(b,0));var y=c?0:v,_=(0,o["default"])([m,g],[0,i]),x=(0,o["default"])([v,b],[p,0]),w=function(t){var e=r(t,2),n=e[0],a=e[1];return[_(n),x(a)]};return{arranged:h,scale:w,xscale:_,yscale:x,base:y}},e.exports=n["default"]},{334:334,335:335}],334:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t,e){var n=a(t,2),r=n[0],o=n[1],s=a(e,2),p=s[0],u=s[1],c=function(t){return p+(u-p)*(t-r)/(o-r)};return c.inverse=function(){return i([p,u],[r,o])},c};n["default"]=r,e.exports=n["default"]},{}],335:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},p=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},u=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},c=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],p=o[1];return[r+s,i+p]},l=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],p=o[1];return[r-s,i-p]},d=function(t,e){var n=a(e,2),r=n[0],i=n[1];return[t*r,t*i]},f=function(t){var e=a(t,2),n=e[0],r=e[1];return Math.sqrt(n*n+r*r)},h=function(t){return t.reduce(c,[0,0])},m=function(t){return d(1/t.length,t.reduce(c))},g=function(t,e){return d(t,[Math.sin(e),-Math.cos(e)])},v=function(t,e){var n=t||{};for(var a in n){var r=n[a];e[a]=r(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var a=[],r=t;e>r;r++)a.push(r);return n&&a.push(e),a},y=function(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var p=o.value,u=t[p];n.push(e(p,u))}}catch(c){r=!0,i=c}finally{ -try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t){return y(t,function(t,e){return[t,e]})},x=function(t){return t};n.sum=r,n.min=i,n.max=o,n.sumBy=s,n.minBy=p,n.maxBy=u,n.plus=c,n.minus=l,n.times=d,n.id=x,n.length=f,n.sumVectors=h,n.average=m,n.onCircle=g,n.enhance=v,n.range=b,n.mapObject=y,n.pairs=_,n["default"]={sum:r,min:i,max:o,sumBy:s,minBy:p,maxBy:u,plus:c,minus:l,times:d,id:x,length:f,sumVectors:h,average:m,onCircle:g,enhance:v,range:b,mapObject:y,pairs:_}},{}],336:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},r=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],p=o[1];return r===s&&i===p},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},p=function(t){var e=t.command,n=t.params,a=n.map(function(t){return s(t,6)});return e+" "+a.join(" ")},u=function(t,e){var n=t.command,r=t.params,i=a(e,2),o=i[0],s=i[1];switch(n){case"M":return[r[0],r[1]];case"L":return[r[0],r[1]];case"H":return[r[0],s];case"V":return[o,r[0]];case"Z":return null;case"C":return[r[4],r[5]];case"S":return[r[2],r[3]];case"Q":return[r[2],r[3]];case"T":return[r[0],r[1]];case"A":return[r[5],r[6]]}},c=function(t,e){return function(n){var a="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,a)}},l=function(t){return i(n(e,t))};return{moveto:c(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:c(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:c(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:c(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:c(["x1","y1","x2","y2","x","y"],function(t,e,n,a,r,i){return l({command:"C",params:[t,e,n,a,r,i]})}),smoothcurveto:c(["x2","y2","x","y"],function(t,e,n,a){return l({command:"S",params:[t,e,n,a]})}),qcurveto:c(["x1","y1","x","y"],function(t,e,n,a){return l({command:"Q",params:[t,e,n,a]})}),smoothqcurveto:c(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:c(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,a,r,i,o){return l({command:"A",params:[t,e,n,a,r,i,o]})}),print:function(){return e.map(p).join(" ")},points:function(){var t=[],n=[0,0],a=!0,r=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var p=o.value,c=u(p,n);n=c,c&&t.push(c)}}catch(l){r=!0,i=l}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],a=t.points()[0],o=t.instructions().slice(1);return r(n,a)||o.unshift({command:"L",params:a}),i(this.instructions().concat(o))}}};n["default"]=function(){return r()},e.exports=n["default"]},{}],337:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];for(var r,i;i=n.shift();)for(r in i)Mo.call(i,r)&&(t[r]=i[r]);return t}function r(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===Lo.call(t)}function o(t){return jo.test(Lo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function p(t){return!isNaN(parseFloat(t))&&isFinite(t)}function u(t){return t&&"[object Object]"===Lo.call(t)}function c(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];throw t=c(t,n),Error(t)}function d(){Mg.DEBUG&&Oo.apply(null,arguments)}function f(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),Do[t]||(Do[t]=!0,To(t,n))}function m(){Mg.DEBUG&&f.apply(null,arguments)}function g(){Mg.DEBUG&&h.apply(null,arguments)}function v(t,e,n){var a=b(t,e,n);return a?a[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function _(t){var e,n,a,r,i,o;for(e=t.split("."),(n=zo[e.length])||(n=x(e.length)),i=[],a=function(t,n){return t?"*":e[n]},r=n.length;r--;)o=n[r].map(a).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function x(t){var e,n,a,r,i,o,s,p,u="";if(!zo[t]){for(a=[];u.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)p.push(r(n[o]));a[i]=p}zo[t]=a}return zo[t]}function w(t,e,n,a){var r=t[e];if(!r||!r.equalsOrStartsWith(a)&&r.equalsOrStartsWith(n))return t[e]=r?r.replace(n,a):a,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&p(e)?+e:e}function S(t){return null==t?t:(Ko.hasOwnProperty(t)||(Ko[t]=new Qo(t)),Ko[t])}function E(t,e){function n(e,n){var a,r,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(a=t.viewmodel.wrapped[n.str],r=a?a.get():t.viewmodel.get(n),o=r?Object.keys(r):null),o&&o.forEach(function(t){"_ractive"===t&&i(r)||e.push(n.join(t))}),e}var a,r,o;for(a=e.str.split("."),o=[$o];r=a.shift();)"*"===r?o=o.reduce(n,[]):o[0]===$o?o[0]=S(r):o=o.map(C(r));return o}function C(t){return function(e){return e.join(t)}}function P(t){return t?t.replace(Wo,".$1"):""}function A(t,e,n){if("string"!=typeof e||!p(n))throw Error("Bad arguments");var a=void 0,r=void 0;if(/\*/.test(e))return r={},E(t,S(P(e))).forEach(function(e){var a=t.viewmodel.get(e);if(!p(a))throw Error(Xo);r[e.str]=a+n}),t.set(r);if(a=t.get(e),!p(a))throw Error(Xo);return t.set(e,+a+n)}function O(t,e){return Jo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=as[t]}function R(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function M(t,e){for(var n=0,a=t.length;a>n;n++)if(t[n]==e)return!0;return!1}function L(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function j(t){return"string"==typeof t?[t]:void 0===t?[]:t}function D(t){return t[t.length-1]}function N(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function F(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function V(t,e,n,a){var r;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof rs)e.then(n,a);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{r=e.then}catch(i){return void a(i)}if("function"==typeof r){var o,s,p;s=function(e){o||(o=!0,V(t,e,n,a))},p=function(t){o||(o=!0,a(t))};try{r.call(e,s,p)}catch(i){if(!o)return a(i),void(o=!0)}}else n(e)}}function q(t,e,n){var a;return e=P(e),"~/"===e.substr(0,2)?(a=S(e.substring(2)),z(t,a.firstKey,n)):"."===e[0]?(a=U(cs(n),e),a&&z(t,a.firstKey,n)):a=G(t,S(e),n),a}function U(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return S(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),S(n.join("."))}return S(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function G(t,e,n,a){var r,i,o,s,p;if(e.isRoot)return e;for(i=e.firstKey;n;)if(r=n.context,n=n.parent,r&&(s=!0,o=t.viewmodel.get(r),o&&("object"==typeof o||"function"==typeof o)&&i in o))return r.join(e.str);return W(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=S(i),p=G(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:p}),e):a||s?void 0:(t.viewmodel.set(e,void 0),e)}function z(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=S(e),(n=G(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function K(t){t.unbind()}function Q(t){t.unrender()}function Y(t){t.cancel()}function $(t){t.detach()}function J(t){t.detachNodes()}function X(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;fs.ractives.length;)e=fs.ractives.pop(),n=e.viewmodel.applyChanges(),n&&vs.fire(e,n);for(tt(),t=0;t=0;i--)r=t._subs[e[i]],r&&(s=vt(t,r,n,a)&&s);if(Gs.dequeue(t),t.parent&&s){if(o&&t.component){var p=t.component.name+"."+e[e.length-1];e=S(p).wildcardMatches(),n&&(n.component=t)}gt(t.parent,e,n,a)}}function vt(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,a)===!1&&(i=!0);return n&&!n._noArg&&i&&(r=n.original)&&(r.preventDefault&&r.preventDefault(),r.stopPropagation&&r.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};zs(this,t,e)}function yt(t){var e;return t=S(P(t)),e=this.viewmodel.get(t,Ks),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function _t(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){Ys.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function wt(t,e,n){var a,r;return t=S(P(t)),a=this.viewmodel.get(t),i(a)&&i(e)?(r=bs.start(this,!0),this.viewmodel.merge(t,a,e,n),bs.end(),r):this.set(t,e,n&&n.complete)}function kt(t,e){var n,a;return n=E(t,e),a={},n.forEach(function(e){a[e.str]=t.get(e.str)}),a}function St(t,e,n,a){var r,i,o;e=S(P(e)),a=a||cp,e.isPattern?(r=new pp(t,e,n,a),t.viewmodel.patternObservers.push(r),i=!0):r=new Zs(t,e,n,a),r.init(a.init),t.viewmodel.register(e,r,i?"patternObservers":"observers"),r.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(r),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,r,"patternObservers")):t.viewmodel.unregister(e,r,"observers"),o=!0)}};return t._observers.push(s),s}function Et(t,e,n){var a,r,i,o;if(u(t)){n=e,r=t,a=[];for(t in r)r.hasOwnProperty(t)&&(e=r[t],a.push(this.observe(t,e,n)));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",up(this,t,e,n);if(i=t.split(" "),1===i.length)return up(this,t,e,n);for(a=[],o=i.length;o--;)t=i[o],t&&a.push(up(this,t,e,n));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}function Ct(t,e,n){var a=this.observe(t,function(){e.apply(this,arguments),a.cancel()},{init:!1,defer:n&&n.defer});return a}function Pt(t,e){var n,a=this;if(t)n=t.split(" ").map(fp).filter(hp),n.forEach(function(t){var n,r;(n=a._subs[t])&&(e?(r=n.indexOf(e),-1!==r&&n.splice(r,1)):a._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function At(t,e){var n,a,r,i=this;if("object"==typeof t){n=[];for(a in t)t.hasOwnProperty(a)&&n.push(this.on(a,t[a]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return r=t.split(" ").map(fp).filter(hp),r.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function Ot(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var a,r,i,o,s,p,u=[];if(a=Rt(t,e,n),!a)return null;for(r=t.length,s=a.length-2-a[1],i=Math.min(r,a[0]),o=i+a[1],p=0;i>p;p+=1)u.push(p);for(;o>p;p+=1)u.push(-1);for(;r>p;p+=1)u.push(p+s);return 0!==s?u.touchedFrom=a[0]:u.touchedFrom=t.length,u}function Rt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Mt(e,n){var a,r,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),a=bs.start(this,!0),bs.scheduleTask(function(){return Rp.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Lt(s),e.innerHTML=""}return this.cssId&&Op.apply(),e&&((r=e.__ractive_instances__)?r.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,a.then(function(){return Mp.fire(o)})}function Lt(t){t.splice(0,t.length).forEach(H)}function jt(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function Dt(t,e){var n,a,r;return a='[data-ractive-css~="{'+e+'}"]',r=function(t){var e,n,r,i,o,s,p,u=[];for(e=[];n=Ip.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Ft),p=e.length;p--;)s=i.slice(),r=e[p],s[p]=r.base+a+r.modifiers||"",o=i.slice(),o[p]=a+" "+o[p],u.push(s.join(" "),o.join(" "));return u.join(", ")},n=Vp.test(t)?t.replace(Vp,a):t.replace(Fp,"").replace(Np,function(t,e){var n,a;return Bp.test(e)?t:(n=e.split(",").map(Nt),a=n.map(r).join(", ")+" ",t.replace(e,a))})}function Nt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Ft(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){var r=a?Vt(e,this):e,i=n?Vt(t,this):t;return qt(r,i)}:qt(e,t)}function Vt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&g("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function qt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Ut(t){var e=So(Qp);return e.parse=function(e,n){return Gt(e,n||t)},e}function Gt(t,e){if(!Hp)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hp(t,e||this.options)}function zt(t,e){var n;if(!Xi){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a - - - - {{text.titleCase(data.seclevel)}} - - - - {{data.alarm ? "Reset" : "Activate"}} - - {{#if data.emagged}} - - Safety measures offline. Device may exhibit abnormal behavior. - - {{/if}} - diff --git a/tgui/src/interfaces/sleeper.ract b/tgui/src/interfaces/sleeper.ract index e5bad17461..e17f8aa5ce 100644 --- a/tgui/src/interfaces/sleeper.ract +++ b/tgui/src/interfaces/sleeper.ract @@ -31,6 +31,13 @@ {{data.occupant.brainLoss ? "Abnormal" : "Healthy"}} + {{#if data.occupant.failing_organs}} + + {{#each data.occupant.failing_organs}} + {{name}} + {{/each}} + + {{/if}} {{#each adata.occupant.reagents}} {{Math.fixed(volume, 1)}} units of {{name}}
    @@ -44,9 +51,89 @@ {{data.open ? "Open" : "Closed"}} - - {{#each data.chems}} - {{name}}
    + + + {{#each data.synthchems}} + {{name}} {{/each}} + + +
    +
    +
    + Name +
    + +
    + Volume +
    + + {{#if data.efficiency >= 4}} +
    + Purity +
    + {{/if}} + + {{#if data.efficiency >= 3}} +
    +
    + {{/if}} + + {{#if data.efficiency >= 2}} +
    +
    + {{/if}} + +
    +
    + +
    +
    + +
    + {{#each data.chems}} +
    +
    + {{name}} +
    + +
    + {{vol}}u +
    + + {{#if data.efficiency >= 4}} +
    + {{purity}} +
    + {{/if}} + + {{#if data.efficiency >= 3}} +
    + 1 +
    + {{/if}} + + {{#if adata.efficiency >= 2}} +
    + 5 +
    + {{/if}} + +
    + 10 +
    + +
    + Purge
    +
    + +
    + {{/each}} +
    +
    + + {{data.current_vol}} + diff --git a/tgui/src/util/tooltip.styl b/tgui/src/util/tooltip.styl index a951b82876..053d9b35c6 100644 --- a/tgui/src/util/tooltip.styl +++ b/tgui/src/util/tooltip.styl @@ -8,6 +8,7 @@ div[data-tooltip], span[data-tooltip] width: 250px padding: 10px transform: translateX(-50%) + pointer-events: none visibility: hidden opacity: 0 @@ -21,6 +22,7 @@ div[data-tooltip], span[data-tooltip] background-color: tooltip-color-background &:hover::after + pointer-events: none visibility: visible opacity: 1 diff --git a/tools/json_verifier.py b/tools/json_verifier.py index 04c8670705..dbba811205 100644 --- a/tools/json_verifier.py +++ b/tools/json_verifier.py @@ -4,16 +4,17 @@ import json if len(sys.argv) <= 1: exit(1) -files = filter(len, sys.argv[1].split('\n')) -msg = [] -for file in files: +status = 0 + +for file in sys.argv[1:]: with open(file, encoding="ISO-8859-1") as f: try: json.load(f) except ValueError as exception: - msg.append("JSON synxtax error on file: {}".format(file)) - msg.append(str(exception)) -if msg: - print("\n".join(msg)) - exit(1) -exit(0) + print("JSON error in {}".format(file)) + print(exception) + status = 1 + else: + print("Valid {}".format(file)) + +exit(status) diff --git a/tools/travis/before_build_tools.sh b/tools/travis/before_build_tools.sh deleted file mode 100755 index 2329de82b2..0000000000 --- a/tools/travis/before_build_tools.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -e - -if [ "$BUILD_TOOLS" = true ]; then - cd tgui && source ~/.nvm/nvm.sh && npm install && cd .. -fi; - diff --git a/tools/travis/build_bsql.sh b/tools/travis/build_bsql.sh new file mode 100755 index 0000000000..e2b281efc6 --- /dev/null +++ b/tools/travis/build_bsql.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +source dependencies.sh + +mkdir -p BSQL +cd BSQL +git init +git remote add origin https://github.com/tgstation/BSQL +git fetch --depth 1 origin $BSQL_VERSION +git checkout FETCH_HEAD + +mkdir -p artifacts +cd artifacts +export CXX=g++-7 +# The -D will be unnecessary past BSQL v1.4.0.0 +cmake .. -DMARIA_LIBRARY=/usr/lib/i386-linux-gnu/libmariadb.so +make + +mkdir -p ~/.byond/bin +ln -s $PWD/src/BSQL/libBSQL.so ../../libBSQL.so diff --git a/tools/travis/build_byond.sh b/tools/travis/build_byond.sh deleted file mode 100755 index 3a7e00df29..0000000000 --- a/tools/travis/build_byond.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -#nb: must be bash to support shopt globstar -set -e -shopt -s globstar - -if [ "$BUILD_TOOLS" = false ]; then - if grep -E '^\".+\" = \(.+\)' _maps/**/*.dmm; then - echo "Non-TGM formatted map detected. Please convert it using Map Merger!" - exit 1 - fi; - if grep -P '^\ttag = \"icon' _maps/**/*.dmm; then - echo "tag vars from icon state generation detected in maps, please remove them." - exit 1 - fi; - if grep 'step_[xy]' _maps/**/*.dmm; then - echo "step_x/step_y variables detected in maps, please remove them." - exit 1 - fi; - if grep 'pixel_[xy] = 0' _maps/**/*.dmm; then - echo "pixel_x/pixel_y = 0 variables detected in maps, please review to ensure they are not dirty varedits." - fi; - if grep -P '\td[1-2] =' _maps/**/*.dmm; then - echo "d1/d2 cable variables detected in maps, please remove them." - exit 1 - fi; - if grep '^/area/.+[\{]' _maps/**/*.dmm; then - echo "Vareditted /area path use detected in maps, please replace with proper paths." - exit 1 - fi; - if grep '\W\/turf\s*[,\){]' _maps/**/*.dmm; then - echo "base /turf path use detected in maps, please replace with proper paths." - exit 1 - fi; - if grep '^/*var/' code/**/*.dm; then - echo "Unmanaged global var use detected in code, please use the helpers." - exit 1 - fi; - if grep -i 'centcomm' code/**/*.dm; then - echo "Misspelling(s) of CENTCOM detected in code, please remove the extra M(s)." - exit 1 - fi; - if grep -i 'centcomm' _maps/**/*.dmm; then - echo "Misspelling(s) of CENTCOM detected in maps, please remove the extra M(s)." - exit 1 - fi; - - source $HOME/BYOND/byond/bin/byondsetup - if [ "$BUILD_TESTING" = true ]; then - tools/travis/dm.sh -DTRAVISBUILDING -DTRAVISTESTING -DALL_MAPS tgstation.dme - else - tools/travis/dm.sh -DTRAVISBUILDING tgstation.dme - - tools/deploy.sh travis_test - mkdir travis_test/config - - #test config - cp tools/travis/travis_config.txt travis_test/config/config.txt - - # get libmariadb, cache it so limmex doesn't get angery - if [ -f $HOME/libmariadb ]; then - #travis likes to interpret the cache command as it being a file for some reason - rm $HOME/libmariadb - fi - mkdir -p $HOME/libmariadb - if [ ! -f $HOME/libmariadb/libmariadb.so ]; then - wget http://www.byond.com/download/db/mariadb_client-2.0.0-linux.tgz - tar -xvf mariadb_client-2.0.0-linux.tgz - mv mariadb_client-2.0.0-linux/libmariadb.so $HOME/libmariadb/libmariadb.so - rm -rf mariadb_client-2.0.0-linux.tgz mariadb_client-2.0.0-linux - fi - - cd travis_test - ln -s $HOME/libmariadb/libmariadb.so libmariadb.so - DreamDaemon tgstation.dmb -close -trusted -verbose -params "test-run&log-directory=travis" - cd .. - cat travis_test/data/logs/travis/clean_run.lk - - fi; -fi; diff --git a/tools/travis/build_dependencies.sh b/tools/travis/build_dependencies.sh deleted file mode 100755 index 2c24bdbaaf..0000000000 --- a/tools/travis/build_dependencies.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -set -e - -source dependencies.sh - -#ensure the Dockerfile version matches the dependencies.sh version -line=$(head -n 1 Dockerfile) -if [[ $line != *"$BYOND_MAJOR.$BYOND_MINOR"* ]]; then - echo "Dockerfile BYOND version in FROM command does not match dependencies.sh (Or it's not on line 1)!" - exit 1 -fi - -if [ $BUILD_TOOLS = false ] && [ $BUILD_TESTING = false ]; then - curl https://sh.rustup.rs -sSf | sh -s -- -y --default-host i686-unknown-linux-gnu - source ~/.profile - - mkdir rust-g - cd rust-g - git init - git remote add origin https://github.com/tgstation/rust-g - git fetch --depth 1 origin $RUST_G_VERSION - git checkout FETCH_HEAD - cargo build --release - cmp target/rust_g.dm ../code/__DEFINES/rust_g.dm - - mkdir -p ~/.byond/bin - ln -s $PWD/target/release/librust_g.so ~/.byond/bin/rust_g - - mkdir -p ../BSQL/artifacts - cd ../BSQL - git init - git remote add origin https://github.com/tgstation/BSQL - git fetch --depth 1 origin $BSQL_VERSION - git checkout FETCH_HEAD - - if [ -f "$HOME/MariaDB/libmariadb.so.2" ] && [ -f "$HOME/MariaDB/libmariadb.so" ] && [ -d "$HOME/MariaDB/include" ]; - then - echo "Using cached MariaDB library." - else - echo "Setting up MariaDB." - rm -rf "$HOME/MariaDB" - mkdir -p "$HOME/MariaDB" - mkdir -p "$HOME/MariaDB/include" - cp /usr/lib/i386-linux-gnu/libmariadb.so.2 $HOME/MariaDB/ - ln -s $HOME/MariaDB/libmariadb.so.2 $HOME/MariaDB/libmariadb.so - cp -r /usr/include/mariadb $HOME/MariaDB/include/ - fi - - cd artifacts - export CXX=g++-7 - cmake .. -DMARIA_INCLUDE_DIR=$HOME/MariaDB/include - make - mv src/BSQL/libBSQL.so ../../ -fi diff --git a/tools/travis/build_tgui.sh b/tools/travis/build_tgui.sh new file mode 100755 index 0000000000..0141f3e117 --- /dev/null +++ b/tools/travis/build_tgui.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail + +cd tgui +source ~/.nvm/nvm.sh +npm ci +node node_modules/gulp/bin/gulp.js --min diff --git a/tools/travis/build_tools.sh b/tools/travis/build_tools.sh deleted file mode 100755 index eaccd64c8c..0000000000 --- a/tools/travis/build_tools.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -#must also be bash for the md5sum commands -set -e - -if [ "$BUILD_TOOLS" = true ]; -then - md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml"; - (cd tgui && source ~/.nvm/nvm.sh && npm ci && node node_modules/gulp/bin/gulp.js --min) - phpenv global 5.6 - php -l tools/WebhookProcessor/github_webhook_processor.php; - php -l tools/TGUICompiler.php; - echo "Checking for JSON errors"; - find . -name "*.json" -not -path "./tgui/node_modules/*" | xargs -0 python3 ./tools/json_verifier.py; - python3 tools/ss13_genchangelog.py html/changelog.html html/changelogs; -fi; diff --git a/tools/travis/check_changelogs.sh b/tools/travis/check_changelogs.sh new file mode 100755 index 0000000000..e33c0e6df3 --- /dev/null +++ b/tools/travis/check_changelogs.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -euo pipefail + +md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml" +python3 tools/ss13_genchangelog.py html/changelog.html html/changelogs diff --git a/tools/travis/check_grep.sh b/tools/travis/check_grep.sh new file mode 100755 index 0000000000..2117b570eb --- /dev/null +++ b/tools/travis/check_grep.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -euo pipefail + +#nb: must be bash to support shopt globstar +shopt -s globstar + +st=0 + +if grep -El '^\".+\" = \(.+\)' _maps/**/*.dmm; then + echo "Non-TGM formatted map detected. Please convert it using Map Merger!" + st=1 +fi; +if grep -P '^\ttag = \"icon' _maps/**/*.dmm; then + echo "tag vars from icon state generation detected in maps, please remove them." + st=1 +fi; +if grep 'step_[xy]' _maps/**/*.dmm; then + echo "step_x/step_y variables detected in maps, please remove them." + st=1 +fi; +if grep 'pixel_[xy] = 0' _maps/**/*.dmm; then + echo "pixel_x/pixel_y = 0 variables detected in maps, please review to ensure they are not dirty varedits." +fi; +if grep -P '\td[1-2] =' _maps/**/*.dmm; then + echo "d1/d2 cable variables detected in maps, please remove them." + st=1 +fi; +if grep '^/area/.+[\{]' _maps/**/*.dmm; then + echo "Vareditted /area path use detected in maps, please replace with proper paths." + st=1 +fi; +if grep '\W\/turf\s*[,\){]' _maps/**/*.dmm; then + echo "base /turf path use detected in maps, please replace with proper paths." + st=1 +fi; +if grep '^/*var/' code/**/*.dm; then + echo "Unmanaged global var use detected in code, please use the helpers." + st=1 +fi; +if grep -i 'centcomm' code/**/*.dm; then + echo "Misspelling(s) of CENTCOM detected in code, please remove the extra M(s)." + st=1 +fi; +if grep -i 'centcomm' _maps/**/*.dmm; then + echo "Misspelling(s) of CENTCOM detected in maps, please remove the extra M(s)." + st=1 +fi; + +exit $st diff --git a/tools/travis/install_build_tools.sh b/tools/travis/install_build_tools.sh index 0ea2a605ab..224687f088 100755 --- a/tools/travis/install_build_tools.sh +++ b/tools/travis/install_build_tools.sh @@ -1,11 +1,12 @@ #!/bin/bash -set -e +set -euo pipefail source dependencies.sh -if [ "$BUILD_TOOLS" = true ]; then - source ~/.nvm/nvm.sh - nvm install $NODE_VERSION - pip3 install --user PyYaml - pip3 install --user beautifulsoup4 -fi; +source ~/.nvm/nvm.sh +nvm install $NODE_VERSION + +pip3 install --user PyYaml +pip3 install --user beautifulsoup4 + +phpenv global $PHP_VERSION diff --git a/tools/travis/before_build_byond.sh b/tools/travis/install_byond.sh similarity index 67% rename from tools/travis/before_build_byond.sh rename to tools/travis/install_byond.sh index 55afb07ffe..4a688755d3 100755 --- a/tools/travis/before_build_byond.sh +++ b/tools/travis/install_byond.sh @@ -1,15 +1,5 @@ #!/bin/bash -set -e - -#If this is the build tools step, we do not bother to install/build byond -if [ "$BUILD_TOOLS" = true ]; then - exit 0 -fi - -echo "Combining maps for building" -if [ $BUILD_TESTING = true ]; then - python tools/travis/template_dm_generator.py -fi +set -euo pipefail source dependencies.sh diff --git a/tools/travis/install_dreamchecker.sh b/tools/travis/install_dreamchecker.sh new file mode 100755 index 0000000000..4423e5aafb --- /dev/null +++ b/tools/travis/install_dreamchecker.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -euo pipefail + +source dependencies.sh + +wget -O ~/dreamchecker "https://github.com/SpaceManiac/SpacemanDMM/releases/download/$SPACEMAN_DMM_VERSION/dreamchecker" +chmod +x ~/dreamchecker +~/dreamchecker --version diff --git a/tools/travis/install_libmariadb.sh b/tools/travis/install_libmariadb.sh new file mode 100755 index 0000000000..d0ce4adc14 --- /dev/null +++ b/tools/travis/install_libmariadb.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -euo pipefail + +# get libmariadb, cache it so limmex doesn't get angery +if [ -f $HOME/libmariadb ]; then + #travis likes to interpret the cache command as it being a file for some reason + rm $HOME/libmariadb +fi +mkdir -p $HOME/libmariadb +if [ ! -f $HOME/libmariadb/libmariadb.so ]; then + wget http://www.byond.com/download/db/mariadb_client-2.0.0-linux.tgz + tar -xvf mariadb_client-2.0.0-linux.tgz + mv mariadb_client-2.0.0-linux/libmariadb.so $HOME/libmariadb/libmariadb.so + rm -rf mariadb_client-2.0.0-linux.tgz mariadb_client-2.0.0-linux +fi diff --git a/tools/travis/install_rust_g.sh b/tools/travis/install_rust_g.sh new file mode 100755 index 0000000000..227034af66 --- /dev/null +++ b/tools/travis/install_rust_g.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +source dependencies.sh + +mkdir -p ~/.byond/bin +wget -O ~/.byond/bin/rust_g "https://github.com/tgstation/rust-g/releases/download/$RUST_G_VERSION/librust_g.so" +chmod +x ~/.byond/bin/rust_g diff --git a/tools/travis/run_server.sh b/tools/travis/run_server.sh new file mode 100755 index 0000000000..975e8f6884 --- /dev/null +++ b/tools/travis/run_server.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -euo pipefail + +tools/deploy.sh travis_test +mkdir travis_test/config + +#test config +cp tools/travis/travis_config.txt travis_test/config/config.txt + +cd travis_test +ln -s $HOME/libmariadb/libmariadb.so libmariadb.so +DreamDaemon tgstation.dmb -close -trusted -verbose -params "test-run&log-directory=travis" +cd .. +cat travis_test/data/logs/travis/clean_run.lk diff --git a/tools/travis/template_dm_generator.py b/tools/travis/template_dm_generator.py index 89e1d2647d..970fba7db4 100755 --- a/tools/travis/template_dm_generator.py +++ b/tools/travis/template_dm_generator.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import os -import os.path import sys folders = ["_maps/RandomRuins", "_maps/RandomZLevels", "_maps/shuttles",