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/StationRuins/Box/Engine/engine_singulo.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
new file mode 100644
index 0000000000..76cb8bb9db
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm
@@ -0,0 +1,1698 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cB" = (
+/obj/machinery/button/door{
+ dir = 1;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ req_access_txt = "10"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cP" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dz" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"dN" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ea" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"eA" = (
+/obj/structure/table,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"eI" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eL" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"fh" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"fr" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Southwest";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"fH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"gf" = (
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/item/pipe_dispenser,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ht" = (
+/obj/structure/reflector/single/anchored{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"hR" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"ic" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"jx" = (
+/obj/structure/reflector/single/anchored{
+ dir = 9
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"jH" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"kh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"kC" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"kK" = (
+/turf/closed/wall,
+/area/engine/engineering)
+"la" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"lJ" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"lY" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"me" = (
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/closet/radiation,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"mB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"mZ" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"nR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qH" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"rj" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rm" = (
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"rM" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow,
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"sr" = (
+/obj/machinery/light,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine South";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tl" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"to" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable,
+/obj/machinery/power/emitter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"tC" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tE" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tT" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"uG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"wt" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"xg" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xJ" = (
+/obj/item/tank/internals/emergency_oxygen/engi{
+ pixel_x = 5
+ },
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/glasses/meson/engine,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xQ" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"yo" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"yq" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"yU" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"zW" = (
+/obj/structure/chair/stool,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"zZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Aw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"AF" = (
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Bb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#c1caff"
+ },
+/obj/machinery/camera/emp_proof{
+ c_tag = "Particle Accelerator";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/the_singularitygen,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Bj" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/rad_collector,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"BG" = (
+/obj/structure/closet/emcloset/anchored,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ce" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Ch" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"CN" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine East";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"DK" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine West";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Eu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ER" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ES" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/item/wrench,
+/obj/item/stack/cable_coil/red,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"FK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"FM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"FP" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"FY" = (
+/obj/structure/table,
+/obj/item/book/manual/wiki/engineering_singulo_tesla,
+/obj/item/geiger_counter,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Hc" = (
+/obj/machinery/light,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"HQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"HW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"In" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Js" = (
+/obj/structure/particle_accelerator/end_cap,
+/obj/structure/particle_accelerator/fuel_chamber,
+/obj/structure/particle_accelerator/particle_emitter/center,
+/obj/structure/particle_accelerator/particle_emitter/left,
+/obj/structure/particle_accelerator/particle_emitter/right,
+/obj/structure/particle_accelerator/power_box,
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/closet/crate/engineering{
+ name = "Particle Accelerator Crate"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"JC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Kg" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Lr" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Ls" = (
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LB" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"LJ" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Southeast";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"LV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Mi" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Mn" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MD" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MJ" = (
+/turf/open/space/basic,
+/area/space)
+"Nm" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"No" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Nz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"NS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Og" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ox" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/box,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Pg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Pt" = (
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Qk" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Northeast";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Ra" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Rp" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Rr" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/engine/engineering)
+"Si" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"SD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Um" = (
+/turf/template_noop,
+/area/template_noop)
+"UL" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Singularity Engine Northwest";
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"UV" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Wf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ww" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"WQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WX" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Xk" = (
+/obj/machinery/field/generator,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Yd" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Yl" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"Yn" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/engineering)
+"YY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Zb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZF" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ZK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZY" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+
+(1,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(2,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(3,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(4,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(5,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+Yl
+dz
+dz
+MJ
+MJ
+dz
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(6,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+rm
+Yl
+dz
+dz
+dz
+dz
+Yl
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+Um
+Um
+Um
+Um
+"}
+(7,1,1) = {"
+Um
+Um
+Um
+Um
+kK
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+dz
+MJ
+MJ
+MJ
+MJ
+"}
+(8,1,1) = {"
+Um
+Um
+Lr
+la
+kK
+Ra
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+dz
+dz
+MJ
+MJ
+MJ
+"}
+(9,1,1) = {"
+Um
+Um
+FM
+FM
+In
+ER
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+DK
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(10,1,1) = {"
+Um
+Si
+fh
+ZY
+to
+Ch
+Ch
+UL
+dz
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(11,1,1) = {"
+xJ
+gf
+fh
+dN
+YY
+MD
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+fr
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(12,1,1) = {"
+LO
+Eu
+Pg
+cP
+JC
+tv
+rj
+Pt
+dz
+Yl
+ht
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(13,1,1) = {"
+NS
+xx
+fh
+zW
+dW
+ea
+rj
+Pt
+eL
+Kg
+Kg
+rM
+Kg
+rM
+Kg
+rM
+Kg
+Kg
+tl
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(14,1,1) = {"
+yo
+me
+aT
+Aw
+JC
+tv
+rj
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+ht
+dz
+hR
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(15,1,1) = {"
+jH
+FK
+Ch
+wt
+tE
+rj
+rj
+Og
+hR
+FP
+Xk
+FP
+FP
+rm
+FP
+FP
+Xk
+FP
+hR
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(16,1,1) = {"
+Ch
+ES
+ZK
+ZK
+zZ
+ZK
+fH
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+xQ
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(17,1,1) = {"
+wt
+Zz
+Wf
+Ox
+nR
+Zb
+lY
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+hR
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(18,1,1) = {"
+cB
+Bb
+qP
+ZF
+SD
+Yd
+eI
+LB
+UV
+rm
+rm
+rm
+rm
+rm
+rm
+rm
+rm
+rm
+yq
+Yl
+sr
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(19,1,1) = {"
+wt
+eJ
+Zx
+nW
+Mn
+WQ
+lY
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+hR
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(20,1,1) = {"
+Ch
+Js
+No
+No
+tT
+No
+LV
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+FP
+dz
+Bj
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(21,1,1) = {"
+jH
+Nz
+Ch
+wt
+tE
+rj
+rj
+Og
+hR
+FP
+Xk
+FP
+FP
+rm
+FP
+FP
+Xk
+FP
+hR
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(22,1,1) = {"
+AF
+WX
+HQ
+Aw
+JC
+tv
+rj
+Og
+hR
+dz
+FP
+dz
+dz
+rm
+dz
+dz
+jx
+dz
+hR
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(23,1,1) = {"
+fh
+kh
+fh
+fh
+dW
+ea
+rj
+Pt
+ic
+Kg
+Kg
+rM
+Kg
+rM
+Kg
+rM
+Kg
+Kg
+Ce
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(24,1,1) = {"
+fh
+kh
+uG
+cP
+xg
+tv
+rj
+Pt
+dz
+Yl
+jx
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(25,1,1) = {"
+eA
+FY
+mB
+Rp
+HW
+Mi
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+LJ
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(26,1,1) = {"
+fh
+kh
+mB
+ZY
+kC
+mZ
+mZ
+Qk
+Rr
+Yl
+dz
+dz
+FP
+dz
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(27,1,1) = {"
+Um
+Um
+Um
+fh
+Ww
+qH
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+CN
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(28,1,1) = {"
+Um
+Um
+Um
+fh
+Yn
+BG
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Yl
+dz
+dz
+dz
+MJ
+"}
+(29,1,1) = {"
+Um
+Um
+Um
+fh
+Yn
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+Yl
+Yl
+Yl
+dz
+MJ
+"}
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
new file mode 100644
index 0000000000..6462cef211
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm
@@ -0,0 +1,2827 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ab" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ac" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"at" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/item/cartridge/atmos,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"av" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"aw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"aA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"aC" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/tank/internals/emergency_oxygen/engi{
+ pixel_x = 5
+ },
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/glasses/meson/engine,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"aV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"aX" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/turf/open/space,
+/area/space/nearstation)
+"aY" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bo" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/binary/valve{
+ dir = 4;
+ name = "Output to Waste"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bI" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
+"bT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"bW" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ck" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cp" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"cP" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cS" = (
+/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)
+"cX" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Gas to Cooling Loop"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"de" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Port";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"df" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/oil,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"dl" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dw" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space,
+/area/space/nearstation)
+"dD" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space,
+/area/space/nearstation)
+"ej" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Cooling Loop Bypass"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ey" = (
+/obj/structure/reflector/single/anchored{
+ dir = 9
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ez" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"fa" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"fj" = (
+/obj/machinery/status_display,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"fq" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"fK" = (
+/obj/structure/sign/warning/radiation,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"fW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gf" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"gj" = (
+/obj/effect/turf_decal/stripes/corner,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gx" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"gB" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gQ" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"hy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"hJ" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"hK" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"ii" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"in" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"iC" = (
+/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)
+"iD" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"iJ" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"iU" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"jg" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"jp" = (
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"js" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"jB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"jZ" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"kA" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"kW" = (
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ln" = (
+/obj/structure/closet/firecloset,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"lw" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"lE" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Gas to Chamber"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"lG" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 9
+ },
+/turf/open/space,
+/area/space/nearstation)
+"mi" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"mj" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mE" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mH" = (
+/obj/structure/sign/poster/official/safety_eye_protection,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"mU" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"mW" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 4
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"mX" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"na" = (
+/obj/machinery/camera{
+ c_tag = "Supermatter Chamber";
+ network = list("engine");
+ pixel_x = 23
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"nd" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Cooling Loop to Gas"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ni" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nH" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"nR" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"nV" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nW" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/item/tank/internals/plasma,
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"ou" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"oC" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"oS" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"px" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"pA" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"pL" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"pP" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/emitter/anchored{
+ dir = 4;
+ state = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qc" = (
+/obj/structure/table,
+/obj/item/pipe_dispenser,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"qe" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qm" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Mix Bypass"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qo" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qA" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Gas to Filter"
+ },
+/obj/machinery/airalarm/engine{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"re" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"rt" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ry" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"rJ" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rY" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"sm" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/turf/open/space,
+/area/space/nearstation)
+"sn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"so" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"sq" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 8
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"sA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Gas to Mix"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"td" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"te" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ti" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"tn" = (
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"tw" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"tE" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"un" = (
+/obj/structure/reflector/single/anchored{
+ dir = 5
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"uC" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"uR" = (
+/obj/machinery/power/supermatter_crystal/engine,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"vD" = (
+/obj/structure/girder,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"vN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"vO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"vX" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"wt" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"wz" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"wG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"wS" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
+"xo" = (
+/obj/structure/reflector/box/anchored{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"xB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"yd" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"yf" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"yA" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"yD" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"yZ" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"zf" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Atmos to Loop"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"zh" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/table/reinforced,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/item/pipe_dispenser,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"zF" = (
+/obj/structure/table,
+/obj/item/stack/sheet/metal/fifty,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"zS" = (
+/turf/open/space/basic,
+/area/space)
+"Ab" = (
+/obj/item/crowbar/large,
+/obj/structure/rack,
+/obj/item/flashlight,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Ah" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"AH" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Bc" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Bk" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"Bl" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/obj/item/geiger_counter,
+/obj/item/geiger_counter,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"BD" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/components/binary/valve/digital/on{
+ dir = 4;
+ name = "Output Release"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Cb" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Cn" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"CH" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine Room";
+ req_access_txt = "10"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"CT" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"CW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Dj" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Dz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"DA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"DC" = (
+/obj/structure/rack,
+/obj/item/clothing/mask/gas{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/mask/gas{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Ef" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ei" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Es" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ex" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"EL" = (
+/turf/closed/wall,
+/area/engine/engineering)
+"EM" = (
+/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)
+"EX" = (
+/obj/item/wrench,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Fr" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"FG" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Gl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Starboard";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Gz" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"GB" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"GI" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"GK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"GX" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Hj" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Hn" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Hw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Aft";
+ network = list("ss13","engine");
+ pixel_x = 23
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Hz" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ik" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"In" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"IE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"IF" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/emitter/anchored{
+ dir = 8;
+ state = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Jn" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"JH" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"JK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"JL" = (
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"JV" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Laser Room";
+ req_access_txt = "10"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ke" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Kv" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"KX" = (
+/obj/machinery/status_display/ai,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"KZ" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/turf/open/space,
+/area/space/nearstation)
+"Le" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"Lg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Lv" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Lw" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"LE" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/button/door{
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_y = -24;
+ req_access_txt = "10"
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"LJ" = (
+/obj/machinery/light,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"LS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Ml" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8;
+ filter_type = "n2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Mr" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ME" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"MI" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"MJ" = (
+/turf/open/floor/plating,
+/area/engine/engineering)
+"MK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MP" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"Ne" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Np" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Nw" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"Nx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ND" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"NK" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"NU" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/supermatter)
+"NZ" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Oj" = (
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
+"Ok" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"OK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Mix to Gas"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"OR" = (
+/obj/structure/sign/warning/fire,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"OU" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Pa" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "External Gas to Loop"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Ph" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Py" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Qn" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
+/obj/machinery/meter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Qu" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"QD" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"QJ" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Rh" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
+"RA" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/obj/machinery/power/rad_collector/anchored,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"RV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Sn" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/turf/open/space,
+/area/space/nearstation)
+"SL" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"SR" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"SX" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Tk" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"TB" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"TC" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"TO" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ub" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"Uq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"Ur" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Uu" = (
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"UM" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"UN" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"UP" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"Vg" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"Vn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"VN" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "External Gas to Loop"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"VP" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Wf" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"Ws" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WB" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space/nearstation)
+"WI" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WT" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Xy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"XA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"XG" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
+"XK" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/obj/item/radio/headset/headset_eng,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"XY" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"YB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"YD" = (
+/obj/structure/reflector/double/anchored{
+ dir = 6
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"YF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"YX" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Gas to Filter"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"YZ" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space,
+/area/space/nearstation)
+"Zn" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZH" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ZO" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Fore";
+ dir = 1;
+ network = list("ss13","engine");
+ pixel_x = 23
+ },
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ZT" = (
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+yf
+Rh
+yf
+yf
+Rh
+yf
+yf
+Rh
+yf
+yf
+yf
+YZ
+YZ
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(2,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+pL
+aX
+pL
+yA
+Sn
+yA
+yA
+Sn
+hK
+yf
+yf
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(3,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+bI
+XG
+bI
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(4,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+uC
+XG
+uC
+Le
+dD
+yA
+yA
+dD
+hK
+yf
+yf
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(5,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+bI
+XG
+bI
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(6,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+ZT
+wS
+XG
+uC
+Le
+dD
+yA
+yA
+dD
+hK
+yf
+yf
+YZ
+Oj
+YZ
+ZT
+ZT
+ZT
+ZT
+ZT
+"}
+(7,1,1) = {"
+ZT
+ZT
+ZT
+ZT
+EL
+EL
+MP
+bI
+XG
+bI
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+Oj
+YZ
+yf
+yf
+yf
+yf
+zS
+"}
+(8,1,1) = {"
+ZT
+ZT
+cP
+Ke
+EL
+Tk
+MP
+wS
+XG
+uC
+Le
+dD
+yA
+yA
+dD
+hK
+yf
+yf
+YZ
+Oj
+YZ
+yf
+yf
+Rh
+yf
+yf
+"}
+(9,1,1) = {"
+ZT
+ZT
+dl
+Ok
+ND
+Zn
+Ei
+bI
+KZ
+lG
+sm
+dD
+Sn
+Sn
+dD
+lG
+Rh
+Rh
+YZ
+YZ
+YZ
+tw
+Rh
+Rh
+Rh
+yf
+"}
+(10,1,1) = {"
+ZT
+nR
+AH
+iD
+MP
+MP
+MP
+sq
+aA
+rJ
+gf
+rJ
+rJ
+td
+yf
+yf
+yf
+yf
+Rh
+yf
+yf
+yf
+yf
+Rh
+yf
+yf
+"}
+(11,1,1) = {"
+oC
+GB
+UN
+sn
+sn
+sn
+de
+GK
+wG
+TC
+mj
+fW
+at
+XA
+td
+MP
+MP
+MP
+MP
+MP
+MP
+yf
+WB
+YZ
+WB
+yf
+"}
+(12,1,1) = {"
+cS
+hJ
+qe
+ry
+ry
+ry
+ry
+cX
+ry
+ry
+nd
+ry
+yD
+Ex
+ck
+iC
+Uu
+kW
+Uu
+EM
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(13,1,1) = {"
+ME
+qr
+Hz
+gj
+te
+te
+ez
+Mr
+DA
+ej
+Dz
+jZ
+gB
+SR
+SX
+Vn
+Vn
+cp
+Uu
+Uu
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(14,1,1) = {"
+Ne
+yd
+bW
+VP
+EX
+Vg
+KX
+px
+nW
+Cn
+fj
+xB
+WI
+IE
+JV
+Bc
+JH
+Lv
+XY
+LJ
+MP
+Rh
+YZ
+Oj
+YZ
+Rh
+"}
+(15,1,1) = {"
+MP
+zh
+QD
+Hj
+rt
+Vg
+JL
+na
+tE
+tE
+JL
+Xy
+Ml
+Ef
+iD
+MJ
+QJ
+pP
+pP
+MJ
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(16,1,1) = {"
+MP
+aC
+bW
+TO
+fK
+JL
+UP
+ti
+ti
+Bk
+JL
+JK
+WT
+Ef
+MP
+Lw
+Uu
+Uu
+Uu
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(17,1,1) = {"
+oS
+fa
+bW
+ZO
+yZ
+qA
+iJ
+so
+so
+so
+js
+CW
+YF
+Py
+iD
+YD
+Uu
+Uu
+ey
+Uu
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(18,1,1) = {"
+iD
+fa
+bW
+YX
+Qu
+aV
+jp
+tn
+uR
+tn
+NU
+Hw
+ac
+ac
+iD
+xo
+Uu
+xo
+vD
+Uu
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(19,1,1) = {"
+oS
+fa
+bW
+LE
+Gz
+lE
+CT
+UM
+UM
+UM
+OR
+jB
+Nx
+aw
+iD
+Uu
+Uu
+Uu
+un
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(20,1,1) = {"
+MP
+Bl
+bW
+iU
+JL
+OR
+Wf
+mW
+mW
+RA
+JL
+JK
+WT
+Ef
+MP
+Lw
+Uu
+Uu
+Uu
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(21,1,1) = {"
+MP
+nV
+mE
+Ws
+VN
+wz
+JL
+tE
+tE
+tE
+JL
+vO
+Np
+Ef
+iD
+MJ
+Dj
+IF
+Dj
+MJ
+MP
+yf
+YZ
+Oj
+YZ
+yf
+"}
+(22,1,1) = {"
+iD
+fa
+hy
+Ws
+Pa
+wz
+fj
+Nw
+df
+re
+KX
+ni
+lw
+bH
+JV
+Bc
+Ph
+Ph
+nH
+LJ
+MP
+Rh
+YZ
+Oj
+YZ
+Rh
+"}
+(23,1,1) = {"
+iD
+vX
+bo
+GX
+Ik
+Ik
+SL
+YB
+RV
+qm
+MK
+ii
+rY
+Qn
+ab
+ZH
+ZH
+MI
+Uu
+Uu
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(24,1,1) = {"
+mH
+bT
+Lg
+zf
+ry
+ry
+ry
+OK
+ry
+ry
+sA
+ry
+mX
+BD
+Uq
+zF
+Uu
+GI
+Uu
+Ab
+MP
+Rh
+YZ
+Oj
+YZ
+yf
+"}
+(25,1,1) = {"
+iD
+mU
+in
+Ur
+Es
+Kv
+Gl
+aY
+Kv
+Kv
+Fr
+vN
+nz
+In
+Ub
+MP
+MP
+MP
+MP
+MP
+MP
+yf
+YZ
+YZ
+YZ
+yf
+"}
+(26,1,1) = {"
+wt
+av
+kA
+qo
+EL
+MP
+MP
+Cb
+Uu
+Uu
+pA
+jg
+qc
+fq
+LS
+Hn
+dw
+yf
+Rh
+yf
+yf
+yf
+yf
+Rh
+yf
+yf
+"}
+(27,1,1) = {"
+ZT
+ZT
+ZT
+ou
+DC
+iD
+Uu
+mi
+NK
+NK
+Ah
+Uu
+Jn
+MP
+dw
+dw
+dw
+Rh
+Rh
+Rh
+Rh
+tw
+Rh
+Rh
+Rh
+Rh
+"}
+(28,1,1) = {"
+ZT
+ZT
+ZT
+OU
+Ok
+CH
+GI
+gx
+TB
+gQ
+gQ
+ln
+XK
+MP
+yf
+yf
+Rh
+yf
+Rh
+Oj
+YZ
+yf
+yf
+Rh
+yf
+yf
+"}
+(29,1,1) = {"
+ZT
+ZT
+ZT
+FG
+NZ
+MP
+MP
+MP
+MP
+MP
+iD
+iD
+iD
+MP
+Rh
+Rh
+Rh
+Rh
+Rh
+Oj
+YZ
+yf
+yf
+Rh
+yf
+zS
+"}
diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
new file mode 100644
index 0000000000..7f55d69b17
--- /dev/null
+++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_tesla.dmm
@@ -0,0 +1,1855 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cB" = (
+/obj/machinery/button/door{
+ dir = 1;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ req_access_txt = "10"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"cP" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dz" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"dN" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"dW" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"ea" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"eA" = (
+/obj/structure/table,
+/obj/item/clothing/suit/radiation,
+/obj/item/clothing/head/radiation,
+/obj/item/clothing/glasses/meson,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"eI" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"eL" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"fh" = (
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"fr" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Southwest";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"fH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"gf" = (
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/item/pipe_dispenser,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ht" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"hR" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"ic" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"js" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine East";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"jx" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"jH" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"kh" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ku" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"kK" = (
+/turf/closed/wall,
+/area/engine/engineering)
+"la" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/flashlight{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"lJ" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"lY" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"me" = (
+/obj/structure/rack,
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"mB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"nL" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/engine/engineering)
+"nR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"nW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qH" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"qP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"rj" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rm" = (
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"rM" = (
+/obj/machinery/field/generator,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"rT" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tc" = (
+/obj/machinery/light,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine South";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tl" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"to" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable,
+/obj/machinery/power/emitter,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"tC" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"tE" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"tT" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 4;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = 24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"uG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"wt" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"xg" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xJ" = (
+/obj/item/tank/internals/emergency_oxygen/engi{
+ pixel_x = 5
+ },
+/obj/item/clothing/gloves/color/black,
+/obj/item/clothing/glasses/meson/engine,
+/obj/structure/table,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xQ" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"yj" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine West";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"yo" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"yq" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"yU" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"zW" = (
+/obj/structure/chair/stool,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"zZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Aw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"AF" = (
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Bb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#c1caff"
+ },
+/obj/machinery/camera/emp_proof{
+ c_tag = "Particle Accelerator";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/the_singularitygen/tesla,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Bh" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Bj" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"BG" = (
+/obj/structure/closet/emcloset/anchored,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ce" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Ch" = (
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"DF" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Eu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ER" = (
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ES" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/item/clothing/head/welding,
+/obj/item/weldingtool/largetank,
+/obj/item/wrench,
+/obj/item/stack/cable_coil/red,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"FK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"FM" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"FP" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"FY" = (
+/obj/structure/table,
+/obj/item/book/manual/wiki/engineering_singulo_tesla,
+/obj/item/geiger_counter,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Hc" = (
+/obj/machinery/light,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"HQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/button/door{
+ dir = 8;
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_x = -24;
+ req_access_txt = "10"
+ },
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"HW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"In" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Js" = (
+/obj/structure/particle_accelerator/end_cap,
+/obj/structure/particle_accelerator/fuel_chamber,
+/obj/structure/particle_accelerator/particle_emitter/center,
+/obj/structure/particle_accelerator/particle_emitter/left,
+/obj/structure/particle_accelerator/particle_emitter/right,
+/obj/structure/particle_accelerator/power_box,
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/closet/crate/engineering{
+ name = "Particle Accelerator Crate"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"JC" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"JZ" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/engineering)
+"Kg" = (
+/obj/structure/reflector/single/anchored{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Lr" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/toolbox/electrical{
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Ls" = (
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LB" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"LJ" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Southeast";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"LO" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"LV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Mi" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Mn" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MD" = (
+/obj/structure/reagent_dispensers/fueltank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"MJ" = (
+/turf/open/space/basic,
+/area/space)
+"Nm" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"No" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Nz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"NS" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Oe" = (
+/obj/structure/reflector/single/anchored{
+ dir = 9
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Og" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Ox" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/box,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Pg" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Pj" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Pk" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Pt" = (
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Qk" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Northeast";
+ network = list("ss13","engine")
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"Ra" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"Rp" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"RE" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"RL" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Si" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"SD" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Tr" = (
+/obj/structure/sign/warning/radiation/rad_area,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"TE" = (
+/obj/machinery/power/tesla_coil,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"TN" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Um" = (
+/turf/template_noop,
+/area/template_noop)
+"UL" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Northwest";
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"UV" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Vf" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"VR" = (
+/obj/structure/lattice/catwalk,
+/obj/machinery/camera/emp_proof{
+ c_tag = "Tesla Engine Northeast";
+ network = list("ss13","engine")
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"Wf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Ww" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access_txt = "10;13"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"WI" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WP" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"WQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"WX" = (
+/obj/structure/rack,
+/obj/item/clothing/gloves/color/yellow,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Xk" = (
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"Yd" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Yl" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"YY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"Zb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"Zz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZF" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ZK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"ZS" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"ZY" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+
+(1,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(2,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(3,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(4,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(5,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+Yl
+dz
+dz
+MJ
+MJ
+dz
+dz
+dz
+MJ
+MJ
+MJ
+MJ
+MJ
+MJ
+Um
+Um
+Um
+Um
+Um
+"}
+(6,1,1) = {"
+Um
+Um
+Um
+Um
+Um
+Um
+Um
+rm
+Yl
+dz
+dz
+dz
+dz
+Yl
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+dz
+Um
+Um
+Um
+Um
+"}
+(7,1,1) = {"
+Um
+Um
+Um
+Um
+kK
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+dz
+MJ
+MJ
+MJ
+MJ
+"}
+(8,1,1) = {"
+Um
+Um
+Lr
+la
+kK
+Ra
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+dz
+dz
+MJ
+MJ
+MJ
+"}
+(9,1,1) = {"
+Um
+Um
+FM
+FM
+In
+ER
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+yj
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(10,1,1) = {"
+Um
+Si
+fh
+ZY
+to
+Ch
+Ch
+UL
+dz
+Yl
+dz
+dz
+FP
+FP
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(11,1,1) = {"
+xJ
+gf
+fh
+dN
+YY
+MD
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+FP
+FP
+dz
+dz
+Yl
+dz
+Pt
+fr
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(12,1,1) = {"
+LO
+Eu
+Pg
+cP
+Bh
+tv
+rj
+Pt
+dz
+Yl
+dz
+dz
+Kg
+FP
+FP
+FP
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(13,1,1) = {"
+NS
+xx
+fh
+zW
+Bh
+tv
+rj
+Pt
+rm
+rm
+rm
+rm
+rm
+rm
+Kg
+rm
+rm
+rm
+rm
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(14,1,1) = {"
+yo
+me
+aT
+Aw
+JC
+WI
+rj
+Og
+rm
+tl
+ht
+Bj
+ht
+WP
+ht
+Pj
+ht
+TN
+rm
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(15,1,1) = {"
+jH
+FK
+Ch
+wt
+tE
+rj
+rj
+Og
+rm
+ZS
+Xk
+TE
+rm
+TE
+rm
+TE
+Xk
+ZS
+rm
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(16,1,1) = {"
+Ch
+ES
+ZK
+ZK
+zZ
+ZK
+fH
+Og
+rm
+ea
+hR
+FP
+FP
+FP
+FP
+FP
+xQ
+RL
+rm
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(17,1,1) = {"
+wt
+Zz
+Wf
+Ox
+nR
+Zb
+lY
+Og
+rm
+yq
+rm
+FP
+rM
+rm
+rM
+FP
+rm
+yq
+rm
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(18,1,1) = {"
+cB
+Bb
+qP
+ZF
+SD
+Yd
+eI
+LB
+UV
+dW
+hR
+FP
+rm
+rm
+rm
+FP
+xQ
+ku
+rm
+Yl
+tc
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(19,1,1) = {"
+wt
+eJ
+Zx
+nW
+Mn
+WQ
+lY
+Og
+rm
+ZS
+rm
+FP
+rM
+rm
+rM
+FP
+rm
+ZS
+rm
+Yl
+Pt
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(20,1,1) = {"
+Ch
+Js
+No
+No
+tT
+No
+LV
+Og
+rm
+DF
+hR
+FP
+FP
+FP
+FP
+FP
+xQ
+RE
+rm
+dz
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(21,1,1) = {"
+jH
+Nz
+Ch
+wt
+tE
+rj
+rj
+Og
+rm
+ZS
+Xk
+Pk
+rm
+Pk
+rm
+Pk
+Xk
+ZS
+rm
+dz
+Pt
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(22,1,1) = {"
+AF
+WX
+HQ
+Aw
+JC
+WI
+rj
+Og
+rm
+Ce
+ht
+ic
+ht
+eL
+ht
+Vf
+ht
+jx
+rm
+Yl
+Pt
+Ch
+jH
+Yl
+dz
+MJ
+"}
+(23,1,1) = {"
+fh
+kh
+fh
+fh
+Bh
+tv
+rj
+Pt
+rm
+rm
+rm
+rm
+rm
+rm
+Oe
+rm
+rm
+rm
+rm
+Yl
+Hc
+Ch
+tC
+Yl
+dz
+MJ
+"}
+(24,1,1) = {"
+fh
+kh
+uG
+cP
+xg
+tv
+rj
+Pt
+dz
+Yl
+dz
+dz
+Oe
+FP
+FP
+FP
+dz
+Yl
+dz
+Yl
+Pt
+Ch
+tC
+dz
+dz
+MJ
+"}
+(25,1,1) = {"
+eA
+FY
+mB
+Rp
+HW
+Mi
+Ch
+Pt
+dz
+Yl
+dz
+dz
+FP
+FP
+VR
+dz
+dz
+Yl
+dz
+Pt
+LJ
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(26,1,1) = {"
+fh
+kh
+mB
+ZY
+Tr
+rT
+rT
+Qk
+nL
+Yl
+dz
+dz
+FP
+FP
+FP
+dz
+dz
+Yl
+dz
+Pt
+Ch
+Ch
+tC
+dz
+MJ
+MJ
+"}
+(27,1,1) = {"
+Um
+Um
+Um
+fh
+Ww
+qH
+yU
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+js
+Pt
+Pt
+Pt
+Pt
+Pt
+Pt
+Ls
+Pt
+dz
+dz
+MJ
+MJ
+"}
+(28,1,1) = {"
+Um
+Um
+Um
+fh
+JZ
+BG
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Ch
+Ch
+tC
+tC
+tC
+tC
+tC
+Ch
+Yl
+dz
+dz
+dz
+MJ
+"}
+(29,1,1) = {"
+Um
+Um
+Um
+fh
+JZ
+kK
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+Ch
+jH
+Ch
+Ch
+Ch
+Ch
+lJ
+Ch
+Nm
+Yl
+Yl
+Yl
+dz
+MJ
+"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 820ffd0be4..92ceb0ac34 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -3,32 +3,38 @@
/turf/open/space/basic,
/area/space)
"aab" = (
-/obj/effect/turf_decal/stripes/line{
+/obj/machinery/firealarm{
+ dir = 8;
+ 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{
dir = 1
},
-/turf/open/floor/plating,
-/area/space/nearstation)
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
"aac" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
-"aad" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
+/obj/machinery/camera{
+ c_tag = "Bar";
dir = 8
},
/obj/structure/table,
-/obj/item/restraints/handcuffs,
+/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/security/prison)
+/area/crew_quarters/bar)
"aae" = (
/obj/effect/landmark/carpspawn,
/turf/open/space,
@@ -93,23 +99,18 @@
/area/security/prison)
"aao" = (
/obj/machinery/hydroponics/soil,
-/obj/item/seeds/carrot,
-/turf/open/floor/grass,
-/area/security/prison)
-"aap" = (
-/obj/machinery/hydroponics/soil,
/obj/item/plant_analyzer,
/obj/structure/sign/warning/electricshock{
pixel_y = 32
},
/turf/open/floor/grass,
/area/security/prison)
-"aaq" = (
+"aap" = (
/obj/machinery/hydroponics/soil,
-/obj/item/seeds/glowshroom,
+/obj/item/seeds/carrot,
/turf/open/floor/grass,
/area/security/prison)
-"aar" = (
+"aaq" = (
/obj/machinery/camera{
c_tag = "Prison Common Room";
network = list("ss13","prison")
@@ -129,6 +130,11 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"aar" = (
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/glowshroom,
+/turf/open/floor/grass,
+/area/security/prison)
"aas" = (
/obj/structure/sign/warning/electricshock{
pixel_y = 32
@@ -156,54 +162,47 @@
/turf/open/floor/grass,
/area/security/prison)
"aax" = (
+/mob/living/simple_animal/mouse/brown/Tom,
/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/grass,
-/area/security/prison)
-"aaA" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"aaB" = (
-/mob/living/simple_animal/mouse/brown/Tom,
+/obj/structure/window/reinforced,
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/potato,
/turf/open/floor/grass,
/area/security/prison)
"aaC" = (
+/obj/machinery/hydroponics/soil,
+/obj/structure/window/reinforced,
+/obj/item/seeds/tower,
+/turf/open/floor/grass,
+/area/security/prison)
+"aaD" = (
+/obj/structure/window/reinforced,
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/grass,
+/turf/open/floor/grass,
+/area/security/prison)
+"aaE" = (
+/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
},
-/obj/effect/turf_decal/tile/green,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/security/prison)
-"aaD" = (
-/obj/structure/window/reinforced,
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/potato,
-/turf/open/floor/grass,
-/area/security/prison)
-"aaE" = (
-/obj/structure/window/reinforced,
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/grass,
-/turf/open/floor/grass,
-/area/security/prison)
"aaF" = (
-/obj/machinery/hydroponics/soil,
/obj/structure/window/reinforced,
-/obj/item/seeds/tower,
+/obj/machinery/hydroponics/soil,
+/obj/item/cultivator,
/turf/open/floor/grass,
/area/security/prison)
"aaG" = (
@@ -226,41 +225,15 @@
/obj/structure/chair/stool,
/turf/open/floor/plasteel,
/area/security/prison)
-"aaL" = (
-/obj/machinery/computer/libraryconsole/bookmanagement,
-/obj/structure/table,
+"aaN" = (
+/obj/structure/chair/sofa/left,
/turf/open/floor/plasteel,
/area/security/prison)
-"aaM" = (
-/obj/structure/falsewall,
-/turf/open/floor/plating,
-/area/security/prison)
-"aaN" = (
-/obj/structure/window/reinforced,
-/obj/machinery/hydroponics/soil,
-/obj/item/cultivator,
-/turf/open/floor/grass,
-/area/security/prison)
"aaO" = (
-/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
- },
+/obj/structure/chair/sofa/right,
/turf/open/floor/plasteel,
/area/security/prison)
"aaP" = (
-/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
@@ -287,18 +260,14 @@
/obj/structure/grille,
/turf/open/space,
/area/space/nearstation)
-"aaU" = (
-/obj/machinery/computer/arcade/minesweeper{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"aaV" = (
-/obj/structure/chair/sofa/right,
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck,
/turf/open/floor/plasteel,
/area/security/prison)
"aaW" = (
-/obj/structure/chair/sofa/left,
+/obj/structure/table/wood,
+/obj/item/storage/pill_bottle/dice,
/turf/open/floor/plasteel,
/area/security/prison)
"aaX" = (
@@ -308,10 +277,6 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"aaY" = (
-/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)
@@ -346,11 +311,11 @@
/turf/open/floor/plasteel,
/area/security/prison)
"abg" = (
-/obj/machinery/computer/arcade{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
},
-/turf/open/floor/plasteel,
-/area/security/prison)
+/turf/closed/wall,
+/area/security/execution/transfer)
"abh" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -363,13 +328,8 @@
/turf/open/floor/plasteel/freezer,
/area/security/prison)
"abj" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/machinery/washing_machine,
+/obj/structure/bedsheetbin/color,
+/obj/structure/table,
/turf/open/floor/plasteel/freezer,
/area/security/prison)
"abk" = (
@@ -484,30 +444,15 @@
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"abx" = (
-/obj/structure/bedsheetbin/color,
-/obj/structure/table,
-/turf/open/floor/plasteel/freezer,
+/obj/machinery/computer/arcade{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
/area/security/prison)
"aby" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/security/execution/transfer)
-"abz" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"abA" = (
/obj/machinery/light,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -546,14 +491,6 @@
"abF" = (
/turf/open/floor/plasteel/freezer,
/area/security/prison)
-"abG" = (
-/obj/machinery/door/window/westleft{
- base_state = "right";
- icon_state = "right";
- name = "Unisex Showers"
- },
-/turf/open/floor/plasteel/freezer,
-/area/security/prison)
"abH" = (
/obj/structure/table,
/obj/item/storage/box/chemimp{
@@ -1133,15 +1070,11 @@
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"acN" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green{
- on = 0;
- pixel_x = -7;
- pixel_y = 12
+/obj/structure/chair/stool{
+ pixel_y = 8
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"acO" = (
/obj/structure/closet/l3closet/security,
/obj/machinery/camera{
@@ -1391,12 +1324,16 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
"adq" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/computer/slot_machine{
+ balance = 15;
+ money = 500;
+ pixel_x = -5
},
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/obj/structure/sign/poster/contraband/robust_softdrinks{
+ pixel_x = -32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"adr" = (
/obj/structure/sign/warning/vacuum/external{
pixel_x = -32
@@ -1759,16 +1696,18 @@
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"aef" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 8
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
+/obj/structure/table,
+/obj/item/restraints/handcuffs,
/turf/open/floor/plasteel,
/area/security/prison)
"aeg" = (
@@ -1938,9 +1877,18 @@
icon_state = "4-8"
},
/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
+/obj/structure/rack,
+/obj/structure/window/reinforced{
dir = 8
},
+/obj/item/gun/energy/pumpaction/blaster{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/obj/item/gun/energy/pumpaction/blaster{
+ pixel_x = 3;
+ pixel_y = -3
+ },
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"aet" = (
@@ -1957,6 +1905,12 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/rack,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/item/storage/box/handcuffs,
+/obj/item/storage/box/handcuffs,
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"aev" = (
@@ -2026,31 +1980,6 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"aeD" = (
-/obj/machinery/door/airlock/security{
- name = "Firing Range";
- req_access_txt = "2"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"aeE" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/prison)
-"aeF" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/security/prison)
"aeG" = (
/obj/structure/cable,
/obj/machinery/power/solar{
@@ -2126,13 +2055,20 @@
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"aeM" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/structure/window/reinforced{
- dir = 4
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/turf/open/floor/plating,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
/area/security/prison)
"aeN" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -2253,6 +2189,7 @@
pixel_x = 3;
pixel_y = -3
},
+/obj/item/storage/toolbox/drone,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
"aeX" = (
@@ -2421,10 +2358,6 @@
},
/turf/open/floor/plasteel,
/area/security/main)
-"afn" = (
-/obj/machinery/suit_storage_unit/security,
-/turf/open/floor/plasteel/showroomfloor,
-/area/security/warden)
"afo" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod Three"
@@ -2445,20 +2378,6 @@
},
/turf/open/space/basic,
/area/space)
-"afq" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/turf/open/floor/plasteel,
-/area/security/prison)
-"afr" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/security/prison)
-"afs" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/prison)
"aft" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 5
@@ -2515,16 +2434,17 @@
/turf/open/floor/plasteel/dark,
/area/security/execution/transfer)
"afz" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/obj/machinery/door/window/westleft{
- base_state = "right";
- dir = 4;
- icon_state = "right";
- name = "Shooting Range"
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
},
-/turf/open/floor/plating,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
/area/security/prison)
"afA" = (
/turf/closed/wall/r_wall,
@@ -2768,16 +2688,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"age" = (
-/obj/machinery/door/window/southleft{
- name = "Target Storage"
- },
-/obj/item/target/clown,
-/obj/item/target/clown,
-/obj/item/target,
-/obj/item/target,
-/turf/open/floor/plating,
-/area/security/prison)
"agf" = (
/obj/structure/table,
/obj/item/stack/sheet/metal,
@@ -2927,16 +2837,6 @@
/obj/machinery/suit_storage_unit/security,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"agv" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/security/prison)
"agw" = (
/obj/structure/table,
/obj/machinery/syndicatebomb/training,
@@ -3066,15 +2966,6 @@
},
/turf/open/floor/plasteel,
/area/security/main)
-"agH" = (
-/obj/machinery/door/window/southright{
- name = "Target Storage"
- },
-/obj/item/target/alien,
-/obj/item/target/alien,
-/obj/item/target/syndicate,
-/turf/open/floor/plating,
-/area/security/prison)
"agI" = (
/obj/machinery/airalarm{
pixel_y = 23
@@ -3204,14 +3095,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/security/warden)
-"agX" = (
-/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" = (
/obj/structure/table,
/obj/item/storage/fancy/donut_box,
@@ -3452,15 +3335,6 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
-"ahw" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/prison)
"ahx" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -3686,18 +3560,11 @@
/turf/open/floor/plasteel/white,
/area/security/brig)
"ahQ" = (
-/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
+/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)
"ahR" = (
@@ -3780,6 +3647,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"ahZ" = (
@@ -3851,11 +3721,20 @@
/turf/open/floor/plasteel/white,
/area/security/brig)
"aie" = (
-/obj/structure/closet/wardrobe/mixed,
-/obj/item/clothing/shoes/jackboots,
-/obj/item/coin/silver,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/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)
"aif" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -4469,7 +4348,7 @@
"ajq" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "1-2"
},
/turf/open/space,
/area/solar/port/fore)
@@ -4482,18 +4361,27 @@
/turf/open/floor/plasteel,
/area/security/processing)
"ajt" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plating,
-/area/security/prison)
-"aju" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
+/obj/structure/sign/warning/securearea{
+ pixel_x = 32
},
-/obj/structure/window/reinforced{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plating,
-/area/security/prison)
+/obj/machinery/camera{
+ c_tag = "Labor Shuttle Dock North"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/security/processing)
+"aju" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/processing)
"ajv" = (
/obj/machinery/light{
dir = 8
@@ -4587,13 +4475,6 @@
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
-"ajC" = (
-/obj/item/storage/toolbox/drone,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/ai_monitored/security/armory)
"ajD" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4802,29 +4683,6 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
-"ajX" = (
-/obj/structure/table,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/recharger,
-/obj/item/gun/energy/laser/practice,
-/obj/item/gun/energy/laser/practice,
-/turf/open/floor/plasteel,
-/area/security/prison)
-"ajY" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/security/prison)
"ajZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external{
@@ -4849,18 +4707,23 @@
/area/security/processing)
"akc" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/security/prison)
+/area/security/processing)
"akd" = (
-/obj/structure/lattice,
-/turf/closed/wall,
-/area/security/prison)
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/security/processing)
"ake" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -5034,13 +4897,13 @@
/turf/open/floor/plasteel,
/area/security/brig)
"aks" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"akt" = (
@@ -5057,23 +4920,19 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aku" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/security/brig)
-"akv" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
"akw" = (
@@ -5102,9 +4961,10 @@
/turf/open/floor/plasteel,
/area/security/courtroom)
"akz" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/vending/snack/random,
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/hallway/primary/fore)
"akA" = (
/obj/structure/chair{
dir = 8;
@@ -5125,44 +4985,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
-"akC" = (
-/obj/machinery/door/airlock/security{
- name = "Labor Shuttle";
- req_access_txt = "2"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/security/processing)
-"akD" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/security/prison)
-"akE" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/processing)
-"akF" = (
-/obj/structure/sign/warning/securearea{
- pixel_x = 32
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Labor Shuttle Dock North"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
-/area/security/processing)
"akG" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -5183,13 +5005,13 @@
/turf/open/floor/plasteel,
/area/security/processing)
"akJ" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/light_switch{
+ pixel_x = 27
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
},
+/obj/machinery/computer/security/labor,
/turf/open/floor/plasteel,
/area/security/processing)
"akK" = (
@@ -5242,6 +5064,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"akP" = (
@@ -5273,6 +5098,9 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"akS" = (
@@ -5298,6 +5126,12 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"akU" = (
@@ -5330,9 +5164,6 @@
name = "Brig";
req_access_txt = "63"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -5340,6 +5171,9 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"akX" = (
@@ -5363,39 +5197,6 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
-"akY" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/security/brig)
-"akZ" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/security/brig)
-"ala" = (
-/obj/machinery/door/window/brigdoor/security/cell{
- id = "Cell 4";
- name = "Cell 4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/brig)
"alb" = (
/obj/structure/chair{
dir = 4;
@@ -5443,19 +5244,6 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
-"alf" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/brig)
-"alg" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/space,
-/area/solar/starboard/fore)
"alh" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -5473,42 +5261,12 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"alj" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/processing)
"alk" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
dir = 1
},
/turf/open/floor/plasteel,
/area/engine/atmos)
-"all" = (
-/obj/machinery/light_switch{
- pixel_x = 27
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/machinery/computer/security/labor,
-/turf/open/floor/plasteel,
-/area/security/processing)
-"alm" = (
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/chair{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/processing)
"aln" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -5520,12 +5278,6 @@
},
/turf/open/floor/plating,
/area/security/processing)
-"alo" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/table,
-/obj/item/storage/box/prisoner,
-/turf/open/floor/plasteel,
-/area/security/processing)
"alp" = (
/turf/open/floor/plating,
/area/security/processing)
@@ -5533,10 +5285,16 @@
/turf/open/floor/plasteel,
/area/security/processing)
"alr" = (
-/obj/structure/target_stake,
-/obj/item/target/syndicate,
-/turf/open/floor/plating,
-/area/security/prison)
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/processing)
"als" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -5587,18 +5345,6 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
-"alx" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"aly" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -5622,11 +5368,6 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/button/flasher{
- id = "brigentry";
- pixel_x = -28;
- pixel_y = -8
- },
/turf/open/floor/plasteel/dark,
/area/security/brig)
"alA" = (
@@ -5668,18 +5409,10 @@
/turf/open/floor/plating,
/area/security/courtroom)
"alE" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/machinery/flasher{
- id = "Cell 4";
- pixel_x = 28
- },
-/obj/machinery/light/small{
- dir = 4
- },
+/obj/machinery/vending/cigarette,
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/hallway/primary/fore)
"alF" = (
/obj/machinery/atmospherics/components/unary/tank/air,
/turf/open/floor/plating,
@@ -5726,19 +5459,18 @@
/turf/open/floor/plasteel,
/area/security/courtroom)
"alK" = (
-/obj/machinery/button/door{
- id = "Room Two";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 7;
- pixel_y = -24;
- specialfunctions = 4
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/chair/comfy/brown{
- dir = 8
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"alL" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/power/apc{
@@ -5753,27 +5485,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"alM" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/power/apc{
- areastring = "/area/security/main";
- dir = 4;
- name = "Firing Range APC";
- pixel_x = 24
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"alN" = (
-/turf/open/space/basic,
-/area/space/nearstation)
"alO" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -5828,44 +5539,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"alY" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Firing Range";
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"alZ" = (
-/obj/structure/table,
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/item/clothing/glasses/sunglasses{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/clothing/glasses/sunglasses{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/clothing/ears/earmuffs{
- pixel_x = -3;
- pixel_y = -2
- },
-/obj/item/clothing/ears/earmuffs{
- pixel_x = -3;
- pixel_y = -2
- },
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"ama" = (
/mob/living/simple_animal/sloth/paperwork,
/turf/open/floor/plasteel,
@@ -5887,22 +5560,10 @@
/area/security/processing)
"amd" = (
/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/button/door{
- id = "PrivateStudy1";
- name = "Privacy Shutters";
- pixel_x = 5;
- pixel_y = 24
- },
-/turf/open/floor/wood,
-/area/library)
+/obj/structure/table,
+/obj/item/storage/box/prisoner,
+/turf/open/floor/plasteel,
+/area/security/processing)
"ame" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -5964,83 +5625,23 @@
/turf/open/floor/plasteel,
/area/security/brig)
"aml" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/button/door{
- desc = "A remote control switch for the medbay foyer.";
- id = "outerbrig";
- name = "Brig Exterior Doors Control";
- normaldoorcontrol = 1;
- pixel_x = -26;
- pixel_y = -5;
- req_access_txt = "63"
- },
-/obj/machinery/button/door{
- desc = "A remote control switch for the medbay foyer.";
- id = "innerbrig";
- name = "Brig Interior Doors Control";
- normaldoorcontrol = 1;
- pixel_x = -26;
- pixel_y = 5;
- req_access_txt = "63"
- },
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-4"
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
-"amm" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "briggate";
- name = "security shutters"
- },
-/obj/machinery/door/window/eastright{
- name = "Brig Desk";
- req_access_txt = "2"
- },
-/obj/item/restraints/handcuffs,
-/obj/item/radio/off,
-/turf/open/floor/plasteel/dark,
-/area/security/brig)
"amn" = (
-/obj/structure/chair/office/dark{
- dir = 4
+/obj/structure/chair/office/dark,
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"amo" = (
-/obj/machinery/flasher{
- id = "brigentry";
- pixel_x = 28
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
/obj/effect/turf_decal/tile/red{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/security/brig)
-"amp" = (
-/obj/structure/closet/secure_closet/brig{
- id = "Cell 4";
- name = "Cell 4 Locker"
- },
-/turf/open/floor/plasteel,
-/area/security/brig)
-"amq" = (
-/obj/structure/bed,
-/obj/item/bedsheet,
-/obj/item/radio/intercom{
- desc = "Talk through this. It looks like it has been modified to not broadcast.";
- name = "Prison Intercom (General)";
- pixel_x = 25;
- pixel_y = -2;
- prison_radio = 1
- },
+/obj/effect/turf_decal/tile/red,
/turf/open/floor/plasteel,
/area/security/brig)
"amr" = (
@@ -6080,9 +5681,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
-"amx" = (
-/turf/closed/wall,
-/area/crew_quarters/abandoned_gambling_den)
"amy" = (
/obj/structure/chair/stool{
pixel_y = 8
@@ -6105,19 +5703,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
-"amB" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/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)
@@ -6164,29 +5749,6 @@
/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,
@@ -6208,18 +5770,9 @@
/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)
+/obj/machinery/suit_storage_unit/security,
+/turf/open/floor/plasteel/showroomfloor,
+/area/security/warden)
"amQ" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -6262,12 +5815,6 @@
name = "Brig Desk";
req_access_txt = "1"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
/turf/open/floor/plasteel/dark,
/area/security/brig)
"amU" = (
@@ -6293,9 +5840,6 @@
name = "Brig Desk";
req_access_txt = "1"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/turf/open/floor/plasteel/dark,
/area/security/brig)
"amW" = (
@@ -6365,21 +5909,11 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"anc" = (
-/obj/machinery/shower{
- dir = 4
- },
-/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{
- lootcount = 2;
- name = "2maintenance loot spawner"
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"ane" = (
@@ -6469,13 +6003,6 @@
},
/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
@@ -6572,28 +6099,20 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"anB" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/sign/warning/securearea{
- pixel_y = 32
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
"anC" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/security/courtroom)
"anD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"anE" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -6639,16 +6158,6 @@
/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
@@ -6847,9 +6356,6 @@
/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
@@ -6945,6 +6451,10 @@
/area/hallway/primary/fore)
"aoz" = (
/obj/effect/turf_decal/tile/red,
+/obj/structure/sign/departments/security{
+ pixel_x = 32;
+ pixel_y = -32
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoA" = (
@@ -6954,6 +6464,9 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/red,
+/obj/structure/chair{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoB" = (
@@ -6962,11 +6475,15 @@
pixel_y = -24
},
/obj/effect/turf_decal/tile/red,
+/obj/structure/chair{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoC" = (
-/obj/machinery/vending/coffee,
/obj/effect/turf_decal/tile/red,
+/obj/structure,
+/obj/item/storage/box/drinkingglasses,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoD" = (
@@ -6979,16 +6496,19 @@
pixel_y = -32
},
/obj/effect/turf_decal/tile/red,
+/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoE" = (
-/obj/machinery/vending/cigarette,
/obj/effect/turf_decal/tile/red,
+/obj/structure,
+/obj/item/storage/box/cups,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoF" = (
-/obj/machinery/vending/snack/random,
/obj/effect/turf_decal/tile/red,
+/obj/structure,
+/obj/machinery/chem_dispenser/drinks,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aoG" = (
@@ -7008,9 +6528,17 @@
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
"aoI" = (
-/obj/structure/fireplace,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/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)
"aoJ" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
@@ -7105,26 +6633,6 @@
/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"
@@ -7273,23 +6781,23 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"apu" = (
-/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/carpet,
-/area/crew_quarters/dorms)
-"apv" = (
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
-"apw" = (
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
+ },
+/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"
},
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"apx" = (
@@ -7349,9 +6857,9 @@
/turf/closed/wall/r_wall,
/area/maintenance/starboard/fore)
"apD" = (
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/machinery/computer/slot_machine,
-/obj/item/coin/iron,
+/obj/structure/closet/wardrobe/mixed,
+/obj/item/clothing/shoes/jackboots,
+/obj/item/coin/silver,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"apE" = (
@@ -7367,15 +6875,6 @@
/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
@@ -7386,12 +6885,6 @@
"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{
@@ -7420,14 +6913,6 @@
/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,
@@ -7438,18 +6923,6 @@
},
/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)
@@ -7465,22 +6938,12 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
-"apX" = (
-/obj/structure/bed,
-/obj/item/bedsheet/random,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
+"apY" = (
+/obj/machinery/light/small{
+ dir = 1
},
/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
@@ -7488,9 +6951,13 @@
/turf/open/floor/wood,
/area/lawoffice)
"aqa" = (
-/obj/machinery/recharge_station,
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/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)
"aqb" = (
/obj/structure/rack,
/obj/item/storage/briefcase,
@@ -7584,22 +7051,26 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"aql" = (
-/obj/structure/mirror{
- pixel_y = 32
- },
-/obj/structure/sink{
- dir = 1;
- pixel_y = 25
- },
-/obj/machinery/light/small{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/dorms)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aqm" = (
-/obj/structure/chair/sofa/right,
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"aqn" = (
/obj/structure/bed,
/obj/machinery/airalarm{
@@ -7619,25 +7090,13 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"aqo" = (
-/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/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)
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
"aqp" = (
/obj/structure/rack,
/obj/item/clothing/suit/fire/firefighter,
@@ -7661,37 +7120,15 @@
},
/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)
-"aqt" = (
/obj/machinery/door/airlock{
- desc = "A small bathroom with a sink, toilet and shower.";
- id_tag = "Bath3";
- name = "Bathroom"
+ id_tag = "Room Two";
+ name = "Room Seven - Luxury Suite"
},
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"aqu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -7743,48 +7180,6 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"aqB" = (
-/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/atmospherics/components/unary/vent_pump/on,
-/obj/structure/chair/comfy/brown{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
-"aqD" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
-"aqE" = (
-/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;
@@ -7793,28 +7188,6 @@
},
/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{
@@ -7840,12 +7213,6 @@
/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{
@@ -7898,14 +7265,6 @@
},
/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{
@@ -7974,13 +7333,6 @@
"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";
@@ -7990,49 +7342,31 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"ari" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/machinery/airalarm{
+ pixel_y = 23
},
-/turf/open/floor/carpet,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
/area/crew_quarters/dorms)
"arj" = (
-/obj/machinery/door/airlock{
- id_tag = "Room Two";
- name = "Room Seven - Luxury Suite"
- },
-/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,
+/turf/closed/wall,
/area/crew_quarters/fitness)
-"arn" = (
-/obj/structure/cable{
- icon_state = "4-8"
+"ark" = (
+/obj/machinery/airalarm{
+ pixel_y = 23
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
+"arm" = (
+/obj/machinery/light/small{
+ dir = 1;
+ light_color = "#ffc1c1"
},
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"aro" = (
/turf/open/floor/engine{
name = "Holodeck Projector Floor"
@@ -8055,31 +7389,26 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"arr" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock/maintenance{
- name = "Dormitories Maintenance";
- req_access_txt = "12"
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
},
/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
-"ars" = (
-/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/wood,
-/area/crew_quarters/dorms)
+/area/maintenance/starboard/fore)
"art" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
+/obj/machinery/light/small{
+ dir = 1
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/camera{
+ c_tag = "Fore Starboard Solar Access"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"aru" = (
/obj/structure/chair/stool,
/turf/open/floor/plating,
@@ -8103,12 +7432,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"ary" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/turf/open/floor/wood,
-/area/crew_quarters/dorms)
"arz" = (
/obj/item/coin/gold,
/obj/item/coin/iron,
@@ -8123,20 +7446,6 @@
"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{
@@ -8224,27 +7533,15 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"arO" = (
-/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)
+/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)
"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,
@@ -8268,7 +7565,7 @@
},
/obj/structure/filingcabinet/employment,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/wood,
@@ -8316,20 +7613,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"asb" = (
-/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/structure/chair/sofa/right,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
"asc" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -8369,11 +7652,29 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"asg" = (
-/obj/structure/chair{
+/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)
"ash" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -8406,29 +7707,31 @@
/turf/open/floor/plating,
/area/security/vacantoffice/b)
"ask" = (
-/obj/machinery/light/small{
- dir = 4;
- light_color = "#d8b1b1"
+/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/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/structure/closet/secure_closet/bar{
- req_access_txt = "25"
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/structure/chair/comfy/brown{
+ dir = 4
},
-/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/bar)
+/area/crew_quarters/dorms)
"asn" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plating,
@@ -8444,66 +7747,18 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
-"asp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/vending/wardrobe/bar_wardrobe,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"asq" = (
-/obj/machinery/light,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"asr" = (
-/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/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)
"ast" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/structure/chair/sofa/left,
+/obj/structure/bed,
+/obj/item/bedsheet/random,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"asu" = (
-/obj/structure/bed,
-/obj/machinery/button/door{
- id = "Dorm5";
- name = "Cabin Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = -25;
- specialfunctions = 4
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/effect/spawner/lootdrop/bedsheet,
/turf/open/floor/wood,
/area/crew_quarters/dorms)
-"asv" = (
-/obj/structure/table,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 3;
- name = "3maintenance loot spawner"
- },
-/obj/structure/light_construct{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"asw" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -8537,10 +7792,6 @@
"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)
@@ -8548,13 +7799,6 @@
/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{
@@ -8598,31 +7842,13 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"asL" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plating,
-/area/space/nearstation)
-"asM" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"asN" = (
-/obj/machinery/light/small{
- dir = 1
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
},
-/obj/machinery/camera{
- c_tag = "Fore Starboard Solar Access"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"asO" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
@@ -8656,59 +7882,24 @@
},
/turf/open/floor/plasteel,
/area/security/vacantoffice/b)
-"asV" = (
-/obj/machinery/power/apc{
- areastring = "/area/maintenance/starboard/fore";
- dir = 1;
- name = "Starboard Bow Maintenance APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
"asW" = (
-/obj/structure/table/wood,
-/obj/item/storage/box/evidence,
-/obj/item/hand_labeler{
- pixel_x = 5
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/item/taperecorder,
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
-"asX" = (
-/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/dorms)
-"asY" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/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)
"asZ" = (
-/obj/structure/chair/sofa/left,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
+/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)
"ata" = (
@@ -8748,14 +7939,11 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"atf" = (
-/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/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"atg" = (
/obj/machinery/door/airlock{
id_tag = "Dorm4";
@@ -8795,17 +7983,6 @@
},
/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)
@@ -8850,13 +8027,7 @@
/turf/open/floor/plating,
/area/security/vacantoffice/b)
"att" = (
-/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
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"atu" = (
@@ -8900,19 +8071,6 @@
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,
@@ -9010,20 +8168,6 @@
},
/turf/closed/wall,
/area/maintenance/port/fore)
-"atQ" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/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,
@@ -9032,16 +8176,6 @@
"atS" = (
/turf/closed/wall,
/area/space/nearstation)
-"atT" = (
-/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{
@@ -9050,49 +8184,34 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"atV" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- pixel_y = 5
- },
-/obj/structure/chair/sofa{
- dir = 1
- },
-/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/atmospherics/components/unary/vent_pump/on{
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"aua" = (
-/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/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/fitness)
"aub" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/yellow,
@@ -9112,12 +8231,6 @@
},
/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,
@@ -9220,60 +8333,35 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/fore)
-"aup" = (
-/obj/structure/table/wood/fancy,
-/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;
- 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/structure/table/wood/fancy/black,
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/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)
-"aus" = (
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
-/obj/effect/turf_decal/tile/neutral{
+"aut" = (
+/obj/structure/chair/comfy/black{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aut" = (
-/obj/machinery/door/airlock{
- id_tag = "Room One";
- name = "Room Six - Luxury Suite"
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -29
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/dorms)
-"auu" = (
-/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/wood,
+/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"auv" = (
-/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/chair/comfy/black{
+ dir = 8
},
-/turf/open/floor/wood,
+/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"auw" = (
/obj/structure/bed,
@@ -9294,79 +8382,40 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"aux" = (
-/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/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"auz" = (
-/obj/machinery/light/small,
-/obj/machinery/atmospherics/components/unary/tank/air{
+/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/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/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" = (
+"auB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
+/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/crew_quarters/dorms)
+/area/crew_quarters/fitness)
"auD" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
@@ -9428,21 +8477,6 @@
},
/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,
@@ -9454,43 +8488,38 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"auR" = (
-/turf/closed/wall,
-/area/crew_quarters/fitness)
-"auS" = (
-/obj/machinery/camera{
- c_tag = "Holodeck"
- },
-/obj/machinery/airalarm{
- pixel_y = 24
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/obj/machinery/light{
dir = 8
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 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/fitness)
+/area/crew_quarters/dorms)
"auT" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"auU" = (
-/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/supply/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
"auX" = (
/obj/structure/mirror{
icon_state = "mirror_broke";
@@ -9557,8 +8586,12 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"avg" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
+/obj/machinery/door/airlock{
+ id_tag = "Dorm5";
+ name = "Room Four"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"avh" = (
/obj/structure/cable{
@@ -9588,7 +8621,7 @@
/area/maintenance/fore)
"avj" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable{
@@ -9608,19 +8641,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"avl" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"avm" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
"avn" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel,
+/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)
"avo" = (
/obj/structure/sign/warning/electricshock,
@@ -9665,64 +8692,75 @@
/turf/open/floor/plating,
/area/maintenance/fore)
"avt" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"avu" = (
-/obj/structure/chair/sofa/left{
- dir = 1
- },
-/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/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)
-"avz" = (
-/obj/machinery/computer/holodeck{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"avA" = (
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/structure/chair/sofa/right{
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"avv" = (
+/obj/machinery/camera{
+ c_tag = "Dorms West"
+ },
+/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
},
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/crew_quarters/dorms)
+"avw" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance{
+ name = "Dormitories Maintenance";
+ req_access_txt = "12"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"avy" = (
+/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/dorms)
+"avz" = (
+/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)
+"avA" = (
+/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)
"avB" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -9731,20 +8769,17 @@
/turf/open/floor/plating,
/area/ai_monitored/security/armory)
"avC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+/obj/structure/chair{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"avD" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/machinery/computer/holodeck{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"avE" = (
/obj/machinery/door/poddoor/preopen{
id = "maint3"
@@ -9855,17 +8890,22 @@
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"avR" = (
-/obj/structure/table/wood/poker,
-/obj/item/clothing/mask/cigarette/cigar{
- pixel_x = 3;
- pixel_y = 3
+/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/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- pixel_y = 5
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"avS" = (
/obj/item/wrench,
/turf/open/floor/plating,
@@ -10078,65 +9118,54 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"awo" = (
-/obj/structure/chair/comfy/black{
- dir = 4
- },
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -29
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"awp" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
+/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)
+"awp" = (
+/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/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"awq" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"awr" = (
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aws" = (
-/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
- },
/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)
-"awu" = (
-/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,
+"awr" = (
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"awv" = (
+/area/crew_quarters/dorms)
+"awt" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/structure/sign/warning/fire{
desc = "A sign that states the labeled room's number.";
- dir = 8;
+ dir = 6;
icon_state = "roomnum";
- name = "Room Number 4";
+ name = "Room Number 5";
pixel_y = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -10147,8 +9176,33 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
+"awu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"awv" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/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)
"aww" = (
/obj/effect/landmark/event_spawn,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"awx" = (
@@ -10161,62 +9215,101 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awy" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/carpet,
-/area/crew_quarters/dorms)
-"awz" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
dir = 5
},
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"awA" = (
-/obj/machinery/door/airlock{
- id_tag = "Dorm5";
- name = "Room Four"
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"awz" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/dark,
+/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/dorms)
+"awA" = (
+/obj/machinery/holopad,
+/obj/machinery/camera{
+ c_tag = "Dorms Central"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/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)
"awB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/closet{
+ name = "Holodeck Outfits"
+ },
+/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)
"awC" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/structure/table,
+/obj/item/paper/fluff/holodeck/disclaimer,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"awD" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awE" = (
-/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)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"awF" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/maintenance{
@@ -10261,30 +9354,23 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awL" = (
-/obj/structure/table,
-/obj/item/instrument/guitar{
- pixel_x = -7
+/obj/structure/table/glass,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 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,
+/obj/item/pen,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"awM" = (
-/obj/machinery/button/door{
- id = "maintdiy";
- name = "Shutters Control Button";
- pixel_x = -6;
- pixel_y = 24
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/area/maintenance/starboard/fore)
"awN" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -10380,14 +9466,6 @@
/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
@@ -10451,15 +9529,6 @@
},
/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
@@ -10547,6 +9616,9 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plating,
/area/maintenance/fore)
"axr" = (
@@ -10559,6 +9631,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plating,
/area/maintenance/fore)
"axs" = (
@@ -10568,6 +9643,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plating,
/area/maintenance/fore)
"axt" = (
@@ -10661,11 +9739,15 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"axC" = (
-/obj/effect/turf_decal/tile/red{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/structure/sign/poster/official/enlist{
- pixel_y = 32
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_x = -32
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
@@ -10676,16 +9758,15 @@
/turf/closed/wall,
/area/maintenance/fore/secondary)
"axE" = (
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 8;
- name = "8maintenance loot spawner"
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
},
-/obj/item/radio/intercom{
- pixel_y = 25
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/poster/official/do_not_question{
+ pixel_x = 32
},
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"axF" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
@@ -10723,12 +9804,6 @@
},
/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
@@ -10736,189 +9811,63 @@
/turf/closed/wall,
/area/maintenance/port/fore)
"axL" = (
-/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";
+/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/fitness)
-"axM" = (
-/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/chair/comfy/black{
- dir = 8
- },
-/turf/open/floor/carpet,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"axO" = (
-/obj/machinery/light/small,
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/dorms)
-"axP" = (
-/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/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 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)
-"axR" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/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)
-"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/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
+/obj/structure/chair/comfy/black,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"axP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"axS" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"axT" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"axW" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"axX" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
},
-/obj/machinery/light/small,
-/turf/open/floor/carpet,
+/turf/open/floor/plasteel,
/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
+"aya" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"aya" = (
-/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/dorms)
"ayb" = (
-/obj/structure/chair{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
@@ -11092,23 +10041,9 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/fore)
-"ayB" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/maintenance/fore)
"ayC" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
+/turf/closed/wall,
/area/maintenance/fore)
"ayD" = (
/obj/structure/cable{
@@ -11168,6 +10103,12 @@
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/eva)
"ayM" = (
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel,
+/area/ai_monitored/storage/eva)
+"ayN" = (
/obj/structure/rack,
/obj/machinery/light{
dir = 1
@@ -11180,12 +10121,6 @@
/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{
@@ -11284,45 +10219,36 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"ayY" = (
-/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/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/obj/structure/sign/poster/contraband/pwr_game{
+/obj/structure/sign/poster/official/obey{
pixel_x = -32
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"ayZ" = (
+/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)
"aza" = (
-/obj/machinery/vr_sleeper{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/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)
+/obj/structure/table/wood/poker,
+/obj/item/toy/cards/deck,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"azb" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
+/obj/structure/table/wood/poker,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"azc" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -11335,23 +10261,20 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"azd" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/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{
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"azf" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
+"azg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/red{
@@ -11360,44 +10283,12 @@
/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)
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"azi" = (
/obj/machinery/door/airlock/maintenance{
name = "Garden Maintenance";
@@ -11406,83 +10297,26 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"azj" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/closet{
- name = "Holodeck Outfits"
- },
-/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 = 8;
- pixel_x = -24
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
"azk" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/machinery/light/small{
- dir = 4;
- light_color = "#d8b1b1"
- },
+/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"azl" = (
-/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)
-"azm" = (
-/obj/machinery/shower{
- dir = 4
- },
-/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
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
},
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"azp" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
},
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "holoprivacy";
- name = "Holodeck Shutters"
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
"azq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -11600,15 +10434,15 @@
/turf/closed/wall,
/area/maintenance/port/fore)
"azH" = (
-/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/space,
-/area/space/nearstation)
+/turf/closed/wall,
+/area/crew_quarters/theatre)
"azI" = (
-/obj/structure/lattice,
+/obj/structure/table/wood,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/space,
-/area/space/nearstation)
+/obj/item/instrument/eguitar,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"azJ" = (
/obj/machinery/gateway{
dir = 9
@@ -11684,27 +10518,6 @@
},
/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"
@@ -11743,9 +10556,11 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"azT" = (
-/obj/effect/landmark/event_spawn,
-/turf/closed/wall,
-/area/crew_quarters/fitness)
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"azU" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -11758,39 +10573,15 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
-"azV" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/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
- },
-/area/crew_quarters/fitness)
"azW" = (
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"azX" = (
-/obj/machinery/vr_sleeper{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
},
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/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)
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"azY" = (
/obj/structure/table,
/obj/item/radio/off,
@@ -11810,27 +10601,22 @@
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"aAb" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/obj/machinery/door/airlock{
+ id_tag = "Dorm2";
+ name = "Room One"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"aAc" = (
/obj/effect/spawner/structure/window,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aAd" = (
-/obj/machinery/camera{
- c_tag = "Dorms West"
- },
-/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/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aAe" = (
@@ -11840,45 +10626,15 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"aAf" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/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/machinery/vr_sleeper{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/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/machinery/door/airlock/maintenance{
- req_access_txt = "12"
+/obj/structure/chair/comfy/brown{
+ dir = 1
},
-/turf/open/floor/plating,
-/area/crew_quarters/fitness)
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"aAj" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -11894,87 +10650,56 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aAk" = (
-/obj/structure/closet/athletic_mixed,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"aAl" = (
-/obj/structure/closet/boxinggloves,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
-"aAm" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Holodeck Door"
+/obj/structure/disposalpipe/segment{
+ dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/fitness)
-"aAn" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aAl" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"aAn" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"aAo" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/dorms)
"aAp" = (
-/obj/structure/closet{
- name = "Suit Closet"
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
},
-/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)
+/area/crew_quarters/dorms)
"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)
-"aAt" = (
-/obj/machinery/door/poddoor/preopen{
- id = "maint2"
+/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)
-"aAu" = (
-/obj/structure/cable{
- icon_state = "4-8"
+"aAs" = (
+/obj/structure/piano{
+ icon_state = "piano"
},
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"aAt" = (
/obj/machinery/door/poddoor/preopen{
id = "maint2"
},
@@ -12118,16 +10843,6 @@
},
/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"
@@ -12203,11 +10918,20 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aAX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/light{
+ dir = 8
+ },
+/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/fitness)
+/area/crew_quarters/dorms)
"aAY" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -12215,11 +10939,27 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"aAZ" = (
-/obj/structure/urinal{
- pixel_y = 32
+/obj/structure/table/wood,
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
},
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
+/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)
"aBa" = (
/turf/closed/wall/r_wall,
/area/ai_monitored/nuke_storage)
@@ -12422,41 +11162,46 @@
/turf/open/floor/plasteel,
/area/hydroponics/garden)
"aBx" = (
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/obj/machinery/shower{
+ dir = 8;
+ pixel_y = -4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"aBy" = (
-/obj/machinery/camera{
- c_tag = "Library North"
+/obj/machinery/door/airlock{
+ desc = "A small bathroom with a sink, toilet and shower.";
+ id_tag = "Bath3";
+ name = "Bathroom"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/chair/sofa/right,
-/obj/machinery/light{
- dir = 1;
- light_color = "#c1caff"
- },
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aBz" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/effect/landmark/start/assistant,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/shower{
dir = 4
},
-/obj/structure/chair/sofa/left,
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"aBA" = (
-/obj/structure/chair/comfy/brown{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/wood,
-/area/library)
+/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)
"aBB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
@@ -12472,12 +11217,6 @@
/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,
@@ -12526,13 +11265,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"aBM" = (
-/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,
@@ -12565,13 +11297,6 @@
"aBR" = (
/turf/closed/wall/r_wall,
/area/storage/primary)
-"aBS" = (
-/obj/machinery/light_switch{
- pixel_y = 28
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/circuit,
-/area/ai_monitored/nuke_storage)
"aBT" = (
/obj/machinery/computer/bank_machine,
/obj/effect/turf_decal/bot_white,
@@ -12588,27 +11313,20 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/nuke_storage)
"aBU" = (
-/obj/machinery/power/apc{
- areastring = "/area/ai_monitored/nuke_storage";
- dir = 1;
- name = "Vault APC";
- pixel_y = 25
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/circuit,
-/area/ai_monitored/nuke_storage)
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"aBV" = (
-/obj/machinery/airalarm{
- pixel_y = 23
- },
-/obj/machinery/light{
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/turf/open/floor/circuit,
-/area/ai_monitored/nuke_storage)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"aBW" = (
/obj/structure/filingcabinet,
/obj/item/folder/documents,
@@ -12713,27 +11431,9 @@
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
"aCe" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/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/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/sign/poster/official/obey{
- pixel_x = -32
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/crew_quarters/toilet)
"aCg" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -12741,14 +11441,11 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aCh" = (
-/obj/machinery/shower{
- dir = 8;
- pixel_y = -4
+/obj/machinery/vending/autodrobe,
+/turf/open/floor/plasteel/white/side{
+ dir = 4
},
-/obj/effect/landmark/xeno_spawn,
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/area/crew_quarters/theatre)
"aCi" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -12774,51 +11471,17 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"aCm" = (
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/obj/machinery/camera{
- c_tag = "Theatre Stage"
- },
-/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/machinery/door/airlock{
+ name = "Unisex Restrooms"
},
-/obj/item/reagent_containers/food/condiment/peppermill{
- dir = 1;
- pixel_x = 3;
- pixel_y = 20
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/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)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"aCp" = (
/obj/machinery/camera{
c_tag = "Arrivals North";
@@ -12832,12 +11495,6 @@
},
/turf/open/floor/plasteel/white/corner,
/area/hallway/secondary/entry)
-"aCq" = (
-/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)
@@ -12861,24 +11518,25 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aCu" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "holoprivacy";
- name = "Holodeck Shutters"
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness)
"aCv" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+/obj/machinery/vr_sleeper{
+ dir = 8
},
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "holoprivacy";
- name = "Holodeck Shutters"
+/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
},
-/turf/open/floor/plating,
/area/crew_quarters/fitness)
"aCw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -12891,23 +11549,17 @@
},
/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/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
},
-/obj/machinery/firealarm{
- pixel_y = 24
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "holoprivacy";
+ name = "Holodeck Shutters"
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/crew_quarters/fitness)
"aCz" = (
/obj/structure/window/reinforced{
dir = 8
@@ -12918,11 +11570,19 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aCA" = (
-/obj/structure/chair/comfy/brown{
- dir = 1
+/obj/structure/grille/broken,
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/turf/open/floor/wood,
-/area/library)
+/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)
"aCB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -13052,13 +11712,6 @@
"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,
@@ -13070,23 +11723,6 @@
},
/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,
@@ -13185,14 +11821,14 @@
/turf/open/floor/plasteel,
/area/hydroponics/garden)
"aDh" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/sign/poster/official/space_cops{
- pixel_x = -32
+/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,
-/area/hallway/primary/fore)
+/area/storage/primary)
"aDi" = (
/obj/structure/window/reinforced,
/turf/open/floor/plasteel/dark,
@@ -13299,27 +11935,11 @@
},
/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
- },
-/obj/effect/turf_decal/bot_white/left,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
+/obj/structure/window/reinforced,
+/obj/structure/chair/stool,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"aDw" = (
/obj/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -13400,33 +12020,44 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aDG" = (
-/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/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/effect/spawner/structure/window,
-/turf/open/floor/wood,
-/area/library)
+/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)
"aDH" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green,
-/obj/item/pen/fountain/captain,
-/turf/open/floor/carpet,
-/area/crew_quarters/heads/captain)
+/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/pen/fountain,
+/obj/item/stamp/rd{
+ pixel_x = 3;
+ pixel_y = -2
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/heads/hor)
"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 "
@@ -13439,147 +12070,90 @@
/turf/open/floor/plasteel,
/area/crew_quarters/cryopod)
"aDL" = (
+/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)
+"aDM" = (
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"aDN" = (
+/obj/machinery/camera{
+ c_tag = "Bathrooms";
+ dir = 1
+ },
+/obj/structure/urinal{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"aDP" = (
+/obj/machinery/shower{
+ dir = 8;
+ pixel_y = -4
+ },
+/obj/effect/landmark/xeno_spawn,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
+"aDQ" = (
/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"
+ desc = "A small bathroom with a sink, toilet and shower.";
+ id_tag = "Bath1";
+ name = "Bathroom"
},
/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
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aDQ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"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"
+ dir = 1
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
"aDT" = (
-/obj/structure/table/wood/fancy,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4;
- pixel_y = 5
- },
-/obj/item/reagent_containers/food/snacks/burger/plain,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aDU" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/condiment/saltshaker{
- pixel_x = -3;
- pixel_y = 9
- },
-/obj/item/reagent_containers/food/condiment/peppermill{
+/obj/item/soap,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light/small{
dir = 1;
- pixel_x = 3;
- pixel_y = 9
+ light_color = "#ffc1c1"
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aDV" = (
-/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/holopad,
-/obj/machinery/camera{
- c_tag = "Dorms Central"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/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/structure/chair/sofa{
- dir = 1
- },
-/obj/structure/window,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aDY" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
- },
-/obj/structure/mirror{
- pixel_x = 25
- },
-/turf/open/floor/mineral/titanium/blue,
+/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
+"aDU" = (
+/obj/machinery/shower{
+ dir = 4
+ },
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
+"aDY" = (
+/obj/structure/window{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aDZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -13607,18 +12181,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"aEb" = (
-/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/port)
"aEc" = (
-/obj/structure/chair/wood/wings,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aEd" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -13715,116 +12283,6 @@
/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";
@@ -14086,79 +12544,44 @@
/turf/closed/wall/r_wall,
/area/ai_monitored/storage/eva)
"aFd" = (
-/obj/structure/table/wood,
-/obj/item/instrument/guitar{
- pixel_x = -7
- },
-/obj/item/instrument/eguitar{
- pixel_x = 5
- },
-/obj/item/instrument/violin,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aFe" = (
-/obj/machinery/door/airlock{
- id_tag = "Dorm2";
- name = "Room One"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"aFf" = (
-/obj/structure/piano{
- icon_state = "piano"
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aFg" = (
-/obj/structure/chair/comfy/black{
- dir = 8
- },
-/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/structure/table/reinforced,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+"aFe" = (
+/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/stripes/line,
+/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)
+"aFk" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
/area/crew_quarters/bar)
"aFl" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/festivus{
+ anchored = 1;
+ desc = "A pole for dancing.";
+ name = "pole"
},
-/obj/structure/dresser,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/theatre)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aFm" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -14180,17 +12603,10 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aFp" = (
-/obj/machinery/door/window/southright{
- name = "Bar Door";
- req_one_access_txt = "25;28"
- },
-/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)
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"aFq" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -14223,20 +12639,6 @@
/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)
@@ -14289,36 +12691,6 @@
/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
@@ -14463,12 +12835,6 @@
},
/turf/open/floor/plasteel,
/area/storage/primary)
-"aFS" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/storage/primary)
"aFT" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -14476,8 +12842,8 @@
/turf/open/floor/plasteel,
/area/storage/primary)
"aFU" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/storage/primary)
@@ -14564,30 +12930,9 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/nuke_storage)
-"aGe" = (
-/obj/structure/safe,
-/obj/item/clothing/head/bearpelt,
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
-/obj/item/gun/ballistic/revolver/russian,
-/obj/item/ammo_box/a357,
-/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka,
-/obj/effect/turf_decal/bot_white/left,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
"aGf" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -14610,48 +12955,50 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"aGk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/structure/toilet{
+ dir = 4
},
-/turf/open/floor/plating,
-/area/space/nearstation)
+/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)
"aGl" = (
-/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"
+/obj/machinery/door/airlock{
+ desc = "A small bathroom with a sink, toilet and shower.";
+ id_tag = "Bath2";
+ name = "Bathroom"
},
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aGm" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"aGn" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
+/obj/structure/cable,
+/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/toilet";
+ dir = 4;
+ name = "Dormitory Bathrooms APC";
+ pixel_x = 26
},
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/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)
"aGo" = (
/obj/structure/table,
/obj/item/stack/sheet/rglass{
@@ -14670,12 +13017,6 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
-"aGp" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hydroponics)
"aGq" = (
/obj/item/stack/sheet/plasteel{
amount = 10
@@ -14727,13 +13068,21 @@
/turf/closed/wall,
/area/crew_quarters/theatre)
"aGw" = (
-/obj/machinery/seed_extractor,
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aGx" = (
-/obj/machinery/biogenerator,
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
+/obj/item/radio/intercom{
+ pixel_x = -25
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aGy" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -14751,9 +13100,6 @@
/obj/structure/disposalpipe/segment{
dir = 5
},
-/obj/structure/cable{
- icon_state = "2-4"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -14891,12 +13237,6 @@
},
/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"
@@ -14937,10 +13277,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/chapel/office)
-"aGP" = (
-/obj/machinery/vending/hydronutrients,
-/turf/open/floor/plasteel/dark,
-/area/hydroponics)
"aGQ" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -14953,12 +13289,6 @@
},
/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"
@@ -15050,33 +13380,14 @@
/area/hallway/secondary/entry)
"aHb" = (
/obj/structure/table/wood,
-/obj/item/paper_bin/bundlenatural{
- pixel_x = 6;
- pixel_y = 4
- },
/obj/item/paper_bin{
- pixel_x = -6;
- pixel_y = 4
+ pixel_x = 1;
+ pixel_y = 9
},
-/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/stack/packageWrap,
/obj/item/pen/fourcolor,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aHc" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/effect/landmark/start/botanist,
-/turf/open/floor/plasteel,
-/area/hydroponics)
+/turf/open/floor/wood,
+/area/library)
"aHd" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -15183,34 +13494,6 @@
/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
@@ -15289,12 +13572,11 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
"aHD" = (
-/obj/structure/chair/comfy/beige{
- dir = 8
+/obj/structure/chair/stool{
+ pixel_y = 8
},
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/plasteel/grimy,
-/area/hallway/secondary/entry)
+/turf/open/floor/plasteel,
+/area/storage/primary)
"aHE" = (
/obj/structure/table,
/obj/item/weldingtool,
@@ -15309,26 +13591,6 @@
/obj/structure/sign/warning/securearea,
/turf/closed/wall/r_wall,
/area/ai_monitored/nuke_storage)
-"aHG" = (
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/machinery/door/airlock/vault{
- req_access_txt = "53"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/nuke_storage)
"aHH" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -15460,68 +13722,25 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"aHU" = (
-/obj/structure/extinguisher_cabinet{
- pixel_y = -30
- },
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
"aHV" = (
-/obj/machinery/airalarm{
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1;
- pixel_y = -22
+ pixel_x = 5
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aHW" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+/obj/machinery/light/small{
dir = 4
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
-"aHX" = (
-/obj/machinery/light{
- dir = 1
+/obj/structure/table/glass,
+/obj/item/razor{
+ pixel_x = 2;
+ pixel_y = 3
},
-/obj/structure/table/wood/fancy,
-/obj/item/reagent_containers/food/condiment/peppermill{
- pixel_x = -9
- },
-/obj/item/reagent_containers/food/condiment/peppermill{
- dir = 1;
- pixel_x = -3
- },
-/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/pack/ketchup{
- pixel_x = 5
- },
-/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)
+/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)
"aHY" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -15529,12 +13748,11 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aHZ" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/structure/sign/poster/contraband/fun_police{
- pixel_x = 32
+/obj/machinery/light/small{
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aIa" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -15543,13 +13761,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aIb" = (
-/obj/machinery/power/apc{
- areastring = "/area/crew_quarters/theatre";
- dir = 8;
- name = "Theatre APC";
- pixel_x = -25
- },
-/obj/structure/cable,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
@@ -15613,12 +13824,6 @@
},
/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"
@@ -15697,15 +13902,37 @@
/turf/closed/wall,
/area/hydroponics)
"aIr" = (
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
-"aIs" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
+/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/button/door{
+ id = "PrivateStudy1";
+ name = "Privacy Shutters";
+ pixel_x = 5;
+ pixel_y = 24
},
-/obj/structure/chair/comfy/brown,
/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/area/library)
+"aIs" = (
+/obj/machinery/camera{
+ c_tag = "Library North"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/sofa/right,
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#c1caff"
+ },
+/turf/open/floor/wood,
+/area/library)
"aIt" = (
/turf/open/floor/wood,
/area/library)
@@ -15725,11 +13952,16 @@
/turf/open/floor/wood,
/area/library)
"aIw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+/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/crew_quarters/bar)
+/area/library)
"aIx" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -15740,21 +13972,19 @@
/turf/open/floor/wood,
/area/library)
"aIy" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
},
-/obj/item/stack/packageWrap,
-/obj/item/pen/fourcolor,
-/turf/open/floor/wood,
-/area/library)
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"aIz" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
-"aIA" = (
+"aIB" = (
/obj/structure/bodycontainer/crematorium{
id = "crematoriumChapel"
},
@@ -15763,14 +13993,6 @@
},
/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" = (
/obj/effect/landmark/start/chaplain,
/obj/structure/chair,
@@ -15792,15 +14014,6 @@
/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,
@@ -15886,7 +14099,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,
@@ -15975,29 +14188,6 @@
/obj/machinery/disposal/bin,
/turf/open/floor/plasteel,
/area/storage/primary)
-"aJd" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/hallway/primary/port)
-"aJe" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/port)
"aJf" = (
/obj/machinery/camera{
c_tag = "EVA South";
@@ -16059,13 +14249,12 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aJk" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock{
+ name = "Bar Back Room"
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/bar)
"aJl" = (
/obj/structure/tank_dispenser/oxygen,
/obj/machinery/light{
@@ -16077,11 +14266,10 @@
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
"aJm" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/vending/wardrobe/bar_wardrobe,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aJn" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -16163,17 +14351,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aJv" = (
-/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;
+/obj/structure/sign/poster/official/nanomichi_ad{
pixel_y = 32
},
-/turf/open/floor/plasteel,
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plasteel/dark,
/area/hallway/primary/central)
"aJw" = (
/turf/closed/wall,
@@ -16194,9 +14376,20 @@
/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)
+/obj/machinery/button/door{
+ id = "Bath3";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 14;
+ pixel_y = 38;
+ specialfunctions = 4
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/recharge_station,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
"aJA" = (
/obj/machinery/door/airlock/maintenance{
name = "Kitchen Maintenance";
@@ -16228,12 +14421,15 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aJE" = (
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
+/obj/structure/closet/secure_closet/bar{
+ req_access_txt = "25"
},
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/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/bar)
"aJF" = (
/obj/machinery/newscaster{
pixel_x = 30
@@ -16270,11 +14466,12 @@
/turf/closed/wall,
/area/crew_quarters/kitchen)
"aJJ" = (
-/obj/structure/table/wood,
-/obj/item/folder/yellow,
-/obj/item/pen/blue,
-/turf/open/floor/wood,
-/area/library)
+/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)
"aJK" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=2";
@@ -16296,28 +14493,6 @@
/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,
-/turf/open/floor/plasteel,
-/area/hydroponics)
-"aJP" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp{
pixel_y = 10
@@ -16329,32 +14504,30 @@
},
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
-"aJQ" = (
-/obj/machinery/light{
- dir = 8
- },
-/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
- },
+"aJO" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder,
/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{
+/area/hydroponics)
+"aJP" = (
+/obj/structure/table/wood,
+/obj/item/folder/yellow,
+/obj/item/pen/blue,
+/turf/open/floor/wood,
+/area/library)
+"aJQ" = (
+/obj/structure/chair/comfy/brown{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/wood,
+/area/library)
+"aJR" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/library)
"aJS" = (
/obj/structure/table/wood,
/obj/structure/disposalpipe/segment,
@@ -16441,8 +14614,8 @@
},
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
-/turf/open/floor/plating,
-/area/hallway/primary/port)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"aKc" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/command{
@@ -16488,30 +14661,6 @@
},
/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,
@@ -16554,24 +14703,27 @@
/turf/open/floor/plating,
/area/storage/primary)
"aKq" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
+/obj/item/radio/intercom{
+ pixel_y = 25
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aKr" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/camera{
+ c_tag = "Theatre Stage"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/structure/chair/comfy/brown{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aKr" = (
+/obj/machinery/vending/snack/orange,
+/obj/machinery/light{
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/structure/sign/poster/contraband/donut_corp{
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKs" = (
/obj/structure/disposalpipe/segment,
/obj/effect/spawner/structure/window,
@@ -16585,15 +14737,15 @@
icon_state = "0-8"
},
/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/hallway/primary/port)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"aKu" = (
/obj/structure/cable{
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/hallway/primary/port)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"aKv" = (
/obj/structure/cable,
/obj/structure/cable{
@@ -16603,8 +14755,8 @@
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/hallway/primary/port)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"aKw" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -16626,15 +14778,18 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/door/airlock/public/glass{
+ name = "Central Access"
+ },
/turf/open/floor/plasteel/dark,
-/area/hallway/primary/port)
+/area/crew_quarters/theatre)
"aKx" = (
/obj/structure/cable{
icon_state = "0-8"
},
/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/hallway/primary/port)
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/theatre)
"aKy" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -16710,22 +14865,12 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aKJ" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -29
+/obj/machinery/vending/cola/black,
+/obj/structure/sign/poster/contraband/sun_kist{
+ pixel_y = 32
},
-/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,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/closet/secure_closet/hydroponics,
@@ -16748,46 +14893,45 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aKM" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/chair/comfy/brown{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 20
},
-/obj/structure/chair/comfy/brown,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 20
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKO" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
},
-/obj/structure/chair/comfy/black,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKP" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
+/obj/structure/disposalpipe/segment{
+ dir = 5
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/dorms)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKQ" = (
/obj/machinery/reagentgrinder,
/obj/structure/table/wood,
@@ -16797,13 +14941,14 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"aKS" = (
-/obj/effect/turf_decal/tile/red,
-/obj/structure/sign/departments/security{
- pixel_x = 32;
- pixel_y = -32
+/obj/machinery/camera{
+ c_tag = "Bar Storage"
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/fore)
+/obj/structure/sink/kitchen{
+ pixel_y = 28
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aKT" = (
/obj/structure/closet/secure_closet/freezer/meat,
/turf/open/floor/plasteel/showroomfloor,
@@ -16923,10 +15068,6 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/library)
-"aLh" = (
-/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,
@@ -17002,23 +15143,6 @@
},
/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
@@ -17035,7 +15159,7 @@
/area/construction/mining/aux_base)
"aLv" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -17179,18 +15303,18 @@
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"aLQ" = (
-/obj/structure/cable,
-/obj/machinery/power/apc{
- areastring = "/area/crew_quarters/toilet";
- dir = 4;
- name = "Dormitory Bathrooms APC";
- pixel_x = 26
+/obj/machinery/camera{
+ c_tag = "Central Hallway North-East"
},
-/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)
+/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)
"aLR" = (
/obj/machinery/newscaster{
pixel_y = 32
@@ -17203,13 +15327,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"aLS" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk,
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/crew_quarters/theatre)
"aLT" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/stripes/corner{
@@ -17299,12 +15416,18 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aMg" = (
-/obj/machinery/vending/cola/pwr_game,
-/obj/structure/sign/poster/contraband/pwr_game{
+/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/crew_quarters/locker)
+/area/hallway/primary/central)
"aMh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -17357,34 +15480,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"aMp" = (
-/obj/effect/landmark/blobstart,
-/turf/open/floor/plating,
-/area/maintenance/department/electrical)
"aMq" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
+/obj/structure/sign/poster/contraband/space_cola{
+ pixel_x = -32
},
-/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)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aMr" = (
-/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)
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"aMs" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -17406,33 +15510,23 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aMu" = (
-/obj/machinery/camera{
- c_tag = "Bathrooms";
- dir = 1
- },
-/obj/structure/urinal{
- pixel_y = 32
- },
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
-"aMv" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aMw" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
+/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)
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/hallway/primary/central)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aMx" = (
-/obj/machinery/door/airlock{
- name = "Shower Room"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/toilet)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aMy" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -17465,21 +15559,13 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aMB" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/obj/structure/reagent_dispensers/keg/mead,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aMC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light_switch{
- pixel_y = -25
- },
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/obj/structure/reagent_dispensers/keg/gargle,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aMD" = (
/obj/machinery/icecream_vat,
/turf/open/floor/plasteel/showroomfloor,
@@ -17504,31 +15590,11 @@
/obj/item/wirecutters,
/turf/open/floor/plasteel,
/area/hydroponics)
-"aMH" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
- },
-/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/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/crew_quarters/dorms)
-"aMK" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"aML" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -17603,12 +15669,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/port)
-"aMW" = (
-/obj/structure/bookcase{
- name = "Forbidden Knowledge"
- },
-/turf/open/floor/carpet,
-/area/library)
"aMX" = (
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
@@ -17689,13 +15749,6 @@
},
/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"
@@ -17725,34 +15778,19 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"aNt" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/chair/comfy/brown{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/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/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! b>";
+ name = "Renovation Notice - Bar";
+ pixel_x = -5;
+ pixel_y = 3
},
-/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)
+/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)
"aNv" = (
/obj/effect/turf_decal/plaque{
icon_state = "L4"
@@ -17828,78 +15866,16 @@
/turf/open/floor/wood,
/area/crew_quarters/bar)
"aNF" = (
-/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 = 10
- },
-/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
- pixel_x = -3;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
/area/crew_quarters/bar)
-"aNG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/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/dorms)
-"aNH" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/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/plasteel,
-/area/crew_quarters/dorms)
"aNI" = (
-/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/janitor)
-"aNJ" = (
-/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/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
},
-/obj/item/reagent_containers/spray/cleaner,
-/obj/item/storage/box/lights/mixed,
-/obj/item/storage/box/lights/mixed,
-/turf/open/floor/plasteel,
-/area/janitor)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aNK" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
@@ -17988,12 +15964,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
-"aNV" = (
-/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";
@@ -18200,15 +16170,6 @@
},
/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"
@@ -18333,56 +16294,28 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aOH" = (
-/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)
+/obj/structure/window/reinforced,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"aOI" = (
/obj/structure/kitchenspike,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
"aOJ" = (
-/obj/item/radio/intercom{
- dir = 8;
- name = "Station Intercom (General)";
- pixel_x = -28
- },
-/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{
+/obj/structure/chair/comfy/brown{
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/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/wood,
/area/crew_quarters/bar)
"aOL" = (
-/obj/machinery/camera{
- c_tag = "Central Hallway North-East"
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
},
-/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)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aOM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -18508,38 +16441,9 @@
/turf/open/floor/wood,
/area/library)
"aPg" = (
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/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
@@ -18732,19 +16636,6 @@
/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)
@@ -18835,35 +16726,38 @@
/turf/open/floor/plating,
/area/bridge)
"aPY" = (
-/obj/structure/table/optable{
- name = "Robotics Operating Table"
+/obj/structure/table,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 9
},
-/obj/effect/landmark/event_spawn,
-/obj/item/tank/internals/anesthetic,
-/obj/item/clothing/mask/breath,
-/turf/open/floor/plasteel/dark,
-/area/science/robotics/lab)
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = 3;
+ pixel_y = 9
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aPZ" = (
-/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/janitor)
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/britcup,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aQa" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/structure/sign/poster/contraband/lusty_xenomorph{
- pixel_x = 32
- },
-/turf/open/floor/plasteel,
-/area/janitor)
+/obj/machinery/computer/arcade/battle,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aQb" = (
-/obj/machinery/vending/autodrobe,
-/turf/open/floor/plasteel/white/side{
- dir = 4
+/obj/structure/chair/sofa/right,
+/obj/structure/window{
+ dir = 1
},
-/area/crew_quarters/theatre)
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_x = -32
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aQc" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -18872,15 +16766,18 @@
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
"aQd" = (
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
-"aQe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/structure/window,
+/obj/structure/chair/sofa/right{
+ dir = 1
},
-/turf/open/floor/plating,
-/area/space/nearstation)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aQe" = (
+/obj/effect/landmark/event_spawn,
+/obj/effect/landmark/xmastree,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aQf" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/green{
@@ -19003,16 +16900,6 @@
/obj/item/bedsheet/black,
/turf/open/floor/carpet,
/area/library)
-"aQt" = (
-/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)
@@ -19154,16 +17041,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQP" = (
-/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
},
@@ -19171,64 +17048,61 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQR" = (
-/obj/machinery/camera{
- c_tag = "Arrivals Bay 3 & 4";
- dir = 1
+/obj/machinery/vending/cola/pwr_game,
+/obj/structure/sign/poster/contraband/pwr_game{
+ pixel_y = 32
},
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
+/area/crew_quarters/locker)
"aQS" = (
/obj/machinery/vending/coffee,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQT" = (
-/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/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/structure/disposalpipe/segment{
dir = 5
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
+"aQU" = (
+/obj/machinery/vending/kink,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"aQV" = (
+/obj/machinery/vending/autodrobe/all_access,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"aQW" = (
/obj/structure/closet/secure_closet/personal,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQX" = (
-/obj/machinery/vending/clothing,
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/vending/games,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aQY" = (
-/obj/machinery/vending/autodrobe/all_access,
-/obj/structure/disposalpipe/segment{
- dir = 4
+/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)
"aQZ" = (
/obj/machinery/light/small{
dir = 4
@@ -19421,30 +17295,23 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aRu" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/vending/kink,
/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
+ dir = 8
},
-/turf/open/floor/plasteel,
-/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)
+/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)
"aRx" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/space/nearstation)
+/obj/machinery/computer/arcade/minesweeper,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aRy" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -5;
@@ -19589,7 +17456,7 @@
/area/library)
"aRR" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
@@ -19620,7 +17487,7 @@
pixel_y = 24
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable{
@@ -19680,6 +17547,7 @@
/area/storage/tools)
"aSd" = (
/obj/machinery/firealarm{
+ dir = 1;
pixel_y = -24
},
/turf/open/floor/plasteel,
@@ -19699,39 +17567,31 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aSh" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/artistic{
- pixel_y = 10
- },
-/obj/item/storage/toolbox/artistic,
-/obj/item/storage/toolbox/electrical{
- pixel_y = -10
+/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/storage/art)
+/area/crew_quarters/locker)
"aSi" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"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/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)
+/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)
"aSl" = (
/obj/machinery/light_switch{
pixel_y = 28
@@ -19746,51 +17606,15 @@
/obj/item/extinguisher,
/turf/open/floor/plating,
/area/storage/emergency/port)
-"aSo" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/trunk{
- dir = 4
- },
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/light,
-/turf/open/floor/plasteel,
-/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"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/turf/open/floor/plating,
-/area/maintenance/fore/secondary)
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aSr" = (
/turf/open/floor/plasteel,
/area/storage/tools)
@@ -19905,21 +17729,49 @@
/mob/living/carbon/monkey/punpun,
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
-"aSG" = (
-/obj/structure/fireplace,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 23
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
"aSH" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/light{
+ dir = 1
},
-/turf/open/space,
-/area/solar/starboard/aft)
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/peppermill{
+ pixel_x = -9
+ },
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = -3
+ },
+/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/pack/ketchup{
+ pixel_x = 5
+ },
+/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)
"aSI" = (
/obj/machinery/door/airlock/public/glass{
name = "Kitchen";
@@ -20000,17 +17852,13 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"aSS" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable,
-/turf/open/space,
-/area/solar/starboard/aft)
+/obj/machinery/seed_extractor,
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aST" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/space,
-/area/solar/starboard/aft)
+/obj/machinery/biogenerator,
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aSU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
@@ -20032,19 +17880,35 @@
/turf/open/floor/plasteel,
/area/storage/tools)
"aSX" = (
-/obj/machinery/vending/kink,
-/obj/structure/disposalpipe/segment{
+/obj/machinery/power/apc{
+ areastring = "/area/storage/art";
+ dir = 1;
+ name = "Art Storage";
+ pixel_y = 24
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aSY" = (
-/obj/structure/lattice/catwalk,
/obj/structure/cable{
icon_state = "0-8"
},
-/turf/open/space,
-/area/solar/starboard/aft)
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
+"aSY" = (
+/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)
"aSZ" = (
/obj/effect/landmark/start/bartender,
/obj/effect/turf_decal/tile/bar,
@@ -20053,13 +17917,6 @@
},
/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
@@ -20164,20 +18021,6 @@
},
/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{
@@ -20209,25 +18052,12 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aTw" = (
-/obj/structure/closet/wardrobe/mixed,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = -27
+/obj/structure/closet/wardrobe/green,
+/obj/machinery/light{
+ dir = 8
},
-/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/machinery/firealarm{
- pixel_y = 24
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/vending/games,
+/obj/item/clothing/under/kilt,
+/obj/item/clothing/under/kilt,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTy" = (
@@ -20235,19 +18065,6 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTz" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aTA" = (
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aTB" = (
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -20267,6 +18084,12 @@
/obj/effect/landmark/start/assistant,
/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/effect/turf_decal/tile/red{
dir = 4
@@ -20284,22 +18107,20 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTD" = (
-/obj/effect/turf_decal/tile/red{
- dir = 1
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
},
-/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{
+/obj/machinery/camera{
+ c_tag = "Locker Room East";
dir = 8
},
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/reagent_containers/rag/towel/random,
+/obj/item/razor,
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aTE" = (
@@ -20358,15 +18179,11 @@
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"aTN" = (
-/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)
+/obj/structure/table,
+/obj/item/reagent_containers/food/condiment/flour,
+/obj/item/kitchen/rollingpin,
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"aTO" = (
/obj/structure/table,
/obj/item/book/manual/chef_recipes,
@@ -20485,20 +18302,13 @@
},
/turf/open/floor/plasteel,
/area/bridge)
-"aUf" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/space,
-/area/solar/port/aft)
"aUg" = (
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/turf/open/space,
-/area/solar/port/aft)
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aUh" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/eastleft{
@@ -20523,28 +18333,15 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"aUj" = (
-/obj/item/soap,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/light/small{
- dir = 1;
- light_color = "#ffc1c1"
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/machinery/vending/hydronutrients,
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aUk" = (
-/obj/effect/turf_decal/tile/green{
- dir = 8
+/obj/machinery/vending/hydroseeds{
+ slogan_delay = 700
},
-/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)
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"aUl" = (
/obj/structure/chair/office/dark{
dir = 8
@@ -20569,23 +18366,6 @@
/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/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
},
@@ -20604,7 +18384,7 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"aUr" = (
+"aUs" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -20620,22 +18400,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"aUs" = (
-/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" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -20643,20 +18407,17 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUu" = (
-/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{
+/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/effect/turf_decal/tile/blue{
+/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,
@@ -20709,18 +18470,6 @@
/obj/structure/bookcase/random/adult,
/turf/open/floor/wood,
/area/library)
-"aUC" = (
-/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{
@@ -20798,30 +18547,6 @@
"aUO" = (
/turf/open/floor/wood,
/area/security/vacantoffice)
-"aUP" = (
-/obj/structure/toilet{
- dir = 4
- },
-/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,
@@ -20845,31 +18570,16 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aUU" = (
-/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/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/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
+/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/crew_quarters/locker)
"aUW" = (
@@ -20900,13 +18610,9 @@
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aUZ" = (
-/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,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
"aVa" = (
@@ -21161,43 +18867,31 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"aVw" = (
-/obj/effect/landmark/carpspawn,
-/turf/open/space/basic,
-/area/space)
-"aVx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/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/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/table,
-/obj/item/storage/firstaid/regular{
- pixel_y = 5
+/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/fitness)
+/area/crew_quarters/bar)
"aVz" = (
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"aVA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/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/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plasteel/white/side{
- dir = 4
- },
-/area/crew_quarters/theatre)
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
"aVB" = (
/obj/structure/table,
/obj/item/reagent_containers/food/condiment/enzyme{
@@ -21217,18 +18911,27 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aVD" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Theatre Maintenance";
- req_access_txt = "46"
+/obj/structure/table,
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -9;
+ pixel_y = 9
},
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = -3;
+ pixel_y = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/item/reagent_containers/food/condiment/peppermill{
+ dir = 1;
+ pixel_x = -3
},
-/turf/open/floor/plating,
-/area/crew_quarters/theatre)
+/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)
"aVE" = (
/obj/structure/table,
/obj/item/storage/box/donkpockets{
@@ -21244,18 +18947,10 @@
/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,
@@ -21277,14 +18972,12 @@
/turf/open/floor/plasteel/dark,
/area/hydroponics)
"aVK" = (
-/obj/machinery/shower{
- dir = 4
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
},
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet)
+/obj/effect/landmark/start/botanist,
+/turf/open/floor/plasteel,
+/area/hydroponics)
"aVL" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -21326,17 +19019,21 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
-"aVP" = (
-/obj/machinery/vending/autodrobe/all_access,
-/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
"aVQ" = (
/obj/structure/chair/comfy/black{
dir = 8
},
/turf/open/floor/wood,
/area/library)
-"aVR" = (
+"aVS" = (
+/obj/structure/table/wood,
+/obj/item/camera_film,
+/obj/item/camera_film,
+/obj/item/taperecorder,
+/obj/item/camera,
+/turf/open/floor/wood,
+/area/library)
+"aVT" = (
/obj/structure/table/wood,
/obj/item/paper_bin/bundlenatural{
pixel_x = 6;
@@ -21350,20 +19047,6 @@
/obj/item/pen/fourcolor,
/turf/open/floor/wood,
/area/library)
-"aVS" = (
-/obj/structure/table/wood,
-/obj/item/pen/red,
-/turf/open/floor/wood,
-/area/library)
-"aVT" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/bottle/whiskey{
- pixel_x = 3
- },
-/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,
@@ -21573,24 +19256,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"aWw" = (
-/obj/machinery/power/apc{
- areastring = "/area/storage/art";
- dir = 1;
- name = "Art Storage";
- pixel_y = 24
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
"aWx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
@@ -21627,21 +19292,15 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aWB" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/machinery/door/airlock/maintenance{
+ name = "Detective Maintenance";
+ req_access_txt = "4"
},
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/turf/open/floor/plating,
+/area/maintenance/port)
"aWC" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -22021,51 +19680,57 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aXi" = (
-/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/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"aXk" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/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{
+/obj/structure/chair/sofa/right,
+/obj/structure/window{
dir = 1
},
-/obj/effect/turf_decal/tile/blue{
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"aXj" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/obj/item/pen/fountain{
+ pixel_x = 6
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/item/pen/fourcolor,
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/area/crew_quarters/bar)
+"aXk" = (
+/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)
"aXl" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/machinery/door/window/southright{
+ name = "Bar Door";
+ req_one_access_txt = "25;28"
},
-/obj/structure/disposalpipe/junction,
-/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/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/crew_quarters/bar)
"aXm" = (
/obj/effect/landmark/start/cook,
/turf/open/floor/plasteel/cafeteria,
@@ -22101,40 +19766,6 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"aXr" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
-"aXs" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Detective Maintenance";
- req_access_txt = "4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
-"aXt" = (
-/obj/machinery/power/apc{
- areastring = "/area/security/detectives_office";
- dir = 4;
- name = "Detective's Office APC";
- pixel_x = 24
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/security/detectives_office)
-"aXu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/library)
-"aXv" = (
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -22150,7 +19781,26 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"aXw" = (
+"aXt" = (
+/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)
+"aXu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/library)
+"aXv" = (
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -22163,14 +19813,17 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"aXx" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
+"aXw" = (
/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
},
@@ -22193,22 +19846,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/carpet,
/area/chapel/main)
-"aXA" = (
-/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" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -22240,24 +19877,25 @@
/turf/closed/wall,
/area/quartermaster/warehouse)
"aXF" = (
-/obj/structure/table/reinforced,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
+/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/item/paper_bin/bundlenatural{
- pixel_x = 6;
- pixel_y = 4
+/obj/machinery/washing_machine{
+ pixel_x = 7;
+ pixel_y = 7
},
-/obj/item/pen/fountain{
- pixel_x = 6
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/item/pen/fourcolor,
/turf/open/floor/plasteel,
-/area/crew_quarters/bar)
+/area/crew_quarters/dorms)
"aXG" = (
/obj/machinery/light{
dir = 4
@@ -22270,10 +19908,6 @@
},
/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
@@ -22322,17 +19956,6 @@
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/wood,
/area/security/vacantoffice)
-"aXO" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/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/dorms)
"aXP" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
@@ -22410,7 +20033,19 @@
},
/turf/open/floor/carpet,
/area/security/vacantoffice)
-"aYa" = (
+"aYb" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
+"aYc" = (
/obj/machinery/power/apc{
areastring = "/area/maintenance/port";
dir = 8;
@@ -22430,27 +20065,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"aYb" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
-"aYc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/closed/wall,
-/area/quartermaster/warehouse)
"aYd" = (
/obj/structure/chair/office/dark,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -22478,19 +20092,6 @@
},
/turf/open/floor/plating,
/area/construction)
-"aYh" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/button/door{
- id = "kanyewest";
- name = "Privacy Shutters";
- pixel_y = 24
- },
-/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{
@@ -22502,9 +20103,16 @@
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
"aYj" = (
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/disposalpipe/segment{
+ dir = 10
},
+/obj/machinery/button/door{
+ id = "kanyewest";
+ name = "Privacy Shutters";
+ pixel_y = 24
+ },
+/obj/structure/rack,
+/obj/item/storage/briefcase,
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
"aYk" = (
@@ -22718,25 +20326,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"aYH" = (
-/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! b>";
- name = "Renovation Notice - Bar";
- pixel_x = -5;
- pixel_y = 3
- },
-/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
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
"aYJ" = (
/obj/machinery/light_switch{
pixel_y = -25
@@ -22784,9 +20373,18 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aYP" = (
-/obj/structure/table/wood/poker,
+/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/crew_quarters/dorms)
+/area/hydroponics)
"aYQ" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/tile/green{
@@ -22803,24 +20401,19 @@
/turf/open/floor/plasteel,
/area/hydroponics)
"aYS" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1;
- pixel_x = 5
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/machinery/light/small{
+/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
},
-/obj/structure/table/glass,
-/obj/item/razor{
- pixel_x = 2;
- pixel_y = 3
- },
-/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)
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"aYT" = (
/obj/machinery/camera{
c_tag = "Hydroponics South";
@@ -22839,22 +20432,6 @@
"aYW" = (
/turf/open/floor/carpet,
/area/library)
-"aYX" = (
-/obj/machinery/atmospherics/pipe/simple/supply/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)
"aYY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -22862,15 +20439,17 @@
/turf/open/floor/carpet,
/area/library)
"aYZ" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
+/obj/structure/table/wood,
+/obj/item/storage/box/evidence,
+/obj/item/hand_labeler{
+ pixel_x = 5
},
-/obj/structure/closet/crate/freezer,
-/obj/machinery/light/small{
- dir = 8
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/plasteel,
-/area/quartermaster/warehouse)
+/obj/item/taperecorder,
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"aZa" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -22878,10 +20457,12 @@
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
"aZb" = (
-/obj/structure/table/wood/poker,
-/obj/item/toy/cards/deck,
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/machinery/camera{
+ c_tag = "Bar South";
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"aZc" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -22972,14 +20553,18 @@
/turf/open/floor/wood,
/area/security/vacantoffice)
"aZo" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
},
-/turf/open/floor/plasteel/grimy,
-/area/security/detectives_office)
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet/locker)
"aZp" = (
/obj/structure/rack,
/obj/item/electronics/apc,
@@ -23014,73 +20599,60 @@
/turf/open/floor/plating,
/area/maintenance/port)
"aZt" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- pixel_x = 5
+/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
},
-/obj/machinery/light/small,
/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
+/area/crew_quarters/toilet/locker)
"aZu" = (
/obj/machinery/photocopier,
/turf/open/floor/wood,
/area/bridge/meeting_room)
"aZv" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
+/obj/machinery/door/airlock{
+ id_tag = "LockerShitter1";
+ name = "Unit 1"
},
-/obj/structure/table,
-/obj/machinery/chem_dispenser/drinks/beer{
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet/locker)
+"aZw" = (
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet/locker)
+"aZx" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/obj/item/radio/intercom{
- pixel_y = 25
+/obj/structure/window,
+/obj/structure/window{
+ dir = 8
},
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
/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{
@@ -23245,50 +20817,39 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"aZZ" = (
-/obj/structure/chair/comfy/brown{
- dir = 8
+/obj/structure/chair/sofa{
+ dir = 1
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"baa" = (
-/obj/structure/chair/comfy/brown{
+/obj/structure/chair/sofa/left{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bab" = (
-/obj/structure/chair/comfy/black{
+/obj/machinery/light,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"bac" = (
+/obj/structure/noticeboard{
+ pixel_y = -27
+ },
+/obj/structure/chair/sofa/right{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
-"bac" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bad" = (
-/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/effect/spawner/lootdrop/maintenance,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/obj/machinery/light,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"baf" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -23302,34 +20863,21 @@
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bag" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
},
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bah" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -30
},
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bai" = (
-/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,
+/obj/machinery/light/small,
+/turf/open/floor/wood,
/area/crew_quarters/bar)
"baj" = (
/obj/structure/table/reinforced,
@@ -23357,7 +20905,7 @@
pixel_y = 2
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel,
@@ -23420,9 +20968,10 @@
/turf/open/floor/wood,
/area/library)
"bat" = (
-/obj/structure/reagent_dispensers/keg/semen,
-/turf/open/floor/plating,
-/area/maintenance/bar)
+/obj/structure/table/wood,
+/obj/item/pen/red,
+/turf/open/floor/wood,
+/area/library)
"bau" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -23440,16 +20989,12 @@
/turf/open/floor/wood,
/area/library)
"baw" = (
-/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/machinery/camera{
+ c_tag = "Locker Room Toilets";
+ dir = 8
},
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/kitchen)
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet/locker)
"bax" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -23581,28 +21126,15 @@
/turf/open/floor/plating,
/area/maintenance/port)
"baO" = (
-/obj/structure/toilet{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
},
/obj/structure/mirror{
- pixel_y = 32
+ pixel_x = 28
},
-/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,
+/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/locker)
"baP" = (
/obj/structure/table/wood,
@@ -23792,29 +21324,17 @@
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/locker)
-"bbr" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
+"bbs" = (
+/obj/structure/window/reinforced{
dir = 8
},
-/obj/structure/window,
-/obj/structure/window{
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"bbs" = (
-/obj/effect/landmark/event_spawn,
-/obj/effect/landmark/xmastree,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
"bbt" = (
/obj/structure/closet/crate,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -23864,14 +21384,17 @@
},
/area/hallway/primary/starboard)
"bbA" = (
-/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."
+/obj/machinery/camera{
+ c_tag = "Starboard Primary Hallway 2"
},
-/turf/open/floor/plasteel,
-/area/storage/primary)
+/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)
"bbB" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -23901,7 +21424,7 @@
/area/chapel/main)
"bbG" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/red{
@@ -23949,8 +21472,8 @@
/area/maintenance/port)
"bbL" = (
/obj/machinery/door/airlock{
- id_tag = "LockerShitter1";
- name = "Unit 1"
+ id_tag = "LockerShitter2";
+ name = "Unit 2"
},
/turf/open/floor/mineral/titanium/blue,
/area/crew_quarters/toilet/locker)
@@ -23959,21 +21482,6 @@
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/bridge/meeting_room)
-"bbN" = (
-/obj/machinery/button/door{
- id = "Bath3";
- name = "Door Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 14;
- pixel_y = 38;
- specialfunctions = 4
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/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{
@@ -23991,20 +21499,14 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"bbQ" = (
-/obj/item/paper_bin/bundlenatural{
- pixel_x = 6;
- pixel_y = 4
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/bottle/whiskey{
+ pixel_x = 3
},
-/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)
+/obj/item/lighter,
+/obj/item/restraints/handcuffs,
+/turf/open/floor/carpet,
+/area/security/detectives_office)
"bbR" = (
/turf/open/floor/plasteel,
/area/quartermaster/office)
@@ -24020,23 +21522,9 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/carpet,
/area/security/detectives_office)
-"bbU" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/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,
@@ -24189,15 +21677,14 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bcr" = (
-/obj/machinery/smartfridge/disks{
- pixel_y = 2
+/obj/machinery/camera{
+ c_tag = "Starboard Primary Hallway"
},
-/obj/structure/table,
/obj/item/radio/intercom{
pixel_y = 25
},
/turf/open/floor/plasteel,
-/area/hydroponics)
+/area/hallway/primary/starboard)
"bcs" = (
/obj/machinery/firealarm{
pixel_y = 24
@@ -24205,30 +21692,17 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bct" = (
-/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)
+/obj/structure/chair/wood/wings,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bcu" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance{
+ name = "Locker Room Maintenance";
+ req_access_txt = "12"
},
-/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)
+/turf/open/floor/plating,
+/area/maintenance/port)
"bcv" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -5;
@@ -24237,22 +21711,8 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bcw" = (
-/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,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
/area/crew_quarters/locker)
"bcx" = (
/obj/machinery/camera{
@@ -24329,13 +21789,15 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bcJ" = (
-/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/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port)
+/obj/structure/closet/crate/freezer,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/warehouse)
"bcK" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance,
@@ -24362,22 +21824,6 @@
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/bridge/meeting_room)
-"bcO" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/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
@@ -24385,8 +21831,10 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"bcQ" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+ dir = 5
},
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
@@ -24397,20 +21845,12 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"bcS" = (
-/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/effect/turf_decal/stripes/line{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/crew_quarters/locker)
+/area/quartermaster/warehouse)
"bcU" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -24424,14 +21864,6 @@
/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{
@@ -24517,7 +21949,13 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai_upload)
"bdi" = (
-/obj/machinery/computer/arcade,
+/obj/machinery/requests_console{
+ announcementConsole = 1;
+ department = "Captain's Desk";
+ departmentType = 5;
+ name = "Captain RC";
+ pixel_x = -30
+ },
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bdj" = (
@@ -24704,32 +22142,14 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bdE" = (
-/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{
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/obj/structure/sign/poster/contraband/clown{
+/obj/structure/sign/poster/contraband/have_a_puff{
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)
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
"bdF" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -24753,18 +22173,13 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bdJ" = (
-/obj/structure/sink{
- dir = 4;
- pixel_x = 11
+/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/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)
+/turf/open/floor/plating,
+/area/maintenance/port)
"bdK" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -24773,20 +22188,16 @@
/turf/open/floor/carpet,
/area/bridge/meeting_room)
"bdL" = (
-/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/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/quartermaster/warehouse)
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/bedsheetbin/color,
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/locker)
"bdN" = (
/obj/machinery/door/airlock/medical{
name = "Morgue";
@@ -24851,39 +22262,6 @@
/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/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,
@@ -24999,12 +22377,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai_upload)
-"bei" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/wood,
-/area/crew_quarters/heads/captain)
"bej" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -25096,12 +22468,20 @@
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
"bev" = (
-/obj/structure/chair/stool{
- pixel_y = 8
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/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)
"bew" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -25327,7 +22707,7 @@
layer = 2.9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/table/reinforced,
@@ -25366,12 +22746,12 @@
/turf/closed/wall,
/area/maintenance/disposal)
"bfa" = (
-/obj/structure/chair/sofa/left{
- dir = 1
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/mineral/wood/fifty{
+ amount = 20
},
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/maintenance/port)
"bfb" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -25405,17 +22785,10 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bfe" = (
-/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)
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/structure/reagent_dispensers/watertank,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bff" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
@@ -25449,27 +22822,6 @@
},
/turf/open/floor/plating,
/area/quartermaster/sorting)
-"bfk" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/power/apc{
- areastring = "/area/quartermaster/storage";
- name = "Cargo Bay APC";
- pixel_x = 1;
- pixel_y = -24
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
"bfl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -25575,11 +22927,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
-"bfC" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green,
-/turf/open/floor/wood,
-/area/crew_quarters/heads/captain)
"bfD" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -25793,17 +23140,14 @@
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bgi" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/sign/poster/contraband/space_up{
- pixel_y = -32
+/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/hallway/primary/central)
+/area/hallway/secondary/entry)
"bgj" = (
/obj/machinery/conveyor{
dir = 8;
@@ -25818,13 +23162,6 @@
},
/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
@@ -25875,14 +23212,12 @@
/turf/open/floor/plating,
/area/maintenance/port)
"bgr" = (
-/obj/machinery/camera{
- c_tag = "Locker Room Toilets";
- dir = 8
- },
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/locker)
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plating,
+/area/maintenance/port)
"bgs" = (
-/obj/item/chair/wood,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/structure/table/wood/fancy/purple,
/turf/open/floor/plating,
/area/maintenance/port)
"bgt" = (
@@ -25914,11 +23249,6 @@
/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
@@ -26024,10 +23354,12 @@
/turf/open/floor/wood,
/area/bridge/meeting_room)
"bgM" = (
-/obj/machinery/vending/coffee,
/obj/machinery/light{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/wood,
/area/bridge/meeting_room)
"bgN" = (
@@ -26053,12 +23385,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
-"bgR" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
"bgS" = (
/obj/machinery/requests_console{
announcementConsole = 1;
@@ -26096,6 +23422,9 @@
icon_state = "1-2"
},
/obj/machinery/holopad,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bgX" = (
@@ -26112,7 +23441,7 @@
/area/crew_quarters/heads/captain)
"bgY" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -26478,11 +23807,6 @@
},
/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;
@@ -26512,31 +23836,11 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"bhP" = (
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/mineral/wood/fifty{
- amount = 20
- },
-/turf/open/floor/plating,
-/area/maintenance/port)
"bhQ" = (
-/obj/structure/closet,
-/obj/item/stack/tile/carpet/royalblue{
- amount = 24
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/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,
+/turf/closed/wall,
/area/maintenance/port)
"bhR" = (
/obj/structure/grille,
@@ -26709,17 +24013,9 @@
/obj/machinery/suit_storage_unit/captain,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
-"bil" = (
-/obj/machinery/computer/card{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/wood,
-/area/crew_quarters/heads/captain)
"bim" = (
/obj/structure/table/wood,
/obj/machinery/recharger,
-/obj/item/melee/chainofcommand,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
"bin" = (
@@ -26772,16 +24068,16 @@
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bit" = (
-/obj/machinery/light,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/obj/structure/bedsheetbin/color,
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/locker)
+/obj/effect/turf_decal/tile/blue{
+ alpha = 255;
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"biu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
@@ -26919,19 +24215,6 @@
"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
@@ -27062,10 +24345,6 @@
/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,
@@ -27274,15 +24553,26 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bjy" = (
-/obj/machinery/camera{
- c_tag = "Gravity Generator Room";
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/effect/turf_decal/bot_white/left,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
+/area/ai_monitored/nuke_storage)
"bjz" = (
/turf/closed/wall/r_wall,
/area/maintenance/central)
@@ -27297,10 +24587,6 @@
/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;
@@ -27449,11 +24735,6 @@
},
/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{
@@ -27515,23 +24796,10 @@
/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,
@@ -27571,22 +24839,6 @@
/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
@@ -27764,12 +25016,6 @@
},
/turf/open/floor/plating,
/area/quartermaster/sorting)
-"bkI" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"bkJ" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -28144,9 +25390,15 @@
/turf/open/floor/plasteel,
/area/science/robotics/mechbay)
"blt" = (
-/obj/structure/sign/poster/contraband/tools,
-/turf/closed/wall,
-/area/storage/primary)
+/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)
"blu" = (
/obj/machinery/computer/mech_bay_power_console{
dir = 4
@@ -28304,17 +25556,6 @@
/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,
@@ -28412,7 +25653,7 @@
},
/obj/item/stack/cable_coil,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white,
@@ -28507,16 +25748,6 @@
},
/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"
@@ -28577,24 +25808,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"bmu" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
-"bmv" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
-"bmw" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"bmx" = (
/turf/closed/wall,
/area/crew_quarters/heads/captain)
@@ -28706,7 +25919,7 @@
},
/obj/machinery/light,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/white,
@@ -28857,38 +26070,6 @@
},
/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
@@ -28945,7 +26126,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,
@@ -29025,12 +26206,11 @@
/turf/closed/wall,
/area/maintenance/starboard)
"bnt" = (
-/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"
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
@@ -29276,16 +26456,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/gravity_generator)
-"bnU" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/engineering/glass{
- name = "Gravity Generator";
- req_access_txt = "11"
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/gravity_generator)
"bnV" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -29324,15 +26494,11 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"bnZ" = (
-/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)
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green,
+/obj/item/pen/fountain/captain,
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
"boa" = (
/obj/structure/toilet{
dir = 4
@@ -29473,12 +26639,6 @@
},
/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,
@@ -29506,16 +26666,6 @@
/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)
@@ -29756,12 +26906,19 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"boY" = (
-/obj/machinery/vending/cola/black,
-/obj/structure/sign/poster/contraband/sun_kist{
+/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/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"boZ" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/northleft{
@@ -29834,36 +26991,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"bpg" = (
-/obj/structure/chair/office/light,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
"bph" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
-"bpi" = (
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
"bpj" = (
/obj/structure/chair/comfy/brown{
dir = 4
@@ -29878,18 +27011,14 @@
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain)
"bpk" = (
-/obj/machinery/camera{
- c_tag = "Genetics Cloning";
- dir = 4;
- network = list("ss13","medbay")
+/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/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/obj/structure/closet/secure_closet/personal/patient,
-/turf/open/floor/plasteel/white,
-/area/medical/genetics)
+/obj/item/clothing/under/captainparade,
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
"bpl" = (
/obj/structure/table/wood,
/obj/item/storage/box/matches,
@@ -30212,7 +27341,7 @@
/area/science/robotics/lab)
"bpX" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -30245,12 +27374,6 @@
},
/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,
@@ -30448,48 +27571,31 @@
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"bqD" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/power/apc{
- areastring = "/area/engine/gravity_generator";
+/obj/machinery/vending/coffee,
+/obj/machinery/light{
dir = 8;
- name = "Gravity Generator APC";
- pixel_x = -25;
- pixel_y = 1
+ light_color = "#e8eaff"
},
-/obj/structure/table,
-/obj/item/paper/guides/jobs/engi/gravity_gen,
-/obj/item/pen/blue,
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_y = -35
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bqE" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/machinery/holopad,
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bqF" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
+/obj/machinery/vending/cigarette/beach,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bqG" = (
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
},
-/obj/structure/cable,
-/obj/machinery/power/smes{
- charge = 5e+006
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bqH" = (
/turf/closed/wall/r_wall,
/area/teleporter)
@@ -30751,12 +27857,6 @@
/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
@@ -31074,9 +28174,6 @@
"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
@@ -31139,11 +28236,8 @@
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"bsa" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bsb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -31153,33 +28247,10 @@
"bsc" = (
/turf/open/floor/plasteel,
/area/engine/gravity_generator)
-"bsd" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"bse" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
"bsf" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"bsg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/gravity_generator)
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bsh" = (
/turf/closed/wall,
/area/teleporter)
@@ -31363,9 +28434,6 @@
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,
@@ -31469,8 +28537,14 @@
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"bsP" = (
-/turf/open/floor/plating/foam,
-/area/space/nearstation)
+/obj/structure/table/optable{
+ name = "Robotics Operating Table"
+ },
+/obj/effect/landmark/event_spawn,
+/obj/item/tank/internals/anesthetic,
+/obj/item/clothing/mask/breath,
+/turf/open/floor/plasteel/dark,
+/area/science/robotics/lab)
"bsQ" = (
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
@@ -31605,9 +28679,15 @@
/turf/open/floor/plasteel/white,
/area/science/research)
"bti" = (
-/obj/effect/spawner/structure/window/shuttle,
-/turf/open/floor/plating,
-/area/space/nearstation)
+/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)
"btj" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -31618,9 +28698,11 @@
/turf/open/floor/plasteel/white,
/area/science/explab)
"btk" = (
-/obj/structure/grille/broken,
-/turf/open/floor/plating,
-/area/space/nearstation)
+/obj/structure/closet/wardrobe/white,
+/obj/item/clothing/under/kilt,
+/obj/item/clothing/under/janimaid,
+/turf/open/floor/plasteel/white,
+/area/medical/genetics)
"btl" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/white,
@@ -31709,7 +28791,7 @@
"btt" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/folder/yellow,
@@ -31753,16 +28835,12 @@
/turf/open/floor/plasteel,
/area/science/research)
"bty" = (
-/obj/structure/chair/sofa/right,
-/obj/structure/window{
- dir = 1
- },
-/obj/structure/sign/poster/contraband/pwr_game{
- pixel_x = -32
+/obj/structure/chair{
+ dir = 8
},
/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
"btz" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/brown{
@@ -31801,23 +28879,20 @@
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
"btD" = (
-/obj/structure/table,
+/obj/item/paper_bin/bundlenatural{
+ pixel_x = 6;
+ pixel_y = 4
+ },
/obj/item/paper_bin{
- pixel_x = 1;
- pixel_y = 9
+ pixel_x = -6;
+ pixel_y = 4
},
-/obj/item/pen,
-/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)
+/obj/structure/table,
+/obj/item/pen/fourcolor,
+/obj/item/stamp/hop,
+/turf/open/floor/plasteel,
+/area/crew_quarters/heads/hop)
"btE" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -31829,16 +28904,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"btF" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering{
- name = "Gravity Generator";
- req_access_txt = "11"
- },
-/obj/effect/turf_decal/delivery,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
"btG" = (
/turf/closed/wall/r_wall,
/area/engine/gravity_generator)
@@ -32077,10 +29142,6 @@
},
/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;
@@ -32247,12 +29308,6 @@
/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{
dir = 8;
@@ -32335,12 +29390,13 @@
/turf/open/floor/plasteel,
/area/quartermaster/office)
"buJ" = (
-/obj/structure/chair/sofa,
-/obj/structure/window{
- dir = 1
+/obj/structure/chair{
+ dir = 8
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/obj/machinery/light,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
"buK" = (
/obj/machinery/light{
dir = 4
@@ -32392,46 +29448,10 @@
/obj/item/hand_labeler,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"buP" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8
- },
-/turf/closed/wall,
-/area/engine/gravity_generator)
"buQ" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"buR" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/turf/closed/wall,
-/area/engine/gravity_generator)
-"buS" = (
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Gravity Generator Foyer"
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"buT" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -32608,12 +29628,26 @@
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
"bvn" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/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/supply/hidden,
-/turf/closed/wall,
-/area/maintenance/port)
+/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)
"bvo" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -32773,20 +29807,6 @@
},
/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
@@ -32906,6 +29926,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bvX" = (
@@ -33008,10 +30031,21 @@
/area/hallway/primary/central)
"bwi" = (
/obj/item/radio/intercom{
- pixel_x = -25
+ dir = 8;
+ name = "Station Intercom (General)";
+ pixel_x = -28
},
-/turf/open/floor/mineral/titanium/blue,
-/area/crew_quarters/toilet)
+/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)
"bwj" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -33033,34 +30067,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"bwm" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall,
-/area/engine/gravity_generator)
-"bwn" = (
-/obj/structure/closet/radiation,
-/obj/structure/sign/warning/radiation/rad_area{
- pixel_x = -32
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
-"bwo" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall,
-/area/engine/gravity_generator)
-"bwp" = (
-/obj/structure/closet/radiation,
-/obj/structure/sign/warning/radiation/rad_area{
- pixel_x = 32
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
"bwq" = (
/obj/machinery/teleport/station,
/turf/open/floor/plating,
@@ -33204,17 +30210,18 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bwL" = (
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
+/obj/machinery/camera{
+ c_tag = "Genetics Cloning";
+ dir = 4;
+ network = list("ss13","medbay")
},
-/obj/structure/closet/wardrobe/miner,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
},
-/obj/item/radio/headset/headset_cargo/mining,
-/turf/open/floor/plasteel,
-/area/quartermaster/miningdock)
+/obj/structure/closet/secure_closet/personal/patient,
+/turf/open/floor/plasteel/white,
+/area/medical/genetics)
"bwM" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -33261,10 +30268,6 @@
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{
@@ -33447,14 +30450,6 @@
/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
@@ -33680,31 +30675,36 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"bxH" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall,
-/area/engine/gravity_generator)
"bxI" = (
-/obj/machinery/status_display/ai,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/turf/closed/wall,
-/area/engine/gravity_generator)
-"bxJ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
+/obj/structure/cable{
+ icon_state = "0-4"
},
-/turf/closed/wall,
-/area/engine/gravity_generator)
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/preopen{
+ id = "bridge blast";
+ name = "bridge blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
"bxK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
+/obj/structure/cable{
+ icon_state = "0-8"
},
-/turf/closed/wall,
-/area/engine/gravity_generator)
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/preopen{
+ id = "bridge blast";
+ name = "bridge blast door"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/hallway/primary/central)
"bxL" = (
/obj/machinery/camera{
c_tag = "Central Hallway South-East";
@@ -34279,16 +31279,9 @@
/area/security/checkpoint/supply)
"byU" = (
/obj/machinery/light,
-/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
- },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"byW" = (
@@ -34596,7 +31589,7 @@
/area/science/research)
"bzF" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -34796,6 +31789,9 @@
/area/hallway/primary/central)
"bAf" = (
/obj/machinery/holopad,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bAg" = (
@@ -34820,11 +31816,14 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bAj" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=HOP";
+ location = "CHE"
},
-/obj/machinery/disposal/bin,
-/turf/open/floor/plasteel/dark,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bAk" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -34892,7 +31891,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/white,
@@ -35274,6 +32273,9 @@
name = "Station Intercom (General)";
pixel_y = -29
},
+/obj/machinery/light{
+ light_color = "#cee5d2"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBh" = (
@@ -35317,6 +32319,9 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBm" = (
@@ -35353,6 +32358,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBq" = (
@@ -35377,6 +32385,9 @@
pixel_x = -32;
pixel_y = -32
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBr" = (
@@ -35443,8 +32454,16 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBz" = (
-/obj/machinery/vending/cola/space_up,
-/turf/open/floor/plasteel/dark,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/sign/poster/contraband/space_up{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBA" = (
/obj/structure/cable{
@@ -35456,20 +32475,15 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bBB" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/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/disposalpipe/segment{
+ dir = 9
},
+/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/hallway/primary/central)
"bBC" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -35517,12 +32531,17 @@
/turf/closed/wall,
/area/quartermaster/miningdock)
"bBI" = (
-/obj/structure/table,
-/obj/item/stack/packageWrap,
-/obj/item/stack/packageWrap,
-/obj/item/hand_labeler,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/structure/closet/wardrobe/miner,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/item/radio/headset/headset_cargo/mining,
/turf/open/floor/plasteel,
-/area/hallway/secondary/service)
+/area/quartermaster/miningdock)
"bBJ" = (
/obj/machinery/firealarm{
pixel_y = 24
@@ -35543,14 +32562,6 @@
},
/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)
@@ -35610,18 +32621,6 @@
},
/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
@@ -35733,6 +32732,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/light{
+ light_color = "#cee5d2"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"bCe" = (
@@ -35878,6 +32880,10 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
+/mob/living/simple_animal/hostile/lizard{
+ name = "Wags-His-Tail";
+ real_name = "Wags-His-Tail"
+ },
/turf/open/floor/plasteel,
/area/janitor)
"bCu" = (
@@ -35929,20 +32935,12 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"bCA" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
+/obj/structure/disposalpipe/trunk{
+ dir = 1
},
-/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)
+/obj/machinery/disposal/bin,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"bCB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -36002,15 +33000,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"bCI" = (
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
"bCJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -36231,7 +33220,7 @@
/area/quartermaster/miningdock)
"bDl" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -36265,7 +33254,7 @@
/area/quartermaster/miningdock)
"bDp" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -36288,18 +33277,16 @@
/obj/item/storage/box/mousetraps,
/obj/item/storage/box/mousetraps,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/table,
/turf/open/floor/plasteel,
/area/janitor)
"bDs" = (
-/obj/effect/turf_decal/tile/green{
- dir = 1
+/obj/structure/sign/poster/contraband/lusty_xenomorph{
+ pixel_x = 32
},
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/tile/green,
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
-/area/hallway/primary/starboard)
+/area/janitor)
"bDt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -36317,13 +33304,6 @@
/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;
@@ -36349,16 +33329,7 @@
},
/turf/open/floor/plating,
/area/storage/tech)
-"bDx" = (
-/obj/structure/table,
-/obj/item/electronics/apc,
-/obj/item/electronics/airlock,
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/storage/tech)
-"bDy" = (
+"bDw" = (
/obj/structure/table,
/obj/item/screwdriver{
pixel_y = 16
@@ -36366,12 +33337,12 @@
/obj/item/wirecutters,
/turf/open/floor/plating,
/area/storage/tech)
-"bDz" = (
+"bDx" = (
/obj/structure/table,
-/obj/item/aicard,
-/obj/item/aiModule/reset,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/item/electronics/apc,
+/obj/item/electronics/airlock,
+/obj/machinery/light/small{
+ dir = 1
},
/turf/open/floor/plating,
/area/storage/tech)
@@ -36455,9 +33426,14 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bDJ" = (
-/obj/structure/sign/poster/contraband/lizard{
- pixel_x = -32
- },
+/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/janitor)
"bDK" = (
@@ -36471,17 +33447,11 @@
/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
+/obj/structure/sign/poster/contraband/lizard{
+ pixel_x = -32
},
/turf/open/floor/plasteel,
-/area/crew_quarters/fitness)
+/area/janitor)
"bDM" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
@@ -36495,15 +33465,14 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bDO" = (
-/obj/machinery/vending/snack/orange,
-/obj/machinery/light{
- dir = 1
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/structure/sign/poster/contraband/donut_corp{
+/obj/structure/sign/poster/contraband/hacking_guide{
pixel_y = 32
},
-/turf/open/floor/wood,
-/area/crew_quarters/bar)
+/turf/open/floor/plating,
+/area/maintenance/aft)
"bDP" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=8";
@@ -36577,13 +33546,6 @@
},
/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"
@@ -36969,8 +33931,12 @@
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
"bER" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/techstorage/rnd,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/storage/tech)
"bES" = (
@@ -37020,11 +33986,11 @@
/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"
+ icon_state = "1-2"
},
/turf/open/floor/plating,
/area/storage/tech)
@@ -37121,12 +34087,14 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bFk" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
+/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/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/obj/structure/closet,
+/turf/open/floor/plasteel,
+/area/janitor)
"bFl" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -37266,14 +34234,17 @@
/turf/open/floor/plasteel,
/area/medical/sleeper)
"bFC" = (
-/obj/structure/door_assembly/door_assembly_mai,
-/obj/item/electronics/airlock,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/table/wood/poker,
+/obj/item/clothing/mask/cigarette/cigar{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"bFD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -37507,22 +34478,6 @@
/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,
@@ -37631,12 +34586,8 @@
/turf/open/floor/plating,
/area/storage/tech)
"bGw" = (
-/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)
"bGx" = (
@@ -37667,14 +34618,20 @@
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bGB" = (
-/obj/structure/cable{
- icon_state = "2-4"
+/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/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
+/obj/item/reagent_containers/spray/cleaner,
+/obj/item/storage/box/lights/mixed,
+/obj/item/storage/box/lights/mixed,
+/turf/open/floor/plasteel,
+/area/janitor)
"bGC" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -37835,22 +34792,6 @@
/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,
@@ -37970,21 +34911,19 @@
/turf/open/floor/plasteel/white,
/area/science/research)
"bHg" = (
-/obj/structure/cable{
- icon_state = "4-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/atmospherics/pipe/simple/supply/hidden{
+/obj/structure/chair/sofa/right,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/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)
+/area/crew_quarters/fitness)
"bHh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -38109,16 +35048,6 @@
},
/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{
@@ -38150,19 +35079,6 @@
},
/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,
@@ -38177,18 +35093,6 @@
"bHE" = (
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"bHF" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/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{
@@ -38339,18 +35243,6 @@
},
/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
@@ -39221,10 +36113,6 @@
},
/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,
@@ -39915,14 +36803,6 @@
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,
@@ -40397,10 +37277,6 @@
},
/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"
@@ -40532,13 +37408,6 @@
},
/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,
@@ -40805,31 +37674,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"bNL" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/airalarm{
- 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"
@@ -41224,21 +38068,13 @@
/area/quartermaster/office)
"bOM" = (
/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/clothing/glasses/welding,
+/obj/item/pen/fountain,
/turf/open/floor/plasteel,
-/area/engine/atmos)
+/area/tcommsat/computer)
"bON" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -41563,13 +38399,6 @@
},
/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
@@ -41805,36 +38634,6 @@
},
/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,
@@ -42241,21 +39040,6 @@
},
/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,
@@ -42276,50 +39060,6 @@
/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{
@@ -42597,7 +39337,7 @@
/area/medical/virology)
"bRO" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white,
@@ -42817,14 +39557,6 @@
/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,
@@ -42839,18 +39571,6 @@
/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";
@@ -42954,13 +39674,21 @@
/area/engine/atmos)
"bSF" = (
/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/pen/fountain,
+/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)
"bSG" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -43001,12 +39729,6 @@
/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
@@ -43022,15 +39744,6 @@
/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
@@ -43132,15 +39845,6 @@
/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;
@@ -43322,13 +40026,6 @@
/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"
@@ -43337,68 +40034,6 @@
/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"
@@ -43783,6 +40418,10 @@
/obj/structure/cable{
icon_state = "0-4"
},
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#cee5d2"
+ },
/turf/open/floor/plating,
/area/maintenance/port/aft)
"bUu" = (
@@ -43807,21 +40446,6 @@
/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
@@ -43851,23 +40475,6 @@
},
/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{
areastring = "/area/tcommsat/computer";
@@ -44029,13 +40636,6 @@
},
/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
@@ -44253,10 +40853,6 @@
},
/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,
/turf/open/floor/plating/airless,
@@ -44330,19 +40926,6 @@
},
/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)
@@ -44353,12 +40936,6 @@
/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,
@@ -44542,13 +41119,6 @@
/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
@@ -45090,17 +41660,6 @@
/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
@@ -45576,19 +42135,27 @@
/turf/open/floor/plasteel,
/area/tcommsat/computer)
"bYG" = (
-/obj/structure/chair{
+/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/machinery/light,
-/obj/effect/landmark/start/assistant,
+/obj/structure/sign/departments/engineering{
+ pixel_y = -32
+ },
/turf/open/floor/plasteel,
-/area/quartermaster/office)
+/area/hallway/primary/aft)
"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,
@@ -45754,22 +42321,6 @@
/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
@@ -46166,15 +42717,6 @@
},
/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,
@@ -46217,18 +42759,6 @@
},
/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{
@@ -46266,18 +42796,6 @@
},
/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
@@ -46376,20 +42894,15 @@
/area/hallway/primary/aft)
"caw" = (
/obj/structure/table,
-/obj/item/storage/box/lights/mixed,
-/obj/item/clothing/glasses/meson,
-/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
+/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/engineering)
+/area/engine/break_room)
"cax" = (
/obj/structure/closet/wardrobe/black,
/obj/effect/decal/cleanable/cobweb,
@@ -46426,18 +42939,6 @@
/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
@@ -46895,6 +43396,21 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cbw" = (
+/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)
+"cbx" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -46908,7 +43424,7 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cbx" = (
+"cby" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -46923,11 +43439,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cby" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/maintenance/port/aft)
"cbz" = (
/obj/machinery/vending/wardrobe/atmos_wardrobe,
/turf/open/floor/plasteel,
@@ -47122,11 +43633,6 @@
},
/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,
@@ -47180,10 +43686,13 @@
/turf/open/space,
/area/solar/port/aft)
"ccd" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/machinery/atmospherics/miner/nitrogen,
-/turf/open/floor/engine/n2,
-/area/engine/atmos)
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"cce" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -47345,16 +43854,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"ccu" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable{
- 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,
@@ -47393,9 +43895,9 @@
/turf/open/floor/plasteel,
/area/engine/atmos)
"ccB" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/machinery/atmospherics/miner/oxygen,
-/turf/open/floor/engine/o2,
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
+/turf/open/floor/engine/co2,
/area/engine/atmos)
"ccC" = (
/obj/machinery/air_sensor/atmos/carbon_tank,
@@ -47427,11 +43929,6 @@
/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
@@ -47517,20 +44014,6 @@
/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
@@ -47618,30 +44101,17 @@
/turf/open/floor/plasteel,
/area/tcommsat/computer)
"cdh" = (
-/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/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
-/area/space/nearstation)
-"cdi" = (
-/obj/structure/grille,
-/obj/structure/lattice,
-/turf/open/floor/plating,
-/area/space/nearstation)
+/area/maintenance/port/aft)
"cdj" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/item/cartridge/atmos,
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
"cdk" = (
/obj/machinery/computer/atmos_alert,
/obj/effect/turf_decal/tile/neutral{
@@ -47880,13 +44350,6 @@
},
/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
@@ -47901,15 +44364,6 @@
/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,
@@ -47969,13 +44423,6 @@
},
/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,
@@ -48050,18 +44497,22 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cek" = (
-/obj/structure/closet/wardrobe/grey,
-/obj/machinery/requests_console{
- department = "Locker Room";
- pixel_x = -32
+/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
},
-/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/crew_quarters/locker)
+/area/engine/engineering)
"cel" = (
/obj/machinery/door/poddoor/preopen{
id = "Engineering";
@@ -48138,18 +44589,6 @@
},
/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,
@@ -48381,7 +44820,7 @@
/area/crew_quarters/heads/chief)
"cfd" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/closet/radiation,
@@ -48405,16 +44844,6 @@
/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"
@@ -48557,33 +44986,17 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"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{
+/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/crew_quarters/fitness)
+/area/engine/engineering)
"cfD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/airlock/maintenance{
@@ -48596,18 +45009,6 @@
/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{
@@ -48642,15 +45043,20 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
"cfI" = (
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/structure/closet/secure_closet/engineering_personal,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
},
-/obj/structure/disposalpipe/segment{
- dir = 9
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/landmark/start/assistant,
+/obj/item/clothing/under/overalls,
+/obj/item/clothing/under/overalls,
+/obj/item/radio/headset/headset_eng,
/turf/open/floor/plasteel,
-/area/hallway/primary/central)
+/area/engine/engineering)
"cfJ" = (
/obj/machinery/light/small{
dir = 1
@@ -48714,14 +45120,6 @@
},
/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
@@ -48734,17 +45132,6 @@
},
/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"
@@ -48896,12 +45283,13 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cgp" = (
-/obj/structure/rack,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 4;
- name = "4maintenance loot spawner"
+/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)
"cgq" = (
@@ -48938,8 +45326,13 @@
/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,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cgv" = (
@@ -49037,17 +45430,6 @@
},
/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
@@ -49075,34 +45457,6 @@
},
/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,
@@ -49123,19 +45477,6 @@
},
/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";
@@ -49574,11 +45915,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/port/aft)
-"chM" = (
-/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"
@@ -49638,22 +45974,6 @@
},
/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"
@@ -49672,22 +45992,6 @@
},
/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"
@@ -49704,10 +46008,6 @@
/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
@@ -49720,14 +46020,6 @@
},
/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
@@ -49794,10 +46086,6 @@
"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"
@@ -49853,13 +46141,6 @@
},
/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)
@@ -49931,12 +46212,6 @@
/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,
@@ -50026,9 +46301,11 @@
},
/area/maintenance/starboard/aft)
"ciK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
+/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)
@@ -50116,27 +46393,24 @@
/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/machinery/light{
- dir = 1
+/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
- },
-/turf/open/floor/plasteel,
+/obj/item/lightreplacer,
+/obj/item/lightreplacer,
+/turf/open/floor/plating,
/area/engine/engineering)
"ciY" = (
/obj/machinery/door/poddoor{
@@ -50612,11 +46886,6 @@
},
/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";
@@ -50727,21 +46996,9 @@
/area/maintenance/starboard/aft)
"ckp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 3;
- name = "3maintenance loot spawner"
- },
+/obj/effect/spawner/structure/window,
/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,
@@ -50834,14 +47091,6 @@
},
/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,
@@ -50866,15 +47115,6 @@
},
/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{
@@ -50939,27 +47179,10 @@
},
/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,
@@ -51147,10 +47370,13 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cls" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
},
-/turf/closed/wall,
+/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"clt" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -51284,12 +47510,6 @@
},
/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
@@ -51304,33 +47524,22 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/engine/engineering)
-"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/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)
+/obj/structure/table,
+/obj/item/storage/box/lights/mixed,
+/obj/item/clothing/glasses/meson,
+/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/engineering)
"clN" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/yellow{
@@ -51339,21 +47548,16 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clO" = (
-/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/janitor)
-"clP" = (
-/obj/machinery/atmospherics/pipe/simple/supply/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
},
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plating,
-/area/maintenance/port)
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"clQ" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -51361,9 +47565,14 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clR" = (
-/obj/machinery/portable_atmospherics/pump,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"clS" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/machinery/rnd/production/techfab/department/security,
@@ -51374,30 +47583,21 @@
/turf/open/floor/plasteel,
/area/security/main)
"clT" = (
-/obj/machinery/portable_atmospherics/scrubber,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
+/turf/open/floor/engine/n2,
+/area/engine/atmos)
"clU" = (
/turf/open/floor/engine/n2,
/area/engine/atmos)
"clV" = (
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
+/turf/open/floor/engine/o2,
+/area/engine/atmos)
"clW" = (
/turf/open/floor/engine/o2,
/area/engine/atmos)
-"clX" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/item/radio/intercom{
- pixel_y = 25
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
"clY" = (
/obj/effect/landmark/xeno_spawn,
/turf/open/floor/engine/air,
@@ -51405,28 +47605,11 @@
"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/camera{
- c_tag = "Starboard Primary Hallway"
- },
-/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)
@@ -51491,26 +47674,19 @@
/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/structure/table/wood,
-/obj/item/storage/pill_bottle/dice,
-/turf/open/floor/plasteel,
-/area/security/prison)
+/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)
"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,
@@ -51519,18 +47695,11 @@
},
/area/maintenance/starboard/aft)
"cmr" = (
-/obj/structure/chair/comfy/brown{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
},
-/turf/open/floor/plasteel,
-/area/security/prison)
-"cms" = (
-/obj/structure/chair/comfy/brown{
- color = "#66b266";
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
+/turf/closed/wall,
+/area/maintenance/starboard/aft)
"cmt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -51637,13 +47806,6 @@
/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
@@ -51655,7 +47817,7 @@
/area/engine/engineering)
"cmG" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable{
@@ -51672,34 +47834,6 @@
},
/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"
@@ -52014,6 +48148,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cnJ" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"cnK" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -52196,6 +48337,10 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
+"coj" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/crew_quarters/dorms)
"cop" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{
dir = 1
@@ -52248,6 +48393,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cow" = (
@@ -52263,25 +48411,30 @@
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cox" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"coy" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"coz" = (
@@ -52294,6 +48447,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"coA" = (
@@ -52415,6 +48571,32 @@
/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,
+/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)
+"cpa" = (
+/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)
"cpb" = (
/obj/structure/closet/emcloset,
/obj/machinery/light/small{
@@ -52467,12 +48649,17 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/structure/chair/office/light,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpk" = (
@@ -52480,6 +48667,12 @@
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpl" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpm" = (
@@ -52498,6 +48691,7 @@
"cpn" = (
/obj/machinery/light,
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpo" = (
@@ -52532,6 +48726,11 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"cps" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"cpt" = (
/obj/structure/table,
/obj/item/clothing/gloves/color/yellow,
@@ -52661,37 +48860,54 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/structure/table,
+/obj/item/stock_parts/cell/high/plus,
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpT" = (
-/obj/structure/table,
/obj/item/radio/intercom{
name = "Station Intercom (General)";
pixel_y = -35
},
-/obj/item/stock_parts/cell/high/plus,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/structure/closet/secure_closet/engineering_electrical,
/turf/open/floor/plasteel,
/area/engine/engine_smes)
"cpU" = (
-/obj/structure/chair/office/light{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/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,
+/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)
"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/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)
"cpY" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -52930,7 +49146,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/engine,
@@ -52986,6 +49202,13 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
+"cqJ" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
"cqK" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -53000,6 +49223,15 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"cqM" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"cqN" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -53103,6 +49335,14 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
+"cri" = (
+/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)
"crk" = (
/obj/structure/lattice/catwalk,
/turf/open/space,
@@ -53119,9 +49359,11 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"crn" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
"cro" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -53439,6 +49681,10 @@
/obj/structure/transit_tube/crossing/horizontal,
/turf/open/space,
/area/space/nearstation)
+"csp" = (
+/obj/effect/landmark/event_spawn,
+/turf/closed/wall,
+/area/crew_quarters/fitness)
"csq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 4
@@ -53482,6 +49728,12 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
/turf/open/space,
/area/space/nearstation)
+"csy" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"csA" = (
/obj/machinery/door/poddoor/shutters/preopen{
id = "engsm";
@@ -53584,6 +49836,13 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
+"csZ" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
"cta" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -53882,7 +50141,7 @@
pixel_y = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -54088,7 +50347,7 @@
"cuo" = (
/obj/machinery/portable_atmospherics/canister/air,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/corner,
@@ -54175,7 +50434,7 @@
amount = 35
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/corner{
@@ -54830,7 +51089,7 @@
network = list("aicore")
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/circuit,
@@ -55028,7 +51287,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -55216,7 +51475,6 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/storage/box/handcuffs,
/obj/item/storage/box/flashbangs{
pixel_x = 3;
pixel_y = -3
@@ -55326,6 +51584,14 @@
},
/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";
@@ -55383,6 +51649,13 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/exit)
+"cyi" = (
+/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)
"cyl" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -55544,6 +51817,10 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
+"czD" = (
+/obj/structure/extinguisher_cabinet,
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
"czE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 4
@@ -55850,6 +52127,13 @@
/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,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"cAA" = (
/obj/machinery/light/small{
dir = 1
@@ -55924,6 +52208,11 @@
/obj/machinery/light/small,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"cAL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/landmark/start/janitor,
+/turf/open/floor/plasteel,
+/area/janitor)
"cAN" = (
/obj/machinery/door/airlock/maintenance{
name = "Security Maintenance";
@@ -56148,6 +52437,25 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"cBn" = (
+/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)
"cBo" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/wood,
@@ -56361,6 +52669,16 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat/hallway)
+"cBT" = (
+/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)
"cBV" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security{
@@ -56435,6 +52753,15 @@
},
/turf/closed/wall,
/area/security/detectives_office)
+"cCn" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/warehouse)
"cCo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -56922,7 +53249,7 @@
/area/engine/engineering)
"cEk" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -57274,6 +53601,21 @@
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"cFF" = (
+/obj/machinery/vr_sleeper{
+ dir = 8
+ },
+/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)
"cFI" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -57380,6 +53722,14 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"cGd" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/item/cartridge/atmos,
+/turf/open/floor/engine,
+/area/engine/engineering)
"cGe" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -57428,6 +53778,11 @@
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"cGl" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/obj/item/radio/headset/headset_eng,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"cGr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -57960,6 +54315,29 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"cII" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"cIW" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/vending/kink,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"cJl" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"cMm" = (
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/open/floor/plating,
@@ -58181,6 +54559,10 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cPO" = (
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"cQw" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -58639,6 +55021,24 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"dfH" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/security/main";
+ dir = 4;
+ name = "Firing Range APC";
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"dfL" = (
/obj/structure/reagent_dispensers/keg/gargle,
/turf/open/floor/wood,
@@ -58646,10 +55046,66 @@
"dgz" = (
/turf/closed/wall,
/area/crew_quarters/cryopod)
+"djq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"djB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore)
+"dok" = (
+/obj/machinery/portable_atmospherics/pump,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"dqu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"dqD" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/vault,
+/obj/effect/mapping_helpers/airlock/locked,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/nuke_storage)
+"dqG" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-03"
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
+"dsV" = (
+/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
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/dorms)
+"duc" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
"dvc" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -58662,12 +55118,108 @@
},
/turf/closed/wall,
/area/science/circuit)
+"dyS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"dzi" = (
/obj/structure/cable{
icon_state = "2-4"
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
+"dBt" = (
+/obj/structure/filingcabinet,
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"dCk" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/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)
+"dEZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/door/window/westleft{
+ base_state = "right";
+ dir = 4;
+ icon_state = "right";
+ name = "Shooting Range"
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"dGY" = (
+/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)
+"dHx" = (
+/obj/structure/light_construct{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"dHP" = (
+/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)
+"dIA" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"dIH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"dKe" = (
+/obj/machinery/atmospherics/components/binary/valve,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"dKg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ 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)
"dKP" = (
/turf/closed/wall,
/area/maintenance/bar)
@@ -58675,12 +55227,51 @@
/obj/structure/chair/stool/bar,
/turf/open/floor/wood,
/area/maintenance/bar)
+"dLh" = (
+/obj/structure/table/wood,
+/obj/item/instrument/trumpet,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"dMZ" = (
/obj/structure/sign/poster/official/random{
pixel_y = 32
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"dQy" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/security/prison)
+"dQz" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"dSI" = (
+/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"
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/port)
+"dSM" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"eaD" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/hydroponics)
"eaI" = (
/obj/structure/table/reinforced,
/obj/item/radio/intercom{
@@ -58690,9 +55281,87 @@
/obj/item/stock_parts/cell/high,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"eeD" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/engine/gravity_generator";
+ dir = 8;
+ name = "Gravity Generator APC";
+ pixel_x = -25;
+ pixel_y = 1
+ },
+/obj/structure/table,
+/obj/item/paper/guides/jobs/engi/gravity_gen,
+/obj/item/pen/blue,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"efo" = (
+/obj/effect/turf_decal/tile/green{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"ekY" = (
+/obj/structure/filingcabinet,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"epP" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Gravity Generator";
+ req_access_txt = "11"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engine_smes)
+"eqs" = (
+/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)
+"ese" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"evR" = (
/turf/open/floor/plating,
/area/maintenance/bar)
+"eyC" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"eyM" = (
/obj/machinery/mineral/ore_redemption{
input_dir = 2;
@@ -58701,17 +55370,90 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"eAE" = (
+/obj/structure/bookcase{
+ name = "Forbidden Knowledge"
+ },
+/turf/open/floor/carpet,
+/area/library)
+"eBm" = (
+/obj/structure/chair/sofa/left,
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"eDq" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/light/small,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"eDv" = (
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
"eHI" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
+"eIe" = (
+/obj/structure/table/wood,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/instrument/trombone,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"eJk" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/brig)
+"eJz" = (
+/obj/machinery/door/airlock{
+ name = "Theatre Backstage";
+ req_access_txt = "46"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"eMb" = (
+/obj/structure/grille,
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
+"eMV" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/security/prison)
"eRz" = (
/obj/structure/lattice,
/obj/structure/grille,
/turf/open/space/basic,
/area/space/nearstation)
+"eTc" = (
+/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)
+"eUR" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"eVC" = (
/obj/effect/spawner/structure/window,
/obj/machinery/door/firedoor,
@@ -58727,12 +55469,93 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"eWl" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"eWv" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"eWV" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"eYr" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/space/nearstation)
+"fcc" = (
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/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)
+"fcu" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/space,
+/area/solar/port/aft)
"fcG" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/turf/closed/wall/r_wall,
/area/science/mixing)
+"fey" = (
+/obj/structure/chair/sofa,
+/obj/structure/window{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"ffm" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/closed/wall,
+/area/quartermaster/warehouse)
+"ffU" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"fkx" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/departments/evac{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
"flc" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/donut_box,
@@ -58751,10 +55574,20 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"fpd" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/crew_quarters/dorms)
"fsQ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"ftK" = (
+/obj/structure/bed,
+/turf/open/floor/plating,
+/area/maintenance/port)
"fvY" = (
/obj/machinery/computer/cryopod{
pixel_y = 26
@@ -58764,17 +55597,161 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
+"fwD" = (
+/obj/structure/sign/poster/official/ion_rifle,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/security/armory)
"fxa" = (
/obj/structure/chair/wood/normal,
/turf/open/floor/wood{
icon_state = "wood-broken4"
},
/area/maintenance/bar)
+"fyr" = (
+/obj/machinery/door/window/southright{
+ name = "Target Storage"
+ },
+/obj/item/target/alien,
+/obj/item/target/alien,
+/obj/item/target/syndicate,
+/turf/open/floor/plating,
+/area/security/prison)
+"fBj" = (
+/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)
+"fDV" = (
+/obj/machinery/computer/card{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"fEo" = (
+/obj/machinery/recharge_station,
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"fFp" = (
+/obj/structure/table/wood/fancy/royalblue,
+/obj/item/crowbar/red,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"fGf" = (
+/obj/machinery/smartfridge/disks{
+ pixel_y = 2
+ },
+/obj/structure/table,
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"fIK" = (
+/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)
+"fJA" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"fKl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/science/circuit)
+"fLb" = (
+/obj/structure/table/wood,
+/obj/item/instrument/violin,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"fLn" = (
+/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/fitness)
+"fLX" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"fOB" = (
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/obj/structure/window,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"fPz" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1;
+ pixel_x = 5
+ },
+/obj/machinery/light/small,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"fRa" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/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/plasteel,
+/area/crew_quarters/dorms)
+"fSL" = (
+/obj/machinery/door/window/westleft{
+ base_state = "right";
+ icon_state = "right";
+ name = "Unisex Showers"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
"fTg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -58784,12 +55761,73 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"fXo" = (
+/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)
+"fXH" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"fZD" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/effect/landmark/start/mime,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/theatre)
+"gbb" = (
+/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)
+"gbq" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plating,
+/area/construction)
"gbT" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
/obj/item/stack/sheet/glass/fifty,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"gfn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"gfD" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -58799,18 +55837,197 @@
"gjl" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
+"gks" = (
+/turf/open/floor/grass,
+/area/security/prison)
+"gmc" = (
+/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)
+"gnM" = (
+/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)
+"gnW" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable,
+/turf/open/space,
+/area/solar/starboard/aft)
+"gqp" = (
+/obj/structure/frame/computer{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"gqR" = (
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"gro" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Gravity Generator";
+ req_access_txt = "11"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"guh" = (
+/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)
+"gvC" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/turf/open/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/crew_quarters/theatre)
"gwd" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"gxH" = (
+/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)
+"gzA" = (
+/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)
+"gzJ" = (
+/obj/structure/sign/poster/official/cohiba_robusto_ad,
+/turf/closed/wall,
+/area/lawoffice)
"gBo" = (
/obj/structure/cable{
icon_state = "1-8"
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"gBY" = (
+/obj/machinery/power/apc{
+ areastring = "/area/maintenance/starboard/fore";
+ dir = 1;
+ name = "Starboard Bow Maintenance APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"gDv" = (
+/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)
+"gFY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/wood,
+/area/bridge/meeting_room)
+"gGD" = (
+/obj/structure/table,
+/obj/item/hand_labeler,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"gGK" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light_switch{
+ pixel_y = -25
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"gIT" = (
+/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)
+"gJR" = (
+/obj/structure/table/wood,
+/obj/item/instrument/guitar{
+ pixel_x = -7
+ },
+/obj/item/instrument/eguitar{
+ pixel_x = 5
+ },
+/obj/item/instrument/violin,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"gLH" = (
/obj/machinery/door/airlock/external{
name = "External Access";
@@ -58827,6 +56044,29 @@
},
/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)
+"gTx" = (
+/obj/structure/bed,
+/obj/machinery/button/door{
+ id = "Dorm5";
+ 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)
+"gUz" = (
+/obj/structure/sign/poster/official/safety_eye_protection,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"gWd" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -58837,6 +56077,16 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
+"gYK" = (
+/obj/machinery/light/small,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"gYR" = (
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"gZG" = (
/obj/structure/closet/crate/freezer/surplus_limbs,
/obj/item/reagent_containers/glass/beaker/synthflesh,
@@ -58844,7 +56094,120 @@
dir = 8
},
/area/medical/sleeper)
-"hcE" = (
+"hmv" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"hot" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/window,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"hvD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"hxw" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/obj/machinery/meter,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"hFk" = (
+/obj/structure/piano{
+ icon_state = "piano"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"hIi" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"hIJ" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"hKI" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore)
+"hKX" = (
+/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)
+"hMk" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "Secure Gate";
+ name = "brig shutters"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/security/brig)
+"hRa" = (
+/obj/structure/table/reinforced,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/circuit)
+"hSS" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/coin/silver,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"hUC" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-06"
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
+"hVk" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -58861,23 +56224,36 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"hEm" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-22"
+"hYH" = (
+/obj/machinery/door/airlock/security{
+ name = "Labor Shuttle";
+ req_access_txt = "2"
},
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
-"hRa" = (
-/obj/structure/table/reinforced,
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/cell_charger{
- pixel_y = 5
+/obj/structure/cable{
+ icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white,
-/area/science/circuit)
+/turf/open/floor/plasteel,
+/area/security/processing)
+"iaq" = (
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"iiH" = (
+/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)
"iiW" = (
/turf/open/floor/wood,
/area/maintenance/bar)
@@ -58886,25 +56262,89 @@
/obj/item/stack/sheet/metal/fifty,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"ilO" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"imi" = (
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/dorms)
"imH" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
/area/maintenance/bar)
+"imK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/light_construct{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"ioS" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Holodeck Door"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/fitness)
"ipA" = (
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"ipU" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/structure/mirror{
+ pixel_x = 25
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"itE" = (
+/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)
"itG" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
/obj/item/pen,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"itP" = (
+/obj/structure/chair/comfy/brown{
+ color = "#596479";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"ium" = (
/mob/living/simple_animal/bot/cleanbot{
name = "C.L.E.A.N."
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"ixv" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"izv" = (
/obj/machinery/vending/clothing,
/obj/machinery/light/small{
@@ -58912,6 +56352,54 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"izL" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/departments/evac{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"iCE" = (
+/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)
+"iEc" = (
+/obj/structure/safe,
+/obj/item/clothing/head/bearpelt,
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
+/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka,
+/obj/effect/turf_decal/bot_white/left,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/gun/ballistic/revolver/nagant,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
"iEJ" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod One"
@@ -58921,6 +56409,29 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"iFt" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"iGV" = (
+/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 = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"iHq" = (
+/obj/machinery/door/airlock{
+ name = "Recharging Station"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
"iNn" = (
/obj/machinery/camera{
c_tag = "Kitchen Cold Room"
@@ -58929,6 +56440,49 @@
/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
+"iQA" = (
+/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)
+"iRI" = (
+/obj/structure/chair/comfy/beige{
+ dir = 8
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/plasteel/grimy,
+/area/hallway/secondary/entry)
+"iSB" = (
+/obj/machinery/door/window/southleft{
+ name = "Target Storage"
+ },
+/obj/item/target/clown,
+/obj/item/target/clown,
+/obj/item/target,
+/obj/item/target,
+/turf/open/floor/plating,
+/area/security/prison)
+"iTd" = (
+/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/carpet,
+/area/crew_quarters/dorms)
+"iTD" = (
+/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)
"iVU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -58937,6 +56491,21 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/crew_quarters/cryopod)
+"iWm" = (
+/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)
+"jav" = (
+/obj/structure/chair/sofa/right,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"jbf" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -58949,6 +56518,22 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"jcN" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"jde" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"jgm" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -58963,10 +56548,56 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"jil" = (
+/obj/machinery/vr_sleeper{
+ dir = 8
+ },
+/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
+ },
+/area/crew_quarters/fitness)
"jlm" = (
/obj/machinery/rnd/production/techfab/department/cargo,
/turf/open/floor/plasteel,
/area/quartermaster/office)
+"joc" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/dresser,
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/crew_quarters/theatre";
+ dir = 8;
+ name = "Theatre APC";
+ pixel_x = -25
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/theatre)
+"joq" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/crew_quarters/theatre)
"jqv" = (
/obj/structure/chair/wood/normal{
dir = 1
@@ -58981,6 +56612,39 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"jtp" = (
+/obj/structure/sign/poster/contraband/red_rum{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"jtY" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/bar)
+"juV" = (
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"jvm" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
+"jxp" = (
+/obj/structure/table/reinforced,
+/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)
"jAD" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
@@ -58997,6 +56661,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jDh" = (
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"jHt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment{
@@ -59017,6 +56688,75 @@
},
/turf/open/floor/wood,
/area/maintenance/port/aft)
+"jKM" = (
+/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)
+"jMa" = (
+/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)
+"jMY" = (
+/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)
+"jNS" = (
+/obj/structure/filingcabinet,
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"jOF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"jRc" = (
+/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)
+"jRs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"jSk" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/security/prison)
"jSO" = (
/obj/machinery/light{
dir = 4
@@ -59026,6 +56766,19 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"jTp" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"jUc" = (
+/obj/structure/closet/radiation,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"jVl" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -59035,6 +56788,78 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jYg" = (
+/obj/structure/table/wood/fancy,
+/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;
+ pixel_y = 9
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"jYD" = (
+/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/fitness)
+"kcg" = (
+/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)
+"kgf" = (
+/obj/machinery/button/door{
+ id = "maintdiy";
+ name = "Shutters Control Button";
+ pixel_x = -6;
+ pixel_y = 24
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"khb" = (
+/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)
"khB" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -59044,18 +56869,49 @@
},
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
-"knx" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering{
- name = "Gravity Generator";
- req_access_txt = "11"
- },
-/obj/effect/turf_decal/delivery,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
+"kiH" = (
+/obj/machinery/door/airlock{
+ name = "Bar Back Room"
},
+/turf/open/space/basic,
+/area/crew_quarters/bar)
+"kmf" = (
+/obj/machinery/vending/autodrobe/all_access,
/turf/open/floor/plasteel,
-/area/engine/gravity_generator)
+/area/crew_quarters/fitness)
+"kmw" = (
+/obj/machinery/door/airlock{
+ name = "Theatre Backstage";
+ req_access_txt = "46"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"knx" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Central Access"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "bridge blast";
+ name = "bridge blast door"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"knR" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"kob" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment,
@@ -59064,6 +56920,44 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"ktc" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"kte" = (
+/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)
+"kuT" = (
+/obj/effect/landmark/blobstart,
+/turf/open/floor/plating,
+/area/maintenance/department/electrical)
+"kwj" = (
+/obj/machinery/door/airlock{
+ name = "Instrument Storage"
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/starboard/fore)
+"kwW" = (
+/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)
+"kyA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"kyF" = (
/obj/effect/landmark/xeno_spawn,
/turf/open/floor/wood,
@@ -59072,6 +56966,86 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/science/mixing)
+"kBF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"kCq" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/heads/captain)
+"kCK" = (
+/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)
+"kDw" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"kFf" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/preopen{
+ id = "bridge blast";
+ name = "bridge blast door"
+ },
+/turf/open/floor/plating,
+/area/hallway/primary/central)
+"kMg" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"kMO" = (
+/obj/machinery/shower{
+ dir = 4
+ },
+/obj/item/soap,
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"kMY" = (
+/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,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood,
+/area/library)
+"kOA" = (
+/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)
"kPd" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/cable{
@@ -59079,6 +57053,26 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"kQg" = (
+/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)
+"kQk" = (
+/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)
"kQq" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
@@ -59090,6 +57084,68 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"kTe" = (
+/obj/structure/shuttle/engine/heater{
+ dir = 1
+ },
+/turf/closed/wall/mineral/titanium,
+/area/space/nearstation)
+"lev" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
+"lfx" = (
+/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)
+"liD" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-22"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"ljN" = (
+/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)
+"lmT" = (
+/obj/structure/table/wood/fancy,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/food/snacks/burger/plain,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"lnu" = (
/obj/structure/chair/wood/normal{
dir = 4
@@ -59098,26 +57154,232 @@
icon_state = "wood-broken6"
},
/area/maintenance/bar)
+"lqe" = (
+/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)
+"lre" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-18"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
+"lrF" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"lrH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"ltC" = (
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"lwn" = (
+/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)
+"lyB" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/camera{
+ c_tag = "Firing Range";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"lzY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engine_smes)
"lAB" = (
/obj/structure/sign/nanotrasen,
/turf/closed/wall,
/area/science/circuit)
+"lAY" = (
+/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)
+"lBk" = (
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"lCi" = (
/obj/docking_port/stationary/public_mining_dock{
dir = 8
},
/turf/open/floor/plating,
/area/construction/mining/aux_base)
+"lDF" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 1
+ },
+/turf/open/space/basic,
+/area/space/nearstation)
+"lHE" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "maint2"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"lJX" = (
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"lMg" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"lNn" = (
+/obj/structure/lattice,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/nuke_storage)
+"lNz" = (
+/obj/structure/sign/mining{
+ pixel_y = 7
+ },
+/turf/closed/wall,
+/area/quartermaster/miningdock)
"lQG" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/science/circuit)
+"lQR" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"lUd" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"lUR" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"maz" = (
+/obj/machinery/door/airlock/command{
+ name = "Captain's Office";
+ req_access_txt = "20"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/crew_quarters/heads/captain)
+"maK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"mbl" = (
+/obj/structure/chair/sofa/left,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"mcQ" = (
+/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)
+"mdp" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"mdQ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"mgT" = (
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"mjr" = (
+/obj/structure/reagent_dispensers/keg/milk,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"mnP" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/sign/poster/official/pda_ad{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"moa" = (
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"mpA" = (
+/obj/structure/table/wood,
+/obj/item/melee/chainofcommand,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
"mpI" = (
/obj/structure/table/wood,
/turf/open/floor/wood{
@@ -59133,6 +57395,28 @@
/obj/effect/spawner/lootdrop/keg,
/turf/open/floor/wood,
/area/maintenance/bar)
+"muq" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"mvB" = (
+/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)
+"mwm" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet)
"mBv" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -59144,6 +57428,82 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
+"mDU" = (
+/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)
+"mFJ" = (
+/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)
+"mHC" = (
+/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)
+"mHW" = (
+/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)
+"mJU" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"mKU" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"mMb" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-14"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
"mNi" = (
/obj/machinery/light_switch{
pixel_x = -20
@@ -59151,6 +57511,35 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"mOL" = (
+/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)
+"mPj" = (
+/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)
"mPE" = (
/obj/machinery/chem_dispenser/drinks,
/obj/structure/table/wood,
@@ -59163,14 +57552,149 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"mRj" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"mTi" = (
+/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)
+"mTj" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"ncB" = (
+/obj/machinery/camera{
+ c_tag = "Gravity Generator Room";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"ncI" = (
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/obj/structure/table,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"ndo" = (
+/obj/structure/chair/comfy/black{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"neq" = (
+/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)
+"neT" = (
+/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)
"nfm" = (
/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/maintenance/bar)
+"nhn" = (
+/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)
+"niE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall,
+/area/maintenance/port)
+"nlN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"nnb" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
"noK" = (
/obj/structure/girder,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"npV" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"nqP" = (
+/obj/machinery/vending/cola/red,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"nuI" = (
+/obj/machinery/vending/coffee,
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"nvw" = (
+/obj/machinery/photocopier{
+ pixel_x = -5;
+ pixel_y = -5
+ },
+/turf/open/floor/wood,
+/area/library)
"nxv" = (
/obj/machinery/power/apc{
areastring = "/area/construction";
@@ -59182,10 +57706,31 @@
},
/turf/open/floor/plating,
/area/construction)
+"nxN" = (
+/turf/closed/wall/mineral/titanium,
+/area/space/nearstation)
+"nyF" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/wood,
+/area/bridge/meeting_room)
+"nzc" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
"nzh" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"nDn" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
"nGt" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -59197,16 +57742,55 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"nGN" = (
+/obj/structure/piano,
+/obj/structure/window/reinforced,
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"nNY" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"nOD" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/light_construct{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"nRG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"nWU" = (
-/obj/machinery/smartfridge/organ/preloaded,
-/turf/closed/wall,
-/area/medical/sleeper)
+"nTu" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"oaB" = (
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"oaP" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"oaT" = (
+/obj/structure/window,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
"oce" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
@@ -59217,26 +57801,263 @@
/obj/machinery/vending/kink,
/turf/open/floor/plating,
/area/maintenance/bar)
+"odR" = (
+/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)
+"ogU" = (
+/obj/machinery/door/airlock/security{
+ name = "Firing Range";
+ req_access_txt = "2"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"ohe" = (
+/obj/machinery/hydroponics/constructable,
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 29
+ },
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"olr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"ope" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating,
+/area/storage/tech)
+"oqa" = (
+/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)
+"osd" = (
+/obj/structure/sign/poster/contraband/tools,
+/turf/closed/wall,
+/area/storage/primary)
+"ove" = (
+/obj/machinery/door/airlock/command{
+ name = "Conference Room";
+ req_access_txt = "19"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space/basic,
+/area/bridge/meeting_room)
+"ovG" = (
+/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)
+"oxA" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/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/dorms)
+"oAc" = (
+/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)
+"oAV" = (
+/obj/structure/table,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/item/clothing/glasses/sunglasses{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/clothing/glasses/sunglasses{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/clothing/ears/earmuffs{
+ pixel_x = -3;
+ pixel_y = -2
+ },
+/obj/item/clothing/ears/earmuffs{
+ pixel_x = -3;
+ pixel_y = -2
+ },
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"oBB" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
"oDF" = (
/obj/machinery/light,
/turf/open/floor/plating,
/area/engine/engineering)
+"oFY" = (
+/obj/effect/spawner/structure/window,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"oGS" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"oHU" = (
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"oIt" = (
+/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)
+"oIx" = (
+/obj/machinery/button/door{
+ id = "Room Two";
+ name = "Door Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 7;
+ pixel_y = -24;
+ specialfunctions = 4
+ },
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"oJs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engine_smes)
"oKh" = (
/obj/structure/chair/wood/normal{
dir = 8
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"oKy" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"oLI" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"oNq" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"oNN" = (
+/obj/item/electropack/shockcollar,
+/obj/item/assembly/signaler,
+/turf/open/floor/plating,
+/area/security/prison)
+"oSk" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/theatre)
+"oSW" = (
+/obj/structure/grille/broken,
+/turf/open/floor/plating,
+/area/space/nearstation)
+"oTI" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_y = -29
+ },
+/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,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"oUh" = (
/obj/structure/disposalpipe/trunk{
dir = 1
@@ -59244,6 +58065,138 @@
/obj/machinery/disposal/bin,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"oVS" = (
+/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)
+"oWe" = (
+/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/effect/spawner/structure/window,
+/turf/open/floor/wood,
+/area/library)
+"oZl" = (
+/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)
+"pbw" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"pdg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/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/locker)
+"pet" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
+"pgY" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction/flip,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"phP" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/space,
+/area/solar/starboard/aft)
+"pmf" = (
+/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)
+"pmj" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"pnl" = (
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"pnx" = (
+/obj/machinery/light_switch{
+ pixel_y = 28
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/circuit,
+/area/ai_monitored/nuke_storage)
+"pnS" = (
+/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/floor/plating,
+/area/space/nearstation)
"poc" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -59253,6 +58206,41 @@
},
/turf/open/floor/plasteel,
/area/science/mixing)
+"puG" = (
+/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)
+"pAE" = (
+/obj/machinery/vending/cola/space_up,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"pGr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"pHl" = (
/obj/structure/table,
/obj/item/storage/box/beakers{
@@ -59279,6 +58267,16 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"pIA" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"pKz" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/closed/wall,
+/area/maintenance/port)
"pLn" = (
/obj/machinery/conveyor/inverted{
dir = 5;
@@ -59286,49 +58284,7 @@
},
/turf/open/floor/plating,
/area/maintenance/disposal)
-"qeQ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/science/circuit)
-"qoW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-18"
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
-"quT" = (
-/obj/structure/lattice,
-/obj/structure/grille/broken,
-/turf/open/space/basic,
-/area/space/nearstation)
-"qIw" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/carpet,
-/area/crew_quarters/cryopod)
-"qQP" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-14"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
-"rcD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/science/circuit)
-"rfW" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/maintenance/disposal/incinerator)
-"rjA" = (
+"pMv" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -59337,23 +58293,463 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"pNj" = (
+/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)
+"pNO" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
+"pQA" = (
+/obj/machinery/light/small,
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"pRx" = (
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/machinery/computer/slot_machine,
+/obj/item/coin/iron,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"pUo" = (
+/obj/structure/fireplace,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"pVa" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/heads/captain)
+"pWH" = (
+/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/wood,
+/area/library)
+"pWO" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"qaZ" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"qcu" = (
+/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/hallway/primary/starboard)
+"qdm" = (
+/obj/machinery/autolathe{
+ name = "public autolathe"
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
+"qet" = (
+/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)
+"qeQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/science/circuit)
+"qeZ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/crew_quarters/bar)
+"qnd" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
+ },
+/obj/structure/light_construct{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"qqY" = (
+/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)
+"quT" = (
+/obj/structure/lattice,
+/obj/structure/grille/broken,
+/turf/open/space/basic,
+/area/space/nearstation)
+"qvo" = (
+/obj/structure/chair/comfy/brown{
+ color = "#66b266";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"qwZ" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"qxb" = (
+/obj/machinery/vr_sleeper{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"qzE" = (
+/obj/machinery/door/airlock{
+ name = "Shower Room"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/toilet)
+"qGM" = (
+/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)
+"qIw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/cryopod)
+"qIT" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"qIZ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/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)
+"qKJ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/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/dorms)
+"qKZ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/security/execution/transfer)
+"qMf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/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)
+"qPl" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/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/dorms)
+"qPJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/camera{
+ c_tag = "Bar Backroom";
+ dir = 2
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"qRq" = (
+/obj/structure/table,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/recharger,
+/obj/item/gun/energy/laser/practice,
+/obj/item/gun/energy/laser/practice,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"qVa" = (
+/obj/structure/sign/poster/official/help_others{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/starboard)
+"qXl" = (
+/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)
+"qYi" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"qZv" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"rak" = (
+/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)
+"rcD" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/science/circuit)
+"rfu" = (
+/obj/item/reagent_containers/glass/bucket,
+/turf/open/floor/grass,
+/area/security/prison)
+"rfE" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"rfW" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/maintenance/disposal/incinerator)
+"rgv" = (
+/obj/structure/bed,
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/plating,
+/area/security/prison)
+"rkR" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
+"rmC" = (
+/obj/structure/fans/tiny/invisible,
+/turf/open/space/basic,
+/area/space)
"rmX" = (
/obj/structure/table,
/obj/item/reagent_containers/food/drinks/beer,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"rmY" = (
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#d8b1b1"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"rnY" = (
+/obj/effect/spawner/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/space/nearstation)
+"rrJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"ruS" = (
+/obj/structure/closet/athletic_mixed,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"rAJ" = (
+/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
+ },
+/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,
+/area/crew_quarters/locker)
"rBq" = (
/obj/item/clothing/head/kitty,
/obj/item/clothing/under/maid,
/obj/item/clothing/mask/muzzle,
/turf/open/floor/plating,
/area/maintenance/bar)
+"rEQ" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"rJv" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/sign/poster/official/space_cops{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
"rKP" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
/turf/open/floor/plating,
/area/construction)
+"rKZ" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"rLg" = (
+/turf/closed/wall/r_wall,
+/area/hallway/primary/central)
+"rMI" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/space,
+/area/solar/port/fore)
"rMN" = (
/obj/structure/bed,
/obj/item/tank/internals/anesthetic,
@@ -59376,6 +58772,29 @@
},
/turf/open/floor/plasteel,
/area/science/mixing)
+"rTD" = (
+/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)
+"rXv" = (
+/obj/machinery/hydroponics/constructable,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/hydroponics)
"saK" = (
/obj/structure/closet/crate,
/obj/item/target/alien,
@@ -59388,6 +58807,43 @@
/obj/item/gun/energy/laser/practice,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"sbs" = (
+/turf/open/floor/plating,
+/area/space/nearstation)
+"sfO" = (
+/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)
+"sfY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"shX" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"siG" = (
+/obj/machinery/vending/clothing,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
"slk" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -59400,16 +58856,101 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"sno" = (
+/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)
+"srw" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"svt" = (
+/obj/structure/target_stake,
+/obj/item/target/syndicate,
+/turf/open/floor/plating,
+/area/security/prison)
+"sxe" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"sxs" = (
+/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)
+"szF" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"szH" = (
+/obj/machinery/shower{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
"sAM" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
},
/area/maintenance/bar)
+"sBu" = (
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 4
+ },
+/area/crew_quarters/fitness)
+"sCo" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/space,
+/area/solar/starboard/fore)
"sEt" = (
/turf/open/floor/wood{
icon_state = "wood-broken7"
},
/area/maintenance/bar)
+"sEJ" = (
+/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)
"sLv" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
@@ -59425,6 +58966,29 @@
/obj/machinery/door/airlock/maintenance/abandoned,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"sOO" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
+"sPj" = (
+/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)
+"sPA" = (
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"sQX" = (
/turf/open/floor/plating,
/area/space)
@@ -59436,6 +59000,38 @@
/obj/structure/chair/office/light,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"sTt" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"sVN" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"sWr" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
"sWR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -59445,6 +59041,16 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
+"sXo" = (
+/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/dark,
+/area/crew_quarters/fitness)
"sXy" = (
/obj/machinery/door/airlock/external{
name = "Security External Airlock";
@@ -59463,17 +59069,54 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/hallway/secondary/service)
+"taU" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/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)
+"tcE" = (
+/obj/structure/door_assembly/door_assembly_mai,
+/obj/item/electronics/airlock,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"thl" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/sleeper)
+"thY" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/maintenance/fore/secondary)
+"tku" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/theatre)
"tkU" = (
/turf/open/floor/wood{
icon_state = "wood-broken5"
},
/area/maintenance/bar)
-"tlO" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "applebush"
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
+"tpb" = (
+/turf/open/floor/plating/foam,
+/area/space/nearstation)
"tqg" = (
/obj/machinery/cryopod{
dir = 4
@@ -59489,10 +59132,100 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
+"trk" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"trl" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4;
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"trM" = (
+/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)
+"tsY" = (
+/obj/structure/urinal{
+ pixel_y = 32
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/toilet)
+"ttp" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/sink{
+ dir = 1;
+ pixel_y = 25
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/crew_quarters/dorms)
+"ttF" = (
+/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)
"tur" = (
/obj/item/restraints/handcuffs/fake,
/turf/open/floor/plating,
/area/maintenance/bar)
+"tyg" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
+"tDE" = (
+/obj/structure/grille,
+/obj/structure/lattice,
+/turf/open/floor/plating,
+/area/space/nearstation)
+"tEy" = (
+/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/dorms)
"tMl" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/showroomfloor,
@@ -59503,11 +59236,39 @@
},
/turf/open/floor/plasteel/white,
/area/science/mixing)
+"tPS" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/crew_quarters/theatre)
"tPT" = (
/obj/machinery/chem_dispenser/drinks/beer,
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
+"tQu" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"tRe" = (
/obj/machinery/chem_master,
/turf/open/floor/plasteel/white,
@@ -59518,12 +59279,52 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"tTh" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"tTt" = (
+/obj/structure/sign/departments/restroom,
+/turf/closed/wall,
+/area/crew_quarters/toilet)
+"tVp" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"tVQ" = (
+/obj/structure/table,
+/obj/item/folder/blue,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
"tXL" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"tYn" = (
+/obj/structure/falsewall,
+/turf/open/floor/plating,
+/area/security/prison)
+"uao" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
"uaw" = (
/obj/machinery/power/apc{
areastring = "/area/storage/art";
@@ -59536,18 +59337,128 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"udn" = (
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/obj/structure/chair/sofa/right{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"udp" = (
/obj/item/crowbar/large,
/obj/structure/rack,
/obj/item/flashlight,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"udS" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -22
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
+"ueP" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"uhG" = (
+/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/crew_quarters/dorms)
+"uhH" = (
+/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)
+"uip" = (
+/obj/machinery/vending/clothing,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"uiR" = (
+/obj/structure/lattice,
+/turf/closed/wall,
+/area/security/prison)
+"uiT" = (
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"ujF" = (
/obj/machinery/cryopod{
dir = 4
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
+"ukL" = (
+/obj/structure/closet/boxinggloves,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"ulP" = (
+/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/crew_quarters/fitness)
+"unN" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/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)
"uoB" = (
/obj/structure/table/reinforced,
/obj/item/multitool,
@@ -59558,12 +59469,25 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"urE" = (
-/obj/machinery/autolathe{
- name = "public autolathe"
+"uqO" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/poster/contraband/fun_police{
+ pixel_x = 32
},
/turf/open/floor/plasteel,
-/area/quartermaster/office)
+/area/hallway/primary/fore)
+"urH" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"usD" = (
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/crew_quarters/theatre)
"usO" = (
/obj/machinery/vending/snack/random,
/obj/machinery/light/small{
@@ -59580,10 +59504,75 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"uuT" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"uvZ" = (
/obj/structure/mineral_door/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
+"uBW" = (
+/turf/closed/wall,
+/area/crew_quarters/abandoned_gambling_den)
+"uFF" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/space/nearstation)
+"uGq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall,
+/area/engine/engine_smes)
+"uJq" = (
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/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)
+"uJI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"uNs" = (
+/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)
"uNu" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -59594,6 +59583,26 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"uOb" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"uOn" = (
+/obj/structure/chair/office/light,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/gravity_generator)
"uPT" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -59601,6 +59610,31 @@
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"uTQ" = (
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 4;
+ name = "4maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"uUC" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space,
+/area/solar/port/aft)
+"uVo" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green{
+ on = 0;
+ pixel_x = -7;
+ pixel_y = 12
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
"uVS" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -59613,20 +59647,23 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"uZN" = (
-/obj/machinery/light{
+"uWs" = (
+/obj/effect/turf_decal/tile/red,
+/obj/structure/chair{
dir = 1
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/turf/open/floor/plasteel,
+/area/hallway/primary/fore)
+"uXD" = (
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space/nearstation)
+"vbc" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
},
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-03"
- },
-/turf/open/floor/plasteel/white/corner{
- dir = 1
- },
-/area/hallway/secondary/entry)
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
"vbD" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/command/glass{
@@ -59638,6 +59675,48 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
+"vbP" = (
+/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)
+"vfe" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"vgX" = (
+/obj/item/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 27
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"vhc" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/machinery/washing_machine,
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
+"viT" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"vjm" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/rag,
@@ -59646,11 +59725,43 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"vnw" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 8;
+ name = "8maintenance loot spawner"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port/aft)
+"voH" = (
+/obj/structure/closet/wardrobe/cargotech,
+/obj/item/radio/headset/headset_cargo,
+/turf/open/floor/plasteel,
+/area/quartermaster/storage)
+"vpY" = (
+/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)
+"vqa" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/sign/departments/custodian{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"vsM" = (
/obj/machinery/power/apc/auto_name/south,
/obj/structure/cable,
/turf/open/floor/carpet,
/area/crew_quarters/cryopod)
+"vtO" = (
+/obj/structure/sign/poster/official/twelve_gauge,
+/turf/closed/wall/r_wall,
+/area/ai_monitored/security/armory)
"vxh" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -59662,7 +59773,7 @@
"vzp" = (
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/stock_parts/cell/high,
@@ -59675,6 +59786,36 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"vAP" = (
+/obj/structure/table/wood,
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/wood,
+/area/security/vacantoffice)
+"vAZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hydroponics)
+"vBb" = (
+/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/crew_quarters/fitness)
+"vBN" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
"vCb" = (
/obj/machinery/rnd/production/techfab/department/service,
/turf/open/floor/plasteel,
@@ -59683,6 +59824,48 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"vEA" = (
+/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)
+"vGp" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/quartermaster/storage";
+ name = "Cargo Bay APC";
+ pixel_x = 1;
+ pixel_y = -24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
"vHj" = (
/obj/machinery/door/airlock/public/glass{
name = "Cryogenics "
@@ -59696,17 +59879,104 @@
"vHY" = (
/turf/open/floor/plating,
/area/science/mixing)
+"vKR" = (
+/obj/machinery/computer/arcade/minesweeper{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"vMd" = (
+/obj/structure/chair/comfy/black{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"vOw" = (
+/obj/structure/table/wood,
+/obj/item/instrument/guitar,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"vPl" = (
+/obj/structure/girder,
+/turf/open/floor/plating,
+/area/space/nearstation)
"vPE" = (
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"vQS" = (
+/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)
+"vXW" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/item/coin/gold,
+/turf/open/floor/plasteel,
+/area/crew_quarters/fitness)
+"wab" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"wbB" = (
+/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/structure/sign/poster/contraband/clown{
+ pixel_y = -32
+ },
+/obj/item/megaphone/clown,
+/turf/open/floor/plasteel,
+/area/crew_quarters/theatre)
+"wcX" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_y = 6
+ },
+/obj/item/pen/fountain,
+/turf/open/floor/plasteel/dark,
+/area/hallway/primary/central)
+"wdQ" = (
+/obj/structure/fireplace,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 23
+ },
+/turf/open/floor/plating,
+/area/maintenance/port)
"wfR" = (
/obj/item/electropack/shockcollar,
/obj/item/assembly/signaler,
/turf/open/floor/plating,
/area/maintenance/bar)
+"wgV" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Holodeck Door"
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/fitness)
"wkN" = (
/turf/closed/wall,
/area/science/circuit)
@@ -59751,18 +60021,154 @@
},
/turf/closed/wall,
/area/hallway/secondary/service)
+"wCs" = (
+/obj/machinery/door/airlock{
+ name = "Theatre Backstage";
+ req_access_txt = "46"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/white/side{
+ dir = 4
+ },
+/area/maintenance/fore)
+"wDQ" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "applebush"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/port)
"wHz" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"wJq" = (
+/obj/effect/landmark/carpspawn,
+/turf/open/space/basic,
+/area/space)
+"wLe" = (
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
+"wNd" = (
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"wSg" = (
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
+/obj/structure/chair/sofa/left,
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"wTu" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/circuit,
+/area/ai_monitored/nuke_storage)
+"wTC" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/library)
+"wUY" = (
+/obj/structure/table,
+/obj/item/stack/packageWrap,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
+/turf/open/floor/plasteel,
+/area/hallway/secondary/service)
+"wVp" = (
+/obj/machinery/camera{
+ c_tag = "Locker Room South";
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/personal,
+/turf/open/floor/plasteel,
+/area/crew_quarters/locker)
+"wWo" = (
+/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,
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
+"wWF" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Gravity Generator";
+ req_access_txt = "11"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/gravity_generator)
+"wZk" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/gravity_generator)
+"wZI" = (
+/obj/effect/spawner/lootdrop/keg,
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
+"xah" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/library)
+"xbZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"xcw" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/door/airlock/maintenance{
+ req_access_txt = "12"
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"xgF" = (
/obj/structure/chair/stool/bar,
/turf/open/floor/wood{
icon_state = "wood-broken5"
},
/area/maintenance/bar)
+"xgY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/carpet,
+/area/crew_quarters/dorms)
+"xgZ" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red,
+/turf/open/floor/plasteel,
+/area/security/brig)
"xhV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -59783,31 +60189,154 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/service)
+"xlX" = (
+/obj/machinery/door/firedoor,
+/turf/open/space/basic,
+/area/space)
+"xqV" = (
+/obj/structure/table/wood,
+/obj/item/instrument/piano_synth,
+/turf/open/floor/wood,
+/area/crew_quarters/theatre)
+"xwI" = (
+/obj/item/radio/intercom{
+ pixel_y = 25
+ },
+/obj/machinery/vending/wardrobe/curator_wardrobe,
+/turf/open/floor/carpet,
+/area/library)
+"xyp" = (
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/machinery/door/airlock/vault,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/nuke_storage)
+"xzw" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 5;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
+"xzU" = (
+/obj/structure/reagent_dispensers/keg/semen,
+/turf/open/floor/plating,
+/area/maintenance/bar)
+"xCs" = (
+/obj/structure/chair/sofa,
+/obj/structure/window{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"xCE" = (
+/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)
"xEu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
-"xFY" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-06"
- },
-/turf/open/floor/plasteel/white/corner{
- dir = 1
- },
-/area/hallway/secondary/entry)
"xIa" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/grille_or_trash,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"xIU" = (
+/obj/item/chair/wood,
+/turf/open/floor/plating,
+/area/maintenance/port)
+"xNd" = (
+/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)
+"xPX" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
+"xWW" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/turf/open/space,
+/area/solar/starboard/fore)
+"xXW" = (
+/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)
+"xZr" = (
+/obj/structure/sign/poster/official/fruit_bowl{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/primary/starboard)
+"xZN" = (
+/obj/machinery/power/apc{
+ areastring = "/area/ai_monitored/nuke_storage";
+ dir = 1;
+ name = "Vault APC";
+ pixel_y = 25
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/circuit,
+/area/ai_monitored/nuke_storage)
+"yar" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"ycu" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -59819,6 +60348,47 @@
/obj/machinery/suit_storage_unit/rd,
/turf/open/floor/plasteel,
/area/science/mixing)
+"ydZ" = (
+/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 = 10
+ },
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/bar)
+"yeR" = (
+/obj/structure/sign/poster/contraband/space_up{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
+"yfs" = (
+/obj/machinery/power/apc{
+ areastring = "/area/security/detectives_office";
+ dir = 4;
+ name = "Detective's Office APC";
+ pixel_x = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/security/detectives_office)
+"yhO" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/snacks/bluecherrycupcake{
+ pixel_y = 5
+ },
+/turf/open/floor/wood,
+/area/crew_quarters/bar)
(1,1,1) = {"
aaa
@@ -65840,11 +66410,11 @@ aaa
aaa
aaa
aaa
-cdh
+pnS
aaa
aaa
aaa
-cdh
+pnS
aaa
aaa
aaa
@@ -65857,7 +66427,7 @@ aaa
aaa
aaa
aaa
-aVw
+wJq
aaa
aaa
aaa
@@ -66091,9 +66661,9 @@ aaa
aaa
aaa
aaa
-cdh
+pnS
aaa
-cdh
+pnS
aaa
aaa
aaa
@@ -66105,9 +66675,9 @@ gXs
aaa
aaa
aaa
-cdh
+pnS
aaa
-cdh
+pnS
aaa
aaa
aaa
@@ -66354,11 +66924,11 @@ gXs
aaa
aaa
gXs
-apv
+viT
gXs
gXs
gXs
-apv
+viT
gXs
aaa
aaa
@@ -66604,11 +67174,11 @@ aaa
aaa
aaa
aaa
-apv
-apv
+viT
+viT
gXs
aag
-apv
+viT
gXs
gXs
aaa
@@ -66618,11 +67188,11 @@ aaa
aaa
gXs
gXs
-apv
-apv
-aQd
+viT
+viT
+pNO
aag
-apv
+viT
aaa
aaa
aaa
@@ -66861,11 +67431,11 @@ aaa
aaa
aaa
aaa
-aGk
-aQe
+kyA
+maK
aaa
-aQe
-aRx
+maK
+hIi
gXs
aoV
aaa
@@ -66875,11 +67445,11 @@ aaa
aaa
aaa
gXs
-aGk
-aQe
+kyA
+maK
aaa
-aQe
-aRx
+maK
+hIi
aaa
aaa
aaa
@@ -67118,11 +67688,11 @@ aaa
aaa
aaa
aaa
-aab
+uFF
aaa
cpe
aaa
-asL
+eYr
aaa
aaa
aaa
@@ -67132,11 +67702,11 @@ aaa
aaa
aaa
aaa
-aab
+uFF
aaa
cwV
aaa
-asL
+eYr
aaa
aaa
aaa
@@ -67374,7 +67944,7 @@ aaa
aaa
aaa
aae
-alN
+kMg
gXs
aaa
aaa
@@ -67631,7 +68201,7 @@ aaa
aaa
aaa
aaa
-alN
+kMg
gXs
aaa
aaa
@@ -67888,7 +68458,7 @@ aaa
aaa
aaa
aaa
-alN
+kMg
gXs
aaa
aaa
@@ -68145,7 +68715,7 @@ aaa
aaa
aaa
aaa
-alN
+kMg
gXs
aaa
cqq
@@ -68402,7 +68972,7 @@ aaf
aaf
aaf
aaa
-alN
+kMg
arB
asE
cyb
@@ -69175,7 +69745,7 @@ apN
apN
apN
apJ
-xFY
+hUC
ayk
awW
aAD
@@ -69199,7 +69769,7 @@ aaa
aaa
aaa
arB
-uZN
+dqG
ayk
awW
aAD
@@ -70475,7 +71045,7 @@ aaa
awW
aOh
ayl
-bRf
+cPO
aRY
awW
aaa
@@ -70487,7 +71057,7 @@ awW
awZ
ayl
ayl
-aQR
+bgi
awW
aaa
aaa
@@ -71771,7 +72341,7 @@ awW
arB
awZ
aym
-qoW
+lre
awW
aaf
aaa
@@ -73052,7 +73622,7 @@ aUO
aUy
aWm
aWf
-bcW
+vAP
czK
bhN
bcl
@@ -74070,7 +74640,7 @@ aHy
ayl
aKk
aLA
-aHD
+iRI
aNf
aLA
aQD
@@ -76096,8 +76666,8 @@ ady
ady
ady
ady
+rMI
ajq
-aTp
ajW
akB
alh
@@ -76140,9 +76710,9 @@ aXQ
aXQ
aPz
aPz
-bcJ
+dSI
aPz
-bkg
+bhQ
bjj
bkF
aaa
@@ -76392,14 +76962,14 @@ aPA
aPA
aPA
aXQ
-baO
+aZt
aXQ
-bdV
+ljN
aPz
-axS
-bgs
-biM
-bkg
+eTc
+xIU
+hKX
+bhQ
bjj
bkF
aaa
@@ -76644,20 +77214,20 @@ aNm
aOl
aPA
aQO
+aSh
aTw
aUU
-cek
aWn
aXQ
-bbL
+aZv
aXQ
-bgl
+bbL
aPz
-aEb
-bhK
-biZ
-bvn
-bml
+bdJ
+fFp
+bgr
+niE
+mDU
bkF
aaa
aaa
@@ -76890,7 +77460,7 @@ ayw
atN
aAV
aBQ
-bbA
+aDh
aDo
aFQ
aHe
@@ -76908,12 +77478,12 @@ aTy
aWy
aYe
bbq
-bcS
+aZw
aPz
-aEc
-bhP
-bjD
-bkg
+bct
+bfa
+ftK
+bhQ
bjk
bkE
aaa
@@ -77163,14 +77733,14 @@ aSV
aUo
aUX
aXp
-bct
-bdJ
-bgr
+baO
+aZo
+baw
aPz
-aSG
-bhQ
-bjW
-bwP
+wdQ
+cBn
+bgs
+pKz
bjk
bkF
aaa
@@ -77414,9 +77984,9 @@ aLE
aLE
aOn
aPA
-aQQ
+aQP
aQN
-aTz
+aTB
aUt
aWo
aXQ
@@ -77427,7 +77997,7 @@ aPz
aPz
aPz
aPz
-bkg
+bhQ
bjk
aPz
aaa
@@ -77471,7 +78041,7 @@ ccb
ccb
ccb
aaa
-aUf
+fcu
aaa
ccb
ccb
@@ -77666,12 +78236,12 @@ bxk
aDo
aDo
aIX
-blt
+osd
aLE
aLE
aOp
aPA
-aMg
+aQR
aQN
aQN
aUt
@@ -77680,7 +78250,7 @@ aQN
aQN
aQN
aQN
-bfe
+jKM
bbO
aPA
bgt
@@ -77728,7 +78298,7 @@ aaa
aaf
aaa
aaa
-aUg
+uUC
aaa
aaa
aaf
@@ -77743,7 +78313,7 @@ aaa
aaa
aaa
aaa
-aaa
+wJq
aaa
aaa
aaa
@@ -77930,15 +78500,15 @@ aOl
aPC
aQN
aQN
-aTB
-aUq
-aUV
-aXv
-bbr
+aTz
+aUp
+rAJ
+aXr
+aZx
aQN
aQN
cBh
-bit
+bdL
aPA
bgt
bhR
@@ -77985,7 +78555,7 @@ aaf
aaf
aaf
aaf
-aUg
+uUC
aaf
aaf
aaf
@@ -78178,23 +78748,23 @@ aBQ
aDn
aDo
aDo
-aFU
+aHD
aIZ
aBQ
aLE
aLE
aOq
aPD
-aQV
+aQT
aQN
aTC
-aUr
+aUs
aUY
-aXw
-bbU
+aXv
+aYS
aQN
aQN
-bfe
+jKM
bbO
aPA
aSg
@@ -78437,18 +79007,18 @@ aDo
aDo
aDo
aIY
-blt
+osd
aLE
aLE
aOl
aPA
-aQX
+siG
aQN
aTC
-aUr
-aYX
-aXx
-bcu
+aUs
+qIZ
+aXt
+taU
aQN
aQN
aPA
@@ -78691,7 +79261,7 @@ aAY
aBQ
aDp
aDo
-aFS
+aFU
aDo
aJb
aKp
@@ -78699,13 +79269,13 @@ aLE
aLE
aOl
aPE
-aQY
+aQV
aQN
aTC
-aUs
-aWB
-aXx
-bcu
+aUu
+rTD
+aXt
+taU
aQN
aQN
aZB
@@ -78936,7 +79506,7 @@ alU
aaf
aaH
alU
-aQT
+arO
amC
amC
avc
@@ -78956,13 +79526,13 @@ aLH
aLE
aOl
aPA
-aSX
+aQU
aQN
-aTD
-aUu
-aXk
-aXA
-bcw
+unN
+qXl
+pdg
+aXw
+oVS
aQN
aQN
aZA
@@ -79213,7 +79783,7 @@ aLK
aLK
aOr
aPA
-aTx
+aQX
aQN
aSi
aUv
@@ -79222,8 +79792,8 @@ aTy
aTy
aTy
aTy
-bcT
-chZ
+bbs
+bcw
bfd
bgw
aZE
@@ -79470,18 +80040,18 @@ aLJ
aLE
aOl
aPA
-aTA
+jDh
aQN
-aUp
+aTD
+gDv
aUZ
-aXr
aYU
aYU
aYU
aYU
aYU
-ckE
-bTt
+bcu
+bfe
aYb
aZE
bjm
@@ -79713,15 +80283,15 @@ aoV
aaf
avY
axo
-ayB
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaa
-aaa
+arP
+iCE
+joc
+aGD
+wbB
+aCr
+eDv
+rkR
+eDv
aKu
aLM
aLF
@@ -79731,14 +80301,14 @@ aPG
aPG
aPG
aPG
-aZx
+puG
aQW
aQW
aQW
aQW
-bdL
+wVp
aPA
-clP
+jOF
aYb
aZE
bjp
@@ -79967,25 +80537,25 @@ aaf
aoV
aoV
aoV
-aoV
+aaa
avY
axo
-ayA
-aaf
-aBa
-aBa
-aBa
-aBa
-aBa
-aBa
-aaf
+arP
+usD
+fZD
+aGr
+aHI
+kmw
+qIT
+trl
+eDv
aKt
aLL
bDe
aOl
aPF
-aSh
-aQt
+aQY
+aSk
aTE
aPG
aPA
@@ -80227,15 +80797,15 @@ aaf
aaf
avY
axo
-ayA
-aaa
-aBa
-aBT
-aDs
-aEN
-aGb
-aBa
-aaa
+arP
+aCh
+oSk
+dCk
+aHK
+aCr
+lUd
+wab
+eDv
aKt
aLN
aLE
@@ -80246,16 +80816,16 @@ aRa
aTG
aPG
aWu
-aYa
+aYc
aZD
aZD
-hcE
+hVk
aZD
aZD
bff
-bfk
+vGp
aZE
-bgx
+voH
bjr
ama
bmh
@@ -80314,18 +80884,18 @@ bLv
bLv
bLv
aaa
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+wJq
aaa
aaa
aaa
@@ -80486,13 +81056,13 @@ avZ
axp
ayC
azH
-aBb
-aBS
-aDr
-aEM
-aGa
-aHF
-aJd
+eJz
+aGv
+aCr
+aCr
+lUd
+wab
+eDv
aKv
aLN
aLE
@@ -80502,8 +81072,8 @@ aQZ
aRa
aTF
aPG
-aWw
-aYc
+aSX
+ffm
aZF
aZF
aZF
@@ -80571,15 +81141,15 @@ cqK
crl
bLv
aaa
-aaa
-aaa
-aae
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+ctv
+ctv
+ctv
+ctv
+ctv
+ctv
+ctv
+uXD
aaa
aaa
aaa
@@ -80740,16 +81310,16 @@ aGh
aqR
aqR
awb
-axo
-ayA
-aaa
-aBa
+djB
+wCs
+eWl
+eyC
aBV
-alu
-aEM
-aGd
-aHG
-aJe
+hot
+nzc
+jRs
+aBU
+aMr
aKw
aLP
aMR
@@ -80764,7 +81334,7 @@ aXJ
bgA
aZp
baY
-aYZ
+bcJ
bcF
bfg
bgA
@@ -80828,15 +81398,15 @@ cAQ
crm
bLv
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
+uXD
aaa
aaa
aaa
@@ -81000,13 +81570,13 @@ awa
axq
ayD
azI
-aBc
+dyS
aBU
-aDt
-aEO
-aGc
-aHF
-aJd
+nGN
+gvC
+lUd
+tPS
+eDv
aKb
aLN
aMQ
@@ -81053,7 +81623,7 @@ aoV
bCq
bHE
bHE
-bad
+iQA
cdb
bCq
bVE
@@ -81087,17 +81657,17 @@ bLv
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+uXD
+uXD
aaa
aaa
aaa
@@ -81254,16 +81824,16 @@ aaa
aaa
aag
avY
-axo
+hKI
ayA
-aaa
-aBa
-aBW
+fLb
+aMr
+sxe
aDv
-aEP
-aGe
-aBa
-aaa
+gvC
+lUd
+tPS
+eDv
aKt
aLN
aMS
@@ -81278,7 +81848,7 @@ aXM
bfi
cBi
bbS
-bdM
+bcS
bbt
bfi
beD
@@ -81341,20 +81911,20 @@ bCq
bCq
bCq
bCq
+gXs
+gXs
+aaa
+gXs
aaa
aaa
aaa
+gXs
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -81511,21 +82081,21 @@ aaa
aaa
aag
avY
-axo
+hKI
ayA
-aaf
-aBa
-aBa
-aBa
-aBa
-aBa
-aBa
-aaf
+dLh
+aMr
+aMr
+aOH
+gvC
+tku
+joq
+eDv
aKt
aLN
aMS
aOi
-tlO
+wDQ
aPK
aSl
aTH
@@ -81580,14 +82150,14 @@ mrR
dKP
odx
rBq
-bat
+xzU
bCq
bUs
bLv
aaa
bLv
bJf
-cfS
+ccd
bCq
aaa
aaa
@@ -81596,22 +82166,22 @@ aaa
aaa
aaf
aaf
-cig
+aaa
aaf
+gXs
+muq
+crn
+bij
+bij
+bij
+bij
+bij
+vbc
+btG
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -81770,14 +82340,14 @@ aag
avY
axs
ayF
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaa
-aaa
+xqV
+vOw
+eIe
+aOH
+eDv
+eDv
+fXH
+eDv
aKx
aLN
aMS
@@ -81792,7 +82362,7 @@ aWC
baS
aZI
baS
-bdW
+cCn
bdS
bdU
ckQ
@@ -81807,7 +82377,7 @@ bbR
btu
bbR
bOL
-bPR
+lNz
byF
bwW
bGm
@@ -81849,26 +82419,26 @@ cjJ
cjJ
cjJ
cjJ
-cjJ
-cjJ
-cjJ
-aaa
+oJs
+uGq
+uGq
+bij
crn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bij
+bij
+ilO
+udS
+bnT
+bph
+bsc
+bsc
+bsc
+mdQ
+btG
+gXs
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -82044,7 +82614,7 @@ aPK
aSm
aTI
aPK
-aXs
+aWB
cCj
apd
apd
@@ -82109,23 +82679,23 @@ cov
cpj
cpS
cjJ
+jUc
+mdQ
+btG
+uOn
+eeD
+srw
+bnV
+bph
+bih
+big
+bii
+bsc
+btG
aaa
-crn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -82301,9 +82871,9 @@ aPK
aSn
aTK
aPK
-aXt
-aZo
-aYj
+yfs
+lev
+asW
baW
bLE
bLG
@@ -82365,24 +82935,24 @@ cnN
cox
cpl
cpU
-cjJ
-aaf
-crn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+epP
+oLI
+oLI
+gro
+oLI
+oLI
+qZv
+wWF
+bph
+big
+bgN
+bkZ
+bsc
+btG
aaa
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -82519,7 +83089,7 @@ aaa
acd
acd
acd
-afr
+eMV
acd
acd
aaa
@@ -82562,8 +83132,8 @@ apd
aYi
aqW
aqW
-aVT
-bSO
+bbQ
+sno
apd
aZH
aZK
@@ -82623,23 +83193,23 @@ cow
cpk
cpT
cjJ
+jUc
+qwZ
+btG
+qPJ
+nlN
+lQR
+bnV
+bph
+bii
+big
+bih
+bsc
+btG
aaa
-crn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -82774,10 +83344,10 @@ abc
abc
afu
abc
-age
-aeE
-afs
-ahw
+iSB
+kBF
+knR
+eWv
acd
aaa
aaa
@@ -82841,7 +83411,7 @@ bwY
byJ
bwe
bAc
-bwL
+bBI
bGn
bGn
bGn
@@ -82878,25 +83448,25 @@ clG
cnP
coz
cpn
-cjJ
-cjJ
-aaa
-crn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+lzY
+lzY
+bgO
+sWr
+bgO
+trk
+bsb
+iaq
+bnW
+bph
+bsc
+ncB
+bsc
+qwZ
+btG
+gXs
+uXD
+ctv
+uXD
aaa
aaa
aaa
@@ -83031,11 +83601,11 @@ aea
aeH
aft
abc
-agH
-aeF
-alr
-ajt
-afr
+fyr
+xbZ
+svt
+dQy
+eMV
aaa
aaa
aiU
@@ -83077,7 +83647,7 @@ aWG
aZa
baX
bcH
-bSZ
+bdE
apd
aZH
bnL
@@ -83138,22 +83708,22 @@ cpm
cjJ
aaf
aaf
-crn
aaa
aaa
+gXs
+szF
+bgO
+bgO
+bgO
+bgO
+bgO
+bgO
+wZk
+btG
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaT
-aaT
-aaa
+eMb
+ctv
+uXD
aaa
aaa
aaa
@@ -83277,7 +83847,7 @@ aaa
aaa
gXs
gXs
-brT
+sbs
abc
abu
abu
@@ -83289,10 +83859,10 @@ aeJ
afw
abc
abc
-aeF
+xbZ
aay
-ajt
-akd
+dQy
+uiR
aaf
aaf
aiU
@@ -83360,7 +83930,7 @@ bCq
bHD
bJe
bCq
-cib
+vnw
bHE
bHE
bHE
@@ -83395,22 +83965,22 @@ cjJ
cjJ
aaa
aaa
-crn
-aaf
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
aaa
-aaf
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+aaa
+aaa
+uXD
ctv
aaT
-aaT
aaa
aaa
aaa
@@ -83546,9 +84116,9 @@ aeI
afv
agf
abc
-aeF
+xbZ
aay
-ajt
+dQy
aiT
aiT
aiV
@@ -83581,17 +84151,17 @@ aKA
aLN
aMS
aOz
-qQP
+mMb
aPQ
aSa
aSr
aSr
apd
-asW
+aYZ
bLE
aqW
aqW
-bTq
+vQS
apd
beA
bqp
@@ -83599,7 +84169,7 @@ cNG
cNJ
bLF
aZK
-urE
+qdm
bbR
bqt
cBq
@@ -83652,21 +84222,21 @@ cpo
cjJ
aaa
aaa
-crn
-aaf
-aaT
-ctv
-ctv
-ctv
-ctv
-ctv
-ctv
-ctv
-aaT
aaa
-aaf
-ctv
-ctv
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+aaa
+aaa
+uXD
+uXD
aaT
aaa
aaa
@@ -83790,8 +84360,8 @@ aaa
aaa
aaa
aai
-cmH
-aay
+oNN
+lJX
abe
abw
acc
@@ -83803,9 +84373,9 @@ aeL
afy
agh
abc
-aeM
-afz
-aju
+qYi
+dEZ
+dIH
aiT
ajs
akb
@@ -83844,7 +84414,7 @@ aTL
aTP
aWD
apd
-aYh
+aYj
aZL
baU
baU
@@ -83860,8 +84430,8 @@ bnJ
bbR
bbR
bbR
-bWk
-bYG
+bty
+buJ
bwe
bxE
byM
@@ -83909,21 +84479,21 @@ cpp
cjJ
aaf
aaf
-cig
-aaf
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaf
-aaf
-aaf
-aaf
+aaa
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+gXs
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -84047,7 +84617,7 @@ aaa
aaa
gXs
aai
-cmI
+rgv
aay
abd
abv
@@ -84060,9 +84630,9 @@ aeK
afx
agg
abc
-ajX
-alx
-alY
+qRq
+npV
+lyB
aiU
ajr
aka
@@ -84152,7 +84722,7 @@ bLw
bLw
bLw
caq
-bCA
+cbw
bHE
ciT
bCq
@@ -84178,7 +84748,7 @@ aaf
aaa
aaa
aaa
-aaf
+aaa
aaa
aaa
aaa
@@ -84305,9 +84875,9 @@ aaf
aaf
ctv
acd
-aaM
-aaP
-aaY
+tYn
+abg
+qKZ
aby
aby
aby
@@ -84317,12 +84887,12 @@ aeN
afA
afA
abc
-afq
-agv
-ajY
-akC
-akE
-akJ
+nTu
+fLX
+rfE
+hYH
+aju
+akd
akK
als
ame
@@ -84387,14 +84957,14 @@ bCn
bGq
bGq
bGq
-bGq
+tyg
bLw
bGq
bGq
bGq
bLw
bGq
-bGq
+tyg
bTD
bUx
bVI
@@ -84409,7 +84979,7 @@ bVI
bVI
bVI
bTA
-bHF
+sOO
bHE
bHE
bHE
@@ -84420,7 +84990,7 @@ cnr
cnU
chD
cpq
-bVH
+cpV
cqw
cqO
crp
@@ -84563,26 +85133,26 @@ aai
aai
abf
aat
-aaU
-abg
+vKR
+abx
acd
acC
ada
adF
-aad
-abz
aef
-aeD
+aeM
+afz
+ogU
aav
+ueP
+dfH
+oAV
+jSk
+ajt
akc
-alM
-alZ
-akD
-akF
-alj
-all
-alm
-alo
+akJ
+alr
+amd
amL
anu
alq
@@ -84666,8 +85236,8 @@ bWB
bWB
bVI
cax
-cbw
-cby
+cbx
+cdh
ciU
cjK
ckA
@@ -84885,12 +85455,12 @@ aYl
bBi
aLY
bnN
-bTv
+boY
bqw
aJq
aJq
aYl
-bTw
+ovG
aLX
aJq
aJq
@@ -84923,8 +85493,8 @@ cdd
cea
bVI
caz
-cbx
-ccu
+cby
+cdj
cdv
cem
cem
@@ -85073,8 +85643,8 @@ aaf
aai
aan
aaw
-aaD
-aaL
+aaB
+ncI
aaJ
aat
abh
@@ -85328,9 +85898,9 @@ aaa
aag
aaa
aak
-aao
-aaz
-aaE
+aap
+rfu
+aaD
aat
aat
aat
@@ -85367,7 +85937,7 @@ ats
atY
auo
axy
-ayM
+ayN
azE
aAW
aCa
@@ -85404,7 +85974,7 @@ bqy
cBr
bqy
buK
-bTx
+mnP
aJw
aJq
aJq
@@ -85436,10 +86006,10 @@ bWB
bWB
cec
bVI
-bUw
+mFJ
ccw
chY
-clK
+ciX
cjM
ckB
ckB
@@ -85585,9 +86155,9 @@ aaa
aag
aaf
aaj
-aap
-aaB
-aaF
+aao
+aax
+aaC
aat
aat
adO
@@ -85624,7 +86194,7 @@ atu
cCi
awg
axy
-ayN
+ayM
azs
aAR
aBP
@@ -85704,8 +86274,8 @@ ckC
ccw
cnX
coH
-cjZ
-ckq
+cps
+cpX
cqz
cqR
ccw
@@ -85842,13 +86412,13 @@ aaa
aag
aaa
aal
-aaq
-aax
-aaN
+aar
+gks
+aaF
aat
-aaV
-cmn
-cms
+aaO
+aaW
+qvo
abB
acf
abM
@@ -85918,11 +86488,11 @@ bqA
brW
btB
buM
-aOJ
+bwi
bmr
aMm
aJq
-byV
+xzw
bCs
bCs
bEY
@@ -86099,13 +86669,13 @@ aaa
aag
aaf
aaj
-aar
-aaC
-aaO
+aaq
+iGV
+aaE
aat
-aaW
-cmp
-cmE
+aaN
+aaV
+itP
aat
acd
abL
@@ -86181,10 +86751,10 @@ aMn
aJq
bBi
bCs
-bDw
-bDz
-bFb
+bDv
bEX
+bFb
+ope
bFa
bKt
bLx
@@ -86361,7 +86931,7 @@ aat
aat
aat
aat
-cmr
+rKZ
aat
abD
acd
@@ -86380,9 +86950,9 @@ agj
auj
akl
akO
-afM
-afM
-amR
+pet
+pet
+hMk
anw
anz
aox
@@ -86430,7 +87000,7 @@ bnR
bpe
bqB
bqq
-bbQ
+btD
buO
bwk
bmr
@@ -86662,7 +87232,7 @@ aGq
aHO
aJl
ayW
-clV
+gYR
aJq
aOE
aJn
@@ -86695,7 +87265,7 @@ byP
aJq
bBi
bCs
-bDy
+bDw
bEZ
bGv
bHH
@@ -86707,7 +87277,7 @@ bNJ
bNJ
bKx
cjL
-bNL
+gbq
bNI
bUz
bVJ
@@ -86935,7 +87505,7 @@ bde
bcd
bcd
bcd
-bcd
+gFY
bcd
bcd
bcd
@@ -86999,7 +87569,7 @@ cEL
cFb
cFu
cFI
-cdj
+cGd
cGs
cGr
ccw
@@ -87127,14 +87697,14 @@ aaa
aag
aaf
aai
-aaA
-aaA
+qxb
+qxb
aaG
-aaA
-aaQ
+qxb
+aaP
aaX
-abj
-abG
+vhc
+fSL
acd
acD
acY
@@ -87190,7 +87760,7 @@ aZP
bbh
bcc
bdd
-bbX
+nyF
bfr
bgM
bif
@@ -87207,12 +87777,12 @@ bmr
bmr
byQ
aJq
-aJq
+bBi
bCs
bFa
bFa
-bER
bGw
+bER
bJk
bFa
bLA
@@ -87244,7 +87814,7 @@ cTa
ceZ
clQ
cgR
-bUX
+dGY
coM
cpv
cqb
@@ -87259,11 +87829,11 @@ cqb
cAo
cGt
cgx
-chU
+jMY
csd
cHa
csd
-chW
+uhH
ccw
aaa
aaT
@@ -87390,7 +87960,7 @@ aai
aai
aai
aai
-abx
+abj
abF
acd
acd
@@ -87408,9 +87978,9 @@ aiz
ajg
akl
akR
-afM
-afM
-amR
+pet
+pet
+hMk
anw
anz
aov
@@ -87449,22 +88019,22 @@ bbk
bbk
bbk
bfs
-aZM
+ove
aZM
aZM
aaf
aaf
-aaa
+kMg
aaf
-aaa
+kMg
aaf
-aaa
-aaa
-aaa
-aJn
+kMg
+aaf
+kMg
+rLg
aXf
aJq
-aJq
+bBi
bCs
bAM
bFa
@@ -87483,7 +88053,7 @@ bNI
bEP
bVJ
bVJ
-bSF
+bOM
bQd
bQP
bSt
@@ -87648,7 +88218,7 @@ aaa
aaf
aai
abi
-bVL
+szH
ach
acK
adf
@@ -87706,19 +88276,19 @@ bce
bdf
beb
aYv
+tVp
+lNn
aaf
aaf
+kMg
+kMg
aaf
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-aaa
-aJn
+rLg
+rLg
+rLg
+rLg
+rLg
+rLg
aXf
aJq
byU
@@ -87963,22 +88533,22 @@ aZR
bbm
bec
bfu
-bgO
-bgO
-bgO
-bmu
-bgO
-bgO
-bgO
-bgO
-bsb
-aaf
-aaf
-aaf
-aJn
+nnb
+aBa
+aBa
+aBa
+aBa
+aBa
+aBa
+rLg
+gGD
+tVQ
+wcX
+dBt
+kFf
aXf
aJq
-aJq
+bBi
bCs
bFa
bFa
@@ -88169,11 +88739,11 @@ cpg
acv
adi
adi
-arl
+fwD
aeW
agQ
ahv
-agX
+ahQ
aiI
aiH
ajB
@@ -88186,7 +88756,7 @@ anw
anz
aov
aph
-ayY
+gzJ
ard
ard
ard
@@ -88220,22 +88790,22 @@ aZR
aZR
aZR
bft
-bgN
-bgN
-bgN
-bmv
-bkI
-bnT
-bpg
+oaP
+aBa
+aBT
+aDs
+aEN
+aGb
+aBa
bqD
bsa
-bgO
-buP
-bwm
-bxH
+vfe
+bsa
+bsa
+kFf
byS
aJq
-aMh
+yar
bCs
bCs
bCs
@@ -88423,10 +88993,10 @@ aaa
aaZ
abH
acl
-ajC
+cxA
acL
adi
-anq
+vtO
agp
agT
ahx
@@ -88437,11 +89007,11 @@ ajI
akl
akT
aww
-afM
-amR
+pet
+hMk
anw
anz
-aJN
+oZl
apk
anw
anw
@@ -88450,9 +89020,9 @@ anw
aVh
avj
awl
-ayZ
-aCf
-aDh
+axC
+ayY
+rJv
azZ
azZ
azZ
@@ -88477,18 +89047,18 @@ bbm
bdh
bee
bfv
-bgN
-bih
-big
-bii
-bgN
-bnV
-bph
+nDn
+aBb
+pnx
+aDr
+aEM
+aGa
+aHF
bqF
-bsd
-btG
+bsa
+iFt
+buQ
buQ
-bwn
bxI
bwa
bAg
@@ -88734,18 +89304,18 @@ bcf
bdg
bed
bfv
-bgN
-big
-bgN
-bkZ
-bgN
-bnU
-bph
+sVN
+dqD
+wTu
+alu
+aEM
+aGd
+xyp
+bqE
+bqE
+bqE
+bqE
bqE
-bsc
-btF
-bph
-bsc
knx
bvW
bAf
@@ -88952,10 +89522,10 @@ akq
akQ
agj
agj
-amS
+aiX
anx
anz
-aKS
+aoz
apm
aqd
anA
@@ -88964,9 +89534,9 @@ atd
anA
avk
awk
-aCe
-aCV
-aHZ
+axE
+ayZ
+uqO
aBu
aAa
aAa
@@ -88991,18 +89561,18 @@ bbm
bdh
bef
bfv
-bgN
-bii
-big
-bih
-bgN
-bnV
-bph
-bqF
+jTp
+aBc
+xZN
+aDt
+aEO
+aGc
+aHF
+aKG
bsf
-btG
-buS
-bwp
+lrF
+lrF
+lrF
bxK
bwh
bAh
@@ -89201,7 +89771,7 @@ aeY
agt
agt
ahz
-ahQ
+aie
aiN
ajc
ajI
@@ -89212,7 +89782,7 @@ aml
amT
anw
anz
-aoz
+ltC
apl
aqc
aqc
@@ -89248,19 +89818,19 @@ aZR
aZR
aZR
bfw
-bgN
-bgN
-bgN
+uJI
+aBa
+aBW
bjy
-bmw
-bnW
-bpi
+aEP
+iEc
+aBa
bqG
-bse
-bij
-buR
-bwo
-bxJ
+bsa
+mRj
+bsa
+bsa
+kFf
bwb
aJq
bBr
@@ -89289,7 +89859,7 @@ bYH
bYH
bVg
bXn
-bRb
+bYG
cfb
cfF
cfb
@@ -89297,7 +89867,7 @@ cik
cjg
cjU
cfb
-caw
+clM
cfz
cgR
ccw
@@ -89469,7 +90039,7 @@ amn
amV
anw
anz
-aoz
+uWs
aod
aqf
ahT
@@ -89505,25 +90075,25 @@ aZR
bbm
beh
bfx
-bij
-bij
-bij
-bgR
-bij
-bij
-bij
-bij
-bsg
-aaf
-aaf
-aaf
-aJn
+kDw
+aBa
+aBa
+aBa
+aBa
+aBa
+aBa
+czD
+gGD
+tVQ
+wcX
+ekY
+kFf
aJq
aJq
bBu
bCv
bAT
-bDJ
+bDL
bDq
bCv
bJs
@@ -89542,7 +90112,7 @@ bWO
bXK
bYH
bZz
-cfV
+caw
bYH
bVo
bXq
@@ -89712,7 +90282,7 @@ bkA
acF
aes
avB
-afn
+amN
agt
awN
aHp
@@ -89722,8 +90292,8 @@ ajI
akp
akQ
alA
-amm
amU
+aiX
anw
anT
aoA
@@ -89762,26 +90332,26 @@ bcg
aZU
beg
aYB
+tVp
+lNn
aaf
aaf
+kMg
+kMg
aaf
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-aaa
-aJn
+rLg
+rLg
+rLg
+rLg
+rLg
+rLg
aJq
aJq
bBt
bCv
bDH
bFf
-aNJ
+bGB
bCv
bJs
bKy
@@ -89979,22 +90549,22 @@ ajJ
akr
akX
alC
-alC
+xgZ
amX
-anz
+lUR
anz
aoB
aod
aqe
arf
-aqU
-awy
+aqa
+atf
arf
-aqU
-awy
+aqa
+atf
arf
-aqU
-awy
+aqa
+atf
dgz
tqg
ujF
@@ -90019,19 +90589,19 @@ bbp
bbp
bbp
bfz
-aZV
+maz
aZV
aZV
aaf
aaf
-aaa
+kMg
aaf
-aaa
+kMg
aaf
-aaa
-aaa
-aaa
-aJn
+kMg
+aaf
+kMg
+rLg
aJq
aJq
aXf
@@ -90238,19 +90808,19 @@ akW
aiG
amo
amW
+eWV
anz
-anz
-aoz
+uWs
aod
aqe
arf
-ari
+apY
ate
arf
-ari
+apY
ath
arf
-ari
+apY
ath
dgz
fvY
@@ -90274,9 +90844,9 @@ aZV
bbo
bch
bdi
-bei
bfy
bgS
+ffU
bik
aZV
aZV
@@ -90291,9 +90861,9 @@ bsh
bqH
aJq
aJq
-bPS
+vqa
bCv
-aNI
+bDJ
bCt
bGD
bCv
@@ -90328,7 +90898,7 @@ ckO
ckH
cja
cny
-bVw
+gUz
cip
cnx
cDx
@@ -90491,11 +91061,11 @@ adR
aiQ
ajI
akt
-akQ
-agj
-agj
+amS
aiX
-anB
+aiX
+aiX
+anw
anz
aoD
aod
@@ -90530,16 +91100,16 @@ aYD
aZX
baf
bdk
-bdk
bek
bfB
bgU
+pVa
bdk
bjF
blc
bmz
bnY
-aOH
+bpk
bqJ
bsj
btI
@@ -90582,7 +91152,7 @@ ciq
cfb
cfb
cfb
-ciX
+clR
cgR
cgR
cMm
@@ -90748,11 +91318,11 @@ cBV
ajf
ajK
aks
-akY
-afM
-amp
aiX
-axC
+nuI
+anw
+anw
+anw
anz
aoC
aod
@@ -90762,19 +91332,19 @@ asd
atg
arf
asd
-axT
+awo
arf
asd
-aFe
+aAb
dgz
iVU
aDK
vHj
eVC
dgz
-aBM
-aEs
aJv
+nqP
+aMg
bHt
aOE
aJn
@@ -90787,11 +91357,11 @@ aYq
aZW
aZG
bej
-bej
bdj
bfA
bgT
-bil
+fDV
+bej
bej
blb
bmy
@@ -90808,7 +91378,7 @@ aJq
aXf
bCv
bAU
-clO
+cAL
bFg
bFs
bJt
@@ -91003,30 +91573,30 @@ ahC
aia
aiP
aiR
-ajB
-akv
-ala
-akz
-alf
+eJk
+akl
aiX
-anA
+akz
+anz
+anz
+anz
anz
aoF
apo
aqh
arh
-auA
+asg
atj
aul
-axQ
+auR
atj
-azl
-aNH
+gnM
+fRa
atj
-aJQ
+aAX
azc
atj
-aMq
+aFe
aul
aHT
aJy
@@ -91044,15 +91614,15 @@ aPR
aZV
baq
baQ
-baQ
+kCq
bcQ
-bfC
bgV
+mpA
bim
bjG
aZV
bmB
-aDH
+bnZ
bpl
bqH
bsl
@@ -91065,8 +91635,8 @@ aLY
bBx
bCv
apG
-aPZ
-aQa
+bFk
+bDs
bCv
bJs
bHo
@@ -91262,10 +91832,10 @@ adR
aiG
ajL
aku
-akZ
-alE
-amq
aiX
+alE
+anA
+anA
anA
anz
aoE
@@ -91275,15 +91845,15 @@ aun
asf
ati
auk
-arQ
-aus
-aJk
-bbl
+aux
avt
-aJR
-aya
-aLs
-aMr
+axL
+bbl
+azT
+gxH
+tEy
+aDG
+aFd
auk
aHH
aJg
@@ -91304,7 +91874,7 @@ baP
bbZ
bcP
cBo
-bbw
+ffU
bbw
bbw
aZV
@@ -91333,8 +91903,8 @@ bNT
bOV
bQj
bRw
-bOM
-bPT
+bSF
+pmf
bTP
bRA
bWQ
@@ -91350,12 +91920,12 @@ cap
ctR
ccn
cdo
-bUA
+cek
ccw
cet
cfd
-cgH
-cgM
+cfB
+cfI
cgQ
cjS
cjN
@@ -91368,7 +91938,7 @@ cEW
cse
cse
csu
-chM
+cGl
ccw
aaa
aaa
@@ -91533,11 +92103,11 @@ arf
arf
arf
arf
-auC
-aKg
+dHP
+djq
awr
awr
-aKr
+wWo
aAh
aAh
aAh
@@ -91574,7 +92144,7 @@ btL
buY
buY
bqH
-clV
+gYR
aJq
aXf
bCv
@@ -91591,7 +92161,7 @@ bOV
bQo
bRz
bSH
-bQX
+kcg
bTP
bRA
bWQ
@@ -91786,23 +92356,23 @@ aoG
cSA
aqe
arf
-auu
+aqo
atm
atm
arf
-aAd
-auW
+avv
+awu
awr
-aXH
-aXO
+aAd
+qKJ
aAh
-aSp
+aDL
aAh
-aUP
+aGk
aAh
-bbN
+aJz
aAh
-aOL
+aLQ
aJq
aOE
aJn
@@ -91835,7 +92405,7 @@ aJq
aJq
bBy
bzs
-bTy
+bDO
bFl
bGH
bHU
@@ -91848,7 +92418,7 @@ bOV
bQj
bRy
bSG
-bPT
+pmf
bUK
bVT
bWR
@@ -92043,23 +92613,23 @@ aoH
cSA
aqe
arf
-aqC
+asm
blU
blU
-awA
-auy
-aKh
+avg
+awp
+axN
awr
awr
-aKJ
+oTI
aAh
-apH
+aDQ
aAh
-apQ
+aGl
aAh
-aqt
+aBy
aAh
-clX
+uOb
aJq
aOE
aJn
@@ -92072,7 +92642,7 @@ aYF
aZV
bbw
bcn
-bbw
+jNS
ben
bfE
bgX
@@ -92128,7 +92698,7 @@ clU
clU
bOh
ccw
-cgN
+coZ
cgU
cgU
cDK
@@ -92300,21 +92870,21 @@ ajo
cSA
aqe
arf
-aqD
-ask
+ari
asu
+gTx
aun
-awv
-aKg
-aYI
+avR
+djq
+vMd
awr
-bHg
+mPj
aAh
-aop
-bwi
-aop
-aop
-aop
+aDM
+aGx
+aDM
+aDM
+aDM
aAh
aMm
aJq
@@ -92347,7 +92917,7 @@ bqH
bqH
aJq
bHt
-bgi
+bBz
bzs
bzs
bFm
@@ -92381,11 +92951,11 @@ bMQ
aaf
bQA
ckU
-ccd
+clT
cmU
bOh
ccw
-cgP
+cpa
cjc
cqo
cDL
@@ -92561,18 +93131,18 @@ arf
arf
arf
arf
-auC
-aKN
-aYP
-baa
-aKM
-aKP
-aFE
-aDY
-aLQ
-aYS
-aop
-aMw
+dHP
+axP
+azb
+aAi
+sTt
+aCn
+mvB
+ipU
+aGm
+aHV
+aDM
+urH
aJq
aJq
aJq
@@ -92603,9 +93173,9 @@ bva
bwu
bwu
bwu
-bke
-cfI
-bBz
+pgY
+bBB
+pAE
bzs
bFp
bGJ
@@ -92814,21 +93384,21 @@ ajo
app
aqi
arf
-ars
+ask
atm
atm
arf
-aHt
-aKO
-aZb
-bab
-aSj
+awq
+axO
+aza
+moa
+uhG
aAh
aAh
aAh
aAh
aAh
-aMu
+aDN
aAh
aMo
aNC
@@ -92860,7 +93430,7 @@ aJq
aJq
aJq
aJq
-bnZ
+bAj
aJq
aKG
bzs
@@ -93071,22 +93641,22 @@ ajo
aps
aqk
arf
-auv
+dsV
blU
aHw
-awX
-axR
-aKq
-aZZ
+avn
+awv
+axX
+aze
awr
-bac
+uuT
aAh
-aVK
-azm
-azm
+aDU
+aBz
+aBz
aAh
-aAZ
-bJS
+tsY
+tTt
aJq
aJq
aJq
@@ -93119,7 +93689,7 @@ bxL
byX
aXh
bmE
-bAj
+bCA
bzs
bCC
bDA
@@ -93328,21 +93898,21 @@ ajo
apr
aqj
arf
-ary
-ask
-aua
+ark
+asu
+mOL
aun
-axU
+awt
awr
awr
-axW
-aHb
-aLh
-aUj
-aMv
-aMv
-aMx
-aZt
+azX
+aAZ
+aCe
+aDT
+mwm
+mwm
+qzE
+fPz
aAh
aJC
aJC
@@ -93409,7 +93979,7 @@ bMQ
aaf
bQA
ckX
-ccB
+clV
cmV
bOh
cig
@@ -93560,7 +94130,7 @@ aaa
aaa
aaa
aaa
-aaa
+aaf
aaa
aaf
abo
@@ -93583,35 +94153,35 @@ ajp
ajp
ajo
apt
-arn
+aqm
arf
arf
arf
arf
arf
-asX
+awz
awr
awr
avG
-axP
+aBA
aAh
-aCh
-azo
-azo
+aDP
+aBx
+aBx
aAh
-aAM
-aMH
-bRc
-bRe
-bty
-aFj
-ccS
-bXu
+oNq
+jtY
+aMq
+adq
+aQb
+aPZ
+aRu
+iWm
aKR
-aFd
-aDM
-cab
-bfa
+gJR
+aXi
+jRc
+baa
aJC
bcq
bcq
@@ -93810,13 +94380,13 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aaf
+aaf
+aag
+aag
+aag
+aag
+aaf
aaf
aaf
aaf
@@ -93840,17 +94410,17 @@ ajo
aoa
ajo
apt
-aqr
+aql
aoJ
aoJ
aoJ
aoJ
-arr
-auN
+avw
+awy
awr
awr
avG
-aNt
+tQu
aAh
aAh
aAh
@@ -93860,15 +94430,15 @@ aAh
aAh
aKR
aKR
-buJ
-aDU
-aDX
-aEt
+fey
+aPY
+fOB
+aRx
aKR
-aFf
-aDN
-aDU
-aFF
+hFk
+xCs
+aPY
+aZZ
aQg
aYV
aYV
@@ -94097,35 +94667,35 @@ ahT
anb
ahT
anZ
-aqo
+apu
arf
arf
arf
arf
arf
-aDW
-avl
-avm
-avg
-awE
-aCr
-azP
+awA
+axT
+axW
+aAl
+vEA
+aJC
+aDR
aFl
-aGD
-bdE
-aCr
-boY
-bRd
+oaT
+aHZ
+aJC
+aKJ
+yeR
aKR
-aDO
-aFC
-cdM
-aEu
+eBm
+yhO
+aQd
+aQa
aKR
-aFg
-aDO
-caj
-ckP
+ndo
+eBm
+gbb
+bac
aJC
aYV
aYV
@@ -94348,43 +94918,43 @@ aif
aif
aif
bkV
-adq
-amB
+thY
+alK
aif
aif
-apw
-aqH
-aqI
+anc
+anD
+aoI
arf
-apu
-atl
-avw
-aut
-axM
-avx
-avn
-awp
-aNG
-aCr
-aLS
-aUC
-aGr
-aHI
-aOK
-aKR
-aKR
-aKR
-aKR
-aKR
-aKR
-aKR
-aKR
-aKR
-aKR
-aKR
-asq
+iTd
+asN
+aur
+avy
+neT
+axS
+azk
+aAk
+oxA
aJC
-bSL
+aDY
+aDY
+oaT
+aKR
+aJk
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+aKR
+bab
+aJC
+jtp
aYV
ber
bfF
@@ -94581,11 +95151,11 @@ aaa
aaa
aaa
aaa
-aaf
-aaf
-aag
-aag
-aag
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aag
@@ -94596,13 +95166,13 @@ abp
afo
abp
abp
-aSq
+iHq
ahn
aiA
aiA
aiA
ahn
-and
+qaZ
anF
aod
ahn
@@ -94613,37 +95183,37 @@ ahn
ahn
ahn
arf
-aoI
-aqF
-awo
+pUo
+sPA
+aut
arf
-aoY
+aXF
awr
awr
-awt
-aXj
-aCr
-aQb
-aVA
-bcO
-aHK
-aCr
-bDO
+aAn
+dQz
+aJC
+aEc
+aFk
+aGw
+aKR
+aJC
+aKr
aKR
aKR
-aDP
-aDP
-aEo
+pIA
+pIA
+jcN
aKR
aKR
aKR
-aDP
+pIA
aKR
aKR
bbx
aYV
aYV
-bTs
+qVa
bfF
bhd
bis
@@ -94838,22 +95408,22 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aaf
+aaf
+aag
+aag
+aag
aag
aaf
aaf
aaf
aaf
abp
-aRw
+rmC
afp
-aRw
+rmC
abp
-aqa
+fEo
ahn
aaa
aaf
@@ -94863,39 +95433,39 @@ ahn
anE
aod
aoK
-amI
+fBj
aqp
ahn
-anc
-anr
-anM
-aqF
-aqF
-aqF
-aur
+kMO
+oaB
+itE
+sPA
+sPA
+sPA
+xCE
aun
-aEr
+avz
awr
awr
-awt
-aSo
-aCr
-aCr
-aVD
-aGv
-aCr
-aCr
-aCm
+aAn
+tTh
+aJC
+aJC
+kiH
+qeZ
+aJC
+aJC
+aKq
aKR
-aDu
-aDT
-aDV
-aEp
-aHX
+aNF
+lmT
+gzA
+qet
+aSH
aKR
-aIs
-atT
-aFD
+dSM
+mTi
+hmv
aKR
aQg
aYV
@@ -94921,7 +95491,7 @@ bvj
bvj
bvd
bFu
-nWU
+thl
bvj
bvd
bKH
@@ -95123,36 +95693,36 @@ aoL
apy
aqq
ahn
-aql
-aqN
+ttp
+cJl
arf
-aqE
-ark
-aqF
-axN
+uNs
+ast
+sPA
+auv
arf
-aKi
-avm
-aAn
-aIG
-aXl
+avA
+axW
+azo
+aAp
+qPl
aBC
aCt
aEA
aGz
aIb
-aCr
-aCn
+aJC
+aKN
aKR
aKR
-axV
-aFh
-arC
+aOJ
+nNY
+hIJ
aKR
aKR
-aNn
-avR
-aFD
+aUg
+bFC
+hmv
aKR
bbx
aYV
@@ -95160,9 +95730,9 @@ aYV
bet
bfH
bhf
-bkl
+qqY
bhh
-bkl
+qqY
bmJ
bof
bpu
@@ -95388,38 +95958,38 @@ arf
arf
arf
arf
-aMJ
-azn
+fpd
+imi
+azf
aAo
-aJz
-amP
+coj
aBB
aBB
aBB
aGy
aIa
cNE
-aQP
-awB
-awB
-aDQ
-aFi
-awB
-awB
-awB
-aIi
-aOu
+aKM
+aMu
+aMu
+ese
+sfY
+aMu
+aMu
+aMu
+mdp
+aSq
aKR
-asD
+bad
bby
aYV
aYV
bet
bfG
bhe
-blN
+bit
bjS
-bnd
+kQg
bli
boe
bli
@@ -95634,40 +96204,40 @@ aag
aag
aag
arf
-amJ
-axO
+xXW
+gYK
arf
-apu
-acN
-amP
-atz
-axL
-atQ
-awu
-aEv
-azj
-aAb
-aAr
-amN
-amN
-aza
-azX
+iTd
+uVo
+coj
+mcQ
+clO
+asZ
+aua
+sfO
+awB
+att
+azh
+mgT
+mgT
+uJq
+fcc
alP
aGI
aId
aJD
-aCx
-awC
-awC
-bbs
-aHW
-awC
-awC
-awC
-awC
-aIw
+aKP
+aMx
+aMx
+aQe
+aOL
+aMx
+aMx
+aMx
+aMx
+hvD
aKR
-asG
+aZb
aJC
aYV
aYV
@@ -95876,11 +96446,11 @@ aaa
aaa
aaa
aaa
-aab
+uFF
aaa
aqG
aaa
-asL
+eYr
aaa
aaa
aaa
@@ -95891,42 +96461,42 @@ aaa
aaa
aaa
arf
-amO
-anr
-anM
-aqF
-alK
+duc
+oaB
+itE
+sPA
+oIx
arf
-axZ
-amN
+arm
+mgT
+aya
+mgT
+mgT
+auB
atZ
-amN
-amN
-bBB
-cdP
-ceu
-cfA
-amN
-azb
-aUk
+azg
+azp
+mgT
+aCu
+gmc
alP
aGH
aIc
aJC
-aCy
-aTN
-aDS
+aKO
+aMw
+aNI
aKR
aKR
-aEq
-aEq
-aEq
-aEq
-aEq
+acN
+acN
+acN
+acN
+acN
aKR
aKR
aJC
-cmc
+bcr
aYV
bet
bfG
@@ -95969,7 +96539,7 @@ bYU
bXW
bOh
cbH
-cbX
+ccB
cbH
bOh
aaf
@@ -96133,11 +96703,11 @@ aaa
aaa
aaa
aaa
-aac
-apK
+oBB
+ixv
aaa
-apK
-atX
+ixv
+rrJ
aaa
aaa
aaa
@@ -96151,21 +96721,21 @@ arf
arf
arf
arf
-aoI
-anD
-arj
-art
-amN
-amN
-amN
-amN
-bDL
-amN
-aAX
-cfB
-amN
-azd
-aAf
+pUo
+xgY
+aqs
+gfn
+mgT
+mgT
+mgT
+mgT
+vBb
+mgT
+ayb
+fJA
+mgT
+aCv
+cFF
alP
aGJ
aIe
@@ -96175,13 +96745,13 @@ aJC
aJC
aJC
aJC
-aXF
-aEw
-aEx
-aEw
-aNF
-aEq
-aHU
+aXj
+aVy
+aSY
+aVy
+ydZ
+acN
+bah
aJC
aYV
bdo
@@ -96390,11 +96960,11 @@ aaa
aaa
aaa
aaa
-apv
-apv
+viT
+viT
gXs
-apv
-apv
+viT
+viT
aaa
aaa
aaa
@@ -96407,38 +96977,38 @@ aaa
aaa
aaa
arf
-aqm
-aqF
-axX
+jav
+sPA
+eDq
arf
-asb
-asr
-avu
-amN
-amN
-bDL
-amN
-aAX
-cfB
-amN
-aze
-aAg
+bHg
+iTD
+lBk
+mgT
+mgT
+vBb
+mgT
+ayb
+fJA
+mgT
+mHW
+sBu
alP
aGJ
aIe
-asm
+aJE
aLU
aKQ
-aYH
+aNu
aJC
aPw
-aZw
+eqs
aQc
aSZ
aQc
-aFk
-aEq
-aHV
+jxp
+acN
+bag
aJC
aYV
aYV
@@ -96664,22 +97234,22 @@ aaa
aaa
aaa
arf
-ast
-arD
-apX
+wSg
+vgX
+rak
arf
-arO
-aup
-atV
-amN
-asg
-bZf
-cdY
-cff
-cfC
-amN
-azb
-bvG
+lqe
+jYg
+jde
+mgT
+pbw
+neq
+mTj
+qGM
+ulP
+mgT
+aCu
+vbP
alP
aGA
aHS
@@ -96693,15 +97263,15 @@ aRz
aSF
aQc
aQc
-aFp
+aXl
aKR
-atk
+bai
aJC
aYV
aYV
bet
bfH
-hEm
+liD
bhh
bhg
bln
@@ -96905,9 +97475,9 @@ aaa
aaa
aaa
aaa
-apT
+oqa
aaa
-apT
+oqa
aaa
aaa
aaa
@@ -96925,38 +97495,38 @@ arf
arf
arf
arf
-asZ
-att
-avA
-awq
-aVy
-aVG
-amN
-aRu
-aVP
-aXi
-azV
-aPj
+mbl
+iiH
+udn
+vBN
+fLn
+vXW
+mgT
+cIW
+kmf
+uip
+jil
+ttF
alP
aGL
aHM
-asp
+aJm
aKz
-bLs
+mjr
aND
aJC
-aZv
+aab
aRg
aQc
-bai
+aac
aQc
-aFt
+aXk
aKR
aKR
aJC
aYV
aYV
-bNM
+bev
bfK
bhi
bhi
@@ -97181,32 +97751,32 @@ aaa
aaa
aaa
gXs
-aqs
-asY
-asY
-auB
-aws
-avy
-avy
-aws
-azp
-aCu
-aCu
-aCv
-auR
+jMa
+qMf
+qMf
+kte
+wgV
+odR
+odR
+wgV
+kCK
+cmm
+cmm
+dKg
+arj
alP
aGL
aIe
aJC
-atf
-bLt
+aKS
+aMC
aJC
aJC
aJI
aJI
aSI
aJI
-baw
+aVA
aJI
aYK
aJI
@@ -97416,7 +97986,7 @@ aaa
aaa
aaa
aaa
-aaa
+xlX
aaa
aaa
aaa
@@ -97456,7 +98026,7 @@ aGL
aIg
aJH
aKR
-bMF
+aMB
aJC
aOP
aJI
@@ -97467,7 +98037,7 @@ aVz
aVz
aYJ
aJI
-bSr
+xZr
aYV
aYV
aYV
@@ -97984,7 +98554,7 @@ baj
bbz
aYV
bdp
-bDv
+pWO
bfK
bfK
bfK
@@ -98233,11 +98803,11 @@ aON
aQk
aRD
aSM
-aEy
+aVD
aVE
aXm
aVz
-cam
+gIT
bbz
aYV
bdp
@@ -98490,7 +99060,7 @@ aOM
aQj
aRB
aSL
-cmm
+aTN
cCq
aVz
cAg
@@ -98723,19 +99293,19 @@ aaa
aaa
aaa
aaa
-arm
-asY
-asY
-asY
-awz
-avy
-avy
-aAm
-aCu
-aCu
-aCu
-aVx
-auR
+mHC
+qMf
+qMf
+qMf
+sXo
+odR
+odR
+ioS
+cmm
+cmm
+cmm
+aCy
+arj
alP
aGL
avI
@@ -98751,7 +99321,7 @@ aTO
cCq
aVz
aVz
-caB
+guh
bbz
aYV
bdp
@@ -98767,8 +99337,8 @@ boo
bqQ
bhg
bua
-bne
-bpk
+bvn
+bwL
bxX
bsL
bua
@@ -98983,16 +99553,16 @@ aaa
aaa
aaa
aaa
-auR
-azg
-avz
-ccH
-aAX
-aAp
-aAk
-aAl
-aCq
-aDR
+arj
+kOA
+avD
+awC
+ayb
+jYD
+ruS
+ukL
+lAY
+vpY
alP
aGJ
avI
@@ -99009,7 +99579,7 @@ aVF
aVF
aYM
aJI
-bSu
+bbA
aYV
bdr
bdb
@@ -99037,7 +99607,7 @@ bCR
bqQ
bGX
bCR
-rjA
+pMv
bRN
bIK
bPq
@@ -99240,17 +99810,17 @@ aaa
aaa
aaf
aaf
-auR
-auS
-ayb
-azk
-atZ
-amN
-amN
-aAs
-amN
-amN
-alP
+arj
+auz
+avC
+oGS
+aya
+mgT
+mgT
+rmY
+mgT
+mgT
+gOZ
aGJ
avI
aJL
@@ -99281,7 +99851,7 @@ boq
boq
brj
bpE
-bop
+btk
bum
bvq
bzn
@@ -99497,11 +100067,11 @@ aaa
aaf
aaf
alO
-auR
-auR
-auR
-azT
-aAi
+arj
+arj
+arj
+csp
+gOZ
cVb
cVb
cVb
@@ -99538,7 +100108,7 @@ bpE
bpE
bpE
bpE
-bot
+bti
bul
bvp
bzm
@@ -99778,7 +100348,7 @@ aSR
aUi
aVJ
aOX
-aPP
+aYP
bal
bam
aYV
@@ -100008,19 +100578,19 @@ aaa
aaa
aaa
aag
-ass
+cxW
anf
aqv
ayf
-aux
-auU
-avv
-avC
+hxw
+dKe
+awE
+pGr
cVb
vCb
-bBI
-bHx
-bHB
+wUY
+khb
+sxs
tal
aCI
aIj
@@ -100268,8 +100838,8 @@ aag
alO
anf
alO
-aud
-auz
+gqR
+pQA
alP
anf
aCG
@@ -100285,12 +100855,12 @@ aIq
aKK
aMy
aIp
-arg
+rXv
aQm
-aBx
-aGp
-aGp
-aHc
+eaD
+vAZ
+vAZ
+aVK
aRJ
aRJ
aRJ
@@ -100531,10 +101101,10 @@ alP
awF
aCG
alP
-bBM
+uTQ
aBE
aCz
-aQU
+fXo
aCJ
aGT
aIn
@@ -100544,10 +101114,10 @@ aMt
aIp
aOW
aQm
-aGm
-aGw
-aGP
-aHr
+ktc
+aSS
+aUj
+uao
aRJ
aYQ
cBg
@@ -100781,34 +101351,34 @@ aoN
apA
aof
arq
-asv
+qnd
atv
auD
alP
aoQ
-avD
+cqM
ayg
ayg
ayg
-azf
+aCA
aFn
-aAq
+aFp
aGW
anf
aIp
-bcr
+fGf
aMA
aIp
aOX
aQm
-aGm
-aGx
-aGR
-aHr
+ktc
+aST
+aUk
+uao
aRJ
aYQ
bam
-bBT
+oAc
aYV
aYV
aYV
@@ -101025,10 +101595,10 @@ adU
adU
adU
adU
-alg
-aTq
-aTq
-aTq
+xWW
+sCo
+sCo
+sCo
acx
amv
ane
@@ -101037,7 +101607,7 @@ aog
aoM
apz
aqw
-asM
+arr
asw
asw
auE
@@ -101058,14 +101628,14 @@ aMz
aNQ
aOX
aQm
-aGn
-aGK
-aGK
-aHs
+pmj
+lrH
+lrH
+rEQ
aRJ
aYR
ban
-bCI
+efo
aYV
aYV
bez
@@ -101294,7 +101864,7 @@ aoi
aoO
apB
aqx
-asN
+art
anf
anf
auF
@@ -101302,14 +101872,14 @@ alP
awH
auF
alP
-axd
+aAr
aBF
alP
aaa
aFq
aGX
aIp
-bHZ
+lwn
aKU
aME
aNN
@@ -101322,13 +101892,13 @@ aXo
aXo
aYO
bap
-bCI
+efo
aYV
bci
beB
bfS
bfS
-ckJ
+kQk
ipA
gbT
cTO
@@ -101551,7 +102121,7 @@ aof
aof
aof
aof
-asV
+gBY
aoP
atw
auF
@@ -101559,7 +102129,7 @@ alP
aoP
auF
azr
-aRv
+juV
atw
alP
alP
@@ -101573,13 +102143,13 @@ aNQ
aOZ
aOX
aOX
-cma
+ohe
aUz
aVM
aOX
aYT
bam
-bDs
+qcu
baR
bcb
bdl
@@ -101636,7 +102206,7 @@ bAw
bAw
clp
aag
-apv
+viT
aaa
aaa
aaa
@@ -101814,7 +102384,7 @@ aty
auF
alP
aAt
-aAu
+lHE
alP
alP
alP
@@ -102065,7 +102635,7 @@ aaa
aaa
apC
anf
-aRv
+juV
alP
atx
auF
@@ -102073,8 +102643,8 @@ alP
auD
auF
apE
-axJ
-awL
+aAs
+trM
alP
aCG
aFr
@@ -102327,12 +102897,12 @@ alP
apE
auG
alP
-clM
+hSS
auF
apE
anf
anf
-azh
+kwj
aCG
aDZ
aFu
@@ -102593,11 +103163,11 @@ aCB
aEB
aFs
bbE
-amd
+aIr
bav
aLf
-aCU
-aDG
+nvw
+oWe
aRO
aQp
aRN
@@ -102620,7 +103190,7 @@ bls
bfT
boD
bpY
-aPY
+bsP
box
btw
buT
@@ -102661,11 +103231,11 @@ cQB
czY
cOT
aaa
-apv
-apv
-apv
-apv
-apv
+viT
+viT
+viT
+viT
+viT
aaa
aaa
aaa
@@ -102838,12 +103408,12 @@ apC
alP
alP
alP
-ciw
+dHx
auH
avF
awI
ayc
-ciV
+nOD
asw
asw
aCD
@@ -102851,10 +103421,10 @@ aEa
aFv
aGG
aIu
-aBA
+aJQ
aIt
aIt
-aDG
+oWe
aRO
aIt
aRN
@@ -103107,11 +103677,11 @@ aCC
aDZ
anf
aFu
-aBy
-aJJ
-aCA
+aIs
+aJP
+xah
aIt
-aDJ
+xNd
aYW
aYW
aYW
@@ -103130,7 +103700,7 @@ cHJ
cHL
blw
bjP
-bTu
+blt
bfT
boG
bqa
@@ -103178,10 +103748,10 @@ aaa
aaa
aaa
aaa
-bsP
-bti
-btk
-buh
+tpb
+rnY
+oSW
+vPl
aaa
aaa
aaa
@@ -103364,11 +103934,11 @@ aCE
aDZ
aFu
aFu
-aBz
+aIw
aJS
-aCS
+wTC
aNP
-aDL
+kMY
aOS
aOS
aOS
@@ -103432,14 +104002,14 @@ cQB
cAa
cOT
gXs
-bqb
-brl
+lDF
+kTe
aaa
aaa
-bsP
-bsP
-bsP
-buh
+tpb
+tpb
+tpb
+vPl
aaa
aaa
aaa
@@ -103616,16 +104186,16 @@ awJ
anf
alP
aAv
-cih
+wZI
aCE
aDZ
aFu
-aIy
+aHb
aIv
-aBD
+aJR
aIt
aIt
-aDG
+oWe
aRO
aIt
aPd
@@ -103634,7 +104204,7 @@ aPb
aIt
aXu
aYW
-aVS
+bat
bbD
aYV
aXq
@@ -103689,14 +104259,14 @@ czU
czZ
cOT
aaa
-apv
-brT
-brT
-bsP
-bsP
-bsP
-buA
-bti
+viT
+sbs
+sbs
+tpb
+tpb
+tpb
+gqp
+rnY
aaa
aaa
aaa
@@ -103882,7 +104452,7 @@ aIx
aJF
aQq
aNS
-aDG
+oWe
aRO
aIt
aPd
@@ -103946,14 +104516,14 @@ cgm
czY
cOT
gXs
-bqb
-brl
-bsB
-brT
-brT
+lDF
+kTe
+nxN
+sbs
+sbs
aaa
aaa
-bsB
+nxN
aaa
aaa
aaa
@@ -104119,7 +104689,7 @@ aaf
aaa
aaa
alP
-aie
+apD
aEl
anf
arx
@@ -104143,12 +104713,12 @@ aFu
aPf
aQq
aRP
-cfE
+oIt
aIt
aIt
aWd
aXV
-aGl
+pWH
bbD
aYV
aXq
@@ -104205,10 +104775,10 @@ cNW
aaa
aaa
aaa
-bsB
-bsB
-bti
-bsP
+nxN
+nxN
+rnY
+tpb
gXs
aaa
aaa
@@ -104379,11 +104949,11 @@ alO
anf
anf
arw
-bxh
-clL
+uiT
+cII
anf
alP
-aqB
+awL
anf
anf
apE
@@ -104392,8 +104962,8 @@ aCH
aED
aFy
aGO
-aIA
-aJM
+aIB
+aJJ
aKZ
aFw
aFu
@@ -104402,7 +104972,7 @@ aFu
aFu
aTc
aUD
-aSk
+aVS
aYW
aYW
bax
@@ -104649,12 +105219,12 @@ aCk
aEC
aFx
aGM
-aIB
+aIy
aJG
-aMK
+cAz
aFw
-aMW
-aPi
+eAE
+aPg
aQr
aFu
aTb
@@ -104720,10 +105290,10 @@ aaa
aaa
aaa
aaa
-apv
-apv
-apv
-apv
+viT
+viT
+viT
+viT
aaa
aaa
aaa
@@ -104890,14 +105460,14 @@ aaa
aaa
gXs
alP
-apD
+pRx
ayf
-bev
-cil
+eUR
+imK
aFn
aFn
aBB
-bGB
+awM
ayg
ayg
ayg
@@ -104910,7 +105480,7 @@ aFw
aLo
aLb
aFw
-aPg
+xwI
aYW
aYW
aRQ
@@ -105144,13 +105714,13 @@ aaa
aaa
aaa
aaa
-amx
-amx
-amx
-amx
-aMB
-amx
-amx
+uBW
+uBW
+uBW
+uBW
+oFY
+uBW
+uBW
atB
alP
alP
@@ -105164,16 +105734,16 @@ aEd
aFw
aHf
aIz
-aJP
+aJM
aLa
aFw
-aPh
+kwW
aYW
aQs
aFu
aTd
aUE
-aVR
+aVT
aYW
aYW
aZd
@@ -105401,21 +105971,21 @@ aaa
aaa
aaa
aaa
-amx
-axE
-aIr
-aJm
-aNV
-bDX
-bFC
-bGg
-bGh
-bGg
-bGS
+uBW
+mKU
+wLe
+shX
+mJU
+cyi
+tcE
+dIA
+pNj
+dIA
+nhn
avI
asA
apE
-aCo
+fIK
aCG
aEf
aFw
@@ -105658,12 +106228,12 @@ aaa
aaa
aaa
aaa
-apY
-aIr
-aIr
-aIr
-aIr
-aMC
+lfx
+wLe
+wLe
+wLe
+wLe
+gGK
asB
asB
asB
@@ -105747,14 +106317,14 @@ cko
clq
cmq
ciI
-bae
-cmJ
+cnJ
+cri
cOe
cOe
-cmK
+cBT
aag
gXs
-apv
+viT
aaa
aaa
aaa
@@ -105915,12 +106485,12 @@ aaa
aaa
aaa
aaa
-apY
-aIr
-aIr
-aIr
-aIr
-aNu
+lfx
+wLe
+wLe
+wLe
+wLe
+sEJ
asB
atD
auJ
@@ -106172,12 +106742,12 @@ aaa
aaa
aaa
aaa
-amx
-aIr
-aIr
-aIr
-aIr
-aIr
+uBW
+wLe
+wLe
+wLe
+wLe
+wLe
asB
atC
auI
@@ -106261,8 +106831,8 @@ cNW
cNW
cNW
cOe
-bag
-clH
+xPX
+csy
cko
cAf
aaa
@@ -106429,12 +106999,12 @@ aaa
aaa
aaa
aaa
-apY
-aIr
-aIr
-aIr
-aIr
-aIr
+lfx
+wLe
+wLe
+wLe
+wLe
+wLe
asB
atE
auI
@@ -106512,11 +107082,11 @@ ceO
cNW
cgm
chw
-cgp
+ciK
cjC
-cgu
ckp
cls
+cmr
cOe
cOe
cou
@@ -106686,18 +107256,18 @@ aaa
aaa
aaa
aaa
-apY
-aIr
-aIr
-aIr
-aIr
-aIr
+lfx
+wLe
+wLe
+wLe
+wLe
+wLe
asB
asB
asB
avL
awR
-aMp
+kuT
azu
aAz
asB
@@ -106737,7 +107307,7 @@ buo
bvJ
bCk
byo
-btD
+aDH
bxP
bCf
bvK
@@ -106767,13 +107337,13 @@ bQZ
cdR
ceN
cNW
-axY
+cgp
chv
ciJ
cbf
-ciK
+xcw
clr
-bah
+bnt
cOe
cOe
bMB
@@ -106943,12 +107513,12 @@ aaa
aaa
aaa
aaa
-amx
-awM
-aIr
-aJE
-aIr
-bFk
+uBW
+kgf
+wLe
+pnl
+wLe
+oKy
asB
atG
auL
@@ -107200,12 +107770,12 @@ aaa
aaa
aaa
aaa
-amx
-amx
-amx
-amx
-amx
-amx
+uBW
+uBW
+uBW
+uBW
+uBW
+uBW
asB
atF
auK
@@ -107491,9 +108061,9 @@ aXB
aZh
baB
aCR
-bNa
+fkx
bdx
-bPv
+izL
bgc
bgc
biX
@@ -107807,13 +108377,13 @@ cOe
cOe
cOe
sQX
-cdi
-cdi
-cdi
-cdi
-cdi
-cdi
-cdi
+tDE
+tDE
+tDE
+tDE
+tDE
+tDE
+tDE
aaS
aaS
aba
@@ -108052,7 +108622,7 @@ ccT
bSc
bSc
cfu
-bnt
+cgu
chA
cNW
aaa
@@ -108565,7 +109135,7 @@ cbZ
bSl
cmo
cNW
-ckR
+sPj
cNW
chC
ciL
@@ -109617,7 +110187,7 @@ crD
aaa
aaa
aaa
-aSY
+csZ
aaa
aaa
aaa
@@ -109864,18 +110434,18 @@ cyU
cpi
cpi
cpi
-aSH
-aSS
+cqJ
+gnW
crk
crk
crk
crk
crk
-aST
-aSH
-aSS
+phP
+cqJ
+gnW
crk
-aST
+phP
cpi
cpi
ctB
@@ -110131,7 +110701,7 @@ crF
aaa
aaa
aaa
-aTa
+jvm
aaa
aaa
aaa
@@ -110870,7 +111440,7 @@ cNW
cNW
cNW
cNW
-clR
+dok
clt
cac
cbh
@@ -111136,7 +111706,7 @@ cbf
cbf
ceT
cNW
-clT
+wNd
chH
cNW
aaf
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index ac7d291b2f..b47944146f 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -124,36 +124,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
-"aaq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/table,
-/obj/structure/bedsheetbin/towel,
-/turf/open/floor/plasteel,
-/area/crew_quarters/toilet/restrooms)
-"aar" = (
-/obj/structure/table,
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/bedsheetbin/color,
-/turf/open/floor/plasteel/white/corner{
- dir = 1
- },
-/area/crew_quarters/dorms)
"aas" = (
/obj/docking_port/stationary/random{
id = "pod_lavaland1";
@@ -173,88 +143,6 @@
/obj/effect/landmark/xeno_spawn,
/turf/open/space,
/area/solar/starboard/fore)
-"aav" = (
-/obj/effect/decal/cleanable/cobweb,
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"aaw" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard/fore)
-"aax" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard/fore)
-"aay" = (
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"aaz" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard/fore)
-"aaA" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard/fore)
-"aaB" = (
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plating,
-/area/security/prison)
"aaE" = (
/obj/structure/lattice/catwalk,
/turf/open/space,
@@ -1183,10 +1071,6 @@
"aeF" = (
/turf/open/floor/plating,
/area/construction/mining/aux_base)
-"aeH" = (
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"aeR" = (
/obj/structure/closet/emcloset,
/obj/effect/decal/cleanable/dirt,
@@ -1565,6 +1449,26 @@
},
/turf/open/floor/plating,
/area/construction/mining/aux_base)
+"agv" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/obj/machinery/airalarm{
+ dir = 2;
+ pixel_y = 22
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"agB" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -1800,7 +1704,7 @@
pixel_y = -32
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/twohanded/required/kirbyplants/random,
@@ -4645,6 +4549,14 @@
},
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
+"anz" = (
+/obj/effect/decal/cleanable/cobweb,
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"anA" = (
/obj/structure/cable/white{
icon_state = "0-2"
@@ -7199,6 +7111,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"arX" = (
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"arY" = (
/obj/structure/table/wood,
/obj/item/toy/talking/codex_gigas,
@@ -7229,6 +7148,14 @@
},
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
+"asa" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"asb" = (
/obj/machinery/airalarm{
dir = 1;
@@ -15186,7 +15113,7 @@
/area/crew_quarters/bar)
"aGc" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = 32
},
@@ -15457,7 +15384,7 @@
pixel_y = 32
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -16828,7 +16755,7 @@
/area/maintenance/disposal/incinerator)
"aIy" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -17791,7 +17718,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 +21413,7 @@
"aQl" = (
/obj/structure/table/wood,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/camera,
@@ -22042,6 +21969,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/security/prison)
+"aRi" = (
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"aRj" = (
/obj/structure/cable/white{
icon_state = "0-2"
@@ -23602,7 +23536,7 @@
/area/crew_quarters/theatre)
"aTy" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -26869,6 +26803,7 @@
/area/engine/atmos)
"aXW" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"aXX" = (
@@ -27337,7 +27272,7 @@
/area/crew_quarters/bar/atrium)
"aYF" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -27513,7 +27448,7 @@
"aYR" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -27639,7 +27574,7 @@
"aZb" = (
/obj/machinery/photocopier,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -29257,6 +29192,7 @@
/area/engine/atmos)
"bbO" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"bbP" = (
@@ -29336,7 +29272,7 @@
pixel_y = 22
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/chem_master/condimaster{
@@ -29603,7 +29539,7 @@
/obj/item/clipboard,
/obj/item/toy/figure/miner,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -30753,6 +30689,7 @@
/area/engine/atmos)
"bev" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bew" = (
@@ -30819,7 +30756,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 +30994,7 @@
"beY" = (
/obj/structure/kitchenspike,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -32494,6 +32431,7 @@
/area/engine/atmos)
"bhw" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"bhx" = (
@@ -32627,7 +32565,7 @@
/area/crew_quarters/kitchen)
"bhL" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = 32
},
@@ -34606,6 +34544,7 @@
/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
valve_open = 1
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bkI" = (
@@ -37308,7 +37247,6 @@
/obj/item/clothing/accessory/armband/deputy,
/obj/item/clothing/accessory/armband/deputy,
/obj/item/clothing/accessory/armband/deputy,
-/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly,
/obj/effect/turf_decal/tile/red{
dir = 1
},
@@ -40095,7 +40033,7 @@
/area/crew_quarters/heads/hos)
"bty" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -40782,7 +40720,7 @@
/area/security/main)
"buM" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -41844,7 +41782,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -43216,7 +43154,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 +43168,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 +48693,7 @@
/area/engine/gravity_generator)
"bGg" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/twohanded/required/kirbyplants/random,
@@ -48794,7 +48732,7 @@
/area/engine/break_room)
"bGk" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/airalarm{
@@ -48935,7 +48873,7 @@
"bGt" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -49890,7 +49828,7 @@
/area/engine/gravity_generator)
"bHS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -50406,7 +50344,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 +51819,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 +52383,7 @@
"bLK" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/button/door{
@@ -55374,7 +55312,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{
@@ -56102,6 +56040,10 @@
/obj/structure/window/reinforced{
dir = 1
},
+/obj/item/gun/ballistic/shotgun/riot{
+ pixel_x = -3;
+ pixel_y = 3
+ },
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"bRv" = (
@@ -56146,6 +56088,8 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/gun/energy/pumpaction/blaster,
+/obj/item/gun/energy/pumpaction/blaster,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"bRx" = (
@@ -57009,7 +56953,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 +57097,7 @@
pixel_y = -3
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -57183,6 +57127,10 @@
/obj/structure/window/reinforced{
dir = 4
},
+/obj/item/gun/energy/laser{
+ pixel_x = 3;
+ pixel_y = -3
+ },
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"bTk" = (
@@ -57248,7 +57196,7 @@
layer = 2.9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light/small{
@@ -58732,10 +58680,6 @@
/obj/structure/window/reinforced{
dir = 4
},
-/obj/item/gun/energy/e_gun/advtaser{
- pixel_x = 3;
- pixel_y = -3
- },
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"bVr" = (
@@ -60665,6 +60609,7 @@
dir = 4
},
/obj/structure/window/reinforced,
+/obj/item/gun/energy/e_gun,
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
"bXQ" = (
@@ -60797,7 +60742,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 +60844,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 +60865,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 +62225,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 +63982,7 @@
"cdk" = (
/obj/machinery/vending/wardrobe/law_wardrobe,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -64076,7 +64021,7 @@
/area/security/brig)
"cdn" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -67030,7 +66975,7 @@
/area/engine/engineering)
"chF" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = -32
},
@@ -67361,7 +67306,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 +69273,7 @@
pixel_x = -26
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24;
pixel_y = 32
},
@@ -70711,7 +70656,7 @@
},
/obj/item/camera_film,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/grimy,
@@ -76603,7 +76548,7 @@
},
/obj/item/crowbar,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/table/reinforced,
@@ -77602,7 +77547,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 +77833,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable/white{
@@ -78794,7 +78739,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 +80743,7 @@
/obj/item/radio,
/obj/item/radio,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/decal/cleanable/dirt,
@@ -80916,6 +80861,23 @@
},
/turf/open/floor/plating,
/area/crew_quarters/toilet/restrooms)
+"cFc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/structure/bedsheetbin/towel,
+/turf/open/floor/plasteel,
+/area/crew_quarters/toilet/restrooms)
"cFd" = (
/obj/machinery/shower{
dir = 8;
@@ -81427,7 +81389,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 +82607,7 @@
/area/crew_quarters/dorms)
"cIk" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -84408,6 +84370,19 @@
/obj/item/reagent_containers/dropper,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cKT" = (
+/obj/structure/table,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/bedsheetbin/color,
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/crew_quarters/dorms)
"cKU" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
@@ -87477,7 +87452,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 +88813,7 @@
pixel_y = 32
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light_switch{
@@ -95618,7 +95593,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 +96529,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 +100234,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 +100598,7 @@
/area/science/explab)
"dmJ" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/bot,
@@ -100634,7 +100609,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/bot,
@@ -103278,7 +103253,7 @@
pixel_x = 36
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/vending/assist,
@@ -103445,7 +103420,7 @@
pixel_y = 6
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -104055,7 +104030,7 @@
"dti" = (
/obj/structure/closet/bombcloset,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -104389,7 +104364,7 @@
/area/medical/surgery)
"dtQ" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/blue{
@@ -105002,7 +104977,7 @@
"duZ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24;
pixel_y = -26
},
@@ -105033,7 +105008,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 +107160,7 @@
"dyD" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/status_display/ai{
@@ -108398,7 +108373,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 +111467,7 @@
dir = 5
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -111886,7 +111861,7 @@
pixel_y = 26
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24;
pixel_y = -26
},
@@ -112582,7 +112557,7 @@
/area/science/robotics/lab)
"dHC" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/disposalpipe/segment,
@@ -113983,7 +113958,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 +114222,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 +116721,7 @@
"dOC" = (
/obj/structure/filingcabinet/medical,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -117626,7 +117601,7 @@
name = "emergency shower"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -118825,7 +118800,7 @@
/area/medical/virology)
"dSd" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -119500,7 +119475,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/structure/closet/crate/coffin,
+/obj/structure/bodycontainer/morgue,
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"dTy" = (
@@ -119657,7 +119632,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sign/poster/official/work_for_a_future{
@@ -119868,7 +119843,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -120829,6 +120804,17 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"dWi" = (
+/obj/structure/table,
+/obj/machinery/computer/libraryconsole/bookmanagement,
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"dWm" = (
/obj/structure/reagent_dispensers/virusfood{
pixel_x = -32
@@ -121622,7 +121608,7 @@
"dXI" = (
/obj/structure/chair/wood,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -122148,7 +122134,7 @@
/area/medical/virology)
"dYV" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/closet/secure_closet/medical1,
@@ -125155,7 +125141,7 @@
},
/obj/item/camera_film,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/status_display{
@@ -125251,7 +125237,7 @@
"eeH" = (
/obj/structure/filingcabinet/security,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -125960,7 +125946,7 @@
"egb" = (
/obj/structure/table/wood,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/clipboard,
@@ -126415,20 +126401,14 @@
},
/turf/open/floor/plasteel/dark,
/area/library)
-"enO" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
+"euu" = (
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/structure/bodycontainer/morgue,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
"exE" = (
/obj/machinery/air_sensor/atmos/toxins_mixing_tank,
/turf/open/floor/engine/vacuum,
@@ -126443,6 +126423,27 @@
},
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
+"eHb" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
+"eIC" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
"eJc" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/closed/wall/r_wall,
@@ -126536,6 +126537,24 @@
},
/turf/open/floor/plasteel,
/area/medical/medbay/central)
+"flG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/starboard/fore)
"fno" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -126579,10 +126598,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
/area/science/circuit)
-"fHS" = (
-/obj/structure/sign/warning/vacuum,
-/turf/closed/wall/r_wall,
-/area/chapel/office)
"fLR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -126611,24 +126626,43 @@
},
/turf/open/floor/engine,
/area/science/mixing)
+"gkl" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"gmj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/circuit)
-"gFk" = (
-/obj/structure/grille,
-/turf/open/space,
-/area/space/nearstation)
-"gJj" = (
-/obj/machinery/door/window/northleft{
- name = "Mass Driver"
+"gug" = (
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"gER" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
},
-/obj/machinery/mass_driver{
- id = "chapelgun";
- name = "Holy Driver"
+/obj/structure/cable/white{
+ icon_state = "2-4"
},
-/turf/open/floor/plating,
-/area/chapel/office)
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/aft)
"gKr" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -126646,26 +126680,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
-"gNJ" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/machinery/airalarm{
- dir = 2;
- pixel_y = 22
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"gNS" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/tile/neutral{
@@ -126690,20 +126704,6 @@
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white,
/area/science/research)
-"gQw" = (
-/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{
- heat_capacity = 1e+006
- },
-/area/maintenance/port/aft)
"gQS" = (
/turf/open/floor/plasteel/white/side{
dir = 9
@@ -126720,10 +126720,6 @@
dir = 1
},
/area/science/circuit)
-"gUV" = (
-/obj/item/twohanded/required/kirbyplants/random,
-/turf/open/floor/plasteel,
-/area/security/prison)
"gVS" = (
/obj/item/clothing/head/kitty,
/obj/item/clothing/under/maid,
@@ -126740,6 +126736,10 @@
},
/turf/open/floor/plasteel,
/area/maintenance/department/electrical)
+"hds" = (
+/obj/structure/grille,
+/turf/open/space,
+/area/space/nearstation)
"hdH" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/conveyor{
@@ -126748,10 +126748,6 @@
},
/turf/open/floor/plating,
/area/quartermaster/storage)
-"hei" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/closed/wall/r_wall,
-/area/chapel/office)
"hic" = (
/obj/structure/table/reinforced,
/obj/item/integrated_electronics/analyzer,
@@ -126761,9 +126757,21 @@
dir = 10
},
/area/science/circuit)
-"hlc" = (
+"hig" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/turf/open/floor/plasteel,
-/area/security/prison)
+/area/maintenance/port/fore)
"hrP" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -126785,6 +126793,19 @@
},
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
+"hsc" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"hFo" = (
/obj/structure/lattice,
/obj/structure/disposalpipe/segment{
@@ -126816,22 +126837,9 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"hLO" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/delivery,
-/obj/structure/closet,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 3;
- name = "3maintenance loot spawner"
- },
-/turf/open/floor/plasteel,
-/area/maintenance/port/aft)
+"hJk" = (
+/turf/open/space,
+/area/space)
"hNZ" = (
/obj/structure/chair/office/light{
dir = 8
@@ -126851,31 +126859,11 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/medical/medbay/central)
-"iaF" = (
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/science/research)
-"ibC" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/lime{
- pixel_x = 6
- },
-/turf/open/floor/plasteel,
-/area/hydroponics/garden/abandoned{
- name = "Maintenance Garden"
- })
-"iiH" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
-"ijd" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
+"hUt" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -126884,21 +126872,17 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
+/turf/open/floor/plasteel,
+/area/maintenance/port/aft)
+"iaF" = (
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/science/research)
"ijB" = (
/obj/structure/reagent_dispensers/keg/aphro/strong,
/obj/item/reagent_containers/glass/beaker,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
-"ivF" = (
-/obj/machinery/door/poddoor{
- id = "chapelgun";
- name = "Chapel Launcher Door"
- },
-/obj/structure/fans/tiny,
-/turf/open/floor/plating,
-/area/chapel/office)
"iwL" = (
/obj/machinery/status_display{
pixel_x = 32
@@ -126917,9 +126901,6 @@
},
/turf/open/floor/engine/vacuum,
/area/science/mixing)
-"iyd" = (
-/turf/open/space,
-/area/space)
"iQh" = (
/obj/structure/bodycontainer/morgue{
dir = 1
@@ -126960,6 +126941,37 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"iUn" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/closet/crate/coffin,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
+"iZm" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/starboard/fore)
"jdO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -126984,21 +126996,13 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
-"jhK" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 2;
- name = "2maintenance loot spawner"
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+"jie" = (
+/obj/machinery/vr_sleeper,
+/obj/structure/cable/white{
+ icon_state = "4-8"
},
/turf/open/floor/plasteel,
-/area/maintenance/port/aft)
+/area/security/prison)
"jjN" = (
/obj/structure/table/reinforced,
/obj/machinery/camera{
@@ -127096,18 +127100,9 @@
/obj/machinery/chem_master,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
-"jPA" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+"jPL" = (
+/obj/structure/sign/warning/vacuum,
+/turf/closed/wall/r_wall,
/area/chapel/office)
"jRy" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -127129,6 +127124,16 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/mixing)
+"jTP" = (
+/obj/machinery/door/window/northleft{
+ name = "Mass Driver"
+ },
+/obj/machinery/mass_driver{
+ id = "chapelgun";
+ name = "Holy Driver"
+ },
+/turf/open/floor/plating,
+/area/chapel/office)
"kam" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/conveyor{
@@ -127137,6 +127142,12 @@
},
/turf/open/floor/plating,
/area/quartermaster/storage)
+"ktV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/chapel/office)
"kvf" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -127162,31 +127173,6 @@
},
/turf/open/floor/plasteel,
/area/maintenance/port)
-"kzw" = (
-/obj/machinery/button/crematorium{
- id = "cremawheat";
- pixel_x = -26;
- req_access_txt = "27"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/obj/item/clothing/under/burial,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"kLu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -127202,15 +127188,27 @@
},
/turf/open/floor/plasteel/white,
/area/science/mixing)
-"kZu" = (
-/obj/effect/landmark/barthpot,
-/turf/open/floor/wood,
-/area/library)
+"kTU" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/closed/wall/r_wall,
+/area/chapel/office)
+"lag" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"lak" = (
/turf/open/floor/plasteel/white/side{
dir = 10
},
/area/science/circuit)
+"lem" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/grape,
+/turf/open/floor/plasteel,
+/area/hydroponics/garden/abandoned{
+ name = "Maintenance Garden"
+ })
"loI" = (
/obj/machinery/autolathe,
/obj/machinery/door/window/southleft{
@@ -127242,6 +127240,13 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"lva" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
"lyU" = (
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_toxmix{
dir = 8
@@ -127355,14 +127360,38 @@
dir = 1
},
/area/science/circuit)
-"mdk" = (
+"lYm" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/aft)
+"mhH" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/obj/machinery/light/small,
-/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"mkm" = (
/obj/machinery/atmospherics/components/binary/valve,
/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_toxmix{
@@ -127381,16 +127410,8 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"mvf" = (
-/obj/structure/table,
-/obj/machinery/computer/libraryconsole/bookmanagement,
-/obj/structure/cable/white{
- icon_state = "1-2"
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
+"mqT" = (
+/turf/open/floor/plasteel,
/area/security/prison)
"mvm" = (
/obj/effect/decal/cleanable/dirt,
@@ -127413,25 +127434,36 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
/area/science/research/abandoned)
-"mEy" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/cobweb,
-/obj/item/storage/crayons,
-/obj/item/storage/crayons,
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"mIi" = (
/obj/item/electropack/shockcollar,
/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)
+"mIQ" = (
+/obj/machinery/button/crematorium{
+ id = "cremawheat";
+ pixel_x = -26;
+ req_access_txt = "27"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/item/clothing/under/burial,
+/obj/item/clothing/under/burial,
+/obj/item/clothing/under/burial,
+/obj/item/clothing/under/burial,
+/obj/item/clothing/under/burial,
+/obj/item/clothing/under/burial,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"mQE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -127455,118 +127487,54 @@
},
/turf/open/floor/engine,
/area/science/mixing)
-"mXJ" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"nyN" = (
/obj/machinery/vending/kink,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
-"nOV" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"nSh" = (
/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
-"oaP" = (
-/obj/machinery/seed_extractor,
-/obj/item/reagent_containers/glass/bucket,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/hydroponics/garden/abandoned{
- name = "Maintenance Garden"
- })
-"obe" = (
-/obj/structure/cable/white{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
-"ost" = (
-/obj/structure/filingcabinet/chestdrawer,
-/obj/effect/turf_decal/tile/brown{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 8
- },
-/obj/machinery/keycard_auth{
- pixel_x = -25
- },
-/turf/open/floor/plasteel,
-/area/quartermaster/qm)
-"owr" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
-"owI" = (
+"nUj" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/aft)
+"nZa" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
dir = 4
},
+/obj/machinery/door/window{
+ req_one_access_txt = "48,50"
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/quartermaster/sorting)
+"oDr" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
-"ozr" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/grape,
-/turf/open/floor/plasteel,
-/area/hydroponics/garden/abandoned{
- name = "Maintenance Garden"
- })
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/starboard/fore)
"oIl" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -127616,26 +127584,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"oNW" = (
-/obj/machinery/vr_sleeper,
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
-"oOb" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/door/window{
- req_one_access_txt = "48,50"
- },
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/quartermaster/sorting)
"oSD" = (
/obj/machinery/meter,
/obj/machinery/atmospherics/pipe/manifold/general/visible{
@@ -127726,27 +127674,36 @@
},
/turf/open/floor/plating,
/area/science/research/abandoned)
-"pEq" = (
-/obj/structure/sign/warning/electricshock{
- pixel_y = 32
+"pDQ" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/machinery/vr_sleeper,
-/obj/structure/cable/white{
- icon_state = "4-8"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/area/security/prison)
-"pHf" = (
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
+"pLz" = (
+/obj/structure/sign/warning/nosmoking,
+/turf/closed/wall,
+/area/medical/surgery)
+"pPt" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/bodycontainer/morgue,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"pQm" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -127764,6 +127721,27 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
+"qbg" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/computer/pod/old{
+ density = 0;
+ icon = 'icons/obj/airlock_machines.dmi';
+ icon_state = "airlock_control_standby";
+ id = "chapelgun";
+ name = "Mass Driver Controller";
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"qhc" = (
/obj/structure/table/reinforced,
/obj/item/integrated_electronics/analyzer,
@@ -127773,6 +127751,10 @@
dir = 9
},
/area/science/circuit)
+"qkw" = (
+/obj/effect/landmark/barthpot,
+/turf/open/floor/wood,
+/area/library)
"qnx" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxins_mixing_input,
/turf/open/floor/engine/vacuum,
@@ -127782,23 +127764,20 @@
dir = 5
},
/area/science/circuit)
-"qBG" = (
-/obj/effect/spawner/lootdrop/keg,
-/turf/open/floor/plating,
-/area/crew_quarters/abandoned_gambling_den)
-"qMR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
+"qzY" = (
+/obj/machinery/door/window/northright{
+ name = "Coffin Storage"
},
-/turf/open/floor/plating,
-/area/chapel/office)
-"rbY" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/closet/crate/coffin,
/turf/open/floor/plating,
/area/chapel/office)
+"qBG" = (
+/obj/effect/spawner/lootdrop/keg,
+/turf/open/floor/plating,
+/area/crew_quarters/abandoned_gambling_den)
"rhO" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -127812,6 +127791,18 @@
dir = 6
},
/area/science/circuit)
+"rTc" = (
+/obj/structure/sign/warning/electricshock{
+ pixel_y = 32
+ },
+/obj/machinery/vr_sleeper,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
+ },
+/area/security/prison)
"rUD" = (
/obj/machinery/meter,
/obj/machinery/atmospherics/pipe/manifold/general/visible{
@@ -127846,16 +127837,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
-"rYR" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/maintenance/port/aft)
"saw" = (
/turf/closed/wall,
/area/science/circuit)
@@ -127863,27 +127844,66 @@
/obj/effect/decal/remains/xeno,
/turf/open/floor/engine/vacuum,
/area/science/mixing)
+"siB" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/closet/crate/coffin,
+/turf/open/floor/plating,
+/area/chapel/office)
"svv" = (
/obj/machinery/door/poddoor/incinerator_toxmix,
/turf/open/floor/engine/vacuum,
/area/science/mixing)
-"tbC" = (
+"sBk" = (
+/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{
+ heat_capacity = 1e+006
+ },
+/area/maintenance/port/aft)
+"tma" = (
+/obj/structure/filingcabinet/chestdrawer,
+/obj/effect/turf_decal/tile/brown{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/brown{
dir = 8
},
-/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/keycard_auth{
+ pixel_x = -25
+ },
/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
+/area/quartermaster/qm)
"tmi" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/science/circuit)
-"tmZ" = (
-/obj/machinery/light/small,
-/turf/open/floor/plasteel,
-/area/security/prison)
+"tra" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
"twt" = (
/obj/machinery/vr_sleeper,
/obj/effect/turf_decal/tile/neutral{
@@ -127891,8 +127911,15 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
-"tAi" = (
-/obj/structure/reagent_dispensers/watertank,
+"tzT" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -127902,46 +127929,11 @@
"tCh" = (
/turf/closed/wall,
/area/science/misc_lab)
-"tEW" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/bodycontainer/morgue,
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"tMk" = (
/turf/open/floor/plasteel/white/side{
dir = 10
},
/area/science/misc_lab)
-"tOQ" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/computer/pod/old{
- density = 0;
- icon = 'icons/obj/airlock_machines.dmi';
- icon_state = "airlock_control_standby";
- id = "chapelgun";
- name = "Mass Driver Controller";
- pixel_x = -24
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"tRT" = (
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -127952,6 +127944,16 @@
/obj/machinery/chem_heater,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"umo" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/cobweb,
+/obj/item/storage/crayons,
+/obj/item/storage/crayons,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"upk" = (
/obj/machinery/door/airlock/public/glass{
name = "Holodeck Access"
@@ -127984,6 +127986,10 @@
},
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
+"uNx" = (
+/obj/item/twohanded/required/kirbyplants/random,
+/turf/open/floor/plasteel,
+/area/security/prison)
"uNP" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/effect/turf_decal/stripes/line{
@@ -128016,6 +128022,15 @@
/obj/item/clothing/under/color/grey,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
+"vph" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
"vAb" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -128025,40 +128040,22 @@
},
/turf/open/floor/plasteel/white,
/area/science/mixing)
-"vFw" = (
-/obj/machinery/door/window/northright{
- name = "Coffin Storage"
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/closet/crate/coffin,
-/turf/open/floor/plating,
-/area/chapel/office)
-"vON" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/structure/cable/white{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/maintenance/port/aft)
"wei" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/circuit)
-"whX" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+"wjb" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/lime{
+ pixel_x = 6
},
+/turf/open/floor/plasteel,
+/area/hydroponics/garden/abandoned{
+ name = "Maintenance Garden"
+ })
+"wsI" = (
+/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
@@ -128079,6 +128076,28 @@
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
+"wJf" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/office)
+"wQz" = (
+/obj/machinery/seed_extractor,
+/obj/item/reagent_containers/glass/bucket,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel,
+/area/hydroponics/garden/abandoned{
+ name = "Maintenance Garden"
+ })
"xaf" = (
/obj/machinery/door/airlock/public/glass{
name = "Holodeck Access"
@@ -128097,6 +128116,14 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
+"xdG" = (
+/obj/machinery/door/poddoor{
+ id = "chapelgun";
+ name = "Chapel Launcher Door"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/plating,
+/area/chapel/office)
"xmt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -128184,22 +128211,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/science/research)
-"xWZ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/office)
"xXn" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxins_mixing_output,
/turf/open/floor/engine/vacuum,
@@ -157106,7 +157117,7 @@ arB
aug
alg
alg
-whX
+pDQ
aKg
alf
aMO
@@ -157363,7 +157374,7 @@ aAb
aAb
aAb
aAb
-pHf
+vph
aKh
alf
aMN
@@ -157621,7 +157632,7 @@ aCv
aFJ
aAb
aIH
-tAi
+eIC
alf
aMP
aDw
@@ -158135,7 +158146,7 @@ aEB
aFL
aAb
aIH
-tbC
+lva
avm
arB
arB
@@ -158387,7 +158398,7 @@ alf
aAb
aBj
aCv
-oaP
+wQz
aEC
aFM
aAb
@@ -158518,7 +158529,7 @@ edL
eep
eff
aad
-aeH
+lag
aaa
ajr
aaa
@@ -158644,7 +158655,7 @@ alg
aAb
aBk
aCv
-ozr
+lem
aEC
aFN
aAb
@@ -158775,7 +158786,7 @@ edM
eeq
dLY
aad
-gFk
+hds
aaa
aad
aaa
@@ -158906,7 +158917,7 @@ aED
aFO
aHm
aII
-mdk
+euu
aLz
aMR
aOq
@@ -159163,7 +159174,7 @@ aEE
aFP
aHn
aIJ
-iiH
+wsI
aLz
aMS
aOr
@@ -159415,12 +159426,12 @@ ayX
aAb
aBn
aCx
-ibC
+wjb
aCv
aFQ
aAb
-owI
-iiH
+hig
+wsI
aLz
aMT
aOs
@@ -159793,7 +159804,7 @@ dXz
dYt
dON
dOl
-vON
+gER
eaX
dYu
ect
@@ -160049,8 +160060,8 @@ dON
dON
dON
dON
-gQw
-rYR
+sBk
+nUj
ebc
ebQ
ecu
@@ -160191,7 +160202,7 @@ aAb
aAb
aAb
aIL
-tbC
+lva
aLz
aLz
aLz
@@ -160312,12 +160323,12 @@ dZN
dZN
dZN
dZN
-fHS
+jPL
dZN
dZN
dLY
aad
-aeH
+lag
aad
aad
aaa
@@ -160448,7 +160459,7 @@ aEG
aFS
aHp
aIM
-obe
+tzT
aLB
aFS
aEG
@@ -160563,20 +160574,20 @@ dWJ
dLW
dYu
dZg
-hLO
-jhK
+lYm
+hUt
dZN
-owr
-nOV
-tOQ
-gJj
-qMR
-ivF
+hsc
+gkl
+qbg
+jTP
+ktV
+xdG
aaa
-iyd
+hJk
aaa
aaa
-iyd
+hJk
aaa
aaa
aaa
@@ -160752,7 +160763,7 @@ caG
chU
cjt
ckR
-kZu
+qkw
cnR
cpv
cqQ
@@ -160822,12 +160833,12 @@ dTw
dTw
dZN
dZN
-hei
-gNJ
-jPA
-jPA
-vFw
-rbY
+kTU
+agv
+eHb
+eHb
+qzY
+siB
dTw
aad
aad
@@ -161069,19 +161080,19 @@ dPJ
dQC
dRB
dSz
-tEW
+dTx
dUi
-dTx
+iUn
dVN
-dTx
+iUn
dXB
dYv
dTw
dZO
-kzw
-enO
-xWZ
-mXJ
+mIQ
+pPt
+mhH
+tra
dTw
dTw
dTw
@@ -161334,7 +161345,7 @@ dUj
dXC
dYw
dZh
-ijd
+wJf
eau
edr
ebS
@@ -168156,7 +168167,7 @@ aCP
avQ
aFe
aGp
-oOb
+nZa
aJg
aKF
aLP
@@ -170713,7 +170724,7 @@ aox
apu
aqy
arb
-aax
+flG
aig
auA
avU
@@ -170970,7 +170981,7 @@ aoy
apv
aqz
apu
-aay
+arX
aig
auB
avU
@@ -171479,8 +171490,8 @@ aiC
akU
alI
amE
-aav
-aaw
+anz
+oDr
apw
aqA
apy
@@ -171998,7 +172009,7 @@ aiC
apy
apy
apu
-aaz
+iZm
atw
auD
avW
@@ -172255,7 +172266,7 @@ aoB
apz
apw
apv
-aaA
+asa
atw
auE
avW
@@ -172843,7 +172854,7 @@ bsE
cAm
cBI
cDo
-aaq
+cFc
cAm
cHW
cIW
@@ -174923,7 +174934,7 @@ dkv
dma
dma
dma
-mMC
+pLz
dsI
dro
dvz
@@ -175359,7 +175370,7 @@ aaa
aaa
aad
aQR
-ost
+tma
aUq
aVR
aXF
@@ -177216,7 +177227,7 @@ cFr
cGP
cqd
cJe
-aar
+cKT
cMq
cAw
cPM
@@ -179462,7 +179473,7 @@ aaa
aaa
aaa
aaa
-aeH
+lag
aFm
aIc
aFm
@@ -179719,9 +179730,9 @@ aaa
aaa
aaa
aaa
-aeH
+lag
aFm
-mEy
+umo
bbt
aFm
aMc
@@ -179976,10 +179987,10 @@ aaa
aaa
aaa
aaa
-aeH
+lag
aFm
-oNW
-tmZ
+jie
+gug
aFm
aKV
aNy
@@ -180235,10 +180246,10 @@ ajr
ajr
aad
aFm
-pEq
-hlc
-gUV
-hlc
+rTc
+mqT
+uNx
+mqT
aNz
aPh
aQZ
@@ -180492,7 +180503,7 @@ ajr
aad
aad
aFn
-mvf
+dWi
aJA
aJA
aMe
@@ -182811,7 +182822,7 @@ aFn
aMn
aNI
aPr
-aaB
+aRi
aKV
aUC
aWk
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 0e6feb67c6..f2eab05785 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -2,17 +2,6 @@
"aaa" = (
/turf/open/space/basic,
/area/space)
-"aab" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
-/obj/structure/sign/poster/official/random{
- pixel_y = -32
- },
-/obj/structure/table,
-/obj/structure/bedsheetbin/towel,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/restrooms)
"aac" = (
/obj/effect/landmark/carpspawn,
/turf/open/space,
@@ -1445,7 +1434,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -3063,7 +3052,6 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/item/gun/energy/e_gun/advtaser,
-/obj/item/gun/energy/e_gun/advtaser,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -3613,6 +3601,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/gun/energy/e_gun,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"agV" = (
@@ -3882,7 +3871,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{
@@ -3895,6 +3884,11 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/shield/riot,
+/obj/item/shield/riot,
+/obj/item/shield/riot,
+/obj/item/clothing/head/helmet/riot,
+/obj/item/clothing/suit/armor/riot,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"ahD" = (
@@ -3993,12 +3987,6 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"ahI" = (
-/obj/structure/rack,
-/obj/item/shield/riot{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/shield/riot,
/obj/machinery/button/door{
id = "armory";
name = "Armory Shutters";
@@ -4015,12 +4003,15 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/rack,
+/obj/item/gun/energy/pumpaction/blaster,
+/obj/item/gun/energy/pumpaction/blaster,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"ahJ" = (
/obj/machinery/disposal/bin,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -4158,7 +4149,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -4903,7 +4894,7 @@
name = "Evidence Closet 5"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral{
@@ -7192,7 +7183,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 +7239,7 @@
"anu" = (
/obj/machinery/vending/security,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/showroomfloor,
@@ -7733,7 +7724,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 +7771,7 @@
/area/maintenance/port/fore)
"aoy" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/structure/closet/secure_closet/warden,
@@ -9298,7 +9289,7 @@
},
/obj/structure/table/wood,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/grimy,
@@ -9456,7 +9447,7 @@
/area/engine/gravity_generator)
"arS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/structure/cable{
@@ -11192,7 +11183,7 @@
dir = 5
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/neutral{
@@ -13469,7 +13460,7 @@
/area/security/brig)
"azQ" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/filingcabinet,
@@ -14063,7 +14054,7 @@
/area/hallway/primary/fore)
"aAX" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light/small{
@@ -14112,7 +14103,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 +14600,7 @@
maxcharge = 2000
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/spawner/lootdrop/maintenance,
@@ -14669,15 +14660,12 @@
/area/security/nuke_storage)
"aCh" = (
/obj/structure/safe,
-/obj/item/storage/secure/briefcase{
+/obj/item/storage/backpack/duffelbag/syndie/hitman{
contents = newlist(/obj/item/clothing/suit/armor/vest,/obj/item/gun/ballistic/automatic/pistol,/obj/item/suppressor,/obj/item/melee/classic_baton/telescopic,/obj/item/clothing/mask/balaclava,/obj/item/bodybag,/obj/item/soap/nanotrasen)
},
-/obj/item/storage/backpack/duffelbag/syndie/hitman,
/obj/item/card/id/silver/reaper,
/obj/item/lazarus_injector,
/obj/item/gun/energy/e_gun/advtaser,
-/obj/item/gun/ballistic/revolver/russian,
-/obj/item/ammo_box/a357,
/obj/item/clothing/neck/stethoscope,
/obj/item/book{
desc = "An undeniably handy book.";
@@ -15124,7 +15112,7 @@
/area/maintenance/port/fore)
"aDh" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light{
@@ -16127,7 +16115,7 @@
"aFc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -16225,7 +16213,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 +16224,7 @@
"aFp" = (
/obj/structure/reagent_dispensers/watertank,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -16584,7 +16572,7 @@
icon_state = "2-4"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/machinery/camera{
@@ -16858,7 +16846,7 @@
},
/obj/item/pen,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/reagent_dispensers/peppertank{
@@ -17616,7 +17604,7 @@
/area/maintenance/starboard/fore)
"aHX" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -18710,7 +18698,7 @@
icon_state = "1-8"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -19722,7 +19710,7 @@
/area/storage/primary)
"aMF" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -19794,7 +19782,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 +20611,7 @@
/area/lawoffice)
"aOs" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/table,
@@ -21207,7 +21195,7 @@
"aPA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -21396,7 +21384,7 @@
pixel_y = 32
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/neutral{
@@ -23473,7 +23461,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -23863,7 +23851,7 @@
/area/crew_quarters/locker)
"aUL" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -25956,7 +25944,7 @@
pixel_x = -38
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/loading_area{
@@ -28079,7 +28067,7 @@
"bcn" = (
/obj/structure/rack,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/item/clothing/gloves/color/fyellow,
@@ -28277,7 +28265,7 @@
/area/storage/tech)
"bcE" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/disposalpipe/segment{
@@ -28446,7 +28434,7 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/cable/yellow{
@@ -28566,7 +28554,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 +28771,7 @@
dir = 9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -29276,7 +29264,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 +30102,7 @@
pixel_y = 7
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
@@ -30613,7 +30601,7 @@
/obj/item/mop,
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -31943,7 +31931,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 +32341,7 @@
"bkn" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/effect/turf_decal/tile/brown{
@@ -33024,7 +33012,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 +34195,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 +34625,7 @@
/area/bridge)
"boC" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/storage/fancy/donut_box,
@@ -36458,7 +36446,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -37243,7 +37231,7 @@
/obj/structure/table,
/obj/item/camera_film,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel,
@@ -38242,7 +38230,7 @@
pixel_x = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
@@ -38729,7 +38717,7 @@
"bwr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -38821,7 +38809,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 +38931,7 @@
"bwK" = (
/obj/structure/table,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/machinery/chem_dispenser/drinks,
@@ -39807,7 +39795,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 +39961,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue,
@@ -40671,7 +40659,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/carpet,
@@ -41103,7 +41091,7 @@
pixel_y = -30
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/paper_bin{
@@ -41614,7 +41602,7 @@
/area/crew_quarters/theatre)
"bCd" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/table/wood,
@@ -41949,7 +41937,7 @@
/area/crew_quarters/toilet/auxiliary)
"bCS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel,
@@ -44190,7 +44178,7 @@
dir = 5
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/yellow{
@@ -45223,7 +45211,7 @@
/area/security/vacantoffice)
"bJx" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -45233,7 +45221,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/decal/cleanable/cobweb,
@@ -45319,7 +45307,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{
@@ -45855,6 +45843,7 @@
/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
valve_open = 1
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bKJ" = (
@@ -45967,7 +45956,7 @@
icon_state = "1-2"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -46985,7 +46974,7 @@
"bMW" = (
/obj/machinery/teleport/station,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plating,
@@ -47352,7 +47341,7 @@
/area/crew_quarters/kitchen)
"bNC" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/vending/dinnerware,
@@ -47447,7 +47436,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -48899,6 +48888,7 @@
/area/engine/atmos)
"bQY" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bQZ" = (
@@ -49198,7 +49188,7 @@
name = "novelty HoS hat"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light/small{
@@ -49294,7 +49284,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 +49719,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{
@@ -51342,6 +51332,7 @@
/area/engine/atmos)
"bVO" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bVP" = (
@@ -52408,7 +52399,7 @@
/area/hallway/primary/central)
"bXZ" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/twohanded/required/kirbyplants{
@@ -53733,7 +53724,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -53817,7 +53808,7 @@
},
/obj/item/pen,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/red{
@@ -53831,7 +53822,7 @@
/area/security/checkpoint/science/research)
"caG" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sink{
@@ -55905,7 +55896,7 @@
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26;
pixel_y = 28
},
@@ -57091,7 +57082,7 @@
icon_state = "2-8"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/structure/reagent_dispensers/cooking_oil,
@@ -57265,7 +57256,7 @@
/area/medical/sleeper)
"cgT" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -57892,7 +57883,7 @@
/area/maintenance/port/aft)
"cie" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -58454,6 +58445,7 @@
/area/engine/atmos)
"cjd" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"cje" = (
@@ -58468,6 +58460,7 @@
/area/engine/atmos)
"cjg" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cjh" = (
@@ -59031,7 +59024,7 @@
/area/maintenance/starboard/aft)
"ckm" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sink{
@@ -59626,7 +59619,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -59730,7 +59723,7 @@
/area/science/research)
"clI" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/closet/firecloset,
@@ -61045,7 +61038,7 @@
/area/science/research)
"cok" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/disposalpipe/segment,
@@ -62766,7 +62759,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white/side{
@@ -63319,7 +63312,7 @@
"csq" = (
/obj/structure/bed,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/bedsheet/medical,
@@ -63349,7 +63342,7 @@
/area/medical/cryo)
"cst" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -64556,7 +64549,7 @@
pixel_y = 2
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/sign/warning/nosmoking{
@@ -64778,7 +64771,7 @@
},
/obj/item/storage/secure/briefcase,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/cafeteria{
@@ -65130,7 +65123,7 @@
/area/medical/genetics)
"cvC" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/storage/box/syringes,
@@ -65705,7 +65698,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 +65778,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 +66774,7 @@
/area/science/circuit)
"cyN" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/airalarm{
@@ -67430,7 +67423,7 @@
},
/obj/item/paper,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/table/glass,
@@ -68105,7 +68098,7 @@
"cBi" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/delivery,
@@ -68521,7 +68514,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 +69589,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -70136,7 +70129,7 @@
/area/science/robotics/lab)
"cFj" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28;
pixel_y = 5
},
@@ -70649,7 +70642,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 +72039,7 @@
dir = 9
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/machinery/vending/wardrobe/viro_wardrobe,
@@ -73267,7 +73260,7 @@
dir = 9
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -73902,7 +73895,7 @@
"cLS" = (
/obj/structure/chair/stool,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/green,
@@ -73931,7 +73924,7 @@
pixel_y = 25
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/obj/structure/table/wood,
@@ -77869,7 +77862,7 @@
/area/hallway/primary/central)
"cVi" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/wood,
@@ -79683,7 +79676,7 @@
network = list("ss13","engine")
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/dark,
@@ -80873,6 +80866,17 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
+"dhD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/obj/structure/sign/poster/official/random{
+ pixel_y = -32
+ },
+/obj/structure/table,
+/obj/structure/bedsheetbin/towel,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet/restrooms)
"dhE" = (
/obj/structure/sign/poster/contraband/random{
pixel_x = 32
@@ -81295,7 +81299,7 @@
/area/crew_quarters/theatre)
"dis" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/disposal/bin,
@@ -83283,13 +83287,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/cryopod)
-"ghT" = (
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"gnZ" = (
/obj/item/radio/intercom{
pixel_y = -30
@@ -83404,15 +83401,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"hYs" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"ioI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -83524,10 +83512,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"jVj" = (
-/obj/machinery/vr_sleeper,
-/turf/open/floor/plasteel,
-/area/security/prison)
"kfu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/white,
@@ -83535,6 +83519,16 @@
"krD" = (
/turf/closed/wall,
/area/science/circuit)
+"kwg" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/airlock/public/glass{
+ id_tag = "permahydro";
+ name = "Recreation Module"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"kwI" = (
/obj/item/wrench,
/obj/item/clothing/suit/apron,
@@ -83595,6 +83589,10 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"kRT" = (
+/obj/machinery/vr_sleeper,
+/turf/open/floor/plasteel,
+/area/security/prison)
"kVo" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -83614,6 +83612,13 @@
/obj/item/integrated_circuit_printer,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"lmg" = (
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"lsv" = (
/obj/machinery/power/apc{
areastring = "/area/science/circuit";
@@ -83783,6 +83788,13 @@
/obj/item/storage/fancy/candle_box,
/turf/open/floor/engine/cult,
/area/library)
+"oba" = (
+/obj/structure/chair/stool,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"obb" = (
/obj/structure/target_stake,
/obj/effect/turf_decal/stripes/line{
@@ -83819,17 +83831,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"odR" = (
-/obj/structure/table,
-/obj/item/folder,
-/obj/item/paper/guides/jobs/hydroponics,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/item/pen,
-/obj/item/storage/crayons,
-/turf/open/floor/plasteel,
-/area/security/prison)
"ohj" = (
/obj/item/integrated_electronics/analyzer,
/obj/item/integrated_electronics/debugger,
@@ -83935,13 +83936,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"pzu" = (
-/obj/structure/chair/stool,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"pCV" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -83997,10 +83991,6 @@
},
/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
@@ -84068,7 +84058,7 @@
/area/library)
"qXt" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel/dark,
@@ -84263,16 +84253,6 @@
/obj/machinery/vending/assist,
/turf/open/floor/plasteel,
/area/science/mixing)
-"uEa" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/door/airlock/public/glass{
- id_tag = "permahydro";
- name = "Recreation Module"
- },
-/turf/open/floor/plasteel,
-/area/security/prison)
"uGW" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -84291,6 +84271,15 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"uHA" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"uJU" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -84375,6 +84364,10 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
+"vPN" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/surgery)
"wdu" = (
/obj/structure/grille,
/obj/structure/lattice,
@@ -84447,6 +84440,17 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"xcb" = (
+/obj/structure/table,
+/obj/item/folder,
+/obj/item/paper/guides/jobs/hydroponics,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/item/pen,
+/obj/item/storage/crayons,
+/turf/open/floor/plasteel,
+/area/security/prison)
"xeC" = (
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
@@ -104233,7 +104237,7 @@ cia
cia
cpX
cia
-qnB
+vPN
cia
ceu
dyg
@@ -106706,11 +106710,11 @@ aaa
aaf
aaf
aay
-odR
-hYs
+xcb
+uHA
abC
-uEa
-hYs
+kwg
+uHA
abC
abC
acr
@@ -106964,10 +106968,10 @@ aaf
aaa
aax
abl
-pzu
-ghT
+oba
+lmg
aax
-jVj
+kRT
aaR
aaR
aaI
@@ -118821,7 +118825,7 @@ aBu
aCB
aDU
aFg
-aab
+dhD
axC
axC
axC
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index bd3d72dc85..a9528ae61a 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -955,19 +955,6 @@
},
/turf/open/floor/plasteel/dark,
/area/bridge)
-"abn" = (
-/obj/structure/table,
-/obj/machinery/camera{
- c_tag = "Locker Room East";
- dir = 8
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/structure/bedsheetbin/color,
-/turf/open/floor/plasteel/white/corner,
-/area/crew_quarters/dorms)
"abo" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -1094,7 +1081,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/purple{
@@ -1279,22 +1266,6 @@
},
/turf/open/floor/plasteel,
/area/science/mixing)
-"abQ" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/computer/arcade{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/port)
"abR" = (
/obj/structure/lattice,
/turf/open/space,
@@ -3052,7 +3023,7 @@
"afp" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/camera{
@@ -3138,7 +3109,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -4288,7 +4259,7 @@
/area/maintenance/starboard/fore)
"ahk" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/light_switch{
@@ -4440,7 +4411,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 +4446,7 @@
"ahB" = (
/obj/machinery/photocopier,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/cable/white{
@@ -4863,6 +4834,7 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/item/gun/energy/pumpaction/blaster,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aip" = (
@@ -7740,7 +7712,7 @@
/obj/item/stack/packageWrap,
/obj/item/hand_labeler,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -7886,7 +7858,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 +8339,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 +8526,7 @@
},
/obj/structure/table/reinforced,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/red{
@@ -9965,7 +9937,7 @@
icon_state = "plant-21"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -10216,7 +10188,7 @@
pixel_y = -22
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/item/paper_bin,
@@ -11445,7 +11417,7 @@
"atj" = (
/obj/machinery/vending/coffee,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -12887,7 +12859,7 @@
/area/hallway/primary/port)
"avX" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/item/twohanded/required/kirbyplants{
@@ -12902,7 +12874,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 +14077,7 @@
/area/engine/atmos)
"ayl" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -14116,7 +14088,7 @@
"aym" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/delivery,
@@ -14753,7 +14725,7 @@
"azD" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock{
- name = "Cabin"
+ name = "Bar Back Room"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -15311,6 +15283,19 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
+"aAJ" = (
+/obj/structure/table,
+/obj/machinery/camera{
+ c_tag = "Locker Room East";
+ dir = 8
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/bedsheetbin/color,
+/turf/open/floor/plasteel/white/corner,
+/area/crew_quarters/dorms)
"aAK" = (
/obj/structure/sign/poster/random,
/turf/closed/wall,
@@ -16093,7 +16078,7 @@
"aCh" = (
/obj/machinery/vending/snack/random,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/bot,
@@ -16186,11 +16171,13 @@
"aCs" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"aCw" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/light/small,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"aCz" = (
@@ -16503,7 +16490,7 @@
/obj/item/clipboard,
/obj/item/toy/figure/chef,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/camera{
@@ -16714,7 +16701,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 +17431,7 @@
"aEK" = (
/obj/machinery/vending/clothing,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/bot,
@@ -17977,7 +17964,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/structure/cable{
@@ -18209,7 +18196,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 +20135,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 +21476,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 +22584,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 +23049,7 @@
/area/engine/engineering)
"aOG" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -23834,7 +23821,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 +25036,7 @@
name = "emergency shower"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -26916,7 +26903,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 +28239,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -29794,7 +29781,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 +30087,7 @@
/area/medical/medbay/zone3)
"bbu" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light{
@@ -31241,7 +31228,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -32128,7 +32115,7 @@
/area/security/checkpoint)
"beK" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -34456,7 +34443,7 @@
pixel_y = -22
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/machinery/light/small{
@@ -37099,7 +37086,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{
@@ -37180,6 +37167,22 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"dEa" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/computer/arcade{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/port)
"dFV" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -37669,6 +37672,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"gcw" = (
@@ -37974,6 +37978,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"hTn" = (
@@ -38421,6 +38426,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"kiw" = (
@@ -39022,6 +39028,12 @@
dir = 1
},
/area/engine/atmos)
+"ooX" = (
+/obj/machinery/smartfridge/organ/preloaded{
+ pixel_y = 2
+ },
+/turf/closed/wall,
+/area/medical/medbay/zone3)
"oql" = (
/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
@@ -40387,7 +40399,7 @@
/area/maintenance/starboard)
"sHf" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/turf/open/floor/plasteel,
@@ -42215,6 +42227,7 @@
},
/obj/structure/table,
/obj/machinery/firealarm{
+ dir = 1;
pixel_y = -26
},
/obj/effect/turf_decal/tile/neutral,
@@ -42280,6 +42293,7 @@
},
/obj/effect/turf_decal/delivery,
/obj/machinery/firealarm{
+ dir = 1;
pixel_y = -26
},
/obj/effect/turf_decal/tile/neutral,
@@ -42880,12 +42894,6 @@
/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{
@@ -76202,7 +76210,7 @@ aZp
bak
bbc
bbQ
-abQ
+dEa
bdD
beu
sKE
@@ -81601,7 +81609,7 @@ aSh
bcf
bcW
blt
-uvp
+ooX
aOL
bfA
bfX
@@ -82340,7 +82348,7 @@ awQ
axK
ayC
awQ
-abn
+aAJ
aBT
awQ
aDI
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 9f1c1824cd..be4128208a 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -2,63 +2,12 @@
"aaa" = (
/turf/open/space/basic,
/area/space)
-"aab" = (
-/obj/machinery/newscaster{
- pixel_x = 32
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/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/dorms)
-"aac" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/obj/structure/table,
-/obj/structure/bedsheetbin/towel,
-/turf/open/floor/plasteel/freezer,
-/area/crew_quarters/toilet/restrooms)
"aad" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
-"aae" = (
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
-"aaf" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/computer/arcade{
- icon_state = "arcade";
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/heads/captain)
"abf" = (
/obj/structure/bed,
/turf/open/floor/plating,
@@ -68,13 +17,6 @@
/obj/structure/grille,
/turf/open/space,
/area/space/nearstation)
-"abD" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"abI" = (
/obj/structure/lattice,
/turf/open/space,
@@ -174,7 +116,6 @@
pixel_x = -27
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 26
},
/turf/open/floor/circuit,
@@ -672,7 +613,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,
@@ -1621,6 +1562,13 @@
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
+"afI" = (
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"afJ" = (
/obj/effect/landmark/carpspawn,
/turf/open/space/basic,
@@ -2453,7 +2401,7 @@
dir = 6
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -27
},
/turf/open/floor/plasteel/showroomfloor,
@@ -3387,7 +3335,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,
@@ -3899,15 +3847,9 @@
/area/security/armory)
"akN" = (
/obj/effect/landmark/event_spawn,
-/mob/living/simple_animal/bot/secbot{
- arrest_type = 1;
- health = 45;
- icon_state = "secbot1";
- idcheck = 1;
- name = "Sergeant-at-Armsky";
- on = 1;
- weaponscheck = 1
- },
+/obj/structure/rack,
+/obj/item/gun/energy/pumpaction/blaster,
+/obj/item/gun/energy/pumpaction/blaster,
/turf/open/floor/plasteel/dark,
/area/security/armory)
"akO" = (
@@ -4248,7 +4190,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 +4906,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/showroomfloor,
@@ -7277,6 +7219,22 @@
},
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/dorms)
+"asg" = (
+/obj/machinery/newscaster{
+ pixel_x = 32
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/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/dorms)
"ash" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -8228,7 +8186,7 @@
dir = 10
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/dark,
@@ -8715,7 +8673,7 @@
/area/crew_quarters/dorms)
"avl" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/computer/cryopod{
@@ -9674,7 +9632,7 @@
light_color = "#e8eaff"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/computer/rdconsole{
@@ -11431,7 +11389,6 @@
"aBB" = (
/obj/machinery/computer/cargo/request,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/turf/open/floor/wood,
@@ -12379,7 +12336,7 @@
/area/storage/primary)
"aDB" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/neutral,
@@ -13681,6 +13638,23 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/captain)
+"aGm" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/computer/arcade{
+ icon_state = "arcade";
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/heads/captain)
"aGn" = (
/obj/item/twohanded/required/kirbyplants/photosynthetic{
layer = 3.1
@@ -14356,7 +14330,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/blue{
@@ -14549,18 +14522,6 @@
},
/turf/open/space,
/area/solar/port)
-"aIA" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"aIC" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -14873,6 +14834,17 @@
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/restrooms)
+"aJo" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/structure/bedsheetbin/towel,
+/turf/open/floor/plasteel/freezer,
+/area/crew_quarters/toilet/restrooms)
"aJp" = (
/obj/item/chair,
/turf/open/floor/plating,
@@ -15280,6 +15252,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"aKm" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"aKn" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -16684,19 +16663,6 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"aNV" = (
-/obj/machinery/mineral/stacking_unit_console{
- dir = 2;
- machinedir = 8;
- pixel_x = -32;
- pixel_y = 32
- },
-/obj/machinery/conveyor{
- dir = 4;
- id = "garbagestacked"
- },
-/turf/open/floor/plating,
-/area/maintenance/disposal)
-"aNW" = (
/obj/machinery/conveyor{
dir = 4;
id = "garbagestacked"
@@ -17508,7 +17474,7 @@
dir = 10
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel,
@@ -18556,7 +18522,7 @@
/area/maintenance/department/crew_quarters/bar)
"aSA" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/machinery/hydroponics/constructable,
@@ -18775,7 +18741,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/brown{
@@ -19108,7 +19073,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 +21293,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/brown,
@@ -21725,7 +21690,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/plasteel/dark,
@@ -22077,7 +22042,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/green{
@@ -24181,17 +24146,6 @@
/obj/item/caution,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"beT" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/public/glass{
- name = "Monastery Transit"
- },
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
- },
-/area/chapel/dock)
"beU" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -24433,7 +24387,6 @@
"bfx" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 24
},
/obj/effect/turf_decal/delivery,
@@ -24608,6 +24561,12 @@
/obj/machinery/shieldwallgen,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"bfQ" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"bfY" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/obj/effect/turf_decal/tile/neutral,
@@ -24819,7 +24778,6 @@
/area/hallway/primary/central)
"bgx" = (
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 27
},
/obj/structure/chair,
@@ -26683,7 +26641,7 @@
"bly" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26;
pixel_y = 28
},
@@ -27994,7 +27952,6 @@
"boz" = (
/obj/machinery/vending/clothing,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 27
},
/obj/effect/turf_decal/tile/blue{
@@ -29426,13 +29383,6 @@
dir = 1
},
/obj/effect/landmark/start/chemist,
-/obj/machinery/button/door{
- id = "chemistry_shutters";
- name = "Shutters Control";
- pixel_x = 26;
- pixel_y = 4;
- req_access_txt = "5; 33"
- },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
@@ -29474,15 +29424,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
-"brp" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-03"
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = -24
- },
-/turf/open/floor/plasteel/dark,
-/area/science/lab)
"brq" = (
/obj/structure/sink/kitchen{
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
@@ -30024,7 +29965,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 +30172,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 +30301,7 @@
/obj/item/crowbar,
/obj/item/wrench,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/item/multitool,
@@ -30810,7 +30751,7 @@
/area/medical/chemistry)
"bun" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/effect/turf_decal/tile/yellow{
@@ -30848,7 +30789,7 @@
network = list("ss13","rd")
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -31469,7 +31410,7 @@
dir = 1
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/purple{
@@ -31964,13 +31905,27 @@
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bwW" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chemistry_shutters";
- name = "chemistry shutters"
+/obj/structure/rack,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
+"bxa" = (
+/obj/structure/table/glass,
+/obj/item/book/manual/wiki/research_and_development,
+/obj/item/disk/tech_disk,
+/obj/item/disk/design_disk,
+/turf/open/floor/plasteel/dark,
+/area/science/lab)
"bxc" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -34270,7 +34225,7 @@
/area/science/storage)
"bBH" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/purple{
@@ -34299,7 +34254,7 @@
"bBK" = (
/obj/structure/closet/bombcloset,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/structure/sign/poster/official/random{
@@ -35599,7 +35554,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -35961,8 +35916,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 +36598,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 +36644,7 @@
network = list("ss13","rd")
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/turf/open/floor/engine,
@@ -37123,7 +37077,7 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -37178,7 +37132,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
@@ -37303,6 +37256,19 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"bHp" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"bHq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -37798,8 +37764,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
@@ -38077,6 +38042,11 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
+"bIY" = (
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
"bIZ" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -38760,8 +38730,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
@@ -39155,6 +39124,15 @@
heat_capacity = 1e+006
},
/area/chapel/dock)
+"bLs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/light,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
"bLt" = (
/obj/effect/decal/cleanable/oil{
icon_state = "floor6"
@@ -39311,7 +39289,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -26
},
/turf/open/floor/plasteel/white,
@@ -39665,6 +39643,14 @@
heat_capacity = 1e+006
},
/area/chapel/dock)
+"bMy" = (
+/obj/structure/window/reinforced{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
"bMA" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/engine,
@@ -40516,6 +40502,19 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
+"bOy" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/dock)
"bOz" = (
/obj/structure/chair/comfy/black{
dir = 1
@@ -40977,7 +40976,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/yellow{
@@ -41115,6 +41114,7 @@
/area/engine/atmos)
"bQa" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engine/atmos)
"bQb" = (
@@ -41200,7 +41200,6 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/turf/open/floor/plasteel/dark,
@@ -41252,7 +41251,6 @@
},
/obj/item/stock_parts/cell/high/plus,
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/green{
@@ -42226,6 +42224,12 @@
/obj/structure/flora/ausbushes,
/turf/open/floor/plating/asteroid,
/area/chapel/asteroid/monastery)
+"bSn" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/space,
+/area/space/nearstation)
"bSo" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -42523,6 +42527,7 @@
/area/engine/atmos)
"bSX" = (
/obj/machinery/portable_atmospherics/canister/toxins,
+/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engine/atmos)
"bSY" = (
@@ -42923,7 +42928,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/yellow{
@@ -44029,6 +44033,7 @@
/area/engine/atmos)
"bWf" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bWg" = (
@@ -44760,6 +44765,12 @@
},
/turf/closed/wall/r_wall,
/area/engine/atmos)
+"bXI" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"bXJ" = (
/turf/open/floor/plasteel/dark,
/area/chapel/main/monastery)
@@ -45081,24 +45092,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"bYM" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"bYN" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -45171,15 +45164,15 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"bYR" = (
@@ -45325,7 +45318,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/stripes/corner{
@@ -46143,6 +46135,7 @@
/area/engine/atmos)
"cbt" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engine/atmos)
"cbu" = (
@@ -46150,6 +46143,7 @@
/area/engine/atmos)
"cbv" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
"cbw" = (
@@ -46674,7 +46668,6 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/obj/machinery/power/port_gen/pacman,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cdK" = (
@@ -46843,15 +46836,6 @@
},
/turf/open/floor/plating/asteroid,
/area/chapel/asteroid/monastery)
-"cep" = (
-/obj/structure/sign/poster/official/random{
- pixel_x = -32
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"ceq" = (
/obj/machinery/power/emitter,
/turf/open/floor/plating,
@@ -46942,6 +46926,16 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
+"ceG" = (
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
+ },
+/obj/structure/rack,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"ceH" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -47112,6 +47106,22 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/main/monastery)
+"cfp" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"cfr" = (
/obj/structure/transit_tube_pod,
/obj/structure/transit_tube/station/reverse{
@@ -47399,13 +47409,6 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"cgt" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cgu" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -47520,7 +47523,7 @@
/area/engine/engineering)
"cgV" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/stripes/line{
@@ -48339,7 +48342,7 @@
"ckD" = (
/obj/structure/chair/wood/normal,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/turf/open/floor/plasteel/dark,
@@ -50141,19 +50144,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
-"cqI" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/dock)
"cqS" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -50895,22 +50885,6 @@
/obj/machinery/vending/wardrobe/chap_wardrobe,
/turf/open/floor/carpet,
/area/chapel/office)
-"cua" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main/monastery)
"cuc" = (
/obj/machinery/light,
/obj/machinery/camera{
@@ -50931,6 +50905,13 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"cui" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
"cuk" = (
/obj/structure/closet{
name = "beekeeping wardrobe"
@@ -51843,22 +51824,6 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"cxj" = (
-/obj/structure/table,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/obj/machinery/light,
-/obj/effect/turf_decal/delivery,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cxk" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -52007,6 +51972,12 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/library/lounge)
+"cxW" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"cxX" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -52165,7 +52136,6 @@
network = list("ss13","monastery")
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/turf/open/floor/plasteel/dark,
@@ -52404,12 +52374,6 @@
},
/turf/open/floor/plasteel/dark,
/area/library)
-"cAp" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"cAr" = (
/obj/machinery/light/small{
dir = 8
@@ -52561,6 +52525,15 @@
},
/turf/open/floor/plasteel/dark,
/area/library)
+"cAQ" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"cAS" = (
/obj/machinery/vending/wardrobe/curator_wardrobe,
/turf/open/floor/plasteel/dark,
@@ -52858,19 +52831,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/security/brig)
-"cJd" = (
-/obj/machinery/seed_extractor,
-/obj/effect/turf_decal/tile/green{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"cJo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -52889,6 +52849,23 @@
},
/turf/open/floor/plasteel,
/area/science/explab)
+"cKV" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"cLw" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"cOp" = (
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
@@ -52898,13 +52875,6 @@
/obj/structure/table,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"cOA" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cPy" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 2
@@ -52939,14 +52909,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"cQZ" = (
-/obj/machinery/door/airlock/maintenance,
-/turf/open/floor/plating,
-/area/maintenance/department/engine)
-"cRJ" = (
-/obj/machinery/status_display/supply,
-/turf/closed/wall,
-/area/quartermaster/warehouse)
"cSJ" = (
/obj/item/reagent_containers/glass/beaker/cryoxadone{
pixel_x = -2;
@@ -53002,15 +52964,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/lab)
-"cUT" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 9
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cXW" = (
/obj/structure/grille,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -53063,6 +53016,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"dgj" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 6
+ },
+/obj/machinery/meter,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"dgz" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -53084,13 +53044,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"dhu" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"dhz" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -53135,12 +53088,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
-"dlI" = (
-/obj/structure/cable/yellow{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"dmP" = (
/obj/structure/chair{
dir = 8
@@ -53212,21 +53159,10 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
-"dqi" = (
-/obj/structure/table,
-/obj/structure/bedsheetbin,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/window/reinforced,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
+"dps" = (
+/obj/machinery/status_display/ai,
+/turf/closed/wall,
+/area/quartermaster/qm)
"dqw" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "0";
@@ -53262,6 +53198,13 @@
/obj/machinery/reagentgrinder,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"dsz" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"dtm" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53327,24 +53270,6 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"dzA" = (
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/structure/rack,
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/maintenance/department/chapel/monastery)
-"dAa" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"dAF" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external,
@@ -53359,30 +53284,54 @@
icon_state = "platingdmg1"
},
/area/maintenance/department/engine)
-"dFF" = (
-/turf/closed/wall/r_wall,
+"dEy" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"dFJ" = (
+/turf/open/floor/engine,
/area/engine/supermatter)
-"dGd" = (
+"dHr" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/machinery/meter,
+/obj/machinery/button/door{
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_y = 24;
+ req_access_txt = "10"
+ },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/engine,
/area/engine/engineering)
-"dGp" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+"dHZ" = (
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/obj/effect/landmark/start/chemist,
+/obj/machinery/button/door{
+ id = "chemistry_shutters";
+ name = "Shutters Control";
+ pixel_x = 26;
+ pixel_y = 4;
+ req_access_txt = "5; 33"
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dHF" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"dJk" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating,
+/area/engine/atmos)
"dJm" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -53442,47 +53391,57 @@
/obj/machinery/shieldwallgen/xenobiologyaccess,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"dPZ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+"dQj" = (
+/mob/living/simple_animal/bot/secbot{
+ arrest_type = 1;
+ health = 45;
+ icon_state = "secbot1";
+ idcheck = 1;
+ name = "Sergeant-at-Armsky";
+ on = 1;
+ weaponscheck = 1
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
+/area/security/armory)
+"dSp" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"dRs" = (
-/obj/structure/lattice,
-/obj/structure/grille,
-/turf/open/space/basic,
-/area/space)
"dSr" = (
/obj/item/chair,
/turf/open/floor/wood,
/area/maintenance/department/engine)
+"dTz" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-10"
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"dTV" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"dUk" = (
-/obj/machinery/cryopod{
+"dUI" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
-"dVt" = (
-/obj/structure/chair/office/light{
- dir = 1
- },
-/obj/effect/landmark/start/chemist,
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
/turf/open/floor/plasteel/white,
-/area/medical/chemistry)
+/area/hallway/secondary/entry)
"dVI" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 4;
@@ -53536,6 +53495,10 @@
},
/turf/open/floor/plating,
/area/lawoffice)
+"ebT" = (
+/mob/living/simple_animal/hostile/retaliate/goose,
+/turf/open/floor/wood,
+/area/maintenance/department/crew_quarters/dorms)
"edl" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -53549,6 +53512,10 @@
/obj/structure/chair/office/light,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"eex" = (
+/obj/machinery/status_display/supply,
+/turf/closed/wall,
+/area/quartermaster/office)
"eeQ" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -53584,22 +53551,50 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"eiV" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"ejJ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"ekU" = (
/obj/effect/decal/cleanable/cobweb{
icon_state = "cobweb2"
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"ekV" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"elk" = (
/obj/structure/chair/office/dark,
/turf/open/floor/wood,
/area/lawoffice)
+"epj" = (
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/crew_quarters/dorms)
"epJ" = (
/obj/structure/sign/poster/contraband/random{
pixel_y = 32
},
/turf/open/floor/carpet,
/area/maintenance/department/crew_quarters/dorms)
+"epV" = (
+/obj/structure/chair,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"eqD" = (
/obj/structure/sign/poster/contraband/random{
pixel_x = -32
@@ -53609,20 +53604,6 @@
icon_state = "wood-broken"
},
/area/maintenance/department/crew_quarters/dorms)
-"eqM" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
-"erV" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"eta" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Supplies";
@@ -53641,40 +53622,6 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"eue" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"eux" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"euN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-10"
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main/monastery)
"euQ" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -53684,20 +53631,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"eyT" = (
-/obj/machinery/jukebox,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/bar)
-"ezo" = (
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 2;
- name = "2maintenance loot spawner"
- },
-/obj/structure/rack,
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/maintenance/department/chapel/monastery)
+"eyj" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
"ezF" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
@@ -53729,6 +53666,23 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"eAH" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"eAZ" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
"eCw" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -53767,6 +53721,19 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"eFG" = (
+/obj/machinery/mineral/stacking_unit_console{
+ dir = 2;
+ machinedir = 8;
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/obj/machinery/conveyor{
+ dir = 4;
+ id = "garbagestacked"
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal)
"eHI" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
@@ -53791,17 +53758,6 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
-"eMz" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"eMC" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -53821,15 +53777,6 @@
/obj/structure/lattice,
/turf/closed/wall,
/area/space/nearstation)
-"eOA" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/lattice,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"eOZ" = (
/obj/structure/closet,
/obj/item/clothing/suit/judgerobe,
@@ -53837,25 +53784,18 @@
/obj/item/gavelhammer,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"ePS" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -28
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"ePU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/closed/wall,
/area/maintenance/department/security/brig)
+"eQa" = (
+/obj/effect/landmark/xeno_spawn,
+/turf/open/floor/plating{
+ icon_state = "platingdmg1"
+ },
+/area/maintenance/department/chapel/monastery)
"eQN" = (
/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -53877,6 +53817,18 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/security/brig)
+"eRp" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"eSB" = (
+/obj/machinery/computer/cryopod{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"eSL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/item/beacon,
@@ -53898,10 +53850,6 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"eVW" = (
-/obj/machinery/portable_atmospherics/canister/toxins,
-/turf/open/floor/plating,
-/area/engine/engineering)
"eWi" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -53931,12 +53879,6 @@
/obj/item/stack/cable_coil/cut/random,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"fbu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"fdQ" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -53995,6 +53937,9 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"ffK" = (
+/turf/open/space/basic,
+/area/hallway/secondary/entry)
"fhM" = (
/obj/item/storage/secure/safe{
pixel_x = -22
@@ -54021,6 +53966,22 @@
},
/turf/open/floor/plasteel/white,
/area/science/explab)
+"fjC" = (
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
+ },
+/obj/structure/rack,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
+"fjD" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"fkH" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -54033,20 +53994,16 @@
},
/turf/open/floor/plasteel,
/area/science/explab)
-"flP" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"fmh" = (
/turf/open/floor/wood,
/area/maintenance/department/engine)
-"fml" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
+"fmL" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
},
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"fmU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -54087,6 +54044,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"frj" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"ftp" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -54136,10 +54099,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
-"fwo" = (
-/obj/machinery/door/airlock/maintenance,
-/turf/open/floor/plating,
-/area/chapel/main/monastery)
"fwr" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -54153,6 +54112,21 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"fxC" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"fym" = (
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
"fyF" = (
/obj/structure/cable/yellow{
icon_state = "0-4"
@@ -54221,21 +54195,30 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"fFv" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
+"fBZ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
+"fCC" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"fGt" = (
-/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/landmark/start/station_engineer,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
+"fFv" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"fIu" = (
/obj/structure/disposalpipe/segment{
@@ -54309,9 +54292,19 @@
/obj/structure/bookcase/random/religion,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
-"fWE" = (
+"fZK" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/engine,
-/area/engine/supermatter)
+/area/engine/engineering)
"gam" = (
/obj/machinery/door/airlock/medical/glass{
name = "Service Door";
@@ -54324,18 +54317,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
-"gaJ" = (
-/obj/machinery/status_display/ai,
-/turf/closed/wall,
-/area/quartermaster/qm)
-"gaQ" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"gcj" = (
/obj/machinery/vending/kink,
/obj/effect/turf_decal/tile/blue{
@@ -54362,7 +54343,7 @@
"gdL" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -28
},
/obj/effect/turf_decal/tile/purple{
@@ -54383,13 +54364,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"gfh" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"gfi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54400,21 +54374,10 @@
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"ggg" = (
-/mob/living/simple_animal/hostile/retaliate/goose,
-/turf/open/floor/wood,
-/area/maintenance/department/crew_quarters/dorms)
-"gih" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 6
},
-/obj/machinery/light{
- dir = 1;
- light_color = "#d1dfff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"giI" = (
/obj/machinery/light/small{
@@ -54459,12 +54422,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"gkN" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"gkR" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/structure/extinguisher_cabinet{
@@ -54594,14 +54551,6 @@
heat_capacity = 1e+006
},
/area/hallway/secondary/exit/departure_lounge)
-"gvO" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
- },
-/area/chapel/dock)
"gwn" = (
/obj/structure/sign/warning{
pixel_y = 32
@@ -54654,6 +54603,24 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/carpet,
/area/lawoffice)
+"gBb" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"gDR" = (
+/obj/machinery/camera{
+ c_tag = "Central Primary Hallway Escape";
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"gDZ" = (
/obj/effect/turf_decal/box/corners{
dir = 1
@@ -54673,6 +54640,11 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
+"gEo" = (
+/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"gFo" = (
/obj/structure/window/reinforced,
/obj/structure/table/glass,
@@ -54699,6 +54671,14 @@
/obj/item/clothing/glasses/welding,
/turf/open/floor/plasteel/dark,
/area/science/lab)
+"gFw" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"gGy" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -54706,39 +54686,17 @@
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
"gGA" = (
+/obj/structure/table/glass,
+/obj/machinery/reagentgrinder,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chemistry_shutters";
- name = "chemistry shutters"
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
-"gHp" = (
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"gHy" = (
-/obj/machinery/computer/cryopod{
- dir = 1;
- pixel_y = -26
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"gHZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -54789,13 +54747,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"gLn" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"gLF" = (
/obj/machinery/vending/snack/random,
/obj/effect/turf_decal/tile/neutral{
@@ -54841,12 +54792,29 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"gOI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
"gPV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
/turf/open/floor/wood,
/area/lawoffice)
+"gQf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"gSH" = (
/turf/closed/wall,
/area/lawoffice)
@@ -54864,21 +54832,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"gUS" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 1;
- network = list("ss13","engine")
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"gVc" = (
/turf/open/floor/wood{
icon_state = "wood-broken4"
@@ -54891,10 +54844,39 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"gXZ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Fore";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"gYo" = (
/obj/structure/grille,
/turf/open/space/basic,
/area/space/nearstation)
+"haq" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
+"haA" = (
+/obj/structure/table,
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/clothing/glasses/welding,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"heC" = (
/obj/machinery/power/apc/highcap/five_k{
dir = 8;
@@ -54941,6 +54923,24 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"hjk" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"hjD" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"hkQ" = (
/obj/machinery/light{
dir = 4
@@ -54963,6 +54963,26 @@
},
/turf/open/floor/wood,
/area/lawoffice)
+"hon" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Gas to Filter"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"hoS" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/engine,
+/area/engine/engineering)
"hqo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -54978,13 +54998,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"hrx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"hvW" = (
/obj/machinery/door/poddoor/preopen{
id = "xenobio4";
@@ -55020,27 +55033,18 @@
/obj/machinery/portable_atmospherics/canister/toxins,
/turf/open/floor/plating,
/area/security/execution/transfer)
-"hxh" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"hxn" = (
/obj/structure/chair,
/obj/item/clothing/glasses/regular,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"hyl" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+"hyh" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 9
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"hzc" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -55070,21 +55074,12 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port)
-"hCg" = (
-/obj/machinery/conveyor{
- dir = 8;
- id = "garbage"
+"hCR" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
},
-/turf/open/floor/plating,
-/area/maintenance/disposal)
-"hDy" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/holopad,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/area/maintenance/department/chapel/monastery)
"hDG" = (
/obj/machinery/door/airlock/engineering{
name = "Auxillary Base Construction";
@@ -55117,20 +55112,43 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"hGB" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"hHr" = (
/obj/structure/chair/comfy/black{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"hJO" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+"hIZ" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"hKp" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
+/obj/structure/window/plasma/reinforced{
dir = 4
},
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
+/obj/machinery/power/rad_collector/anchored,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"hOx" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -55168,6 +55186,17 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
+"hQy" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/item/tank/internals/plasma,
+/turf/open/floor/plating,
+/area/engine/supermatter)
"hQz" = (
/obj/structure/closet/emcloset/anchored,
/obj/structure/cable/yellow{
@@ -55179,14 +55208,29 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/engine/engineering)
-"hRQ" = (
-/obj/structure/window/reinforced{
- dir = 8;
- layer = 2.9
+"hSt" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Gas to Cooling Loop"
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"hSC" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"hSM" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -55211,23 +55255,18 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"hUf" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"hUi" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"hUt" = (
/obj/structure/closet/crate{
icon_state = "crateopen"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"hUw" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"hUJ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55243,25 +55282,17 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"hWa" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
-"hXm" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"hXt" = (
/obj/structure/girder,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"hXK" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"hYe" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/red{
@@ -55303,15 +55334,20 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
-"iaZ" = (
-/turf/open/space/basic,
-/area/hallway/secondary/entry)
"ick" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel/dark,
/area/library)
+"iej" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
"igE" = (
/obj/structure/table/reinforced,
/obj/machinery/button/door{
@@ -55360,24 +55396,30 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
-"ikm" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Gas"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ikB" = (
/obj/structure/closet/secure_closet/medical2,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"ikO" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 9
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"ilD" = (
/obj/machinery/processor/slime,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"imE" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"ioj" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -55394,13 +55436,43 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"iop" = (
+/obj/machinery/atmospherics/pipe/manifold/orange/visible{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"ioF" = (
+/obj/structure/closet/secure_closet/engineering_electrical,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"iqc" = (
/turf/open/floor/plasteel/stairs/right,
/area/maintenance/department/crew_quarters/dorms)
-"irs" = (
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
+"irD" = (
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"irM" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"itl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55433,6 +55505,13 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"iwe" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"iyg" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55449,6 +55528,11 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"izm" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/engine/engineering)
"izB" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod"
@@ -55531,20 +55615,6 @@
},
/turf/open/floor/plasteel/white,
/area/storage/emergency/port)
-"iHe" = (
-/obj/machinery/camera{
- c_tag = "Central Primary Hallway Escape";
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"iHI" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
"iJi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -55558,6 +55628,13 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/quartermaster/sorting)
+"iLh" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 9
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/engine,
+/area/engine/engineering)
"iLl" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -55619,22 +55696,6 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
-"iSi" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Cooling Loop Bypass"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"iSz" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -55647,14 +55708,9 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"iSL" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plating,
-/area/engine/atmos)
-"iTE" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
+"iTF" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
/area/engine/supermatter)
"iVJ" = (
/obj/effect/spawner/lootdrop/organ_spawner,
@@ -55674,10 +55730,6 @@
},
/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
@@ -55692,6 +55744,13 @@
dir = 1
},
/area/hallway/secondary/exit/departure_lounge)
+"jfr" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"jgr" = (
/obj/machinery/door/airlock/grunge{
name = "Library"
@@ -55725,16 +55784,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/crew_quarters/dorms)
-"jjA" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Gas to Cooling Loop"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"jjC" = (
/obj/structure/rack,
/obj/item/storage/briefcase{
@@ -55747,18 +55796,6 @@
},
/turf/open/floor/wood,
/area/lawoffice)
-"jkm" = (
-/obj/structure/closet/emcloset,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
-"jrb" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"jrG" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -55814,17 +55851,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"jtv" = (
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 8;
- network = list("ss13","engine")
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"jvi" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -55870,6 +55896,17 @@
/obj/structure/sign/warning/vacuum/external,
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"jzE" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine";
+ req_access_txt = "10"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"jAy" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -55948,39 +55985,15 @@
/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
-"jOw" = (
-/obj/structure/closet/secure_closet/engineering_electrical,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"jOB" = (
/turf/open/floor/plating,
/area/storage/emergency/starboard)
-"jOX" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Monastery Transit"
- },
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
- },
-/area/chapel/dock)
"jPf" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
/obj/item/kitchen/knife,
/turf/open/floor/plasteel,
/area/maintenance/department/engine)
-"jPC" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"jQh" = (
/obj/item/stack/sheet/animalhide/xeno,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -55990,15 +56003,6 @@
icon_state = "platingdmg1"
},
/area/maintenance/department/science)
-"jQn" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"jRG" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -56009,13 +56013,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"jTc" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Gas to Filter"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"jTh" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -56037,6 +56034,24 @@
},
/turf/open/floor/carpet,
/area/lawoffice)
+"jTN" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"jTU" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"jUV" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -56057,6 +56072,12 @@
/obj/item/stack/ore/iron,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"jXF" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"jXV" = (
/obj/machinery/light/small{
dir = 1
@@ -56081,14 +56102,20 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/engine)
-"kec" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
+"jZG" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chemistry_shutters";
+ name = "chemistry shutters"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/medical/chemistry)
+"kaR" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
- dir = 8
+ dir = 1
},
/turf/open/floor/engine,
/area/engine/engineering)
@@ -56146,6 +56173,10 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
+"klb" = (
+/obj/machinery/status_display/supply,
+/turf/closed/wall,
+/area/quartermaster/sorting)
"klo" = (
/obj/structure/dresser,
/obj/structure/mirror{
@@ -56164,16 +56195,32 @@
/obj/item/clothing/under/rank/clown/sexy,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
+"kmd" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"kmn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/mixing)
+"koz" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"kpK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"kqV" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
"krU" = (
/obj/structure/chair{
dir = 4
@@ -56187,12 +56234,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"ksC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+"kuT" = (
+/obj/machinery/door/airlock/maintenance,
+/turf/open/floor/plating,
+/area/maintenance/department/engine)
"kvj" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -56206,20 +56251,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"kvu" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"kvx" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
"kwm" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -56264,6 +56295,15 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"kzK" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"kAa" = (
/obj/structure/chair{
dir = 8
@@ -56280,22 +56320,12 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
-"kBe" = (
-/obj/structure/reflector/double/anchored{
- dir = 9
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"kDf" = (
/obj/machinery/light/small{
dir = 2
},
/turf/open/floor/carpet/black,
/area/chapel/office)
-"kDI" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/supermatter)
"kDJ" = (
/obj/machinery/light{
dir = 8
@@ -56363,7 +56393,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -27
},
/obj/effect/turf_decal/tile/green{
@@ -56377,6 +56407,10 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"kGc" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"kIo" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -56411,6 +56445,16 @@
/obj/structure/closet,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"kLT" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/rack,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"kNf" = (
/obj/machinery/door/window/northleft{
base_state = "right";
@@ -56428,11 +56472,6 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"kNK" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/engine/engineering)
"kPi" = (
/obj/structure/table,
/obj/machinery/microwave,
@@ -56506,10 +56545,20 @@
},
/turf/open/floor/plating,
/area/storage/emergency/port)
-"kVA" = (
-/obj/machinery/status_display/supply,
-/turf/closed/wall,
-/area/quartermaster/sorting)
+"kTj" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"kTR" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"kWQ" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/obj/structure/cable/yellow{
@@ -56523,15 +56572,16 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
-"kYR" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+"kYM" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 27
},
-/obj/machinery/light,
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
},
-/area/hallway/secondary/entry)
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"lcU" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -56559,14 +56609,29 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
-"lfZ" = (
-/obj/machinery/status_display/supply,
-/turf/closed/wall,
-/area/quartermaster/office)
+"lfx" = (
+/obj/structure/table,
+/obj/item/clothing/suit/hooded/wintercoat/engineering,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"lhA" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"lhP" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"liR" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -56581,30 +56646,18 @@
/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"llS" = (
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
+"ljG" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
},
-/area/hallway/secondary/entry)
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"lms" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/turf/closed/wall,
/area/maintenance/department/engine)
-"lmv" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/light{
- dir = 1;
- light_color = "#d1dfff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"lnn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral,
@@ -56613,17 +56666,32 @@
},
/turf/open/floor/plasteel,
/area/storage/primary)
+"lnr" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"loz" = (
+/obj/structure/closet/radiation,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"lqc" = (
/obj/item/toy/gun,
/obj/effect/decal/cleanable/oil,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"lqo" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/maintenance/department/chapel/monastery)
"lqy" = (
/obj/machinery/door/airlock/grunge{
name = "Library"
@@ -56633,13 +56701,27 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
-"lxh" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+"lrM" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"ltB" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
+"lxm" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
"lzJ" = (
/obj/structure/closet/crate/bin,
/turf/open/floor/carpet,
@@ -56673,24 +56755,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"lCR" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"lCY" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"lDW" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"lEn" = (
/obj/structure/window/reinforced{
dir = 1
@@ -56761,6 +56825,12 @@
/obj/item/wrench,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"lJI" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"lKL" = (
/obj/machinery/door/airlock/abandoned{
name = "Starboard Emergency Storage";
@@ -56795,13 +56865,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"lQy" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/space,
-/area/space/nearstation)
"lQQ" = (
/obj/machinery/door/poddoor/preopen{
id = "bridgespace";
@@ -56827,6 +56890,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"lRX" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"lTC" = (
/obj/item/shard,
/obj/effect/turf_decal/stripes/line{
@@ -56837,6 +56907,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"lUO" = (
+/obj/structure/sign/warning/radiation,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"lWy" = (
/turf/open/floor/plating,
/area/maintenance/department/science)
@@ -56858,11 +56932,28 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"lXb" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Gas to Mix"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"lXc" = (
/obj/structure/table,
/obj/item/clothing/head/beret,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"lXJ" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"mal" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -56903,32 +56994,10 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"mbD" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
+"mci" = (
+/obj/machinery/portable_atmospherics/canister/toxins,
/turf/open/floor/plating,
/area/engine/engineering)
-"mcf" = (
-/obj/structure/table/glass,
-/obj/machinery/reagentgrinder,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/medical/chemistry)
-"mdi" = (
-/obj/machinery/rnd/production/circuit_imprinter,
-/obj/machinery/camera{
- c_tag = "Engineering Starboard Aft";
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"mdL" = (
/obj/structure/table,
/obj/item/paper_bin,
@@ -56945,19 +57014,19 @@
/obj/machinery/status_display/evac,
/turf/closed/wall/r_wall,
/area/engine/supermatter)
-"mfg" = (
-/obj/structure/window/reinforced{
- dir = 8
+"mfC" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/turf/open/space,
-/area/space/nearstation)
-"mfx" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"mgz" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"mhl" = (
/obj/machinery/power/emitter,
/obj/machinery/light{
@@ -56965,14 +57034,45 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"mlb" = (
-/obj/structure/cable{
- icon_state = "1-8"
+"mhn" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/poster/random{
+ pixel_x = 32
},
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"miw" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Fore";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mjk" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"mjn" = (
+/obj/machinery/jukebox,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/bar)
+"mjK" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/turf/closed/wall/r_wall,
/area/engine/engineering)
"mlr" = (
/obj/structure/lattice,
@@ -56981,26 +57081,6 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"mlx" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"mlS" = (
-/obj/machinery/door/airlock/engineering/glass/critical{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"mmv" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Supplies";
@@ -57048,6 +57128,19 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"mqp" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -28
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"msX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -57086,21 +57179,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"mvA" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"mvY" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "Gas to Filter"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"mwg" = (
/obj/structure/closet/crate{
icon_state = "crateopen"
@@ -57111,6 +57189,15 @@
/obj/item/gun/ballistic/shotgun/toy,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"mwl" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"mwG" = (
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
@@ -57119,6 +57206,12 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"mxu" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"mxy" = (
/obj/machinery/power/terminal{
dir = 4
@@ -57168,12 +57261,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/maintenance/department/engine)
-"mAi" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"mCe" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -57182,27 +57269,6 @@
},
/turf/open/floor/plating,
/area/security/checkpoint/engineering)
-"mCP" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"mCU" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/clothing/glasses/welding,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"mDW" = (
/obj/machinery/power/smes{
charge = 5e+006
@@ -57210,6 +57276,16 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/tcommsat/computer)
+"mEu" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"mES" = (
/obj/machinery/door/airlock/maintenance/abandoned{
name = "Surgical Room"
@@ -57239,10 +57315,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"mLc" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"mLB" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -57282,16 +57354,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"mVj" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"mVM" = (
/turf/open/floor/plating/airless,
/area/space/nearstation)
@@ -57304,20 +57366,6 @@
"mZE" = (
/turf/open/space/basic,
/area/space/nearstation)
-"mZK" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"mZV" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"naq" = (
/obj/structure/disposaloutlet{
dir = 4
@@ -57327,14 +57375,14 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"ndf" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Gas to Mix"
+"ncm" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/engine/engineering)
"ndI" = (
@@ -57379,37 +57427,10 @@
/obj/structure/lattice,
/turf/open/space,
/area/space/nearstation)
-"ngg" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ngp" = (
/obj/item/chair/stool,
/turf/open/floor/carpet,
/area/maintenance/department/crew_quarters/dorms)
-"nhW" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"nif" = (
-/obj/structure/table/glass,
-/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/engineering)
"nih" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/costume,
@@ -57433,30 +57454,6 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
-"nkk" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/obj/structure/chair{
- dir = 8;
- name = "Defense"
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics Starboard";
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"nku" = (
/obj/machinery/door/airlock/centcom{
name = "Crematorium";
@@ -57466,21 +57463,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/chapel/office)
-"nnf" = (
-/obj/structure/rack,
-/obj/item/stack/packageWrap,
-/obj/item/hand_labeler,
-/obj/item/clothing/glasses/science,
-/obj/item/clothing/glasses/science,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/medical/chemistry)
"nnh" = (
/obj/structure/chair{
dir = 8
@@ -57488,6 +57470,11 @@
/obj/item/stack/spacecash/c10,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
+"nog" = (
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"noC" = (
/obj/machinery/vending/kink,
/turf/open/floor/wood,
@@ -57502,6 +57489,13 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"nqu" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"nqV" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -57512,19 +57506,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"nqW" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"nsy" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -57554,6 +57535,14 @@
},
/turf/closed/wall/r_wall,
/area/science/mixing)
+"nsJ" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"ntj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -57590,10 +57579,6 @@
},
/turf/open/floor/plasteel/white/corner,
/area/hallway/primary/central)
-"nyN" = (
-/obj/machinery/power/supermatter_crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"nyO" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
@@ -57620,6 +57605,12 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"nAY" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/landmark/start/station_engineer,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"nBw" = (
/obj/machinery/computer/crew{
dir = 1
@@ -57692,15 +57683,6 @@
/obj/structure/table/reinforced,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"nIq" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 4;
- network = list("ss13","engine")
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nIU" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -57724,17 +57706,6 @@
},
/turf/open/floor/engine,
/area/science/explab)
-"nKF" = (
-/obj/machinery/door/firedoor,
-/obj/structure/sign/poster/random{
- pixel_x = 32
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"nLl" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -57770,17 +57741,6 @@
},
/turf/open/floor/plasteel,
/area/tcommsat/computer)
-"nNn" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"nNJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -57815,13 +57775,6 @@
/obj/item/chair,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"nPW" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/obj/machinery/meter,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"nQc" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -57832,9 +57785,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"nQf" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/closed/wall/r_wall,
+"nRM" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/landmark/start/station_engineer,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"nSj" = (
/obj/structure/grille/broken,
@@ -57848,6 +57805,16 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/lawoffice)
+"nTr" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"nUQ" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"nVU" = (
/obj/item/twohanded/spear,
/turf/open/floor/plating,
@@ -57860,24 +57827,25 @@
/obj/structure/table_frame/wood,
/turf/open/floor/wood,
/area/maintenance/department/engine)
-"nYe" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to Engine"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"nYn" = (
/obj/structure/sign/warning/docking,
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/hallway/secondary/exit/departure_lounge)
+"nYM" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"nZw" = (
/obj/machinery/door/airlock/abandoned{
name = "Backup Laboratory"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"obh" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating,
+/area/maintenance/department/chapel/monastery)
"obj" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -57893,23 +57861,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"obl" = (
-/obj/structure/sign/warning/radiation,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"obG" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_y = 24;
- req_access_txt = "10"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"obP" = (
/obj/structure/table,
/obj/item/paper_bin,
@@ -57919,11 +57870,6 @@
initial_gas_mix = "o2=0.01;n2=0.01"
},
/area/maintenance/department/science)
-"ocy" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/engine/engineering)
"oep" = (
/obj/structure/table/glass,
/obj/item/paper_bin,
@@ -57956,10 +57902,14 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"oge" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
+"ogn" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/open/space,
+/area/space/nearstation)
"ohR" = (
/obj/item/chair,
/turf/open/floor/plating,
@@ -57974,18 +57924,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"ona" = (
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"onX" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -58043,12 +57981,6 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"oto" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
"ous" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/button/door{
@@ -58071,14 +58003,13 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"ovE" = (
-/obj/machinery/light/small{
- dir = 8
+"ovg" = (
+/obj/structure/transit_tube/horizontal,
+/obj/structure/sign/departments/holy{
+ pixel_x = -32
},
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/maintenance/department/chapel/monastery)
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
"ovM" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
@@ -58104,17 +58035,11 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
-"oxt" = (
-/obj/structure/table/glass,
-/obj/item/book/manual/wiki/research_and_development,
-/obj/item/disk/tech_disk,
-/obj/item/disk/design_disk,
-/turf/open/floor/plasteel/dark,
-/area/science/lab)
-"oyE" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
+"oxw" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/engine/engineering)
"oyF" = (
@@ -58142,19 +58067,6 @@
},
/turf/closed/wall/r_wall,
/area/science/xenobiology)
-"oBY" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/meter,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"oCn" = (
/obj/structure/chair/office/dark{
dir = 1
@@ -58225,15 +58137,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"oFi" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"oFo" = (
/obj/structure/closet/emcloset/anchored,
/obj/structure/sign/warning/vacuum/external{
@@ -58250,6 +58153,23 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plasteel,
/area/maintenance/department/engine)
+"oHa" = (
+/obj/machinery/power/emitter/anchored{
+ dir = 8;
+ state = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"oJr" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"oKa" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -58265,6 +58185,18 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
+"oKv" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"oKJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"oLR" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -58371,12 +58303,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/security/brig)
-"oTD" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/engine,
-/area/engine/engineering)
"oUa" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -58392,6 +58318,14 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"oWu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/holopad,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"oWw" = (
/obj/item/flashlight,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -58412,6 +58346,22 @@
},
/turf/open/floor/plasteel/white,
/area/security/execution/transfer)
+"oXq" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Cooling Loop Bypass"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"oYj" = (
/obj/effect/turf_decal/loading_area{
dir = 4
@@ -58424,6 +58374,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"paU" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"pbm" = (
/obj/machinery/door/airlock/external{
name = "Pod Docking Bay"
@@ -58459,19 +58415,6 @@
},
/turf/open/floor/plating,
/area/science/explab)
-"peb" = (
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/obj/machinery/power/rad_collector/anchored,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"pfz" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -58492,12 +58435,13 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"pga" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
+"pgH" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
+/turf/open/floor/engine,
+/area/engine/engineering)
"phJ" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -58519,6 +58463,13 @@
/obj/structure/piano,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
+"pmB" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"pnU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
dir = 4;
@@ -58527,16 +58478,14 @@
},
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
-"ppi" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = 29
- },
-/obj/effect/turf_decal/stripes/line{
+"poP" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/space,
+/area/space/nearstation)
"pps" = (
/turf/closed/wall,
/area/engine/break_room)
@@ -58555,20 +58504,33 @@
},
/turf/open/floor/engine,
/area/engine/supermatter)
-"ptk" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+"psd" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 2;
+ name = "Gas to Filter"
},
-/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
/turf/open/floor/engine,
-/area/engine/engineering)
-"puO" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
+/area/engine/supermatter)
+"pua" = (
+/obj/structure/table,
+/obj/structure/bedsheetbin,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
+"puw" = (
+/obj/structure/sign/warning/fire,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"pvK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
@@ -58603,13 +58565,17 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"pBs" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/effect/turf_decal/stripes/line{
+"pxD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chemistry_shutters";
+ name = "chemistry shutters"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/medical/chemistry)
"pBD" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -58620,6 +58586,28 @@
/obj/machinery/shieldwallgen/xenobiologyaccess,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"pBJ" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"pCo" = (
+/obj/structure/reflector/single/anchored{
+ dir = 6
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"pDd" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/chapel/monastery)
"pDP" = (
/obj/machinery/vending/assist,
/obj/effect/turf_decal/tile/neutral{
@@ -58634,12 +58622,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
-"pED" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"pEL" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
@@ -58682,29 +58664,6 @@
},
/turf/open/floor/wood,
/area/crew_quarters/heads/hop)
-"pIk" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"pJx" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/engine,
-/area/engine/engineering)
"pKd" = (
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -58713,6 +58672,14 @@
/obj/structure/closet/crate,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"pKg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
"pMG" = (
/obj/structure/sink{
dir = 8;
@@ -58764,12 +58731,6 @@
dir = 1
},
/area/hallway/secondary/exit/departure_lounge)
-"pPu" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
- dir = 1
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
"pQw" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -58850,6 +58811,19 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/lawoffice)
+"pYh" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"pYw" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-03"
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/lab)
"pYC" = (
/obj/structure/sign/warning{
pixel_y = -32
@@ -58864,25 +58838,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"qbm" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"qbp" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"qbV" = (
-/obj/structure/lattice,
-/turf/open/space,
-/area/space)
"qbZ" = (
/obj/structure/rack,
/obj/item/clothing/mask/gas,
@@ -58937,6 +58898,18 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"qeY" = (
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"qhE" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"qjx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line,
@@ -58946,10 +58919,38 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"qkM" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"qnT" = (
/obj/machinery/iv_drip,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"qpd" = (
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qpS" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"qtA" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -59090,6 +59091,21 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"qLI" = (
+/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty{
+ layer = 4
+ },
+/obj/item/stack/cable_coil,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"qMi" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/general/visible,
@@ -59126,10 +59142,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"qPh" = (
-/obj/structure/chair,
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
+"qOS" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
/area/engine/engineering)
"qPB" = (
/obj/structure/chair/stool,
@@ -59138,8 +59154,22 @@
},
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
-"qUe" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+"qRl" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 29
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"qTV" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = -27
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 8
},
/turf/open/floor/plasteel,
@@ -59169,12 +59199,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"qWB" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"qWG" = (
/obj/structure/closet/emcloset/anchored,
/turf/open/floor/plating,
@@ -59251,13 +59275,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"rax" = (
-/obj/machinery/conveyor{
- dir = 1;
- id = "garbage"
- },
-/turf/open/floor/plating,
-/area/maintenance/disposal)
"reH" = (
/obj/item/reagent_containers/food/drinks/bottle/vodka,
/obj/structure/disposalpipe/segment{
@@ -59413,23 +59430,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
-"rwf" = (
-/obj/machinery/power/emitter/anchored{
- dir = 8;
- state = 2
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"rwt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/engine,
-/area/engine/engineering)
"rxa" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -59450,7 +59450,6 @@
pixel_y = 6
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 27
},
/turf/open/floor/plasteel/cafeteria,
@@ -59464,13 +59463,6 @@
icon_state = "panelscorched"
},
/area/maintenance/department/engine)
-"rAZ" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"rBh" = (
/obj/structure/mopbucket,
/obj/item/mop,
@@ -59485,19 +59477,6 @@
/obj/item/reagent_containers/blood/random,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"rEt" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"rFq" = (
/obj/structure/chair,
/obj/item/reagent_containers/food/snacks/donkpocket,
@@ -59505,24 +59484,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
-"rGz" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"rHv" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Monastery Transit"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
- },
-/area/hallway/secondary/entry)
"rHA" = (
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
@@ -59581,16 +59542,6 @@
/obj/item/ammo_casing/shotgun/improvised,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"rMt" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"rMV" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -59602,16 +59553,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"rPd" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = -27
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"rPg" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
dir = 8
@@ -59626,12 +59567,13 @@
/obj/item/trash/can,
/turf/open/floor/wood,
/area/maintenance/department/engine)
-"rTZ" = (
-/obj/machinery/cryopod{
- dir = 8
+"rTd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
+/area/engine/engineering)
"rWE" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -59658,14 +59600,6 @@
},
/turf/open/floor/plating,
/area/storage/emergency/starboard)
-"saW" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Monastery Transit"
- },
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
- },
-/area/hallway/secondary/entry)
"sbk" = (
/obj/structure/girder,
/turf/open/floor/plating,
@@ -59708,17 +59642,6 @@
},
/turf/open/space,
/area/space/nearstation)
-"sdZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"sfr" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"sgc" = (
/obj/machinery/vending/cigarette,
/obj/effect/turf_decal/tile/neutral{
@@ -59733,23 +59656,51 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
-"sho" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white{
- heat_capacity = 1e+006
- },
-/area/hallway/secondary/entry)
+"shH" = (
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
"sij" = (
/obj/structure/closet,
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"sjC" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/machinery/power/port_gen/pacman,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"skw" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/turf/closed/wall,
/area/maintenance/department/security/brig)
+"slJ" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#d1dfff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"smv" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Cooling Loop to Gas"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"spz" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
@@ -59795,6 +59746,12 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard)
+"svA" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"svN" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/structure/sign/departments/restroom{
@@ -59802,6 +59759,11 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"swg" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"sww" = (
/obj/effect/decal/cleanable/blood/old,
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
@@ -59836,12 +59798,6 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
-"sAF" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/landmark/start/station_engineer,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"sAK" = (
/obj/item/clothing/mask/gas/plaguedoctor,
/turf/open/floor/plating,
@@ -59851,7 +59807,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/red{
@@ -59879,17 +59834,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"sHX" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Cooling Loop to Gas"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"sJp" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/effect/turf_decal/stripes/line,
@@ -59911,21 +59855,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"sKw" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass/fifty{
- layer = 4
- },
-/obj/item/stack/cable_coil,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"sNz" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -59939,12 +59868,6 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
-"sOQ" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/open/space/basic,
-/area/space)
"sQt" = (
/obj/machinery/door/airlock/external{
name = "Supply Dock Airlock";
@@ -59955,37 +59878,6 @@
},
/turf/open/floor/plating,
/area/quartermaster/storage)
-"sQG" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
-"sQV" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"sRH" = (
-/obj/structure/lattice,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced,
-/turf/open/space,
-/area/space/nearstation)
-"sTg" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/lattice,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"sUP" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
@@ -60012,6 +59904,19 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
+"sWW" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"sXi" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -60026,6 +59931,16 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
/area/science/xenobiology)
+"sYQ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"sZh" = (
/obj/structure/closet/crate,
/turf/open/floor/plating,
@@ -60063,16 +59978,13 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"tcC" = (
-/obj/machinery/door/firedoor,
-/obj/structure/sign/poster/official/random{
- pixel_x = -32
+"tbw" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/turf/open/space,
+/area/space/nearstation)
"tcY" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -60093,7 +60005,7 @@
},
/obj/item/hand_labeler,
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 28
},
/obj/machinery/light{
@@ -60120,6 +60032,10 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"tdL" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"tfw" = (
/obj/structure/cable{
icon_state = "0-2";
@@ -60165,6 +60081,17 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"tkL" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"tlc" = (
/obj/machinery/recharger,
/obj/structure/table,
@@ -60183,14 +60110,12 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
-"tmi" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
+"tlV" = (
+/obj/structure/reflector/double/anchored{
+ dir = 9
},
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"tnY" = (
/obj/machinery/button/door{
id = "aux_base_shutters";
@@ -60212,13 +60137,15 @@
icon_state = "panelscorched"
},
/area/maintenance/department/security/brig)
-"tpX" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/light{
+"tqO" = (
+/obj/structure/sign/poster/official/random{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"tqX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -60230,13 +60157,6 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
-"ttX" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"tue" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -60257,6 +60177,7 @@
"tvj" = (
/obj/structure/festivus{
anchored = 1;
+ desc = "A pole for dancing.";
name = "pole"
},
/turf/open/floor/plasteel/dark,
@@ -60293,19 +60214,14 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"tzh" = (
-/obj/structure/chair/office/dark{
- dir = 4
+"tzH" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "research_shutters_2";
+ name = "research shutters"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"tAv" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/science/lab)
"tAK" = (
/obj/structure/table,
/obj/structure/window/reinforced{
@@ -60323,6 +60239,13 @@
/obj/item/wrench,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"tDE" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Mix to Engine"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"tHk" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -60338,19 +60261,44 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"tMA" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+"tJr" = (
+/obj/structure/plasticflaps/opaque,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "research_shutters_2";
+ name = "research shutters"
},
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
+/turf/open/floor/plasteel,
+/area/science/lab)
+"tLP" = (
+/obj/machinery/status_display/supply,
+/turf/closed/wall,
+/area/quartermaster/warehouse)
+"tOD" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"tQT" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"tRc" = (
/obj/structure/ore_box,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/maintenance/department/engine)
+"tSk" = (
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"tSL" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
@@ -60377,11 +60325,25 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"uaa" = (
-/turf/open/floor/plating{
- icon_state = "panelscorched"
+"tZk" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
},
-/area/maintenance/department/chapel/monastery)
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
+"tZu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"uau" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"uaC" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -60394,6 +60356,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"uaO" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"uaP" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -60407,6 +60376,19 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/mixing)
+"ucT" = (
+/obj/effect/landmark/carpspawn,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
+"udl" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
"uek" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -60435,27 +60417,21 @@
icon_state = "panelscorched"
},
/area/maintenance/department/science)
+"ueX" = (
+/obj/structure/table/glass,
+/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/engineering)
"ufa" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"ufr" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"ufx" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "research_shutters_2";
- name = "research shutters"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/science/lab)
"ugC" = (
/obj/structure/chair/office/light{
icon_state = "officechair_white";
@@ -60488,6 +60464,16 @@
},
/turf/closed/wall,
/area/maintenance/department/engine)
+"ukp" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Mix to Gas"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"ulu" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -60550,12 +60536,13 @@
"uoS" = (
/turf/open/floor/plating,
/area/construction/mining/aux_base)
-"upg" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
+"upc" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 6
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"uqJ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -60624,17 +60611,44 @@
},
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
-"uwT" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"uwX" = (
/obj/machinery/field/generator,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"uxP" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/chair{
+ dir = 8;
+ name = "Defense"
+ },
+/obj/machinery/camera{
+ c_tag = "Atmospherics Starboard";
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"uzh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"uzn" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/structure/cable{
@@ -60648,10 +60662,6 @@
},
/turf/open/floor/plasteel,
/area/tcommsat/computer)
-"uAL" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
"uAU" = (
/obj/structure/table/wood,
/obj/item/folder/blue,
@@ -60673,11 +60683,6 @@
},
/turf/open/floor/engine,
/area/science/explab)
-"uBu" = (
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
- },
-/area/maintenance/department/chapel/monastery)
"uCS" = (
/obj/machinery/door/poddoor/shutters{
id = "aux_base_shutters";
@@ -60686,16 +60691,6 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
-"uDr" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"uER" = (
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
"uHG" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -60708,6 +60703,22 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"uIB" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"uJI" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/space/basic,
+/area/space)
+"uKS" = (
+/obj/machinery/smartfridge/organ/preloaded,
+/turf/closed/wall,
+/area/medical/surgery)
"uLF" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -60744,12 +60755,10 @@
/obj/effect/turf_decal/plaque,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"uQa" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
+"uNP" = (
+/obj/effect/landmark/barthpot,
+/turf/open/floor/carpet,
+/area/library/lounge)
"uQR" = (
/obj/item/ammo_casing/shotgun/beanbag,
/turf/open/floor/plating,
@@ -60763,6 +60772,11 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
+"uTY" = (
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
+ },
+/area/maintenance/department/chapel/monastery)
"uUQ" = (
/obj/machinery/door/airlock/maintenance{
name = "Engineering Maintenance";
@@ -60789,14 +60803,19 @@
/obj/item/stamp/law,
/turf/open/floor/carpet,
/area/lawoffice)
-"uWe" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "External Gas to Loop"
+"uWP" = (
+/obj/machinery/seed_extractor,
+/obj/effect/turf_decal/tile/green{
+ dir = 1
},
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/effect/turf_decal/tile/green{
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"uXG" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -60819,28 +60838,21 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard)
-"uZs" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+"uYk" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"vay" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"vbQ" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
-"vdb" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"veM" = (
/obj/machinery/suit_storage_unit/rd,
/obj/machinery/light{
@@ -60858,15 +60870,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"vfn" = (
-/obj/structure/plasticflaps/opaque,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "research_shutters_2";
- name = "research shutters"
- },
-/turf/open/floor/plasteel,
-/area/science/lab)
"vgp" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -60884,14 +60887,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"vgX" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"vhk" = (
/obj/structure/chair,
/turf/open/floor/carpet,
@@ -60905,10 +60900,31 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"vkd" = (
-/obj/effect/landmark/barthpot,
-/turf/open/floor/carpet,
-/area/library/lounge)
+"vli" = (
+/obj/structure/table,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/obj/machinery/light,
+/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"vlC" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"vlF" = (
/obj/item/coin/silver,
/obj/effect/decal/cleanable/oil{
@@ -60943,6 +60959,20 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"voh" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"vor" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"vpz" = (
/obj/structure/girder,
/turf/open/floor/plating{
@@ -60950,6 +60980,11 @@
initial_gas_mix = "o2=0.01;n2=0.01"
},
/area/maintenance/department/science)
+"vsc" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space)
"vsk" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -60960,6 +60995,31 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"vsw" = (
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Starboard";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"vsG" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/door/airlock/maintenance{
+ name = "Research Lab Maintenance";
+ req_access_txt = "0";
+ req_one_access_txt = "7;29"
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/engine)
"vsJ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
@@ -60979,12 +61039,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"vtz" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"vtT" = (
/turf/open/floor/plating,
/area/maintenance/solars/port)
@@ -60999,13 +61053,6 @@
/obj/item/clothing/mask/gas,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"vvr" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"vxp" = (
/obj/machinery/door/window/eastright{
base_state = "left";
@@ -61019,12 +61066,17 @@
/obj/item/assembly/mousetrap,
/turf/open/floor/engine,
/area/science/explab)
-"vyN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+"vxr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/crew_quarters/heads/hor)
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"vzz" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -61035,6 +61087,15 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
+"vzA" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"vzP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
@@ -61065,6 +61126,19 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"vBE" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#d1dfff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"vCC" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -61075,6 +61149,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"vFZ" = (
+/obj/structure/closet/emcloset,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"vGg" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
@@ -61090,36 +61171,16 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"vIn" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"vIU" = (
-/obj/structure/transit_tube/horizontal,
-/obj/structure/sign/departments/holy{
+"vKq" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/poster/official/random{
pixel_x = -32
},
-/turf/open/floor/plating,
-/area/hallway/secondary/entry)
-"vJS" = (
-/obj/structure/closet/radiation,
-/obj/effect/turf_decal/tile/yellow{
+/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
/turf/open/floor/plasteel,
-/area/engine/engineering)
-"vMv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main/monastery)
+/area/hallway/primary/aft)
"vMx" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -61129,19 +61190,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"vMH" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"vMQ" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"vOw" = (
/obj/machinery/door/airlock/grunge{
name = "Library"
@@ -61156,13 +61204,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library)
-"vPU" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"vRi" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -61231,20 +61272,16 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"vYi" = (
-/obj/structure/cable{
- icon_state = "4-8"
+"vVO" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
},
-/obj/machinery/door/airlock/maintenance{
- name = "Research Lab Maintenance";
- req_access_txt = "0";
- req_one_access_txt = "7;29"
- },
-/turf/open/floor/plating,
-/area/maintenance/department/engine)
+/turf/open/floor/engine,
+/area/engine/engineering)
"vYN" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8;
@@ -61254,16 +61291,22 @@
},
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
-"waN" = (
-/obj/effect/spawner/lootdrop/maintenance{
- lootcount = 3;
- name = "3maintenance loot spawner"
+"wbB" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 2;
+ name = "External Gas to Loop"
},
-/obj/structure/rack,
-/turf/open/floor/plating{
- icon_state = "panelscorched"
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"wbF" = (
+/obj/machinery/rnd/production/circuit_imprinter,
+/obj/machinery/camera{
+ c_tag = "Engineering Starboard Aft";
+ dir = 8
},
-/area/maintenance/department/chapel/monastery)
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"wcs" = (
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
@@ -61300,10 +61343,24 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"wfG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/crew_quarters/heads/hor)
"wfO" = (
/mob/living/simple_animal/hostile/retaliate/poison/snake,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"wfP" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"wig" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/plating{
@@ -61318,14 +61375,22 @@
/turf/open/floor/plating,
/area/maintenance/department/engine)
"wjm" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/structure/cable/yellow{
+/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 6
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/engine,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"wkZ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -61354,27 +61419,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/explab)
-"wlZ" = (
-/obj/machinery/light/small,
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/maintenance/department/chapel/monastery)
-"wmA" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
-"wnw" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"wnJ" = (
/obj/structure/sign/warning,
/turf/closed/wall,
@@ -61408,17 +61452,6 @@
},
/turf/open/floor/wood,
/area/lawoffice)
-"wsx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"wun" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -61446,9 +61479,19 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"wwK" = (
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
+"wxa" = (
+/obj/machinery/vr_sleeper{
+ icon_state = "sleeper";
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/security/prison)
"wxb" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -61496,21 +61539,15 @@
},
/turf/open/floor/plating,
/area/maintenance/department/crew_quarters/bar)
+"wDl" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"wDm" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"wDH" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating,
-/area/engine/supermatter)
"wDZ" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -61538,6 +61575,18 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"wHI" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"wIo" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"wIv" = (
/obj/machinery/power/apc/highcap/five_k{
dir = 8;
@@ -61572,6 +61621,12 @@
},
/turf/open/floor/plating,
/area/crew_quarters/heads/cmo)
+"wLK" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"wMF" = (
/obj/effect/spawner/lootdrop/three_course_meal,
/obj/effect/spawner/lootdrop/three_course_meal,
@@ -61587,6 +61642,10 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"wMX" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/supermatter)
"wNq" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -61657,12 +61716,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"wSU" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/hallway/secondary/entry)
"wTD" = (
/obj/structure/table/wood,
/obj/item/folder/red,
@@ -61698,6 +61751,10 @@
icon_state = "panelscorched"
},
/area/maintenance/department/security/brig)
+"wUW" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/maintenance/department/chapel/monastery)
"wVC" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=Sci";
@@ -61705,16 +61762,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"wXe" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/engineering/glass/critical{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"wXu" = (
/obj/machinery/disposal/bin,
/obj/structure/window/reinforced{
@@ -61732,6 +61779,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"wYK" = (
+/obj/machinery/power/supermatter_crystal/engine,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"xah" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -61756,7 +61807,6 @@
dir = 4
},
/obj/machinery/firealarm{
- dir = 1;
pixel_y = 29
},
/obj/effect/turf_decal/tile/neutral{
@@ -61779,15 +61829,18 @@
/obj/structure/sign/warning/vacuum/external,
/turf/open/floor/plating,
/area/hallway/secondary/exit/departure_lounge)
+"xer" = (
+/obj/machinery/conveyor{
+ dir = 1;
+ id = "garbage"
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal)
"xeB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/lawoffice)
-"xgB" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"xgG" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -61812,11 +61865,16 @@
dir = 1
},
/area/hallway/secondary/exit/departure_lounge)
-"xiY" = (
-/obj/structure/lattice,
+"xhI" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"xhW" = (
/obj/structure/lattice,
/turf/open/space/basic,
-/area/space/nearstation)
+/area/space)
"xja" = (
/obj/machinery/light/small{
dir = 4
@@ -61864,34 +61922,10 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"xkf" = (
-/obj/effect/landmark/carpspawn,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
-"xkL" = (
-/obj/structure/table,
-/obj/item/clothing/suit/hooded/wintercoat/engineering,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/delivery,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"xlA" = (
/obj/machinery/door/airlock/maintenance/abandoned,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"xlY" = (
-/obj/effect/landmark/xeno_spawn,
-/turf/open/floor/plating{
- icon_state = "platingdmg1"
- },
-/area/maintenance/department/chapel/monastery)
"xmp" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -61946,20 +61980,6 @@
/obj/item/broken_bottle,
/turf/open/floor/plating,
/area/maintenance/solars/port)
-"xuW" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
-"xvK" = (
-/obj/structure/reflector/single/anchored{
- dir = 6
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"xvO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -62017,10 +62037,6 @@
icon_state = "panelscorched"
},
/area/maintenance/department/security/brig)
-"xyT" = (
-/obj/machinery/light/small,
-/turf/open/floor/plating,
-/area/maintenance/department/chapel/monastery)
"xzp" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -62028,6 +62044,13 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"xzR" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"xCV" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -62107,11 +62130,22 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/lawoffice)
+"xNw" = (
+/obj/machinery/door/airlock/maintenance,
+/turf/open/floor/plating,
+/area/chapel/main/monastery)
"xNx" = (
/obj/structure/lattice,
/obj/structure/disposalpipe/junction/flip,
/turf/open/space/basic,
/area/space/nearstation)
+"xNy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"xOC" = (
/obj/machinery/door/airlock/external{
name = "Construction Zone";
@@ -62142,6 +62176,13 @@
/obj/effect/mapping_helpers/airlock/unres,
/turf/open/floor/plasteel/freezer,
/area/storage/emergency/port)
+"xRE" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id = "garbage"
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal)
"xSX" = (
/obj/machinery/airalarm/unlocked{
pixel_y = 23
@@ -62155,12 +62196,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"xVT" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"xWl" = (
/obj/item/pen,
/obj/item/paper_bin{
@@ -62172,10 +62207,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"xXh" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/maintenance/department/chapel/monastery)
"ybX" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance,
@@ -62197,19 +62228,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"yff" = (
-/obj/machinery/vr_sleeper{
- icon_state = "sleeper";
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
"yfO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/yellow,
@@ -62226,30 +62244,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"yhs" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/security/prison)
-"yjy" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ykV" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"ymb" = (
/obj/machinery/camera{
c_tag = "Engineering Telecomms Access";
@@ -77864,7 +77858,7 @@ ctL
cgg
cfE
cfE
-cua
+cfp
cfE
cuW
cfE
@@ -79134,7 +79128,7 @@ bQf
bQf
bQf
bWW
-vMv
+bXI
bZn
bZn
bZn
@@ -79376,10 +79370,10 @@ bGG
bHL
bIW
bKc
-cqI
+bOy
bMt
bLn
-cqI
+bOy
bPo
bQg
bQg
@@ -79933,7 +79927,7 @@ ckT
xhj
xhj
cwK
-vkd
+uNP
xhj
cxn
xhj
@@ -80384,7 +80378,7 @@ aaa
aaa
aaa
aaa
-iaZ
+ffK
bsl
btL
aZx
@@ -80400,11 +80394,11 @@ aaa
aaa
aaa
aaa
-irs
+xhW
aqG
bGE
bKf
-gvO
+lxm
bMw
bNy
bNw
@@ -80641,7 +80635,7 @@ aaa
aaa
aaa
aaa
-iaZ
+ffK
aZx
bcX
aZx
@@ -80656,12 +80650,12 @@ aaa
aaa
aaa
aaa
-irs
-irs
+xhW
+xhW
aqG
bGE
bKf
-gvO
+lxm
bMx
bNz
bHM
@@ -80688,7 +80682,7 @@ ccJ
cdw
cel
ceM
-cua
+cfp
cfE
cfE
chn
@@ -80912,13 +80906,13 @@ aaa
aaa
aaa
aaa
-irs
-irs
-irs
+xhW
+xhW
+xhW
aqG
bGE
-jOX
-beT
+haq
+gOI
bHM
bNA
bHM
@@ -80955,7 +80949,7 @@ cvc
cho
cvk
cdx
-euN
+dTz
csS
cfm
cwe
@@ -81168,17 +81162,17 @@ bVp
bVp
bVp
bVp
-gLn
-sTg
-gLn
-gLn
-eOA
+jfr
+jTN
+jfr
+jfr
+uYk
aZx
-llS
-kYR
+bIY
+bLs
aZx
bNB
-hRQ
+bMy
abI
aby
abI
@@ -81213,7 +81207,7 @@ ciF
cuQ
cfm
cfm
-fwo
+xNw
cfm
cwe
ckp
@@ -81431,8 +81425,8 @@ aZx
aZx
aZx
aZx
-llS
-sho
+bIY
+pKg
aZx
amC
aaa
@@ -81440,8 +81434,8 @@ aht
aby
aby
abI
-mfg
-sRH
+bSn
+ogn
cqS
bNs
bQe
@@ -81678,18 +81672,18 @@ aaa
aaa
bGI
aZx
-jkm
-tpX
-iHI
-iHI
-iHI
-tpX
-iHI
-hWa
-wwK
-wSU
-llS
-wmA
+vFZ
+tZu
+uau
+uau
+uau
+tZu
+uau
+dUI
+irD
+mjk
+bIY
+mxu
aZx
amB
aht
@@ -81699,7 +81693,7 @@ aaa
abI
abI
abI
-sRH
+ogn
bNs
bNs
bNs
@@ -81727,7 +81721,7 @@ chr
chL
cfm
cfN
-xyT
+obh
cfN
cfN
cfN
@@ -81935,18 +81929,18 @@ aaa
aaa
bGI
aZx
-oto
-wwK
-wwK
-wwK
-uAL
-vbQ
-vbQ
-vbQ
-vbQ
-vbQ
-vbQ
-pga
+cxW
+irD
+irD
+irD
+ejJ
+kGc
+kGc
+kGc
+kGc
+kGc
+kGc
+ekV
aZx
amC
aaa
@@ -81957,7 +81951,7 @@ aaa
aaa
abI
aaa
-sOQ
+uJI
bQR
bNs
bNs
@@ -82192,8 +82186,8 @@ aaa
aaa
bGI
aZx
-oto
-wwK
+cxW
+irD
aZx
aZx
aZx
@@ -82449,19 +82443,19 @@ aaa
aaa
aqG
aZx
-oto
-wwK
+cxW
+irD
aZx
-irs
-irs
-irs
-irs
-irs
-irs
-irs
-irs
-irs
-irs
+xhW
+xhW
+xhW
+xhW
+xhW
+xhW
+xhW
+xhW
+xhW
+xhW
amD
aaa
aht
@@ -82703,11 +82697,11 @@ bon
aZx
aaa
aaa
-irs
+xhW
aqG
aZx
-oto
-wwK
+cxW
+irD
aZx
bBV
bDf
@@ -82963,12 +82957,12 @@ aZx
aZx
aZx
aZx
-oto
-kvx
+cxW
+nYM
bAI
-qbV
+kqV
abI
-irs
+xhW
abI
aaa
bva
@@ -83012,7 +83006,7 @@ cfN
cfN
cfN
cfN
-wlZ
+hCR
cjm
cfN
cfN
@@ -83142,11 +83136,11 @@ abI
aen
aet
aeH
-vtz
+bfQ
afo
afG
aeU
-gHy
+eSB
agy
agL
agZ
@@ -83220,8 +83214,8 @@ bbR
bbR
bbR
aZx
-rHv
-saW
+fCC
+tZk
bAJ
bBX
bBX
@@ -83269,9 +83263,9 @@ cfN
cfN
cfN
cfN
-uaa
+nog
cjm
-irs
+xhW
aaa
aaa
aaa
@@ -83398,8 +83392,8 @@ adR
aaa
aem
aeu
-cJd
-pED
+uWP
+ltB
aeH
afH
aeH
@@ -83479,7 +83473,7 @@ baK
aZx
bxY
bzz
-vIU
+ovg
bBX
bDg
bEj
@@ -83526,10 +83520,10 @@ cfN
cfN
cfN
cfN
-uBu
+uTY
cjm
cjm
-irs
+xhW
aaa
aaa
aaa
@@ -83658,9 +83652,9 @@ agy
agy
lGp
aeU
-aae
+afI
aeU
-dUk
+jXF
agy
agN
agY
@@ -83769,22 +83763,22 @@ bIZ
cba
cbT
bDi
-cQZ
+kuT
cwA
cwA
cwA
cwA
-lqo
+pDd
cwA
cwA
cwA
cwA
-uaa
-ovE
-uaa
-uBu
-xlY
-ezo
+nog
+gFw
+nog
+uTY
+eQa
+ceG
cjm
aht
aaa
@@ -83912,8 +83906,8 @@ adR
aaa
aem
aeW
-yhs
-hyl
+mwl
+kzK
afr
agy
agc
@@ -84029,19 +84023,19 @@ ccO
bIZ
cjm
cjm
-xXh
-xXh
+wUW
+wUW
cjm
cjm
cjm
-xXh
-xXh
+wUW
+wUW
cjm
cjm
cjm
cjm
-waN
-dzA
+fjC
+kLT
cjm
aht
aaa
@@ -84169,9 +84163,9 @@ adR
aaa
aem
aeX
-dqi
-yff
-yff
+pua
+wxa
+wxa
agy
agd
agp
@@ -84284,10 +84278,10 @@ bva
bNK
bva
bva
-irs
-xkf
-dRs
-dRs
+xhW
+ucT
+vsc
+vsc
aht
aht
mau
@@ -84553,11 +84547,11 @@ aaa
aaa
aaa
aaa
-dRs
-dRs
-irs
-irs
-xiY
+vsc
+vsc
+xhW
+xhW
+tSk
aaa
aaa
aaa
@@ -85213,7 +85207,7 @@ aiM
ajh
ajR
akN
-aiM
+dQj
amj
amX
anH
@@ -89164,9 +89158,9 @@ eQN
tcY
cam
cam
-cdI
+sjC
bXk
-eVW
+mci
cbX
ceq
mhl
@@ -89421,7 +89415,7 @@ bpL
fQf
cbW
cbd
-gaQ
+cdI
cri
cbX
cbX
@@ -90889,7 +90883,7 @@ aCC
aDG
aBm
aFz
-aaf
+aGm
awR
aHQ
aIO
@@ -90959,9 +90953,9 @@ bXh
bXZ
bYK
bZz
-sAF
+nAY
cbd
-fGt
+nRM
cam
cdM
bXq
@@ -90971,8 +90965,8 @@ cfQ
bXk
qWG
bXk
-tAv
-pPu
+paU
+dSp
cdm
aaa
aht
@@ -91224,22 +91218,22 @@ qtO
bXk
bXk
bXk
-fbu
-nQf
-nQf
-nQf
-cgt
-oge
-oge
+svA
+mjK
+mjK
+mjK
+wHI
+eyj
+eyj
bXk
-uER
-uER
-uER
-uER
-uER
-uER
-uER
-uER
+shH
+shH
+shH
+shH
+shH
+shH
+shH
+shH
fon
fon
mau
@@ -91471,23 +91465,23 @@ bVH
bWr
bXj
qGZ
-bYM
+bYQ
bZD
caj
cbf
ccb
cah
cdO
-jOw
+ioF
ceX
-ocy
+qOS
cfS
fFv
-yjy
-nIq
-mAi
-abD
-abD
+fmL
+gXZ
+kmd
+lXJ
+lXJ
bXk
aaa
aht
@@ -91740,10 +91734,10 @@ mwG
nAs
cfT
wcs
-upg
+ggg
qbp
qbp
-hUi
+gEo
dMG
bXk
aaa
@@ -91987,14 +91981,14 @@ bXk
bYc
bYO
bZA
-dlI
+xhI
cbh
cbh
cbh
cbh
cbh
-nNn
-mvA
+hjD
+vor
cfU
tIS
iCs
@@ -92225,7 +92219,7 @@ bFU
bFU
bIn
bJt
-jdA
+uKS
bFU
bFU
bFU
@@ -92244,21 +92238,21 @@ bXk
bYd
bYP
bZF
-uZs
-lDW
-wsx
-uwT
-uwT
+rTd
+wDl
+vxr
+irM
+irM
qFu
cet
ulY
cfV
cgu
cgU
-kNK
+izm
chw
-oge
-eMz
+eyj
+jzE
bXk
bXk
bXk
@@ -92499,31 +92493,31 @@ bVK
bWu
bXk
bYe
-bYM
+bYQ
bZA
can
cbi
ccc
-oge
+eyj
cdR
-vvr
+tQT
bXk
bXk
-oBY
+sWW
cgv
-ndf
+lXb
cgv
uaP
cgv
-ikm
+ukp
cgV
cgv
cgv
-gkN
+gQf
bXk
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -92760,27 +92754,27 @@ bYR
bZA
can
cbj
-oge
+eyj
cbX
wcs
iyJ
cfa
-oge
+eyj
twv
-pJx
+hoS
sWj
dnS
-rEt
-mZK
-nqW
-pBs
-pBs
+hSC
+jTU
+fZK
+pgH
+pgH
uRk
ciG
bXk
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -93016,7 +93010,7 @@ bYf
bYS
bZA
can
-eue
+qpS
ccd
ccX
ccX
@@ -93024,20 +93018,20 @@ ceu
cbX
cfu
tlN
-pIk
+ncm
cCI
uoq
-wDH
+hQy
chA
meF
-oTD
-uWe
-dHF
+oKv
+wbB
+xzR
hQC
bXk
aht
fon
-uER
+shH
fon
aht
aaa
@@ -93238,7 +93232,7 @@ bmz
bnG
boN
bpW
-brk
+dHZ
bsK
buk
bvs
@@ -93274,27 +93268,27 @@ bYT
bZB
caq
cbk
-oge
+eyj
ccY
cdT
ccY
cbX
-oge
-jQn
-sQV
-dFF
+eyj
+vlC
+iej
+qeY
fyO
fyO
fyO
-dFF
-oTD
-uWe
-dGd
+qeY
+oKv
+wbB
+wfP
hQC
bXk
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -93530,28 +93524,28 @@ bYh
bYU
bZE
car
-sdZ
-oge
+mgz
+eyj
cbX
wcs
wcs
cfd
bXk
tlN
-pIk
-obl
+ncm
+lUO
mpd
-peb
-peb
+hKp
+hKp
cit
-dFF
-vMQ
-gih
+qeY
+puw
+vBE
hQC
bXk
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -93752,7 +93746,7 @@ bkh
bkh
boN
bpW
-dVt
+brk
bsM
bum
bvt
@@ -93793,22 +93787,22 @@ cda
wcs
wcs
wcs
-oge
-oFi
-wjm
-dFF
-uQa
-uQa
-uQa
+eyj
+eAH
+lnr
+qeY
+fBZ
+fBZ
+fBZ
cgY
ciI
-mZV
-obG
+tdL
+dHr
hQC
bXk
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -93989,7 +93983,7 @@ aSS
aUg
aVf
aWi
-eyT
+mjn
aYe
aZb
bag
@@ -94012,8 +94006,8 @@ bpV
brm
bsN
bun
-mcf
-nnf
+gGA
+bwW
byA
bAi
bpY
@@ -94042,30 +94036,30 @@ bWz
bVN
bYf
bYW
-hDy
+oWu
cam
-cxj
+vli
ckJ
cey
cdW
wcs
cdW
-oge
-vPU
-eux
-kDI
-fWE
-nyN
-fWE
-wXe
-iTE
-mlS
-jTc
+eyj
+kTR
+mEu
+wMX
+dFJ
+wYK
+dFJ
+uzh
+nUQ
+fym
+hon
hQC
bXk
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -94269,12 +94263,12 @@ bpY
bpY
bpY
bpY
-gGA
-bwW
+pxD
+jZG
bpY
bpY
bpY
-vYi
+vsG
bva
bva
bva
@@ -94301,28 +94295,28 @@ bUT
bYX
bZA
cam
-xkL
+lfx
bXk
-xvK
+pCo
wcs
wcs
-kBe
-oge
-mlx
-gUS
-dFF
+tlV
+eyj
+qkM
+miw
+qeY
prQ
prQ
prQ
-nPW
-mvY
-sfr
+dgj
+psd
+fxC
dZj
hQC
bXk
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -94522,17 +94516,17 @@ bls
aBI
aBI
bmB
-tcC
-qWB
-iHe
-qbm
+vKq
+nTr
+gDR
+vzA
bvu
-wnw
-cep
-ePS
-nhW
-rGz
-rPd
+hIZ
+tqO
+mqp
+cKV
+iwe
+qTV
xDj
blt
jCv
@@ -94555,31 +94549,31 @@ bVO
bWA
mCe
bYj
-bYM
+bYQ
bZA
cam
-sdZ
-oge
+mgz
+eyj
cbX
wcs
wcs
-hxh
+dEy
bXk
tlN
-pIk
-vMQ
+ncm
+puw
fyF
cZt
cZt
-hUf
-dFF
-mLc
-lmv
+fjD
+qeY
+iTF
+slJ
hQC
bXk
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -94787,11 +94781,11 @@ gkS
tTl
tTl
tTl
-qUe
+koz
dgg
phJ
phJ
-lCY
+lJI
bAk
bIt
bJB
@@ -94812,31 +94806,31 @@ bVP
bWB
mCe
bYk
-bYQ
+wjm
bZF
cbm
-sdZ
-oge
-rwf
-rwf
+mgz
+eyj
+oHa
+oHa
eWi
cbX
-oge
-jQn
+eyj
+vlC
cgx
-dFF
+qeY
fyO
fyO
fyO
-dFF
+qeY
cBS
cjt
-mCP
+kaR
hQC
bXk
aaa
fon
-uER
+shH
fon
aht
aaa
@@ -95036,19 +95030,19 @@ blu
aDZ
aDZ
bjm
-nKF
+mhn
cqi
cqi
cqi
cqi
cqi
-erV
-rMt
-ksC
+imE
+kYM
+mfC
fdQ
bmD
bmD
-jrb
+eRp
bAl
bIu
bJC
@@ -95072,28 +95066,28 @@ bYl
bYO
bZA
cam
-lCR
+lrM
ccd
-mlb
-mlb
-mbD
+cAQ
+cAQ
+cLw
cbX
cfu
jBn
-ptk
+oxw
meF
chA
chA
woh
cCI
cBS
-rwt
+iLh
liR
hQC
bXk
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -95296,18 +95290,18 @@ bKM
cCl
cCl
cCl
-vfn
-ufx
-ufx
+tJr
+tzH
+tzH
byD
bAm
dhz
-nkk
+uxP
bDA
bEQ
bGa
-bHg
-mVj
+bHp
+sYQ
bJD
bBo
bBo
@@ -95330,27 +95324,27 @@ bYY
bZA
cam
cbn
-oge
+eyj
cbX
wcs
cfP
cff
-oge
+eyj
cfX
-kvu
-gHp
+vVO
+iop
kWQ
-iSi
-ona
-kec
-ngg
-ngg
-cUT
+oXq
+qpd
+tkL
+tOD
+tOD
+ikO
hQC
bXk
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -95551,14 +95545,14 @@ bmC
cqi
boP
bqb
-brp
+pYw
gFo
cSK
duF
-oxt
+bxa
byE
bBp
-vyN
+wfG
bBp
bBp
bBp
@@ -95588,22 +95582,22 @@ bZG
cax
cbo
ccc
-oge
+eyj
cdR
-uDr
+oJr
bXq
bXq
cfY
-hrx
-sHX
-hrx
-hXm
-jjA
+xNy
+smv
+xNy
+hGB
+hSt
civ
civ
-jtv
-ppi
-oyE
+vsw
+qRl
+oKJ
bXk
aht
fon
@@ -95845,19 +95839,19 @@ bZF
cal
cbp
cci
-dPZ
-dPZ
-vMH
-vJS
-vIn
-ttX
-oge
-dGp
-oge
-oge
-dGp
-oge
-oge
+kTj
+kTj
+qhE
+loz
+frj
+lRX
+eyj
+uIB
+eyj
+eyj
+uIB
+eyj
+eyj
bXk
bXk
bXk
@@ -96097,24 +96091,24 @@ bVU
bWG
bXq
bYo
-tzh
+hXK
bZI
-tzh
+hXK
cbq
cbd
cam
cam
cam
-mCU
-cOA
-gfh
-vdb
-rAZ
-gfh
-tMA
-puO
-vdb
-tMA
+haA
+aKm
+upc
+wIo
+hyh
+upc
+voh
+pBJ
+wIo
+voh
cdm
aaa
aaa
@@ -96355,23 +96349,23 @@ bWH
bXk
bTE
bZc
-nif
+ueX
cCU
bZJ
-mdi
+wbF
cCV
ceb
-qPh
-sKw
-cOA
-sQG
-gfh
-eqM
-sQG
-sQG
-dhu
-tMA
-sQG
+epV
+qLI
+aKm
+eiV
+upc
+dsz
+eiV
+eiV
+uaO
+voh
+eiV
cdm
aaa
aaa
@@ -96611,29 +96605,29 @@ bJN
bJN
bJN
bJN
-vIn
-xgB
-xgB
-xgB
-xgB
-xgB
-xgB
-xgB
-xgB
-fml
-mfx
-hJO
-dAa
-hJO
-hJO
-dAa
-hJO
-hJO
-eqM
+frj
+pYh
+pYh
+pYh
+pYh
+pYh
+pYh
+pYh
+pYh
+hUw
+nqu
+nsJ
+gBb
+nsJ
+nsJ
+gBb
+nsJ
+nsJ
+dsz
aht
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -96868,7 +96862,7 @@ bVV
bWI
bXr
bKQ
-vgX
+udl
bZK
abI
abI
@@ -96877,20 +96871,20 @@ abI
aaa
aaa
aaa
-dhu
-vdb
-hJO
-dAa
-hJO
-hJO
-dAa
-hJO
-hJO
-rAZ
+uaO
+wIo
+nsJ
+gBb
+nsJ
+nsJ
+gBb
+nsJ
+nsJ
+hyh
aaa
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -97125,7 +97119,7 @@ bQI
bWJ
bXs
bJN
-lxh
+cui
bJP
bJP
bJP
@@ -97134,20 +97128,20 @@ bJP
abI
abI
aht
-puO
-vdb
-hJO
-dAa
-hJO
-hJO
-dAa
-hJO
-hJO
-eqM
+pBJ
+wIo
+nsJ
+gBb
+nsJ
+nsJ
+gBb
+nsJ
+nsJ
+dsz
aht
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -97362,7 +97356,7 @@ bCK
bDG
bEW
bAt
-aIA
+bHg
cqw
cqD
bKO
@@ -97382,7 +97376,7 @@ bMf
fuR
bXt
bYp
-jPC
+eAZ
bZL
caz
cbs
@@ -97391,20 +97385,20 @@ bJP
aaa
aaa
aaa
-dhu
-vdb
-hJO
-dAa
-hJO
-hJO
-dAa
-hJO
-hJO
-rAZ
+uaO
+wIo
+nsJ
+gBb
+nsJ
+nsJ
+gBb
+nsJ
+nsJ
+hyh
aaa
aaa
fon
-uER
+shH
fon
aaa
aaa
@@ -97639,7 +97633,7 @@ bVW
bWL
bXu
bLW
-lxh
+cui
bMi
caA
cbt
@@ -97648,20 +97642,20 @@ bJP
aaa
aaa
aaa
-puO
-xuW
-rAZ
-puO
-rAZ
-puO
-rAZ
-puO
-rAZ
+pBJ
+swg
+hyh
+pBJ
+hyh
+pBJ
+hyh
+pBJ
+hyh
cdm
aht
aht
fon
-uER
+shH
fon
aaa
aaa
@@ -97896,7 +97890,7 @@ bVX
bWM
bXv
bWc
-tmi
+poP
bZL
caB
cbs
@@ -98133,7 +98127,7 @@ bAt
bAt
bAu
bAu
-bHg
+bHp
cqx
bJJ
bKQ
@@ -98148,12 +98142,12 @@ bQI
bQI
bTM
bUs
-cAp
-ykV
-ufr
+ljG
+hjk
+pmB
bXw
-iSL
-lQy
+dJk
+tbw
bJP
bJP
bJP
@@ -98405,7 +98399,7 @@ bMf
bMf
bTN
bUt
-flP
+wLK
bOk
bWK
bXt
@@ -98661,8 +98655,8 @@ bRx
bQJ
bPQ
bTO
-cAp
-xVT
+ljG
+lhP
bOk
bWL
bXx
@@ -98676,21 +98670,21 @@ bJP
aaa
aaa
fon
-uER
-uER
-uER
-uER
-uER
-uER
-uER
-uER
-uER
-uER
+shH
+shH
+shH
+shH
+shH
+shH
+shH
+shH
+shH
+shH
fon
aaa
aht
-uER
-uER
+shH
+shH
fon
aaa
aaa
@@ -98918,7 +98912,7 @@ bPQ
bPQ
bPQ
bTP
-flP
+wLK
bVh
bVY
bWM
@@ -98946,7 +98940,7 @@ fon
fon
aaa
aht
-uER
+shH
fon
fon
aaa
@@ -99175,7 +99169,7 @@ bQK
bQK
bPQ
bTQ
-flP
+wLK
bKX
bOk
bWN
@@ -99343,7 +99337,7 @@ cBk
jhD
cBo
alQ
-ggg
+ebT
cBw
noC
aiS
@@ -99432,7 +99426,7 @@ bRy
bSf
bSR
bTM
-flP
+wLK
bKX
bVZ
bWO
@@ -99689,7 +99683,7 @@ bRz
bMf
bSS
bTR
-nYe
+tDE
bKX
bWa
bMf
@@ -100146,7 +100140,7 @@ aHn
aIi
aJi
aKe
-kVA
+klb
aMi
aNJ
fwl
@@ -100898,7 +100892,7 @@ aiT
aiS
apX
cod
-aab
+asg
atj
apX
avi
@@ -101184,7 +101178,7 @@ lAs
eeQ
aUs
aLf
-lfZ
+eex
aLf
aLf
aUl
@@ -101708,7 +101702,7 @@ bcA
bdF
beJ
bfB
-gaJ
+dps
aZv
aUC
biz
@@ -102445,7 +102439,7 @@ apX
apX
avl
fIu
-rTZ
+epj
aIh
azA
dbi
@@ -102457,7 +102451,7 @@ aFH
aGG
aHo
aIk
-aac
+aJo
aGF
aEd
aMr
@@ -102979,7 +102973,7 @@ aNP
aPb
aNO
aNP
-cRJ
+tLP
aTq
aSk
aTm
@@ -107857,7 +107851,7 @@ aaa
aaa
aLn
aNT
-rax
+xer
aQo
aPg
aRu
@@ -108115,7 +108109,7 @@ aaa
aLm
aLm
aNU
-hCg
+xRE
dqY
aRv
sZh
@@ -108371,8 +108365,8 @@ aaa
aaa
aLm
aME
-aNV
-hCg
+eFG
+xRE
dqY
aRw
sqQ
@@ -108628,8 +108622,8 @@ aaa
aaa
aLo
aMF
-aNW
-hCg
+aNV
+xRE
cvf
aQn
sqQ
@@ -108886,8 +108880,8 @@ aaa
aLo
aMG
aNX
-hCg
-rax
+xRE
+xer
aRy
aSn
aSn
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 80e80cd6a9..7e095329af 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -63,21 +63,21 @@
pixel_y = 4
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"am" = (
/obj/structure/closet/crate/bin,
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"an" = (
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"ao" = (
@@ -86,8 +86,8 @@
layer = 3.3
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"ap" = (
@@ -166,15 +166,15 @@
pixel_y = 8
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aA" = (
/obj/structure/chair/wood/normal,
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aB" = (
@@ -218,16 +218,16 @@
dir = 4
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aJ" = (
/obj/structure/table/wood/poker,
/obj/item/clothing/mask/cigarette/pipe,
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aK" = (
@@ -235,8 +235,8 @@
/obj/structure/table/wood/poker,
/obj/effect/holodeck_effect/cards,
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aL" = (
@@ -244,8 +244,8 @@
dir = 8
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aM" = (
@@ -259,8 +259,8 @@
dir = 1
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aO" = (
@@ -272,15 +272,15 @@
dir = 4
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aQ" = (
/obj/structure/window/reinforced,
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aR" = (
@@ -299,8 +299,8 @@
pixel_y = 10
},
/turf/open/floor/holofloor{
- icon_state = "wood";
- dir = 9
+ dir = 9;
+ icon_state = "wood"
},
/area/holodeck/rec_center/lounge)
"aU" = (
@@ -1403,7 +1403,6 @@
/obj/structure/window/reinforced,
/obj/machinery/mass_driver{
dir = 1;
- icon_state = "mass_driver";
id = "trektorpedo1";
name = "photon torpedo tube"
},
@@ -1452,7 +1451,6 @@
/obj/structure/window/reinforced,
/obj/machinery/mass_driver{
dir = 1;
- icon_state = "mass_driver";
id = "trektorpedo2";
name = "photon torpedo tube"
},
@@ -1470,14 +1468,14 @@
dir = 4
},
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 1
+ dir = 1;
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"dT" = (
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 4
+ dir = 4;
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"dU" = (
@@ -1489,8 +1487,8 @@
/area/holodeck/rec_center/chapelcourt)
"dV" = (
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 1
+ dir = 1;
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"dW" = (
@@ -1498,8 +1496,8 @@
dir = 8
},
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 4
+ dir = 4;
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"dX" = (
@@ -1523,8 +1521,8 @@
dir = 8
},
/turf/open/floor/holofloor{
- icon_state = "white";
- dir = 8
+ dir = 8;
+ icon_state = "white"
},
/area/holodeck/rec_center/firingrange)
"eb" = (
@@ -1539,8 +1537,8 @@
dir = 4
},
/turf/open/floor/holofloor{
- icon_state = "white";
- dir = 4
+ dir = 4;
+ icon_state = "white"
},
/area/holodeck/rec_center/firingrange)
"ed" = (
@@ -1611,8 +1609,7 @@
/area/holodeck/rec_center/chapelcourt)
"en" = (
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 2
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"eo" = (
@@ -1635,8 +1632,7 @@
dir = 8
},
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 2
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"er" = (
@@ -1644,8 +1640,8 @@
dir = 8
},
/turf/open/floor/holofloor{
- icon_state = "white";
- dir = 10
+ dir = 10;
+ icon_state = "white"
},
/area/holodeck/rec_center/firingrange)
"es" = (
@@ -1658,8 +1654,8 @@
dir = 4
},
/turf/open/floor/holofloor{
- icon_state = "white";
- dir = 6
+ dir = 6;
+ icon_state = "white"
},
/area/holodeck/rec_center/firingrange)
"eu" = (
@@ -1679,8 +1675,8 @@
/area/holodeck/rec_center/spacechess)
"ex" = (
/turf/open/floor/holofloor{
- icon_state = "stairs-old";
- dir = 8
+ dir = 8;
+ icon_state = "stairs-old"
},
/area/holodeck/rec_center/thunderdome1218)
"ey" = (
@@ -1780,8 +1776,8 @@
dir = 1
},
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 1
+ dir = 1;
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"eN" = (
@@ -1789,8 +1785,8 @@
dir = 1
},
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 4
+ dir = 4;
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"eO" = (
@@ -1827,8 +1823,7 @@
dir = 1
},
/turf/open/floor/holofloor{
- icon_state = "chapel";
- dir = 2
+ icon_state = "chapel"
},
/area/holodeck/rec_center/chapelcourt)
"eT" = (
@@ -2114,7 +2109,6 @@
/turf/closed/indestructible/riveted,
/area/space)
"fy" = (
-/obj/machinery/igniter/on,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/tdome/arena_source)
@@ -2517,9 +2511,9 @@
/area/ctf)
"gB" = (
/obj/structure/window/reinforced/fulltile{
- obj_integrity = 5000;
max_integrity = 5000;
- name = "hardened window"
+ name = "hardened window";
+ obj_integrity = 5000
},
/turf/open/floor/plating,
/area/ctf)
@@ -3398,7 +3392,7 @@
/area/centcom/supply)
"iS" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/brown{
@@ -3471,8 +3465,7 @@
"ja" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
+ name = "CentCom"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -3565,7 +3558,6 @@
/area/centcom/control)
"jk" = (
/obj/machinery/door/poddoor{
- density = 1;
id = "XCCQMLoaddoor2";
name = "Supply Dock Loading Door"
},
@@ -3580,9 +3572,7 @@
/area/centcom/supply)
"jl" = (
/obj/structure/plasticflaps,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/machinery/conveyor{
dir = 4;
id = "XCCQMLoad2"
@@ -3591,13 +3581,10 @@
/area/centcom/supply)
"jm" = (
/obj/machinery/door/poddoor{
- density = 1;
id = "XCCQMLoaddoor2";
name = "Supply Dock Loading Door"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/machinery/conveyor{
dir = 4;
id = "XCCQMLoad2"
@@ -3683,7 +3670,6 @@
pixel_y = -5
},
/obj/machinery/button/door{
- dir = 2;
id = "XCCQMLoaddoor2";
layer = 4;
name = "Loading Doors";
@@ -3760,7 +3746,6 @@
/area/centcom/control)
"jI" = (
/obj/machinery/door/poddoor{
- density = 1;
id = "XCCQMLoaddoor";
name = "Supply Dock Loading Door"
},
@@ -3779,14 +3764,11 @@
dir = 8;
id = "XCCQMLoad"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/supply)
"jK" = (
/obj/machinery/door/poddoor{
- density = 1;
id = "XCCQMLoaddoor";
name = "Supply Dock Loading Door"
},
@@ -3794,9 +3776,7 @@
dir = 8;
id = "XCCQMLoad"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/supply)
"jL" = (
@@ -3883,7 +3863,7 @@
/area/centcom/control)
"jV" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/stripes/line{
@@ -4103,7 +4083,6 @@
"ki" = (
/obj/docking_port/stationary{
area_type = /area/syndicate_mothership;
- dir = 1;
dwidth = 25;
height = 50;
id = "emergency_syndicate";
@@ -4231,7 +4210,7 @@
icon_state = "plant-22"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -4282,8 +4261,7 @@
/area/centcom/control)
"kG" = (
/obj/structure/chair/comfy/brown{
- color = "#596479";
- dir = 2
+ color = "#596479"
},
/turf/open/floor/plasteel/grimy,
/area/centcom/control)
@@ -4431,19 +4409,14 @@
"kZ" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/control)
"la" = (
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
- dir = 2;
- icon_state = "leftsecure";
name = "CentCom Stand";
req_access_txt = "109"
},
@@ -4479,8 +4452,6 @@
},
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
- dir = 2;
- icon_state = "leftsecure";
name = "CentCom Stand";
req_access_txt = "109"
},
@@ -4498,8 +4469,6 @@
"lf" = (
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
- dir = 2;
- icon_state = "leftsecure";
name = "CentCom Stand";
req_access_txt = "109"
},
@@ -4701,12 +4670,9 @@
"lJ" = (
/obj/machinery/door/airlock/centcom{
name = "Shuttle Control Office";
- opacity = 1;
req_access_txt = "109"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/supply)
"lK" = (
@@ -4714,9 +4680,7 @@
name = "CentCom Supply";
req_access_txt = "106"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/supply)
"lL" = (
@@ -4792,10 +4756,16 @@
},
/turf/open/floor/plasteel/dark,
/area/centcom/control)
+"lS" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja1";
+ name = "Dorm 1"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"lT" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -4852,6 +4822,16 @@
icon_state = "alien11"
},
/area/abductor_ship)
+"ma" = (
+/obj/machinery/button/door{
+ id = "Ninja7";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"mb" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/neutral{
@@ -5249,9 +5229,7 @@
/area/centcom/control)
"mR" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/control)
"mS" = (
@@ -5769,13 +5747,11 @@
"nQ" = (
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
- dir = 2;
- icon_state = "leftsecure";
name = "CentCom Stand";
req_access_txt = "109"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -5793,13 +5769,11 @@
"nR" = (
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
- dir = 2;
- icon_state = "leftsecure";
name = "CentCom Stand";
req_access_txt = "109"
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -6295,7 +6269,6 @@
"oJ" = (
/obj/machinery/door/airlock/centcom{
name = "Administrative Office";
- opacity = 1;
req_access_txt = "109"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -6610,11 +6583,11 @@
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/machinery/door/window/brigdoor{
- name = "CentCom Customs";
- icon_state = "rightsecure";
+ base_state = "rightsecure";
dir = 4;
- req_access_txt = "109";
- base_state = "rightsecure"
+ icon_state = "rightsecure";
+ name = "CentCom Customs";
+ req_access_txt = "109"
},
/obj/item/clipboard,
/obj/item/folder/yellow,
@@ -6866,7 +6839,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 +6866,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,
@@ -6990,9 +6963,7 @@
/area/ai_multicam_room)
"pZ" = (
/obj/machinery/washing_machine,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
"qa" = (
/obj/structure/flora/tree/pine,
@@ -7275,8 +7246,8 @@
/obj/structure/flora/ausbushes/lavendergrass,
/obj/structure/flora/ausbushes/fernybush,
/turf/open/floor/plasteel{
- name = "plating";
- icon_state = "asteroid5"
+ icon_state = "asteroid5";
+ name = "plating"
},
/area/centcom/control)
"qx" = (
@@ -7334,24 +7305,26 @@
/turf/closed/indestructible/riveted/uranium,
/area/wizard_station)
"qI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"qP" = (
+/obj/structure/chair/comfy/brown{
+ color = "#596479";
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"qQ" = (
/obj/machinery/door/airlock/centcom{
name = "Administrative Office";
- opacity = 1;
req_access_txt = "109"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"qR" = (
@@ -7361,23 +7334,17 @@
"qS" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/centcom/supply)
"qT" = (
/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 2
+ name = "CentCom"
},
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/centcom/control)
@@ -7747,8 +7714,8 @@
dir = 4
},
/turf/open/floor/plasteel{
- name = "plating";
- icon_state = "asteroid5"
+ icon_state = "asteroid5";
+ name = "plating"
},
/area/centcom/control)
"rI" = (
@@ -7940,7 +7907,6 @@
"sc" = (
/obj/docking_port/stationary{
area_type = /area/syndicate_mothership/control;
- dir = 1;
dwidth = 3;
height = 7;
name = "escape pod loader";
@@ -8259,7 +8225,6 @@
"sL" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -8388,7 +8353,6 @@
"te" = (
/obj/machinery/door/airlock/centcom{
name = "Auxillary Dock";
- opacity = 1;
req_access_txt = ""
},
/turf/open/floor/plating,
@@ -8751,6 +8715,10 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plasteel,
/area/centcom/supplypod)
+"tZ" = (
+/obj/structure/chair/wood/normal,
+/turf/open/floor/wood,
+/area/centcom/holding)
"uc" = (
/obj/effect/turf_decal/tile/green{
dir = 1
@@ -8764,9 +8732,7 @@
/obj/item/storage/crayons,
/obj/structure/table,
/obj/item/storage/crayons,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
"uf" = (
/obj/effect/turf_decal/tile/brown{
@@ -8777,6 +8743,13 @@
},
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/three)
+"uh" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja2";
+ name = "Dorm 2"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"uj" = (
/obj/item/clipboard,
/obj/item/folder/red,
@@ -9078,12 +9051,9 @@
"uO" = (
/obj/machinery/door/airlock/centcom{
name = "Shuttle Control Office";
- opacity = 1;
req_access_txt = "109"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"uP" = (
@@ -9214,7 +9184,7 @@
pixel_y = -32
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/neutral{
@@ -9309,9 +9279,9 @@
dwidth = 25;
height = 50;
id = "emergency_away";
+ json_key = "emergency";
name = "CentCom Emergency Shuttle Dock";
- width = 50;
- json_key = "emergency"
+ width = 50
},
/turf/open/space,
/area/space)
@@ -9446,12 +9416,9 @@
"vF" = (
/obj/machinery/door/airlock/centcom{
name = "Administrative Office";
- opacity = 1;
req_access_txt = "109"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"vG" = (
@@ -9755,6 +9722,13 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/three)
+"wj" = (
+/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"
+ },
+/turf/open/floor/carpet/royalblue,
+/area/centcom/holding)
"wl" = (
/obj/structure/table/wood,
/obj/item/paicard,
@@ -9814,7 +9788,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -9881,7 +9854,6 @@
"wC" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Customs";
- opacity = 1;
req_access_txt = "109"
},
/obj/effect/turf_decal/stripes/line{
@@ -9914,8 +9886,7 @@
/area/centcom/control)
"wE" = (
/obj/structure/chair/comfy/brown{
- color = "#596479";
- dir = 2
+ color = "#596479"
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -9967,8 +9938,7 @@
"wJ" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
+ name = "CentCom"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -10033,9 +10003,7 @@
/area/syndicate_mothership)
"xa" = (
/obj/machinery/door/window/northright{
- base_state = "right";
dir = 4;
- icon_state = "right";
name = "Security Desk";
req_access_txt = "103"
},
@@ -10266,6 +10234,14 @@
/obj/item/bedsheet/syndie,
/turf/open/floor/plasteel/dark,
/area/syndicate_mothership)
+"xO" = (
+/obj/structure/curtain,
+/obj/machinery/shower,
+/obj/structure/window{
+ dir = 8
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"xQ" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/light,
@@ -10396,7 +10372,6 @@
"yj" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -10441,12 +10416,9 @@
"yr" = (
/obj/machinery/door/airlock/centcom{
name = "Briefing Room";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"ys" = (
@@ -10652,11 +10624,17 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"yS" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja7";
+ name = "Dorm 7"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"yU" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
+ name = "CentCom"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -10828,7 +10806,6 @@
"zj" = (
/obj/structure/closet/secure_closet/ertCom,
/obj/structure/sign/directions/command{
- dir = 2;
pixel_y = 24
},
/obj/effect/turf_decal/stripes/line,
@@ -10838,9 +10815,7 @@
/obj/machinery/door/airlock/medical/glass{
name = "Infirmary"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/control)
"zl" = (
@@ -11017,7 +10992,7 @@
dir = 8
},
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/obj/effect/turf_decal/tile/blue{
@@ -11098,6 +11073,13 @@
/obj/item/reagent_containers/food/snacks/carpmeat,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
+"zW" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja5";
+ name = "Dorm 5"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"zX" = (
/obj/structure/table,
/obj/machinery/light{
@@ -11106,6 +11088,14 @@
/obj/item/soap/deluxe,
/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
+"zY" = (
+/obj/item/bedsheet/wiz{
+ desc = "A glow in the dark blue bedsheet.";
+ name = "blue bedsheet"
+ },
+/obj/structure/bed,
+/turf/open/floor/carpet/royalblue,
+/area/centcom/holding)
"Aa" = (
/turf/open/floor/mech_bay_recharge_floor,
/area/syndicate_mothership)
@@ -11344,6 +11334,16 @@
/obj/effect/decal/remains/xeno,
/turf/open/floor/grass,
/area/wizard_station)
+"AC" = (
+/obj/machinery/button/door{
+ id = "Ninja5";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = 25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"AD" = (
/obj/machinery/door/airlock/centcom{
name = "Leader's Room";
@@ -11585,11 +11585,6 @@
},
/turf/open/floor/plasteel/white,
/area/centcom/holding)
-"Bp" = (
-/obj/item/paicard,
-/obj/structure/table/wood,
-/turf/open/floor/engine/cult,
-/area/wizard_station)
"Bs" = (
/obj/structure/table/wood,
/obj/machinery/computer/libraryconsole/bookmanagement,
@@ -11846,12 +11841,9 @@
"BM" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/evac)
"BN" = (
@@ -12157,7 +12149,6 @@
icon_state = "plant-22"
},
/obj/machinery/power/apc{
- dir = 2;
name = "Briefing Room APC";
pixel_y = -26
},
@@ -12323,7 +12314,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 +12381,7 @@
"CM" = (
/obj/structure/filingcabinet/medical,
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -12876,11 +12867,11 @@
/obj/item/folder/red,
/obj/item/pen/red,
/obj/machinery/door/window/brigdoor{
- name = "CentCom Customs";
- icon_state = "rightsecure";
+ base_state = "rightsecure";
dir = 4;
- req_access_txt = "109";
- base_state = "rightsecure"
+ icon_state = "rightsecure";
+ name = "CentCom Customs";
+ req_access_txt = "109"
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -12891,11 +12882,11 @@
/obj/item/folder/white,
/obj/item/pen/blue,
/obj/machinery/door/window/brigdoor{
- name = "CentCom Customs";
- icon_state = "rightsecure";
+ base_state = "rightsecure";
dir = 8;
- req_access_txt = "109";
- base_state = "rightsecure"
+ icon_state = "rightsecure";
+ name = "CentCom Customs";
+ req_access_txt = "109"
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -13101,12 +13092,9 @@
/area/wizard_station)
"Eg" = (
/obj/machinery/door/airlock/centcom{
- name = "Thunderdome Booth";
- opacity = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 2
+ name = "Thunderdome Booth"
},
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/centcom/control)
"Eh" = (
@@ -13121,7 +13109,6 @@
/area/wizard_station)
"Ej" = (
/obj/vehicle/ridden/scooter/skateboard{
- icon_state = "skateboard";
dir = 4
},
/obj/effect/turf_decal/stripes/line,
@@ -13161,9 +13148,7 @@
/area/tdome/tdomeobserve)
"Eq" = (
/obj/machinery/door/airlock/external,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
"Er" = (
@@ -13263,12 +13248,9 @@
"EB" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
@@ -13281,9 +13263,7 @@
/turf/open/floor/engine/cult,
/area/wizard_station)
"ED" = (
-/obj/machinery/vending/boozeomat{
- req_access_txt = "0"
- },
+/obj/machinery/vending/boozeomat,
/turf/closed/indestructible{
icon = 'icons/turf/walls/wood_wall.dmi';
icon_state = "wood";
@@ -13323,8 +13303,8 @@
/obj/structure/flora/ausbushes/lavendergrass,
/obj/structure/flora/ausbushes/fernybush,
/turf/open/floor/plasteel{
- name = "plating";
- icon_state = "asteroid5"
+ icon_state = "asteroid5";
+ name = "plating"
},
/area/tdome/tdomeobserve)
"EH" = (
@@ -13591,7 +13571,6 @@
"Fr" = (
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
- dir = 2;
icon_state = "rightsecure";
name = "Thunderdome Booth";
req_access_txt = "109"
@@ -13731,8 +13710,7 @@
/area/tdome/tdomeobserve)
"FK" = (
/obj/machinery/door/airlock/centcom{
- name = "Thunderdome Backstage";
- opacity = 1
+ name = "Thunderdome Backstage"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -13984,9 +13962,9 @@
/area/tdome/tdomeobserve)
"Gr" = (
/obj/structure/window/reinforced{
- resistance_flags = 3;
color = "#008000";
- dir = 1
+ dir = 1;
+ resistance_flags = 3
},
/turf/open/lava,
/area/wizard_station)
@@ -14004,9 +13982,7 @@
/area/tdome/tdomeobserve)
"Gv" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
"Gw" = (
@@ -14016,12 +13992,9 @@
"Gx" = (
/obj/machinery/door/airlock/centcom{
name = "Thunderdome";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
"Gy" = (
@@ -14033,9 +14006,9 @@
resistance_flags = 3
},
/obj/structure/window/reinforced{
- resistance_flags = 3;
color = "#008000";
- dir = 1
+ dir = 1;
+ resistance_flags = 3
},
/turf/open/lava/airless,
/area/wizard_station)
@@ -14511,7 +14484,7 @@
/area/tdome/tdomeobserve)
"Hq" = (
/obj/machinery/firealarm{
- dir = 4;
+ dir = 8;
pixel_x = 24
},
/turf/open/floor/plasteel/white,
@@ -14554,7 +14527,7 @@
/area/tdome/tdomeobserve)
"Hu" = (
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/bar,
@@ -14823,12 +14796,9 @@
"HS" = (
/obj/machinery/door/airlock/centcom{
name = "Thunderdome Locker Room";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
"HT" = (
@@ -15148,7 +15118,6 @@
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
"Is" = (
-/obj/machinery/igniter/on,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/tdome/arena)
@@ -15176,12 +15145,9 @@
"Ix" = (
/obj/machinery/door/airlock/centcom{
name = "Thunderdome Administration";
- opacity = 1;
req_access_txt = "102"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/tdome/tdomeadmin)
@@ -15348,9 +15314,7 @@
/area/tdome/tdomeadmin)
"IS" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/tdome/tdomeadmin)
"IT" = (
@@ -15442,8 +15406,8 @@
/obj/structure/flora/ausbushes/lavendergrass,
/obj/structure/flora/ausbushes/fernybush,
/turf/open/floor/plasteel{
- name = "plating";
- icon_state = "asteroid5"
+ icon_state = "asteroid5";
+ name = "plating"
},
/area/tdome/tdomeadmin)
"Je" = (
@@ -15835,7 +15799,7 @@
icon_state = "plant-21"
},
/obj/machinery/firealarm{
- dir = 8;
+ dir = 4;
pixel_x = -24
},
/obj/effect/turf_decal/tile/neutral{
@@ -15878,6 +15842,14 @@
},
/turf/open/floor/plasteel/dark,
/area/tdome/tdomeadmin)
+"Kf" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/lighter,
+/obj/item/stack/sheet/mineral/wood{
+ amount = 10
+ },
+/turf/open/floor/carpet/red,
+/area/centcom/holding)
"Kg" = (
/turf/closed/indestructible/fakedoor{
name = "Thunderdome Admin"
@@ -15887,7 +15859,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
name = "Thunderdome Administration";
- opacity = 1;
req_access_txt = "102"
},
/obj/effect/turf_decal/stripes/line{
@@ -16199,7 +16170,6 @@
/area/centcom/evac)
"KL" = (
/obj/docking_port/stationary{
- dir = 1;
dwidth = 1;
height = 4;
id = "pod4_away";
@@ -16210,7 +16180,6 @@
/area/space)
"KM" = (
/obj/docking_port/stationary{
- dir = 1;
dwidth = 1;
height = 4;
id = "pod3_away";
@@ -16322,6 +16291,12 @@
},
/turf/open/floor/mineral/titanium/blue,
/area/centcom/evac)
+"Ln" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"Lp" = (
/obj/structure/chair{
dir = 4
@@ -16598,6 +16573,12 @@
"Mm" = (
/turf/open/floor/grass,
/area/centcom/holding)
+"Ms" = (
+/obj/effect/mob_spawn/human/ghostcafe{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"Mt" = (
/obj/structure/window/reinforced{
dir = 4
@@ -16701,6 +16682,13 @@
"MI" = (
/turf/open/floor/plating,
/area/syndicate_mothership)
+"MJ" = (
+/obj/structure/bed,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"MM" = (
/obj/structure/window/reinforced,
/turf/open/floor/carpet/black,
@@ -16767,12 +16755,9 @@
"Nk" = (
/obj/machinery/door/airlock/centcom{
name = "Thunderdome";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -16810,9 +16795,7 @@
/area/syndicate_mothership)
"Nv" = (
/obj/structure/table,
-/turf/open/floor/plasteel/cafeteria{
- dir = 2
- },
+/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
"Nw" = (
/obj/machinery/recharge_station,
@@ -16852,12 +16835,9 @@
"NG" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -16888,12 +16868,9 @@
/area/centcom/holding)
"NU" = (
/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 2
+ name = "CentCom"
},
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -16933,6 +16910,9 @@
/obj/machinery/deepfryer,
/turf/open/floor/plasteel/cafeteria,
/area/syndicate_mothership)
+"Of" = (
+/turf/open/floor/carpet/red,
+/area/centcom/holding)
"Oh" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -16942,8 +16922,7 @@
"Oj" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
+ name = "CentCom"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -16953,6 +16932,10 @@
},
/turf/open/floor/plasteel,
/area/centcom/control)
+"Ol" = (
+/obj/structure/table/wood/fancy,
+/turf/open/floor/wood,
+/area/centcom/holding)
"Om" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -16986,6 +16969,12 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark,
/area/centcom/supplypod)
+"Ox" = (
+/obj/machinery/door/airlock/wood/glass{
+ name = "Cryo"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"Oz" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -17121,7 +17110,9 @@
/turf/open/floor/wood,
/area/syndicate_mothership)
"Px" = (
-/obj/machinery/vr_sleeper,
+/obj/structure/mineral_door/paperframe{
+ name = "Arcade"
+ },
/turf/open/floor/wood,
/area/centcom/holding)
"PA" = (
@@ -17135,7 +17126,10 @@
/area/syndicate_mothership)
"PF" = (
/obj/machinery/vr_sleeper{
- dir = 1
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
},
/turf/open/floor/wood,
/area/centcom/holding)
@@ -17168,6 +17162,12 @@
/obj/machinery/autolathe,
/turf/open/floor/wood,
/area/centcom/holding)
+"PM" = (
+/obj/machinery/vending/clothing{
+ extended_inventory = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"PO" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/tile/green{
@@ -17246,6 +17246,11 @@
"Qe" = (
/turf/open/ai_visible,
/area/ai_multicam_room)
+"Qi" = (
+/obj/item/paicard,
+/obj/structure/table/wood,
+/turf/open/floor/engine/cult,
+/area/wizard_station)
"Qk" = (
/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/ppflowers,
@@ -17273,11 +17278,8 @@
/turf/open/floor/plasteel,
/area/syndicate_mothership)
"Qu" = (
-/obj/machinery/vr_sleeper{
- dir = 8
- },
-/obj/machinery/light{
- dir = 4
+/obj/machinery/door/airlock/wood/glass{
+ name = "Dorms"
},
/turf/open/floor/wood,
/area/centcom/holding)
@@ -17292,9 +17294,25 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/syndicate_mothership)
+"QC" = (
+/obj/machinery/door/airlock/wood{
+ name = "Bathroom"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"QE" = (
/turf/open/floor/plasteel,
/area/centcom/supplypod)
+"QF" = (
+/obj/machinery/button/door{
+ id = "Ninja3";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"QH" = (
/obj/machinery/chem_master/condimaster{
desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments.";
@@ -17330,6 +17348,12 @@
/obj/structure/window/reinforced/fulltile,
/turf/open/floor/grass,
/area/centcom/holding)
+"QN" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"QP" = (
/obj/machinery/computer/mech_bay_power_console{
dir = 1
@@ -17466,6 +17490,21 @@
/obj/item/tank/internals/plasmaman/belt/full,
/turf/open/floor/wood,
/area/centcom/holding)
+"Rq" = (
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#cee5d2"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"Ru" = (
+/obj/structure/fireplace,
+/turf/open/floor/carpet/red,
+/area/centcom/holding)
+"Rv" = (
+/obj/structure/dresser,
+/turf/open/floor/carpet/royalblue,
+/area/centcom/holding)
"Rz" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plating,
@@ -17480,9 +17519,20 @@
},
/turf/open/floor/holofloor,
/area/holodeck/rec_center/basketball)
-"RL" = (
-/obj/structure/mineral_door/paperframe{
- name = "Arcade"
+"RO" = (
+/obj/machinery/shower{
+ dir = 1
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/obj/structure/curtain,
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
+"RP" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja4";
+ name = "Dorm 4"
},
/turf/open/floor/wood,
/area/centcom/holding)
@@ -17508,6 +17558,12 @@
},
/turf/open/floor/wood,
/area/centcom/holding)
+"RX" = (
+/obj/structure/chair/comfy/brown{
+ color = "#596479"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"RZ" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -17618,9 +17674,7 @@
pixel_x = -3;
pixel_y = 6
},
-/turf/open/floor/plasteel/cafeteria{
- dir = 2
- },
+/turf/open/floor/plasteel/cafeteria,
/area/centcom/holding)
"SH" = (
/obj/effect/turf_decal/tile/green{
@@ -17648,6 +17702,9 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/space/basic,
/area/centcom/supplypod)
+"ST" = (
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"SU" = (
/obj/structure/table/wood,
/obj/item/camera/detective{
@@ -17686,10 +17743,27 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/centcom/holding)
+"SZ" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja3";
+ name = "Dorm 3"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"Tb" = (
/obj/structure/closet/crate/freezer/blood,
/turf/open/floor/wood,
/area/centcom/holding)
+"Tc" = (
+/obj/machinery/button/door{
+ id = "Ninja2";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"Tj" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -17804,6 +17878,10 @@
/obj/effect/landmark/holding_facility,
/turf/open/floor/wood,
/area/centcom/holding)
+"Uf" = (
+/obj/structure/closet/secure_closet,
+/turf/open/floor/wood,
+/area/centcom/holding)
"Ug" = (
/obj/machinery/door/poddoor/shuttledock{
checkdir = 1;
@@ -17861,15 +17939,15 @@
"Un" = (
/obj/machinery/door/airlock/centcom{
name = "Thunderdome";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
+"Ur" = (
+/turf/open/floor/carpet/royalblue,
+/area/centcom/holding)
"Uu" = (
/obj/machinery/light{
dir = 8
@@ -17895,6 +17973,13 @@
/obj/machinery/vending/cola,
/turf/open/floor/plasteel,
/area/centcom/supplypod)
+"UD" = (
+/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"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"UE" = (
/obj/structure/chair/stool/bar,
/turf/open/floor/wood,
@@ -17918,7 +18003,6 @@
"UO" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -17998,15 +18082,13 @@
dir = 8
},
/obj/machinery/door/window{
- name = "Tactical Toilet";
- icon_state = "right";
dir = 8;
+ icon_state = "right";
+ name = "Tactical Toilet";
opacity = 1
},
/obj/structure/window/reinforced/tinted,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
+/turf/open/floor/plasteel/freezer,
/area/syndicate_mothership)
"Vm" = (
/obj/machinery/gibber,
@@ -18124,7 +18206,6 @@
"Wc" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -18155,11 +18236,24 @@
"Wr" = (
/turf/open/floor/plasteel/dark,
/area/centcom/supplypod)
+"Ws" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Ninja6";
+ name = "Dorm 6"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"WC" = (
/obj/structure/table/reinforced,
/obj/item/pen,
/turf/open/floor/mineral/plastitanium/red,
/area/centcom/evac)
+"WE" = (
+/obj/machinery/vending/kink{
+ extended_inventory = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"WH" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/drinks/bottle/whiskey{
@@ -18170,12 +18264,9 @@
"WJ" = (
/obj/machinery/door/airlock/centcom{
name = "Thunderdome Administration";
- opacity = 1;
req_access_txt = "102"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -18194,6 +18285,16 @@
},
/turf/open/floor/wood,
/area/centcom/holding)
+"WN" = (
+/obj/machinery/button/door{
+ id = "Ninja6";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = 25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"WO" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -18205,7 +18306,6 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -18220,6 +18320,14 @@
/obj/structure/closet/syndicate/personal,
/turf/open/floor/wood,
/area/syndicate_mothership)
+"WV" = (
+/obj/structure/bed,
+/obj/item/bedsheet/hos{
+ desc = "A fancy red bedsheet.";
+ name = "red bedsheet"
+ },
+/turf/open/floor/carpet/red,
+/area/centcom/holding)
"WW" = (
/obj/machinery/processor,
/turf/open/floor/plasteel/cafeteria,
@@ -18232,9 +18340,7 @@
/turf/open/floor/grass,
/area/centcom/holding)
"Xe" = (
-/obj/machinery/vending/autodrobe{
- req_access_txt = "0"
- },
+/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/centcom/holding)
"Xg" = (
@@ -18260,9 +18366,8 @@
/turf/open/floor/mineral/plastitanium/red,
/area/syndicate_mothership)
"Xn" = (
-/obj/machinery/door/airlock/wood{
- req_one_access_txt = "0"
- },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
/turf/open/floor/wood,
/area/centcom/holding)
"Xo" = (
@@ -18287,20 +18392,15 @@
/turf/open/floor/plasteel,
/area/centcom/supplypod/loading/four)
"Xs" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
-/turf/open/floor/plating,
-/area/syndicate_mothership)
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/centcom/holding)
"Xt" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plasteel,
/area/centcom/control)
@@ -18314,6 +18414,10 @@
/obj/effect/turf_decal/tile/green,
/turf/open/floor/holofloor,
/area/holodeck/rec_center/firingrange)
+"Xw" = (
+/obj/structure/table/wood/fancy/royalblue,
+/turf/open/floor/wood,
+/area/centcom/holding)
"Xx" = (
/obj/machinery/light{
dir = 4
@@ -18332,6 +18436,16 @@
},
/turf/open/floor/plasteel,
/area/centcom/ferry)
+"XD" = (
+/obj/machinery/button/door{
+ id = "Ninja4";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = 25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"XE" = (
/obj/machinery/door/airlock/centcom{
name = "Kitchen";
@@ -18372,6 +18486,16 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"Ya" = (
+/obj/machinery/button/door{
+ id = "Ninja1";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"Yc" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
@@ -18428,12 +18552,9 @@
"Yt" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -18473,6 +18594,12 @@
/mob/living/simple_animal/chicken,
/turf/open/floor/grass,
/area/centcom/holding)
+"YO" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"YQ" = (
/obj/structure/table,
/obj/item/reagent_containers/glass/beaker,
@@ -18495,6 +18622,9 @@
},
/turf/open/floor/wood,
/area/centcom/holding)
+"YW" = (
+/turf/open/floor/plating,
+/area/centcom/holding)
"Za" = (
/obj/machinery/door/airlock/wood{
id_tag = "lmrestroom"
@@ -18529,11 +18659,10 @@
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
/area/syndicate_mothership)
-"Zt" = (
-/obj/machinery/vr_sleeper{
- dir = 1
+"Zu" = (
+/obj/machinery/vending/autodrobe/all_access{
+ extended_inventory = 1
},
-/obj/machinery/light,
/turf/open/floor/wood,
/area/centcom/holding)
"Zw" = (
@@ -18554,6 +18683,16 @@
/obj/effect/landmark/start/nukeop_leader,
/turf/open/floor/wood,
/area/syndicate_mothership)
+"ZE" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/structure/mirror{
+ pixel_x = 28
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/centcom/holding)
"ZF" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -18570,7 +18709,6 @@
"ZJ" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
@@ -18629,12 +18767,9 @@
"ZX" = (
/obj/machinery/door/airlock/centcom{
name = "CentCom Security";
- opacity = 1;
req_access_txt = "101"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
+/obj/effect/turf_decal/stripes/line,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
@@ -25747,7 +25882,7 @@ lI
lI
lI
Ax
-Bp
+Qi
qZ
qZ
Ax
@@ -39895,7 +40030,7 @@ aa
aa
aa
QV
-Xs
+Yc
MI
MI
MI
@@ -40409,7 +40544,7 @@ aa
aa
aa
QV
-Xs
+Yc
MI
MI
MI
@@ -40666,7 +40801,7 @@ aa
aa
aa
QV
-Xs
+Yc
MI
MI
MI
@@ -42755,17 +42890,17 @@ Nd
Nd
Nd
Nd
+Nd
+Nd
+Nd
+Nd
+Nd
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
@@ -43009,20 +43144,20 @@ CT
oV
CT
CT
+CT
oV
CT
Nd
+Xk
+Xk
+Xk
+Nd
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Uf
+Xk
+Xk
+Nd
aa
aa
aa
@@ -43268,18 +43403,18 @@ Xk
Xk
Xk
Xk
+Xk
+Nd
+Gs
+Xk
+HH
Nd
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+MJ
+Xk
+YW
+Nd
aa
aa
aa
@@ -43519,24 +43654,24 @@ UV
CV
Xk
NT
-Xk
+Dj
PF
+Dj
+Xk
+Dj
+PF
+Dj
+Nd
+Xk
Xk
-Px
Xk
-Zt
Nd
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+ma
+YW
+Xk
+Nd
aa
aa
aa
@@ -43775,25 +43910,25 @@ Nd
Gs
Xk
Xk
-RL
-Xk
-PF
-Xk
-Px
-Xk
-PF
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Nd
+Nd
+Px
+Nd
+Nd
+Nd
+Nd
+Nd
+Ox
+Nd
+Nd
+Nd
+Nd
+Nd
+yS
+Nd
+Nd
aa
aa
aa
@@ -44034,23 +44169,23 @@ CV
Xk
NT
Xk
-PF
+Yo
Xk
-Px
Xk
-Zt
+Xk
+Yo
+Xk
+Nd
+Xk
+Xk
+Yo
+Xk
+Xk
+Yo
+Xk
+Xk
+WE
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -44277,7 +44412,7 @@ Nd
Xk
Yo
Xk
-Xn
+XL
Xk
Xk
Tn
@@ -44289,13 +44424,24 @@ NT
Zh
Xk
Xk
-NT
+Re
Xk
Xk
Xk
Xk
Xk
Xk
+Xk
+Qu
+Xk
+Xk
+Xk
+Xk
+Xk
+Xk
+Xk
+Xk
+Zu
Nd
aa
aa
@@ -44303,17 +44449,6 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
KH
KH
KS
@@ -44547,24 +44682,24 @@ Ym
CV
Xk
NT
-Dj
-Qu
-Dj
-Dj
-Qu
-Dj
+Xk
+Xx
+Xk
+Xk
+Xk
+Xx
+Xk
+Nd
+Xk
+Xk
+Xk
+Xk
+Xk
+Xk
+Xk
+Xk
+PM
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -44811,17 +44946,17 @@ Nd
Nd
Nd
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Nd
+Nd
+Nd
+Rq
+HH
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
@@ -45068,17 +45203,17 @@ OU
RS
VF
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+UD
+tZ
+SY
+Nd
+Xk
+Xk
+Nd
+SY
+Ri
+UD
+Nd
aa
aa
aa
@@ -45325,17 +45460,17 @@ Xk
Xk
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Gs
+Xk
+Xk
+lS
+Xk
+Xk
+RP
+Xk
+Xk
+HH
+Nd
aa
aa
aa
@@ -45582,17 +45717,17 @@ XM
XM
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Xn
+Xk
+Ya
+Nd
+Xk
+Xk
+Nd
+XD
+Xk
+Xn
+Nd
aa
aa
aa
@@ -45839,17 +45974,17 @@ Po
ZU
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Nd
+Nd
+Nd
+Xk
+Xk
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
@@ -46096,17 +46231,17 @@ Sd
MM
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+UD
+tZ
+SY
+Nd
+Xk
+Xk
+Nd
+SY
+Ri
+UD
+Nd
aa
aa
aa
@@ -46353,17 +46488,17 @@ Sd
MM
TM
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Gs
+Xk
+Xk
+uh
+Xk
+Xk
+zW
+Xk
+Xk
+HH
+Nd
aa
aa
aa
@@ -46610,17 +46745,17 @@ Sd
MM
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Xn
+Xk
+Tc
+Nd
+Xk
+Xk
+Nd
+AC
+Xk
+Xn
+Nd
aa
aa
aa
@@ -46867,17 +47002,17 @@ PA
Pl
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Nd
+Nd
+Nd
+Rq
+HH
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
@@ -47124,17 +47259,17 @@ GY
GY
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Xs
+Ol
+YO
+Nd
+Xk
+Xk
+Nd
+RX
+Xw
+qP
+Nd
aa
aa
aa
@@ -47381,17 +47516,17 @@ Xk
Xk
Xk
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Gs
+Xk
+Xk
+SZ
+Xk
+Xk
+Ws
+Xk
+Xk
+HH
+Nd
aa
aa
aa
@@ -47628,7 +47763,7 @@ Xk
GY
NT
Xk
-Xk
+Ms
Xk
NT
vt
@@ -47638,17 +47773,17 @@ Tb
Uh
tW
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Ru
+Of
+QF
+Nd
+Xk
+Xk
+Nd
+WN
+Ur
+wj
+Nd
aa
aa
aa
@@ -47895,17 +48030,17 @@ Nd
Nd
Nd
Nd
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Kf
+WV
+Xk
+Nd
+Nd
+Nd
+Nd
+Xk
+zY
+Rv
+Nd
aa
aa
aa
@@ -48151,18 +48286,18 @@ aa
aa
aa
aa
+Nd
+Nd
+Nd
+QC
+Nd
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+QC
+Nd
+Nd
+Nd
aa
aa
aa
@@ -48408,18 +48543,18 @@ aa
aa
aa
aa
+Nd
+Ln
+ST
+ST
+Nd
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+ST
+ST
+Ln
+Nd
aa
aa
aa
@@ -48665,18 +48800,18 @@ aa
aa
aa
aa
+Nd
+xO
+QN
+ZE
+Nd
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+ZE
+QN
+RO
+Nd
aa
aa
aa
@@ -48922,18 +49057,18 @@ aa
aa
aa
aa
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+Nd
+Nd
+Nd
+Nd
+Nd
aa
aa
aa
diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm
new file mode 100644
index 0000000000..b71da1fba0
--- /dev/null
+++ b/_maps/templates/shelter_3.dmm
@@ -0,0 +1,414 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/closed/wall/mineral/titanium/survival/pod,
+/area/survivalpod)
+"b" = (
+/obj/structure/sign/mining/survival{
+ dir = 1
+ },
+/turf/closed/wall/mineral/titanium/survival/pod,
+/area/survivalpod)
+"c" = (
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"d" = (
+/obj/structure/sign/mining/survival{
+ dir = 1
+ },
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"e" = (
+/obj/structure/sign/mining/survival{
+ dir = 8
+ },
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"f" = (
+/obj/structure/table/wood/fancy/black,
+/obj/machinery/chem_dispenser/drinks,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"g" = (
+/obj/structure/table/wood/fancy/black,
+/obj/machinery/chem_dispenser/drinks/beer,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"h" = (
+/obj/machinery/vending/boozeomat,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"i" = (
+/obj/item/book/manual/wiki/barman_recipes,
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/item/reagent_containers/rag,
+/obj/structure/table/wood/fancy/black,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"j" = (
+/obj/structure/table/wood/fancy/black,
+/obj/item/clipboard,
+/obj/item/toy/figure/bartender,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"k" = (
+/obj/structure/table/wood/fancy/black,
+/obj/item/storage/fancy/cigarettes/cigars,
+/obj/item/storage/fancy/cigarettes/cigars/cohiba{
+ pixel_y = 4
+ },
+/obj/item/storage/fancy/cigarettes/cigars/havana{
+ pixel_y = 8
+ },
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"l" = (
+/obj/structure/table/wood/fancy/black,
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"m" = (
+/obj/structure/closet/secure_closet/bar,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"n" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/machinery/disposal/bin,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"o" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/turf/closed/wall/mineral/titanium/survival/pod,
+/area/survivalpod)
+"p" = (
+/obj/machinery/door/airlock/survival_pod/glass{
+ req_access_txt = "25"
+ },
+/obj/structure/fans/tiny,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"q" = (
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"r" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"s" = (
+/obj/structure/table/reinforced,
+/obj/item/lighter{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/lighter,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"t" = (
+/obj/structure/table/reinforced,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"u" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/box/matches{
+ pixel_x = -4;
+ pixel_y = 8
+ },
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"v" = (
+/obj/machinery/door/window/survival_pod{
+ req_access_txt = "25"
+ },
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"w" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"x" = (
+/obj/structure/chair/stool/bar,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"y" = (
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"z" = (
+/obj/machinery/vending/cigarette/beach,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"A" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/machinery/disposal/bin,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"B" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"C" = (
+/obj/structure/window/reinforced/survival_pod{
+ dir = 8
+ },
+/obj/structure/window/reinforced/survival_pod{
+ dir = 4
+ },
+/obj/structure/window/reinforced/survival_pod{
+ dir = 1
+ },
+/obj/structure/window/reinforced/survival_pod,
+/obj/structure/grille,
+/turf/open/floor/pod/dark,
+/area/survivalpod)
+"D" = (
+/obj/structure/chair/comfy/black,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"E" = (
+/obj/machinery/door/airlock/survival_pod,
+/turf/open/floor/pod/light,
+/area/survivalpod)
+"F" = (
+/obj/structure/table/wood/fancy,
+/obj/item/reagent_containers/food/condiment/peppermill{
+ pixel_x = -4;
+ pixel_y = 12
+ },
+/obj/item/reagent_containers/food/condiment/saltshaker{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"G" = (
+/obj/structure/urinal{
+ pixel_y = 24
+ },
+/turf/open/floor/pod/light,
+/area/survivalpod)
+"H" = (
+/turf/open/floor/pod/light,
+/area/survivalpod)
+"I" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/pod/light,
+/area/survivalpod)
+"J" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"K" = (
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"L" = (
+/obj/machinery/vending/snack/random,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"M" = (
+/obj/machinery/light,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+"N" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/pod/light,
+/area/survivalpod)
+"O" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/turf/closed/wall/mineral/titanium/survival/pod,
+/area/survivalpod)
+"P" = (
+/obj/structure/sign/mining/survival,
+/turf/closed/wall/mineral/titanium/survival/pod,
+/area/survivalpod)
+"Q" = (
+/obj/structure/sign/mining/survival,
+/turf/closed/wall/mineral/titanium/survival/nodiagonal,
+/area/survivalpod)
+"R" = (
+/obj/machinery/door/airlock/survival_pod/glass,
+/obj/structure/fans/tiny,
+/turf/open/floor/carpet/black,
+/area/survivalpod)
+
+(1,1,1) = {"
+a
+e
+p
+e
+c
+e
+C
+e
+C
+e
+a
+"}
+(2,1,1) = {"
+b
+f
+q
+s
+x
+y
+D
+F
+K
+L
+P
+"}
+(3,1,1) = {"
+c
+g
+q
+t
+x
+y
+y
+y
+y
+M
+c
+"}
+(4,1,1) = {"
+d
+h
+q
+t
+x
+y
+D
+F
+K
+y
+Q
+"}
+(5,1,1) = {"
+c
+i
+q
+u
+x
+y
+D
+F
+K
+y
+c
+"}
+(6,1,1) = {"
+d
+j
+q
+t
+x
+y
+y
+y
+y
+y
+R
+"}
+(7,1,1) = {"
+c
+k
+q
+t
+x
+y
+c
+c
+c
+c
+c
+"}
+(8,1,1) = {"
+d
+l
+q
+t
+x
+y
+c
+G
+H
+H
+Q
+"}
+(9,1,1) = {"
+c
+m
+q
+v
+y
+y
+E
+H
+c
+E
+c
+"}
+(10,1,1) = {"
+b
+n
+q
+t
+z
+A
+c
+I
+c
+N
+P
+"}
+(11,1,1) = {"
+a
+o
+r
+w
+r
+B
+c
+J
+c
+O
+a
+"}
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 41b5deb302..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
@@ -149,9 +150,9 @@
//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,15C telecommunications. also used for xenobiology slime killrooms
+#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.15C snow and ice turfs
+#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
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/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/components.dm b/code/__DEFINES/components.dm
index 4f56b07fe7..7b2dd8663c 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -36,8 +36,10 @@
//////////////////////////////////////////////////////////////////
// /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_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
@@ -52,6 +54,10 @@
#define EXAMINE_POSITION_BEFORE 2
//End positions
#define COMPONENT_EXNAME_CHANGED 1
+#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" //from base of atom/update_icon(): ()
+ #define COMSIG_ATOM_NO_UPDATE_ICON_STATE 1
+ #define COMSIG_ATOM_NO_UPDATE_OVERLAYS 2
+#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays)
#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom)
#define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
#define COMPONENT_ATOM_BLOCK_EXIT 1
@@ -140,19 +146,22 @@
#define HEARING_RAW_MESSAGE 4
/* #define HEARING_RADIO_FREQ 5
#define HEARING_SPANS 6
- #define HEARING_MESSAGE_MODE 7
+ #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)
@@ -164,7 +173,9 @@
#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
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 15c7af5749..72e6a12f84 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -11,6 +11,7 @@
#define GROSS (1<<10)
#define TOXIC (1<<11)
#define PINEAPPLE (1<<12)
+#define BREAKFAST (1<<13)
#define DRINK_NICE 1
#define DRINK_GOOD 2
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 6f433374e7..55bfcaff79 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))
@@ -222,6 +224,8 @@ GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list(
#define isorgan(A) (istype(A, /obj/item/organ))
+#define isclothing(A) (istype(A, /obj/item/clothing))
+
GLOBAL_LIST_INIT(pointed_types, typecacheof(list(
/obj/item/pen,
/obj/item/screwdriver,
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/melee.dm b/code/__DEFINES/melee.dm
index cb4a433211..b166b9d21a 100644
--- a/code/__DEFINES/melee.dm
+++ b/code/__DEFINES/melee.dm
@@ -7,4 +7,5 @@
#define MARTIALART_MUSHPUNCH "mushroom punch"
#define MARTIALART_KRAVMAGA "krav maga"
#define MARTIALART_CQC "CQC"
-#define MARTIALART_PLASMAFIST "plasma fist"
\ No newline at end of file
+#define MARTIALART_PLASMAFIST "plasma fist"
+#define MARTIALART_RISINGBASS "rising bass"
\ 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 94c2c372f0..831f73ac74 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -41,6 +41,7 @@
#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 IGNORE_HAT_TOSS (1<<8) //Hats with negative effects when worn (i.e the tinfoil hat).
+#define SCAN_REAGENTS (1<<9) // Allows helmets and glasses to scan reagents.
// Flags for the organ_flags var on /obj/item/organ
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/status_effects.dm b/code/__DEFINES/status_effects.dm
index f9360117bb..6d52f4640c 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -46,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
@@ -68,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
@@ -83,6 +85,9 @@
#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 14dbd97ffa..439b3d1493 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"
@@ -117,6 +118,7 @@
#define TRAIT_PARALYSIS_R_ARM "para-r-arm"
#define TRAIT_PARALYSIS_L_LEG "para-l-leg"
#define TRAIT_PARALYSIS_R_LEG "para-r-leg"
+#define TRAIT_DISK_VERIFIER "disk-verifier"
#define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech"
#define TRAIT_SOOTHED_THROAT "soothed-throat"
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
@@ -127,6 +129,12 @@
#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
@@ -217,5 +225,9 @@
#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 RISING_BASS_TRAIT "rising_bass"
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
#define MADE_UNCLONEABLE "made-uncloneable"
+#define NUKEOP_TRAIT "nuke-op"
+#define DEATHSQUAD_TRAIT "deathsquad"
diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index f7131e63fa..4a86f57fcd 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -95,4 +95,22 @@ GLOBAL_VAR_INIT(cmp_field, "name")
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)
\ No newline at end of file
+ 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/mobs.dm b/code/__HELPERS/mobs.dm
index 0d6345dae2..ce8b2e4cf0 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -76,6 +76,8 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_wings, GLOB.insect_wings_list)
if(!GLOB.insect_fluffs_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_fluff, GLOB.insect_fluffs_list)
+ if(!GLOB.insect_markings_list.len)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/insect_markings, GLOB.insect_markings_list)
//CIT CHANGES - genitals and such
if(!GLOB.cock_shapes_list.len)
@@ -151,6 +153,7 @@
"caps" = pick(GLOB.caps_list),
"insect_wings" = pick(GLOB.insect_wings_list),
"insect_fluff" = "None",
+ "insect_markings" = pick(GLOB.insect_markings_list),
"taur" = "None",
"mam_body_markings" = pick(snowflake_markings_list),
"mam_ears" = pick(snowflake_ears_list),
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index b899d7f6ab..27f1a81fef 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -320,6 +320,8 @@
parts += "[FOURSPACES][FOURSPACES][str]"
for(var/entry in mode.threat_tallies)
parts += "[FOURSPACES][FOURSPACES][entry] added [mode.threat_tallies[entry]]"
+ 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/sorts/__main.dm b/code/__HELPERS/sorts/__main.dm
index 768622818f..493f7b2096 100644
--- a/code/__HELPERS/sorts/__main.dm
+++ b/code/__HELPERS/sorts/__main.dm
@@ -31,58 +31,58 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
var/list/runLens = list()
- proc/timSort(start, end)
- runBases.Cut()
- runLens.Cut()
+/datum/sortInstance/proc/timSort(start, end)
+ runBases.Cut()
+ runLens.Cut()
- var/remaining = end - start
+ var/remaining = end - start
- //If array is small, do a 'mini-TimSort' with no merges
- if(remaining < MIN_MERGE)
- var/initRunLen = countRunAndMakeAscending(start, end)
- binarySort(start, end, start+initRunLen)
- return
+ //If array is small, do a 'mini-TimSort' with no merges
+ if(remaining < MIN_MERGE)
+ var/initRunLen = countRunAndMakeAscending(start, end)
+ binarySort(start, end, start+initRunLen)
+ return
- //March over the array finding natural runs
- //Extend any short natural runs to runs of length minRun
- var/minRun = minRunLength(remaining)
+ //March over the array finding natural runs
+ //Extend any short natural runs to runs of length minRun
+ var/minRun = minRunLength(remaining)
- do
- //identify next run
- var/runLen = countRunAndMakeAscending(start, end)
+ do
+ //identify next run
+ var/runLen = countRunAndMakeAscending(start, end)
- //if run is short, extend to min(minRun, remaining)
- if(runLen < minRun)
- var/force = (remaining <= minRun) ? remaining : minRun
+ //if run is short, extend to min(minRun, remaining)
+ if(runLen < minRun)
+ var/force = (remaining <= minRun) ? remaining : minRun
- binarySort(start, start+force, start+runLen)
- runLen = force
+ binarySort(start, start+force, start+runLen)
+ runLen = force
- //add data about run to queue
- runBases.Add(start)
- runLens.Add(runLen)
+ //add data about run to queue
+ runBases.Add(start)
+ runLens.Add(runLen)
- //maybe merge
- mergeCollapse()
+ //maybe merge
+ mergeCollapse()
- //Advance to find next run
- start += runLen
- remaining -= runLen
+ //Advance to find next run
+ start += runLen
+ remaining -= runLen
- while(remaining > 0)
+ while(remaining > 0)
- //Merge all remaining runs to complete sort
- //ASSERT(start == end)
- mergeForceCollapse();
- //ASSERT(runBases.len == 1)
+ //Merge all remaining runs to complete sort
+ //ASSERT(start == end)
+ mergeForceCollapse();
+ //ASSERT(runBases.len == 1)
- //reset minGallop, for successive calls
- minGallop = MIN_GALLOP
+ //reset minGallop, for successive calls
+ minGallop = MIN_GALLOP
- return L
+ return L
- /*
+/*
Sorts the specified portion of the specified array using a binary
insertion sort. This is the best method for sorting small numbers
of elements. It requires O(n log n) compares, but O(n^2) data
@@ -95,33 +95,33 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
lo the index of the first element in the range to be sorted
hi the index after the last element in the range to be sorted
start the index of the first element in the range that is not already known to be sorted
- */
- proc/binarySort(lo, hi, start)
- //ASSERT(lo <= start && start <= hi)
- if(start <= lo)
- start = lo + 1
+*/
+/datum/sortInstance/proc/binarySort(lo, hi, start)
+ //ASSERT(lo <= start && start <= hi)
+ if(start <= lo)
+ start = lo + 1
- for(,start < hi, ++start)
- var/pivot = fetchElement(L,start)
+ for(,start < hi, ++start)
+ var/pivot = fetchElement(L,start)
- //set left and right to the index where pivot belongs
- var/left = lo
- var/right = start
- //ASSERT(left <= right)
+ //set left and right to the index where pivot belongs
+ var/left = lo
+ var/right = start
+ //ASSERT(left <= right)
- //[lo, left) elements <= pivot < [right, start) elements
- //in other words, find where the pivot element should go using bisection search
- while(left < right)
- var/mid = (left + right) >> 1 //round((left+right)/2)
- if(call(cmp)(fetchElement(L,mid), pivot) > 0)
- right = mid
- else
- left = mid+1
+ //[lo, left) elements <= pivot < [right, start) elements
+ //in other words, find where the pivot element should go using bisection search
+ while(left < right)
+ var/mid = (left + right) >> 1 //round((left+right)/2)
+ if(call(cmp)(fetchElement(L,mid), pivot) > 0)
+ right = mid
+ else
+ left = mid+1
- //ASSERT(left == right)
- moveElement(L, start, left) //move pivot element to correct location in the sorted range
+ //ASSERT(left == right)
+ moveElement(L, start, left) //move pivot element to correct location in the sorted range
- /*
+/*
Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front
A run is the longest ascending sequence with:
@@ -132,514 +132,514 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
For its intended use in a stable mergesort, the strictness of the
definition of "descending" is needed so that the call can safely
reverse a descending sequence without violating stability.
- */
- proc/countRunAndMakeAscending(lo, hi)
- //ASSERT(lo < hi)
+*/
+/datum/sortInstance/proc/countRunAndMakeAscending(lo, hi)
+ //ASSERT(lo < hi)
- var/runHi = lo + 1
- if(runHi >= hi)
- return 1
+ var/runHi = lo + 1
+ if(runHi >= hi)
+ return 1
- var/last = fetchElement(L,lo)
- var/current = fetchElement(L,runHi++)
+ var/last = fetchElement(L,lo)
+ var/current = fetchElement(L,runHi++)
- if(call(cmp)(current, last) < 0)
- while(runHi < hi)
- last = current
- current = fetchElement(L,runHi)
- if(call(cmp)(current, last) >= 0)
- break
- ++runHi
- reverseRange(L, lo, runHi)
- else
- while(runHi < hi)
- last = current
- current = fetchElement(L,runHi)
- if(call(cmp)(current, last) < 0)
- break
- ++runHi
+ if(call(cmp)(current, last) < 0)
+ while(runHi < hi)
+ last = current
+ current = fetchElement(L,runHi)
+ if(call(cmp)(current, last) >= 0)
+ break
+ ++runHi
+ reverseRange(L, lo, runHi)
+ else
+ while(runHi < hi)
+ last = current
+ current = fetchElement(L,runHi)
+ if(call(cmp)(current, last) < 0)
+ break
+ ++runHi
- return runHi - lo
+ return runHi - lo
- //Returns the minimum acceptable run length for an array of the specified length.
- //Natural runs shorter than this will be extended with binarySort
- proc/minRunLength(n)
- //ASSERT(n >= 0)
- var/r = 0 //becomes 1 if any bits are shifted off
- while(n >= MIN_MERGE)
- r |= (n & 1)
- n >>= 1
- return n + r
+//Returns the minimum acceptable run length for an array of the specified length.
+//Natural runs shorter than this will be extended with binarySort
+/datum/sortInstance/proc/minRunLength(n)
+ //ASSERT(n >= 0)
+ var/r = 0 //becomes 1 if any bits are shifted off
+ while(n >= MIN_MERGE)
+ r |= (n & 1)
+ n >>= 1
+ return n + r
- //Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished:
- // runLen[i-3] > runLen[i-2] + runLen[i-1]
- // runLen[i-2] > runLen[i-1]
- //This method is called each time a new run is pushed onto the stack.
- //So the invariants are guaranteed to hold for i= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
- if(runLens[n-1] < runLens[n+1])
- --n
- mergeAt(n)
- else if(runLens[n] <= runLens[n+1])
- mergeAt(n)
- else
- break //Invariant is established
-
-
- //Merges all runs on the stack until only one remains.
- //Called only once, to finalise the sort
- proc/mergeForceCollapse()
- while(runBases.len >= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] < runLens[n+1])
+//Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished:
+// runLen[i-3] > runLen[i-2] + runLen[i-1]
+// runLen[i-2] > runLen[i-1]
+//This method is called each time a new run is pushed onto the stack.
+//So the invariants are guaranteed to hold for i= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
+ if(runLens[n-1] < runLens[n+1])
--n
mergeAt(n)
-
-
- //Merges the two consecutive runs at stack indices i and i+1
- //Run i must be the penultimate or antepenultimate run on the stack
- //In other words, i must be equal to stackSize-2 or stackSize-3
- proc/mergeAt(i)
- //ASSERT(runBases.len >= 2)
- //ASSERT(i >= 1)
- //ASSERT(i == runBases.len - 1 || i == runBases.len - 2)
-
- var/base1 = runBases[i]
- var/base2 = runBases[i+1]
- var/len1 = runLens[i]
- var/len2 = runLens[i+1]
-
- //ASSERT(len1 > 0 && len2 > 0)
- //ASSERT(base1 + len1 == base2)
-
- //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
- //(which isn't involved in this merge). The current run (i+1) goes away in any case.
- runLens[i] += runLens[i+1]
- runLens.Cut(i+1, i+2)
- runBases.Cut(i+1, i+2)
-
-
- //Find where the first element of run2 goes in run1.
- //Prior elements in run1 can be ignored (because they're already in place)
- var/k = gallopRight(fetchElement(L,base2), base1, len1, 0)
- //ASSERT(k >= 0)
- base1 += k
- len1 -= k
- if(len1 == 0)
- return
-
- //Find where the last element of run1 goes in run2.
- //Subsequent elements in run2 can be ignored (because they're already in place)
- len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1)
- //ASSERT(len2 >= 0)
- if(len2 == 0)
- return
-
- //Merge remaining runs, using tmp array with min(len1, len2) elements
- if(len1 <= len2)
- mergeLo(base1, len1, base2, len2)
+ else if(runLens[n] <= runLens[n+1])
+ mergeAt(n)
else
- mergeHi(base1, len1, base2, len2)
+ break //Invariant is established
- /*
- Locates the position to insert key within the specified sorted range
- If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements
+//Merges all runs on the stack until only one remains.
+//Called only once, to finalise the sort
+/datum/sortInstance/proc/mergeForceCollapse()
+ while(runBases.len >= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] < runLens[n+1])
+ --n
+ mergeAt(n)
- key the element to be inserted into the sorted range
- base the index of the first element of the sorted range
- len the length of the sorted range, must be greater than 0
- hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint
- Returns the index at which to insert element 'key'
- */
- proc/gallopLeft(key, base, len, hint)
- //ASSERT(len > 0 && hint >= 0 && hint < len)
+//Merges the two consecutive runs at stack indices i and i+1
+//Run i must be the penultimate or antepenultimate run on the stack
+//In other words, i must be equal to stackSize-2 or stackSize-3
+/datum/sortInstance/proc/mergeAt(i)
+ //ASSERT(runBases.len >= 2)
+ //ASSERT(i >= 1)
+ //ASSERT(i == runBases.len - 1 || i == runBases.len - 2)
- var/lastOffset = 0
- var/offset = 1
- if(call(cmp)(key, fetchElement(L,base+hint)) > 0)
- var/maxOffset = len - hint
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0)
- lastOffset = offset
- offset = (offset << 1) + 1
+ var/base1 = runBases[i]
+ var/base2 = runBases[i+1]
+ var/len1 = runLens[i]
+ var/len2 = runLens[i+1]
- if(offset > maxOffset)
- offset = maxOffset
+ //ASSERT(len1 > 0 && len2 > 0)
+ //ASSERT(base1 + len1 == base2)
- lastOffset += hint
- offset += hint
+ //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
+ //(which isn't involved in this merge). The current run (i+1) goes away in any case.
+ runLens[i] += runLens[i+1]
+ runLens.Cut(i+1, i+2)
+ runBases.Cut(i+1, i+2)
- else
- var/maxOffset = hint + 1
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0)
- lastOffset = offset
- offset = (offset << 1) + 1
- if(offset > maxOffset)
- offset = maxOffset
+ //Find where the first element of run2 goes in run1.
+ //Prior elements in run1 can be ignored (because they're already in place)
+ var/k = gallopRight(fetchElement(L,base2), base1, len1, 0)
+ //ASSERT(k >= 0)
+ base1 += k
+ len1 -= k
+ if(len1 == 0)
+ return
- var/temp = lastOffset
- lastOffset = hint - offset
- offset = hint - temp
+ //Find where the last element of run1 goes in run2.
+ //Subsequent elements in run2 can be ignored (because they're already in place)
+ len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1)
+ //ASSERT(len2 >= 0)
+ if(len2 == 0)
+ return
- //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len)
+ //Merge remaining runs, using tmp array with min(len1, len2) elements
+ if(len1 <= len2)
+ mergeLo(base1, len1, base2, len2)
+ else
+ mergeHi(base1, len1, base2, len2)
- //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than
- //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset]
- ++lastOffset
- while(lastOffset < offset)
- var/m = lastOffset + ((offset - lastOffset) >> 1)
- if(call(cmp)(key, fetchElement(L,base+m)) > 0)
- lastOffset = m + 1
- else
- offset = m
+/*
+ Locates the position to insert key within the specified sorted range
+ If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements
- //ASSERT(lastOffset == offset)
- return offset
+ key the element to be inserted into the sorted range
+ base the index of the first element of the sorted range
+ len the length of the sorted range, must be greater than 0
+ hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint
- /**
- * Like gallopLeft, except that if the range contains an element equal to
- * key, gallopRight returns the index after the rightmost equal element.
- *
- * @param key the key whose insertion point to search for
- * @param a the array in which to search
- * @param base the index of the first element in the range
- * @param len the length of the range; must be > 0
- * @param hint the index at which to begin the search, 0 <= hint < n.
- * The closer hint is to the result, the faster this method will run.
- * @param c the comparator used to order the range, and to search
- * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k]
- */
- proc/gallopRight(key, base, len, hint)
- //ASSERT(len > 0 && hint >= 0 && hint < len)
+ Returns the index at which to insert element 'key'
+*/
+/datum/sortInstance/proc/gallopLeft(key, base, len, hint)
+ //ASSERT(len > 0 && hint >= 0 && hint < len)
- var/offset = 1
- var/lastOffset = 0
- if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint]
- var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1))
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards
- lastOffset = offset
- offset = (offset << 1) + 1 //1 3 7 15
+ var/lastOffset = 0
+ var/offset = 1
+ if(call(cmp)(key, fetchElement(L,base+hint)) > 0)
+ var/maxOffset = len - hint
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0)
+ lastOffset = offset
+ offset = (offset << 1) + 1
- if(offset > maxOffset)
- offset = maxOffset
+ if(offset > maxOffset)
+ offset = maxOffset
- var/temp = lastOffset
- lastOffset = hint - offset
- offset = hint - temp
+ lastOffset += hint
+ offset += hint
- else //key > L[base+hint]
- var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint))
- while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0)
- lastOffset = offset
- offset = (offset << 1) + 1
+ else
+ var/maxOffset = hint + 1
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0)
+ lastOffset = offset
+ offset = (offset << 1) + 1
- if(offset > maxOffset)
- offset = maxOffset
+ if(offset > maxOffset)
+ offset = maxOffset
- lastOffset += hint
- offset += hint
+ var/temp = lastOffset
+ lastOffset = hint - offset
+ offset = hint - temp
//ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len)
- ++lastOffset
- while(lastOffset < offset)
- var/m = lastOffset + ((offset - lastOffset) >> 1)
+ //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than
+ //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset]
+ ++lastOffset
+ while(lastOffset < offset)
+ var/m = lastOffset + ((offset - lastOffset) >> 1)
- if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m]
- offset = m
- else //key > L[base+m]
- lastOffset = m + 1
+ if(call(cmp)(key, fetchElement(L,base+m)) > 0)
+ lastOffset = m + 1
+ else
+ offset = m
- //ASSERT(lastOffset == offset)
+ //ASSERT(lastOffset == offset)
+ return offset
- return offset
+/**
+ * Like gallopLeft, except that if the range contains an element equal to
+ * key, gallopRight returns the index after the rightmost equal element.
+ *
+ * @param key the key whose insertion point to search for
+ * @param a the array in which to search
+ * @param base the index of the first element in the range
+ * @param len the length of the range; must be > 0
+ * @param hint the index at which to begin the search, 0 <= hint < n.
+ * The closer hint is to the result, the faster this method will run.
+ * @param c the comparator used to order the range, and to search
+ * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k]
+ */
+/datum/sortInstance/proc/gallopRight(key, base, len, hint)
+ //ASSERT(len > 0 && hint >= 0 && hint < len)
+
+ var/offset = 1
+ var/lastOffset = 0
+ if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint]
+ var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1))
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards
+ lastOffset = offset
+ offset = (offset << 1) + 1 //1 3 7 15
+
+ if(offset > maxOffset)
+ offset = maxOffset
+
+ var/temp = lastOffset
+ lastOffset = hint - offset
+ offset = hint - temp
+
+ else //key > L[base+hint]
+ var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint))
+ while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0)
+ lastOffset = offset
+ offset = (offset << 1) + 1
+
+ if(offset > maxOffset)
+ offset = maxOffset
+
+ lastOffset += hint
+ offset += hint
+
+ //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len)
+
+ ++lastOffset
+ while(lastOffset < offset)
+ var/m = lastOffset + ((offset - lastOffset) >> 1)
+
+ if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m]
+ offset = m
+ else //key > L[base+m]
+ lastOffset = m + 1
+
+ //ASSERT(lastOffset == offset)
+
+ return offset
- //Merges two adjacent runs in-place in a stable fashion.
- //For performance this method should only be called when len1 <= len2!
- proc/mergeLo(base1, len1, base2, len2)
- //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
+//Merges two adjacent runs in-place in a stable fashion.
+//For performance this method should only be called when len1 <= len2!
+/datum/sortInstance/proc/mergeLo(base1, len1, base2, len2)
+ //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
- var/cursor1 = base1
- var/cursor2 = base2
+ var/cursor1 = base1
+ var/cursor2 = base2
- //degenerate cases
- if(len2 == 1)
- moveElement(L, cursor2, cursor1)
- return
+ //degenerate cases
+ if(len2 == 1)
+ moveElement(L, cursor2, cursor1)
+ return
- if(len1 == 1)
- moveElement(L, cursor1, cursor2+len2)
- return
+ if(len1 == 1)
+ moveElement(L, cursor1, cursor2+len2)
+ return
- //Move first element of second run
- moveElement(L, cursor2++, cursor1++)
- --len2
+ //Move first element of second run
+ moveElement(L, cursor2++, cursor1++)
+ --len2
- outer:
- while(1)
- var/count1 = 0 //# of times in a row that first run won
- var/count2 = 0 // " " " " " " second run won
+ outer:
+ while(1)
+ var/count1 = 0 //# of times in a row that first run won
+ var/count2 = 0 // " " " " " " second run won
- //do the straightfoward thin until one run starts winning consistently
+ //do the straightfoward thin until one run starts winning consistently
- do
- //ASSERT(len1 > 1 && len2 > 0)
- if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
- moveElement(L, cursor2++, cursor1++)
- --len2
+ do
+ //ASSERT(len1 > 1 && len2 > 0)
+ if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
+ moveElement(L, cursor2++, cursor1++)
+ --len2
- ++count2
- count1 = 0
+ ++count2
+ count1 = 0
- if(len2 == 0)
- break outer
- else
- ++cursor1
-
- ++count1
- count2 = 0
-
- if(--len1 == 1)
- break outer
-
- while((count1 | count2) < minGallop)
-
-
- //one run is winning consistently so galloping may provide huge benifits
- //so try galloping, until such time as the run is no longer consistently winning
- do
- //ASSERT(len1 > 1 && len2 > 0)
-
- count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0)
- if(count1)
- cursor1 += count1
- len1 -= count1
-
- if(len1 <= 1)
- break outer
-
- moveElement(L, cursor2, cursor1)
- ++cursor2
- ++cursor1
- if(--len2 == 0)
+ if(len2 == 0)
break outer
-
- count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0)
- if(count2)
- moveRange(L, cursor2, cursor1, count2)
-
- cursor2 += count2
- cursor1 += count2
- len2 -= count2
-
- if(len2 == 0)
- break outer
-
+ else
++cursor1
+
+ ++count1
+ count2 = 0
+
if(--len1 == 1)
break outer
- --minGallop
-
- while((count1|count2) > MIN_GALLOP)
-
- if(minGallop < 0)
- minGallop = 0
- minGallop += 2; // Penalize for leaving gallop mode
+ while((count1 | count2) < minGallop)
- if(len1 == 1)
- //ASSERT(len2 > 0)
- moveElement(L, cursor1, cursor2+len2)
+ //one run is winning consistently so galloping may provide huge benifits
+ //so try galloping, until such time as the run is no longer consistently winning
+ do
+ //ASSERT(len1 > 1 && len2 > 0)
- //else
- //ASSERT(len2 == 0)
- //ASSERT(len1 > 1)
+ count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0)
+ if(count1)
+ cursor1 += count1
+ len1 -= count1
-
- proc/mergeHi(base1, len1, base2, len2)
- //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
-
- var/cursor1 = base1 + len1 - 1 //start at end of sublists
- var/cursor2 = base2 + len2 - 1
-
- //degenerate cases
- if(len2 == 1)
- moveElement(L, base2, base1)
- return
-
- if(len1 == 1)
- moveElement(L, base1, cursor2+1)
- return
-
- moveElement(L, cursor1--, cursor2-- + 1)
- --len1
-
- outer:
- while(1)
- var/count1 = 0 //# of times in a row that first run won
- var/count2 = 0 // " " " " " " second run won
-
- //do the straightfoward thing until one run starts winning consistently
- do
- //ASSERT(len1 > 0 && len2 > 1)
- if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
- moveElement(L, cursor1--, cursor2-- + 1)
- --len1
-
- ++count1
- count2 = 0
-
- if(len1 == 0)
- break outer
- else
- --cursor2
- --len2
-
- ++count2
- count1 = 0
-
- if(len2 == 1)
- break outer
- while((count1 | count2) < minGallop)
-
- //one run is winning consistently so galloping may provide huge benifits
- //so try galloping, until such time as the run is no longer consistently winning
- do
- //ASSERT(len1 > 0 && len2 > 1)
-
- count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1?
- if(count1)
- cursor1 -= count1
-
- moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition
-
- cursor2 -= count1
- len1 -= count1
-
- if(len1 == 0)
- break outer
-
- --cursor2
-
- if(--len2 == 1)
+ if(len1 <= 1)
break outer
- count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1)
- if(count2)
- cursor2 -= count2
- len2 -= count2
+ moveElement(L, cursor2, cursor1)
+ ++cursor2
+ ++cursor1
+ if(--len2 == 0)
+ break outer
- if(len2 <= 1)
- break outer
+ count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0)
+ if(count2)
+ moveRange(L, cursor2, cursor1, count2)
+ cursor2 += count2
+ cursor1 += count2
+ len2 -= count2
+
+ if(len2 == 0)
+ break outer
+
+ ++cursor1
+ if(--len1 == 1)
+ break outer
+
+ --minGallop
+
+ while((count1|count2) > MIN_GALLOP)
+
+ if(minGallop < 0)
+ minGallop = 0
+ minGallop += 2; // Penalize for leaving gallop mode
+
+
+ if(len1 == 1)
+ //ASSERT(len2 > 0)
+ moveElement(L, cursor1, cursor2+len2)
+
+ //else
+ //ASSERT(len2 == 0)
+ //ASSERT(len1 > 1)
+
+
+/datum/sortInstance/proc/mergeHi(base1, len1, base2, len2)
+ //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2)
+
+ var/cursor1 = base1 + len1 - 1 //start at end of sublists
+ var/cursor2 = base2 + len2 - 1
+
+ //degenerate cases
+ if(len2 == 1)
+ moveElement(L, base2, base1)
+ return
+
+ if(len1 == 1)
+ moveElement(L, base1, cursor2+1)
+ return
+
+ moveElement(L, cursor1--, cursor2-- + 1)
+ --len1
+
+ outer:
+ while(1)
+ var/count1 = 0 //# of times in a row that first run won
+ var/count2 = 0 // " " " " " " second run won
+
+ //do the straightfoward thing until one run starts winning consistently
+ do
+ //ASSERT(len1 > 0 && len2 > 1)
+ if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0)
moveElement(L, cursor1--, cursor2-- + 1)
--len1
+ ++count1
+ count2 = 0
+
+ if(len1 == 0)
+ break outer
+ else
+ --cursor2
+ --len2
+
+ ++count2
+ count1 = 0
+
+ if(len2 == 1)
+ break outer
+ while((count1 | count2) < minGallop)
+
+ //one run is winning consistently so galloping may provide huge benifits
+ //so try galloping, until such time as the run is no longer consistently winning
+ do
+ //ASSERT(len1 > 0 && len2 > 1)
+
+ count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1?
+ if(count1)
+ cursor1 -= count1
+
+ moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition
+
+ cursor2 -= count1
+ len1 -= count1
+
if(len1 == 0)
break outer
- --minGallop
- while((count1|count2) > MIN_GALLOP)
+ --cursor2
- if(minGallop < 0)
- minGallop = 0
- minGallop += 2 // Penalize for leaving gallop mode
+ if(--len2 == 1)
+ break outer
- if(len2 == 1)
- //ASSERT(len1 > 0)
+ count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1)
+ if(count2)
+ cursor2 -= count2
+ len2 -= count2
- cursor1 -= len1
- moveRange(L, cursor1+1, cursor2+1, len1)
+ if(len2 <= 1)
+ break outer
- //else
- //ASSERT(len1 == 0)
- //ASSERT(len2 > 0)
+ moveElement(L, cursor1--, cursor2-- + 1)
+ --len1
+
+ if(len1 == 0)
+ break outer
+
+ --minGallop
+ while((count1|count2) > MIN_GALLOP)
+
+ if(minGallop < 0)
+ minGallop = 0
+ minGallop += 2 // Penalize for leaving gallop mode
+
+ if(len2 == 1)
+ //ASSERT(len1 > 0)
+
+ cursor1 -= len1
+ moveRange(L, cursor1+1, cursor2+1, len1)
+
+ //else
+ //ASSERT(len1 == 0)
+ //ASSERT(len2 > 0)
- proc/mergeSort(start, end)
- var/remaining = end - start
+/datum/sortInstance/proc/mergeSort(start, end)
+ var/remaining = end - start
- //If array is small, do an insertion sort
- if(remaining < MIN_MERGE)
- binarySort(start, end, start/*+initRunLen*/)
- return
+ //If array is small, do an insertion sort
+ if(remaining < MIN_MERGE)
+ binarySort(start, end, start/*+initRunLen*/)
+ return
- var/minRun = minRunLength(remaining)
+ var/minRun = minRunLength(remaining)
- do
- var/runLen = (remaining <= minRun) ? remaining : minRun
+ do
+ var/runLen = (remaining <= minRun) ? remaining : minRun
- binarySort(start, start+runLen, start)
+ binarySort(start, start+runLen, start)
- //add data about run to queue
- runBases.Add(start)
- runLens.Add(runLen)
+ //add data about run to queue
+ runBases.Add(start)
+ runLens.Add(runLen)
- //Advance to find next run
- start += runLen
- remaining -= runLen
+ //Advance to find next run
+ start += runLen
+ remaining -= runLen
- while(remaining > 0)
+ while(remaining > 0)
- while(runBases.len >= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
- if(runLens[n-1] < runLens[n+1])
- --n
- mergeAt2(n)
- else if(runLens[n] <= runLens[n+1])
- mergeAt2(n)
- else
- break //Invariant is established
-
- while(runBases.len >= 2)
- var/n = runBases.len - 1
- if(n > 1 && runLens[n-1] < runLens[n+1])
+ while(runBases.len >= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1])
+ if(runLens[n-1] < runLens[n+1])
--n
mergeAt2(n)
+ else if(runLens[n] <= runLens[n+1])
+ mergeAt2(n)
+ else
+ break //Invariant is established
- return L
+ while(runBases.len >= 2)
+ var/n = runBases.len - 1
+ if(n > 1 && runLens[n-1] < runLens[n+1])
+ --n
+ mergeAt2(n)
- proc/mergeAt2(i)
- var/cursor1 = runBases[i]
- var/cursor2 = runBases[i+1]
+ return L
- var/end1 = cursor1+runLens[i]
- var/end2 = cursor2+runLens[i+1]
+/datum/sortInstance/proc/mergeAt2(i)
+ var/cursor1 = runBases[i]
+ var/cursor2 = runBases[i+1]
- var/val1 = fetchElement(L,cursor1)
- var/val2 = fetchElement(L,cursor2)
+ var/end1 = cursor1+runLens[i]
+ var/end2 = cursor2+runLens[i+1]
- while(1)
- if(call(cmp)(val1,val2) <= 0)
- if(++cursor1 >= end1)
- break
- val1 = fetchElement(L,cursor1)
- else
- moveElement(L,cursor2,cursor1)
+ var/val1 = fetchElement(L,cursor1)
+ var/val2 = fetchElement(L,cursor2)
- if(++cursor2 >= end2)
- break
- ++end1
- ++cursor1
+ while(1)
+ if(call(cmp)(val1,val2) <= 0)
+ if(++cursor1 >= end1)
+ break
+ val1 = fetchElement(L,cursor1)
+ else
+ moveElement(L,cursor2,cursor1)
- val2 = fetchElement(L,cursor2)
+ if(++cursor2 >= end2)
+ break
+ ++end1
+ ++cursor1
+
+ val2 = fetchElement(L,cursor2)
- //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
- //(which isn't involved in this merge). The current run (i+1) goes away in any case.
- runLens[i] += runLens[i+1]
- runLens.Cut(i+1, i+2)
- runBases.Cut(i+1, i+2)
+ //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run
+ //(which isn't involved in this merge). The current run (i+1) goes away in any case.
+ runLens[i] += runLens[i+1]
+ runLens.Cut(i+1, i+2)
+ runBases.Cut(i+1, i+2)
#undef MIN_GALLOP
#undef MIN_MERGE
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 e0cf8ebdd5..bf179760c0 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -143,6 +143,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE,
"VOICEBOX_DISABLED" = VOICEBOX_DISABLED,
"IGNORE_HAT_TOSS" = IGNORE_HAT_TOSS,
+ "SCAN_REAGENTS" = SCAN_REAGENTS
),
"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 e2705ad49f..2391d39b3a 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -37,6 +37,7 @@ GLOBAL_LIST_EMPTY(deco_wings_list)
GLOBAL_LIST_EMPTY(r_wings_list)
GLOBAL_LIST_EMPTY(insect_wings_list)
GLOBAL_LIST_EMPTY(insect_fluffs_list)
+GLOBAL_LIST_EMPTY(insect_markings_list)
GLOBAL_LIST_EMPTY(caps_list)
GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list("ghost")) //stores the ghost forms that support directional sprites
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index 6b8d91acf9..7340581d25 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -48,3 +48,5 @@ GLOBAL_LIST_EMPTY(sortedAreas)
GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area)
GLOBAL_LIST_EMPTY(all_abstract_markers)
+
+GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms
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 d2508b3e8e..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)
@@ -135,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/ai.dm b/code/_onclick/hud/ai.dm
index 49bdd3f3c0..93c3b63d1e 100644
--- a/code/_onclick/hud/ai.dm
+++ b/code/_onclick/hud/ai.dm
@@ -195,89 +195,107 @@
// Language menu
using = new /obj/screen/language_menu
using.screen_loc = ui_borg_language_menu
+ using.hud = src
static_inventory += using
//AI core
using = new /obj/screen/ai/aicore()
using.screen_loc = ui_ai_core
+ using.hud = src
static_inventory += using
//Camera list
using = new /obj/screen/ai/camera_list()
using.screen_loc = ui_ai_camera_list
+ using.hud = src
static_inventory += using
//Track
using = new /obj/screen/ai/camera_track()
using.screen_loc = ui_ai_track_with_camera
+ using.hud = src
static_inventory += using
//Camera light
using = new /obj/screen/ai/camera_light()
using.screen_loc = ui_ai_camera_light
+ using.hud = src
static_inventory += using
//Crew Monitoring
using = new /obj/screen/ai/crew_monitor()
using.screen_loc = ui_ai_crew_monitor
+ using.hud = src
static_inventory += using
//Crew Manifest
using = new /obj/screen/ai/crew_manifest()
using.screen_loc = ui_ai_crew_manifest
+ using.hud = src
static_inventory += using
//Alerts
using = new /obj/screen/ai/alerts()
using.screen_loc = ui_ai_alerts
+ using.hud = src
static_inventory += using
//Announcement
using = new /obj/screen/ai/announcement()
using.screen_loc = ui_ai_announcement
+ using.hud = src
static_inventory += using
//Shuttle
using = new /obj/screen/ai/call_shuttle()
using.screen_loc = ui_ai_shuttle
+ using.hud = src
static_inventory += using
//Laws
using = new /obj/screen/ai/state_laws()
using.screen_loc = ui_ai_state_laws
+ using.hud = src
static_inventory += using
//PDA message
using = new /obj/screen/ai/pda_msg_send()
using.screen_loc = ui_ai_pda_send
+ using.hud = src
static_inventory += using
//PDA log
using = new /obj/screen/ai/pda_msg_show()
using.screen_loc = ui_ai_pda_log
+ using.hud = src
static_inventory += using
//Take image
using = new /obj/screen/ai/image_take()
using.screen_loc = ui_ai_take_picture
+ using.hud = src
static_inventory += using
//View images
using = new /obj/screen/ai/image_view()
using.screen_loc = ui_ai_view_images
+ using.hud = src
static_inventory += using
//Medical/Security sensors
using = new /obj/screen/ai/sensors()
using.screen_loc = ui_ai_sensor
+ using.hud = src
static_inventory += using
//Multicamera mode
using = new /obj/screen/ai/multicam()
using.screen_loc = ui_ai_multicam
+ using.hud = src
static_inventory += using
//Add multicamera camera
using = new /obj/screen/ai/add_multicam()
using.screen_loc = ui_ai_add_multicam
+ using.hud = src
static_inventory += using
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 391e86f390..c42956bbaa 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -213,6 +213,16 @@ 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."
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 1f6ba28391..94585cbd52 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -43,18 +43,20 @@
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
+ using.hud = src
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
+ using.hud = src
static_inventory += using
- using = new /obj/screen/act_intent/alien()
- using.icon_state = mymob.a_intent
- static_inventory += using
- action_intent = using
+ action_intent = new /obj/screen/act_intent/alien()
+ action_intent.icon_state = mymob.a_intent
+ action_intent.hud = src
+ static_inventory += action_intent
if(isalienhunter(mymob))
var/mob/living/carbon/alien/humanoid/hunter/H = mymob
@@ -64,43 +66,52 @@
using = new/obj/screen/language_menu
using.screen_loc = ui_alien_language_menu
+ using.hud = src
static_inventory += using
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
+ using.hud = src
static_inventory += using
using = new /obj/screen/resist()
using.icon = ui_style
using.screen_loc = ui_pull_resist
+ using.hud = src
hotkeybuttons += using
throw_icon = new /obj/screen/throw_catch()
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
+ throw_icon.hud = src
hotkeybuttons += throw_icon
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
//begin indicators
healths = new /obj/screen/healths/alien()
+ healths.hud = src
infodisplay += healths
alien_plasma_display = new /obj/screen/alien/plasma_display()
+ alien_plasma_display.hud = src
infodisplay += alien_plasma_display
if(!isalienqueen(mymob))
alien_queen_finder = new /obj/screen/alien/alien_queen_finder
+ alien_queen_finder.hud = src
infodisplay += alien_queen_finder
zone_select = new /obj/screen/zone_sel/alien()
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
static_inventory += zone_select
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index 3ffdd66fcd..0f3c6ccf17 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -5,26 +5,32 @@
..()
var/obj/screen/using
- using = new /obj/screen/act_intent/alien()
- using.icon_state = mymob.a_intent
- static_inventory += using
- action_intent = using
+ action_intent = new /obj/screen/act_intent/alien()
+ action_intent.icon_state = mymob.a_intent
+ action_intent.hud = src
+ static_inventory += action_intent
healths = new /obj/screen/healths/alien()
+ healths.hud = src
infodisplay += healths
alien_queen_finder = new /obj/screen/alien/alien_queen_finder()
+ alien_queen_finder.hud = src
infodisplay += alien_queen_finder
+
pull_icon = new /obj/screen/pull()
pull_icon.icon = 'icons/mob/screen_alien.dmi'
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_pull_resist
hotkeybuttons += pull_icon
using = new/obj/screen/language_menu
using.screen_loc = ui_alien_language_menu
+ using.hud = src
static_inventory += using
zone_select = new /obj/screen/zone_sel/alien()
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
static_inventory += zone_select
diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm
index ab8bc459ae..8257b744d6 100644
--- a/code/_onclick/hud/blob_overmind.dm
+++ b/code/_onclick/hud/blob_overmind.dm
@@ -133,17 +133,21 @@
blobpwrdisplay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
blobpwrdisplay.layer = ABOVE_HUD_LAYER
blobpwrdisplay.plane = ABOVE_HUD_PLANE
+ blobpwrdisplay.hud = src
infodisplay += blobpwrdisplay
healths = new /obj/screen/healths/blob()
+ healths.hud = src
infodisplay += healths
using = new /obj/screen/blob/BlobHelp()
using.screen_loc = "WEST:6,NORTH:-3"
+ using.hud = src
static_inventory += using
using = new /obj/screen/blob/JumpToNode()
using.screen_loc = ui_inventory
+ using.hud = src
static_inventory += using
using = new /obj/screen/blob/JumpToCore()
@@ -153,18 +157,22 @@
using = new /obj/screen/blob/Blobbernaut()
using.screen_loc = ui_belt
+ using.hud = src
static_inventory += using
using = new /obj/screen/blob/ResourceBlob()
using.screen_loc = ui_back
+ using.hud = src
static_inventory += using
using = new /obj/screen/blob/NodeBlob()
using.screen_loc = ui_hand_position(2)
+ using.hud = src
static_inventory += using
using = new /obj/screen/blob/FactoryBlob()
using.screen_loc = ui_hand_position(1)
+ using.hud = src
static_inventory += using
using = new /obj/screen/blob/ReadaptChemical()
@@ -174,4 +182,5 @@
using = new /obj/screen/blob/RelocateCore()
using.screen_loc = ui_storage2
+ using.hud = src
static_inventory += using
diff --git a/code/_onclick/hud/blobbernauthud.dm b/code/_onclick/hud/blobbernauthud.dm
index 17d3b11a72..ed45d5b1f6 100644
--- a/code/_onclick/hud/blobbernauthud.dm
+++ b/code/_onclick/hud/blobbernauthud.dm
@@ -3,7 +3,9 @@
..()
blobpwrdisplay = new /obj/screen/healths/blob/naut/core()
+ blobpwrdisplay.hud = src
infodisplay += blobpwrdisplay
healths = new /obj/screen/healths/blob/naut()
+ healths.hud = src
infodisplay += healths
diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm
index 182495c236..06e657d136 100644
--- a/code/_onclick/hud/constructs.dm
+++ b/code/_onclick/hud/constructs.dm
@@ -5,9 +5,11 @@
..()
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_construct_pull
static_inventory += pull_icon
healths = new /obj/screen/healths/construct()
+ healths.hud = src
infodisplay += healths
diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm
index 40fdc37da3..fd2146424c 100644
--- a/code/_onclick/hud/devil.dm
+++ b/code/_onclick/hud/devil.dm
@@ -9,11 +9,13 @@
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drone_drop
+ using.hud = src
static_inventory += using
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_drone_pull
static_inventory += pull_icon
@@ -26,6 +28,7 @@
using.screen_loc = ui_swaphand_position(owner,1)
using.layer = HUD_LAYER
using.plane = HUD_PLANE
+ using.hud = src
static_inventory += using
using = new /obj/screen/inventory()
@@ -35,14 +38,19 @@
using.screen_loc = ui_swaphand_position(owner,2)
using.layer = HUD_LAYER
using.plane = HUD_PLANE
+ using.hud = src
static_inventory += using
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
lingchemdisplay = new /obj/screen/ling/chems()
+ lingchemdisplay.hud = src
+
devilsouldisplay = new /obj/screen/devil/soul_counter
+ devilsouldisplay.hud = src
infodisplay += devilsouldisplay
diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm
index 131b510f9b..dba9a59748 100644
--- a/code/_onclick/hud/generic_dextrous.dm
+++ b/code/_onclick/hud/generic_dextrous.dm
@@ -6,11 +6,13 @@
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drone_drop
+ using.hud = src
static_inventory += using
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_drone_pull
static_inventory += pull_icon
@@ -20,12 +22,14 @@
using.icon = ui_style
using.icon_state = "swap_1_m"
using.screen_loc = ui_swaphand_position(owner,1)
+ using.hud = src
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
+ using.hud = src
static_inventory += using
if(mymob.possible_a_intents)
@@ -36,20 +40,24 @@
action_intent = new /obj/screen/act_intent
action_intent.icon = ui_style
action_intent.icon_state = mymob.a_intent
+ action_intent.hud = src
static_inventory += action_intent
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
static_inventory += zone_select
using = new /obj/screen/craft
using.icon = ui_style
+ using.hud = src
static_inventory += using
using = new /obj/screen/area_creator
using.icon = ui_style
+ using.hud = src
static_inventory += using
mymob.client.screen = list()
diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm
index 2b70392b39..549b6346ce 100644
--- a/code/_onclick/hud/ghost.dm
+++ b/code/_onclick/hud/ghost.dm
@@ -50,26 +50,32 @@
using = new /obj/screen/ghost/jumptomob()
using.screen_loc = ui_ghost_jumptomob
+ using.hud = src
static_inventory += using
using = new /obj/screen/ghost/orbit()
using.screen_loc = ui_ghost_orbit
+ using.hud = src
static_inventory += using
using = new /obj/screen/ghost/reenter_corpse()
using.screen_loc = ui_ghost_reenter_corpse
+ using.hud = src
static_inventory += using
using = new /obj/screen/ghost/teleport()
using.screen_loc = ui_ghost_teleport
+ using.hud = src
static_inventory += using
using = new /obj/screen/ghost/pai()
using.screen_loc = ui_ghost_pai
+ using.hud = src
static_inventory += using
using = new /obj/screen/language_menu
using.icon = ui_style
+ using.hud = src
static_inventory += using
/datum/hud/ghost/show_hud(version = 0, mob/viewmob)
diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm
index a66558950a..35b40ee5db 100644
--- a/code/_onclick/hud/guardian.dm
+++ b/code/_onclick/hud/guardian.dm
@@ -4,26 +4,32 @@
var/obj/screen/using
healths = new /obj/screen/healths/guardian()
+ healths.hud = src
infodisplay += healths
using = new /obj/screen/guardian/Manifest()
using.screen_loc = ui_hand_position(2)
+ using.hud = src
static_inventory += using
using = new /obj/screen/guardian/Recall()
using.screen_loc = ui_hand_position(1)
+ using.hud = src
static_inventory += using
using = new owner.toggle_button_type()
using.screen_loc = ui_storage1
+ using.hud = src
static_inventory += using
using = new /obj/screen/guardian/ToggleLight()
using.screen_loc = ui_inventory
+ using.hud = src
static_inventory += using
using = new /obj/screen/guardian/Communicate()
using.screen_loc = ui_back
+ using.hud = src
static_inventory += using
/datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 1d1836716b..09794444d1 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -61,6 +61,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
// subtypes can override this to force a specific UI style
var/ui_style
+ //Citadel stuff
+ var/obj/screen/arousal
+
/datum/hud/New(mob/owner)
mymob = owner
diff --git a/code/_onclick/hud/hud_cit.dm b/code/_onclick/hud/hud_cit.dm
deleted file mode 100644
index 18ecf2e929..0000000000
--- a/code/_onclick/hud/hud_cit.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/datum/hud
- var/obj/screen/arousal
\ No newline at end of file
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 7f2fca9d98..78a2d2fd17 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -95,18 +95,21 @@
using.icon = ui_style
if(!widescreenlayout) // CIT CHANGE
using.screen_loc = ui_boxcraft // CIT CHANGE
+ using.hud = src
static_inventory += using
using = new/obj/screen/language_menu
using.icon = ui_style
if(!widescreenlayout) // CIT CHANGE
using.screen_loc = ui_boxlang // CIT CHANGE
+ using.hud = src
static_inventory += using
using = new /obj/screen/area_creator
using.icon = ui_style
if(!widescreenlayout) // CIT CHANGE
using.screen_loc = ui_boxarea // CIT CHANGE
+ using.hud = src
static_inventory += using
using = new /obj/screen/voretoggle() //We fancy Vore now
@@ -114,16 +117,19 @@
using.screen_loc = ui_voremode
if(!widescreenlayout)
using.screen_loc = ui_boxvore
+ using.hud = src
static_inventory += using
action_intent = new /obj/screen/act_intent/segmented
action_intent.icon_state = mymob.a_intent
+ action_intent.hud = src
static_inventory += action_intent
using = new /obj/screen/mov_intent
using.icon = tg_ui_icon_to_cit_ui(ui_style) // CIT CHANGE - overrides mov intent icon
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
using.screen_loc = ui_movi
+ using.hud = src
static_inventory += using
//CITADEL CHANGES - sprint button
@@ -131,19 +137,21 @@
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.icon_state = (owner.sprinting ? "act_sprint_on" : "act_sprint")
using.screen_loc = ui_movi
+ using.hud = src
static_inventory += using
//END OF CITADEL CHANGES
//same as above but buffer.
- using = new /obj/screen/sprint_buffer
- using.screen_loc = ui_sprintbufferloc
- sprint_buffer = using
- static_inventory += using
+ sprint_buffer = new /obj/screen/sprint_buffer
+ sprint_buffer.screen_loc = ui_sprintbufferloc
+ sprint_buffer.hud = src
+ static_inventory += sprint_buffer
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
+ using.hud = src
static_inventory += using
inv_box = new /obj/screen/inventory()
@@ -168,12 +176,14 @@
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
+ using.hud = src
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
+ using.hud = src
static_inventory += using
inv_box = new /obj/screen/inventory()
@@ -235,28 +245,33 @@
using = new /obj/screen/resist()
using.icon = ui_style
using.screen_loc = ui_overridden_resist // CIT CHANGE - changes this to overridden resist
+ using.hud = src
hotkeybuttons += using
//CIT CHANGES - rest and combat mode buttons
using = new /obj/screen/restbutton()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_pull_resist
+ using.hud = src
static_inventory += using
using = new /obj/screen/combattoggle()
using.icon = tg_ui_icon_to_cit_ui(ui_style)
using.screen_loc = ui_combat_toggle
+ using.hud = src
static_inventory += using
//END OF CIT CHANGES
using = new /obj/screen/human/toggle()
using.icon = ui_style
using.screen_loc = ui_inventory
+ using.hud = src
static_inventory += using
using = new /obj/screen/human/equip()
using.icon = ui_style
using.screen_loc = ui_equip_position(mymob)
+ using.hud = src
static_inventory += using
inv_box = new /obj/screen/inventory()
@@ -311,47 +326,71 @@
throw_icon = new /obj/screen/throw_catch()
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
+ throw_icon.hud = src
hotkeybuttons += throw_icon
internals = new /obj/screen/internals()
+ internals.hud = src
infodisplay += internals
healths = new /obj/screen/healths()
+ healths.hud = src
infodisplay += healths
//CIT CHANGE - adds arousal and stamina to hud
arousal = new /obj/screen/arousal()
arousal.icon_state = (owner.canbearoused == 1 ? "arousal0" : "")
+ arousal.hud = src
infodisplay += arousal
staminas = new /obj/screen/staminas()
+ staminas.hud = src
infodisplay += staminas
if(!CONFIG_GET(flag/disable_stambuffer))
staminabuffer = new /obj/screen/staminabuffer()
+ staminabuffer.hud = src
infodisplay += staminabuffer
//END OF CIT CHANGES
healthdoll = new /obj/screen/healthdoll()
+ healthdoll.hud = src
infodisplay += healthdoll
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
lingchemdisplay = new /obj/screen/ling/chems()
+ lingchemdisplay.hud = src
infodisplay += lingchemdisplay
lingstingdisplay = new /obj/screen/ling/sting()
+ lingstingdisplay.hud = src
infodisplay += lingstingdisplay
devilsouldisplay = new /obj/screen/devil/soul_counter
+ devilsouldisplay.hud = src
infodisplay += devilsouldisplay
+ blood_display = new /obj/screen/bloodsucker/blood_counter // Blood Volume
+ blood_display.hud = src
+ infodisplay += blood_display
+
+ vamprank_display = new /obj/screen/bloodsucker/rank_counter // Vampire Rank
+ vamprank_display.hud = src
+ infodisplay += vamprank_display
+
+ sunlight_display = new /obj/screen/bloodsucker/sunlight_counter // Sunlight
+ sunlight_display.hud = src
+ infodisplay += sunlight_display
+
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
static_inventory += zone_select
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm
new file mode 100644
index 0000000000..a36d9a0f36
--- /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.hud = src
+ pull_icon.update_icon()
+ pull_icon.screen_loc = ui_living_pull
+ static_inventory += pull_icon
+
+ healths = new /obj/screen/healths/lavaland_elite()
+ healths.hud = src
+ infodisplay += healths
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index bbf2cca9f9..3d3c3cf64a 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -7,21 +7,25 @@
action_intent.icon = ui_style
action_intent.icon_state = mymob.a_intent
action_intent.screen_loc = ui_acti
+ action_intent.hud = src
static_inventory += action_intent
using = new /obj/screen/mov_intent()
using.icon = ui_style
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
using.screen_loc = ui_movi
+ using.hud = src
static_inventory += using
using = new/obj/screen/language_menu
using.icon = ui_style
+ using.hud = src
static_inventory += using
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
+ using.hud = src
static_inventory += using
build_hand_slots()
@@ -30,12 +34,14 @@
using.icon = ui_style
using.icon_state = "swap_1_m" //extra wide!
using.screen_loc = ui_swaphand_position(owner,1)
+ using.hud = src
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
+ using.hud = src
static_inventory += using
inv_box = new /obj/screen/inventory()
@@ -76,30 +82,37 @@
throw_icon = new /obj/screen/throw_catch()
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
+ throw_icon.hud = src
hotkeybuttons += throw_icon
internals = new /obj/screen/internals()
+ internals.hud = src
infodisplay += internals
healths = new /obj/screen/healths()
+ healths.hud = src
infodisplay += healths
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
pull_icon.screen_loc = ui_pull_resist
+ pull_icon.hud = src
+ pull_icon.update_icon()
static_inventory += pull_icon
lingchemdisplay = new /obj/screen/ling/chems()
+ lingchemdisplay.hud = src
infodisplay += lingchemdisplay
lingstingdisplay = new /obj/screen/ling/sting()
+ lingstingdisplay.hud = src
infodisplay += lingstingdisplay
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
static_inventory += zone_select
mymob.client.screen = list()
@@ -107,6 +120,7 @@
using = new /obj/screen/resist()
using.icon = ui_style
using.screen_loc = ui_pull_resist
+ using.hud = src
hotkeybuttons += using
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
diff --git a/code/_onclick/hud/revenanthud.dm b/code/_onclick/hud/revenanthud.dm
index bc8a2bde7d..9369313941 100644
--- a/code/_onclick/hud/revenanthud.dm
+++ b/code/_onclick/hud/revenanthud.dm
@@ -3,4 +3,5 @@
..()
healths = new /obj/screen/healths/revenant()
+ healths.hud = src
infodisplay += healths
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 11517d79b8..00c89644b6 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -118,26 +118,31 @@
using = new/obj/screen/robot/language_menu
using.screen_loc = ui_borg_language_menu
+ using.hud = src
static_inventory += using
//Radio
using = new /obj/screen/robot/radio()
using.screen_loc = ui_borg_radio
+ using.hud = src
static_inventory += using
//Module select
using = new /obj/screen/robot/module1()
using.screen_loc = ui_inv1
+ using.hud = src
static_inventory += using
mymobR.inv1 = using
using = new /obj/screen/robot/module2()
using.screen_loc = ui_inv2
+ using.hud = src
static_inventory += using
mymobR.inv2 = using
using = new /obj/screen/robot/module3()
using.screen_loc = ui_inv3
+ using.hud = src
static_inventory += using
mymobR.inv3 = using
@@ -146,36 +151,43 @@
//Photography stuff
using = new /obj/screen/ai/image_take()
using.screen_loc = ui_borg_camera
+ using.hud = src
static_inventory += using
using = new /obj/screen/ai/image_view()
using.screen_loc = ui_borg_album
+ using.hud = src
static_inventory += using
//Sec/Med HUDs
using = new /obj/screen/robot/sensors()
using.screen_loc = ui_borg_sensor
+ using.hud = src
static_inventory += using
//Headlamp control
using = new /obj/screen/robot/lamp()
using.screen_loc = ui_borg_lamp
+ using.hud = src
static_inventory += using
mymobR.lamp_button = using
//Thrusters
using = new /obj/screen/robot/thrusters()
using.screen_loc = ui_borg_thrusters
+ using.hud = src
static_inventory += using
mymobR.thruster_button = using
//Intent
action_intent = new /obj/screen/act_intent/robot()
action_intent.icon_state = mymob.a_intent
+ action_intent.hud = src
static_inventory += action_intent
//Health
healths = new /obj/screen/healths/robot()
+ healths.hud = src
infodisplay += healths
//Installed Module
@@ -185,17 +197,20 @@
//Store
module_store_icon = new /obj/screen/robot/store()
+ module_store_icon.hud = src
module_store_icon.screen_loc = ui_borg_store
pull_icon = new /obj/screen/pull()
pull_icon.icon = 'icons/mob/screen_cyborg.dmi'
- pull_icon.update_icon(mymob)
+ pull_icon.hud = src
+ pull_icon.update_icon()
pull_icon.screen_loc = ui_borg_pull
hotkeybuttons += pull_icon
zone_select = new /obj/screen/zone_sel/robot()
- zone_select.update_icon(mymob)
+ zone_select.hud = src
+ zone_select.update_icon()
static_inventory += zone_select
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 5f128ff76d..dec743d35c 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -110,21 +110,21 @@
// At this point in client Click() code we have passed the 1/10 sec check and little else
// We don't even know if it's a middle click
if(world.time <= usr.next_move)
- return 1
+ return TRUE
if(usr.incapacitated())
- return 1
+ return TRUE
if(ismecha(usr.loc)) // stops inventory actions in a mech
- return 1
+ return TRUE
- if(hud && hud.mymob && slot_id)
+ if(hud?.mymob && slot_id)
var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id)
if(inv_item)
return inv_item.Click(location, control, params)
if(usr.attack_ui(slot_id))
usr.update_inv_hands()
- return 1
+ return TRUE
/obj/screen/inventory/MouseEntered()
..()
@@ -135,35 +135,37 @@
cut_overlay(object_overlays)
object_overlays.Cut()
-/obj/screen/inventory/update_icon()
+/obj/screen/inventory/update_icon_state()
if(!icon_empty)
icon_empty = icon_state
- if(hud && hud.mymob && slot_id && icon_full)
+ if(hud?.mymob && slot_id && icon_full)
if(hud.mymob.get_item_by_slot(slot_id))
icon_state = icon_full
else
icon_state = icon_empty
/obj/screen/inventory/proc/add_overlays()
- var/mob/user = hud.mymob
+ var/mob/user = hud?.mymob
- if(hud && user && slot_id)
- var/obj/item/holding = user.get_active_held_item()
+ if(!user || !slot_id)
+ return
- if(!holding || user.get_item_by_slot(slot_id))
- return
+ var/obj/item/holding = user.get_active_held_item()
- var/image/item_overlay = image(holding)
- item_overlay.alpha = 92
+ if(!holding || user.get_item_by_slot(slot_id))
+ return
- if(!user.can_equip(holding, slot_id, TRUE))
- item_overlay.color = "#FF0000"
- else
- item_overlay.color = "#00ff00"
+ var/image/item_overlay = image(holding)
+ item_overlay.alpha = 92
- object_overlays += item_overlay
- add_overlay(object_overlays)
+ if(!user.can_equip(holding, slot_id, TRUE))
+ item_overlay.color = "#FF0000"
+ else
+ item_overlay.color = "#00ff00"
+
+ object_overlays += item_overlay
+ add_overlay(object_overlays)
/obj/screen/inventory/hand
var/mutable_appearance/handcuff_overlay
@@ -171,45 +173,50 @@
var/held_index = 0
/obj/screen/inventory/hand/update_icon()
- ..()
+ . = ..()
if(!handcuff_overlay)
var/state = (!(held_index % 2)) ? "markus" : "gabrielle"
handcuff_overlay = mutable_appearance('icons/mob/screen_gen.dmi', state)
- cut_overlays()
+ cut_overlay(list(handcuff_overlay, blocked_overlay, "hand_active"))
- if(hud && hud.mymob)
- if(iscarbon(hud.mymob))
- var/mob/living/carbon/C = hud.mymob
- if(C.handcuffed)
- add_overlay(handcuff_overlay)
+ if(!hud?.mymob)
+ return
- if(held_index)
- if(!C.has_hand_for_held_index(held_index))
- add_overlay(blocked_overlay)
+ if(iscarbon(hud.mymob))
+ var/mob/living/carbon/C = hud.mymob
+ if(C.handcuffed)
+ add_overlay(handcuff_overlay)
- if(held_index == hud.mymob.active_hand_index)
- add_overlay("hand_active")
+ if(held_index)
+ if(!C.has_hand_for_held_index(held_index))
+ add_overlay(blocked_overlay)
+
+ if(held_index == hud.mymob.active_hand_index)
+ add_overlay("hand_active")
/obj/screen/inventory/hand/Click(location, control, params)
// At this point in client Click() code we have passed the 1/10 sec check and little else
// We don't even know if it's a middle click
- if(world.time <= usr.next_move)
- return 1
- if(usr.incapacitated() || isobserver(usr))
- return 1
- if (ismecha(usr.loc)) // stops inventory actions in a mech
- return 1
+ var/mob/user = hud?.mymob
+ if(usr != user)
+ return TRUE
+ if(world.time <= user.next_move)
+ return TRUE
+ if(user.incapacitated())
+ return TRUE
+ if (ismecha(user.loc)) // stops inventory actions in a mech
+ return TRUE
- if(hud.mymob.active_hand_index == held_index)
- var/obj/item/I = hud.mymob.get_active_held_item()
+ if(user.active_hand_index == held_index)
+ var/obj/item/I = user.get_active_held_item()
if(I)
I.Click(location, control, params)
else
- hud.mymob.swap_hand(held_index)
- return 1
+ user.swap_hand(held_index)
+ return TRUE
/obj/screen/close
name = "close"
@@ -343,12 +350,8 @@
/obj/screen/mov_intent/Click()
toggle(usr)
-/obj/screen/mov_intent/update_icon(mob/user)
- if(!user && hud)
- user = hud.mymob
- if(!user)
- return
- switch(user.m_intent)
+/obj/screen/mov_intent/update_icon_state()
+ switch(hud?.mymob?.m_intent)
if(MOVE_INTENT_WALK)
icon_state = "walking"
if(MOVE_INTENT_RUN)
@@ -369,10 +372,8 @@
return
usr.stop_pulling()
-/obj/screen/pull/update_icon(mob/mymob)
- if(!mymob)
- return
- if(mymob.pulling)
+/obj/screen/pull/update_icon_state()
+ if(hud?.mymob?.pulling)
icon_state = "pull"
else
icon_state = "pull0"
@@ -401,11 +402,11 @@
var/mob/living/L = usr
L.lay_down()
-/obj/screen/rest/update_icon(mob/mymob)
- if(!isliving(mymob))
+/obj/screen/rest/update_icon_state()
+ var/mob/living/user = hud?.mymob
+ if(!istype(user))
return
- var/mob/living/L = mymob
- if(!L.resting)
+ if(!user.resting)
icon_state = "act_rest"
else
icon_state = "act_rest0"
@@ -448,7 +449,7 @@
name = "damage zone"
icon_state = "zone_sel"
screen_loc = ui_zonesel
- var/selecting = BODY_ZONE_CHEST
+ var/overlay_icon = 'icons/mob/screen_gen.dmi'
var/static/list/hover_overlays_cache = list()
var/hovering
@@ -541,26 +542,24 @@
return BODY_ZONE_HEAD
/obj/screen/zone_sel/proc/set_selected_zone(choice, mob/user)
- if(isobserver(user))
+ if(user != hud?.mymob)
return
- if(choice != selecting)
- selecting = choice
- update_icon(usr)
- return 1
+ if(choice != hud.mymob.zone_selected)
+ hud.mymob.zone_selected = choice
+ update_icon()
-/obj/screen/zone_sel/update_icon(mob/user)
- cut_overlays()
- add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[selecting]"))
- user.zone_selected = selecting
+ return TRUE
+
+/obj/screen/zone_sel/update_overlays()
+ . = ..()
+ if(!hud?.mymob)
+ return
+ . += mutable_appearance(overlay_icon, "[hud.mymob.zone_selected]")
/obj/screen/zone_sel/alien
icon = 'icons/mob/screen_alien.dmi'
-
-/obj/screen/zone_sel/alien/update_icon(mob/user)
- cut_overlays()
- add_overlay(mutable_appearance('icons/mob/screen_alien.dmi', "[selecting]"))
- user.zone_selected = selecting
+ overlay_icon = 'icons/mob/screen_alien.dmi'
/obj/screen/zone_sel/robot
icon = 'icons/mob/screen_cyborg.dmi'
@@ -644,6 +643,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/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm
index 6cf4c73e44..80cc01c3b3 100644
--- a/code/_onclick/hud/swarmer.dm
+++ b/code/_onclick/hud/swarmer.dm
@@ -69,24 +69,30 @@
using = new /obj/screen/swarmer/FabricateTrap()
using.screen_loc = ui_hand_position(2)
+ using.hud = src
static_inventory += using
using = new /obj/screen/swarmer/Barricade()
using.screen_loc = ui_hand_position(1)
+ using.hud = src
static_inventory += using
using = new /obj/screen/swarmer/Replicate()
using.screen_loc = ui_zonesel
+ using.hud = src
static_inventory += using
using = new /obj/screen/swarmer/RepairSelf()
using.screen_loc = ui_storage1
+ using.hud = src
static_inventory += using
using = new /obj/screen/swarmer/ToggleLight()
using.screen_loc = ui_back
+ using.hud = src
static_inventory += using
using = new /obj/screen/swarmer/ContactSwarmers()
using.screen_loc = ui_inventory
+ using.hud = src
static_inventory += using
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 9cb0c52b9a..f082f2ad16 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -110,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)
@@ -163,4 +163,3 @@
/obj/item/proc/getweight()
return total_mass || w_class * 1.25
-
diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm
index be9f7e116b..3f07eed029 100644
--- a/code/controllers/configuration/config_entry.dm
+++ b/code/controllers/configuration/config_entry.dm
@@ -151,6 +151,7 @@
var/key_mode
var/value_mode
var/splitter = " "
+ var/lowercase = TRUE
/datum/config_entry/keyed_list/New()
. = ..()
@@ -167,7 +168,9 @@
var/key_value = null
if(key_pos || value_mode == VALUE_MODE_FLAG)
- key_name = lowertext(copytext(str_val, 1, key_pos))
+ key_name = copytext(str_val, 1, key_pos)
+ if(lowercase)
+ key_name = lowertext(key_name)
key_value = copytext(str_val, key_pos + 1)
var/new_key
var/new_value
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index fdddbda344..61b5788ef8 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -376,6 +376,19 @@
/datum/config_entry/flag/disable_stambuffer
+/datum/config_entry/keyed_list/box_random_engine
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_FLAG
+ lowercase = FALSE
+ splitter = "-"
+
/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/air.dm b/code/controllers/subsystem/air.dm
index 5bcc911005..1bfdc79d27 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -382,6 +382,9 @@ SUBSYSTEM_DEF(air)
CHECK_TICK
/datum/controller/subsystem/air/proc/setup_template_machinery(list/atmos_machines)
+ if(!initialized)
+ return
+
for(var/A in atmos_machines)
var/obj/machinery/atmospherics/AM = A
AM.atmosinit()
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index 29762338fb..8c8ad2d337 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -91,6 +91,7 @@ SUBSYSTEM_DEF(mapping)
var/list/space_ruins = levels_by_trait(ZTRAIT_SPACE_RUINS)
if (space_ruins.len)
seedRuins(space_ruins, CONFIG_GET(number/space_budget), /area/space, space_ruins_templates)
+ SSmapping.seedStation()
loading_ruins = FALSE
#endif
repopulate_sorted_areas()
@@ -363,6 +364,8 @@ GLOBAL_LIST_EMPTY(the_station_areas)
lava_ruins_templates[R.name] = R
else if(istype(R, /datum/map_template/ruin/space))
space_ruins_templates[R.name] = R
+ else if(istype(R, /datum/map_template/ruin/station))
+ station_room_templates[R.name] = R
/datum/controller/subsystem/mapping/proc/preloadShuttleTemplates()
var/list/unbuyable = generateMapList("[global.config.directory]/unbuyableshuttles.txt")
@@ -524,4 +527,15 @@ GLOBAL_LIST_EMPTY(the_station_areas)
if(!isolated_ruins_z)
isolated_ruins_z = add_new_zlevel("Isolated Ruins/Reserved", list(ZTRAIT_RESERVED = TRUE, ZTRAIT_ISOLATED_RUINS = TRUE))
initialize_reserved_level(isolated_ruins_z.z_value)
- return isolated_ruins_z.z_value
\ No newline at end of file
+ return isolated_ruins_z.z_value
+
+ // Station Ruins
+/datum/controller/subsystem/mapping
+ var/list/station_room_templates = list()
+
+/datum/controller/subsystem/mapping/proc/seedStation()
+ for(var/V in GLOB.stationroom_landmarks)
+ var/obj/effect/landmark/stationroom/LM = V
+ LM.load()
+ if(GLOB.stationroom_landmarks.len)
+ seedStation() //I'm sure we can trust everyone not to insert a 1x1 rooms which loads a landmark which loads a landmark which loads a la...
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index c3db8552c6..8329493818 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -12,6 +12,7 @@ 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()
@@ -227,7 +228,10 @@ SUBSYSTEM_DEF(persistence)
CollectSecretSatchels()
CollectTrophies()
CollectRoundtype()
- CollectThreatLevel()
+ 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))
@@ -384,17 +388,27 @@ SUBSYSTEM_DEF(persistence)
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
-/datum/controller/subsystem/persistence/proc/CollectThreatLevel()
- if(istype(SSticker.mode, /datum/game_mode/dynamic))
- var/datum/game_mode/dynamic/mode = SSticker.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/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]")
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 ef63338a67..1ad4a15ee7 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -93,7 +93,7 @@ SUBSYSTEM_DEF(traumas)
/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/datums/components/_component.dm b/code/datums/components/_component.dm
index f938a70308..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))
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 1518a84456..d5af47ea1f 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -23,17 +23,51 @@
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 && M.stat == DEAD && (M.butcher_results || M.guaranteed_butcher_results)) //can we butcher it?
+ 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()
var/final_effectiveness = effectiveness - meat.butcher_difficulty
diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm
index 641dbdb1cf..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()
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/mood.dm b/code/datums/components/mood.dm
index a0e6f97de0..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.
diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm
index 362961a24f..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)
@@ -57,6 +58,7 @@
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,
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/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/sizzle.dm b/code/datums/components/sizzle.dm
new file mode 100644
index 0000000000..5e56dd15cb
--- /dev/null
+++ b/code/datums/components/sizzle.dm
@@ -0,0 +1,25 @@
+/datum/component/sizzle
+ var/mutable_appearance/sizzling
+ var/sizzlealpha = 0
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
+
+/datum/component/sizzle/Initialize()
+ if(!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+ setup_sizzle()
+
+/datum/component/sizzle/InheritComponent(datum/component/C, i_am_original)
+ var/atom/food = parent
+ sizzlealpha += 5
+ sizzling.alpha = sizzlealpha
+ food.cut_overlay(sizzling)
+ food.add_overlay(sizzling)
+
+/datum/component/sizzle/proc/setup_sizzle()
+ var/atom/food = parent
+ var/icon/grill_marks = icon(initial(food.icon), initial(food.icon_state)) //we only want to apply grill marks to the initial icon_state for each object
+ grill_marks.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
+ grill_marks.Blend(icon('icons/obj/kitchen.dmi', "grillmarks"), ICON_MULTIPLY) //adds grill marks and the remaining white areas become transparent
+ sizzling = new(grill_marks)
+ sizzling.alpha = sizzlealpha
+ food.add_overlay(sizzling)
\ No newline at end of file
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 7bad836e47..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_QDELETING), .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(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)
+ . = ..()
+ 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, COMSIG_MIND_TRANSFER)
- UnregisterSignal(quit_action, COMSIG_ACTION_TRIGGER)
+ 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/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/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm
index b84133faf7..f9a9e07aed 100644
--- a/code/datums/looping_sounds/machinery_sounds.dm
+++ b/code/datums/looping_sounds/machinery_sounds.dm
@@ -4,7 +4,7 @@
mid_sounds = list('sound/machines/shower/shower_mid1.ogg'=1,'sound/machines/shower/shower_mid2.ogg'=1,'sound/machines/shower/shower_mid3.ogg'=1)
mid_length = 10
end_sound = 'sound/machines/shower/shower_end.ogg'
- volume = 20
+ volume = 10
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -32,7 +32,7 @@
mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
mid_length = 2
end_sound = 'sound/machines/fryer/deep_fryer_emerge.ogg'
- volume = 15
+ volume = 5
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -43,3 +43,12 @@
mid_length = 10
end_sound = 'sound/machines/microwave/microwave-end.ogg'
volume = 90
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/looping_sound/grill
+ mid_length = 2
+ mid_sounds = list('sound/machines/fryer/deep_fryer_1.ogg' = 1, 'sound/machines/fryer/deep_fryer_2.ogg' = 1)
+ volume = 10
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/code/datums/martial.dm b/code/datums/martial.dm
index 26a709590c..c8caa853c3 100644
--- a/code/datums/martial.dm
+++ b/code/datums/martial.dm
@@ -8,9 +8,9 @@
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/dodge_chance = 0
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
@@ -28,14 +28,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)
@@ -81,7 +83,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/cqc.dm b/code/datums/martial/cqc.dm
index 73173a4a9a..4ec16ac18c 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -9,24 +9,12 @@
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
-/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 +63,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 +74,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 +86,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,23 +111,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 == D) // no self grab.
- return FALSE
- 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))
@@ -190,6 +179,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)
@@ -208,9 +198,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/rising_bass.dm b/code/datums/martial/rising_bass.dm
new file mode 100644
index 0000000000..a3b71c6784
--- /dev/null
+++ b/code/datums/martial/rising_bass.dm
@@ -0,0 +1,156 @@
+#define SIDE_KICK_COMBO "DH"
+#define SHOULDER_FLIP_COMBO "GHDGHH"
+#define REPULSE_PUNCH_COMBO "GHGH"
+#define FOOT_SMASH_COMBO "HH"
+#define DEFT_SWITCH_COMBO "GDD"
+
+/datum/martial_art/the_rising_bass
+ name = "The Rising Bass"
+ id = MARTIALART_RISINGBASS
+ dodge_chance = 100
+ allow_temp_override = FALSE
+ help_verb = /mob/living/carbon/human/proc/rising_bass_help
+
+/datum/martial_art/the_rising_bass/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ if(findtext(streak,SIDE_KICK_COMBO))
+ streak = ""
+ sideKick(A,D)
+ return 1
+ if(findtext(streak,SHOULDER_FLIP_COMBO))
+ streak = ""
+ shoulderFlip(A,D)
+ return 1
+ if(findtext(streak,REPULSE_PUNCH_COMBO))
+ streak = ""
+ repulsePunch(A,D)
+ return 1
+ if(findtext(streak,FOOT_SMASH_COMBO))
+ streak = ""
+ footSmash(A,D)
+ return 1
+ if(findtext(streak,DEFT_SWITCH_COMBO))
+ streak = ""
+ deftSwitch(A,D)
+ return 1
+ return 0
+
+
+/datum/martial_art/the_rising_bass/proc/sideKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ if(!D.IsKnockdown() || D.lying == 0)
+ var/turf/H = get_step(D, A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH))
+ A.do_attack_animation(D, ATTACK_EFFECT_KICK)
+ D.visible_message("[A] kicks [D] in the side, sliding them over! ", \
+ "[A] kicks you in the side, forcing you to step away! ")
+ playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ D.apply_damage(5, BRUTE, BODY_ZONE_CHEST)
+ D.Knockdown(60)
+ var/L = H
+ for(var/obj/i in H.contents)
+ if(!istype(i,/mob) && i.density == 1)
+ L = D.loc
+ D.forceMove(L)
+ log_combat(A, D, "side kicked (Rising Bass)")
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ if(!D.IsKnockdown() || !D.lying)
+ var/turf/H = get_step(A, get_dir(D,A))
+ var/L = H
+ for(var/obj/i in H.contents)
+ if(!istype(i,/mob) && i.density == 1)//(i.anchored == 1 && i.density == 1) || istype(i,/obj/structure) || istype(i,/turf/closed)
+ L = A.loc
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.visible_message("[A] flips [D] over their shoulder, slamming them into the ground! ", \
+ "[A] flips you over their shoulder, slamming you into the ground! ")
+ playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ D.emote("scream")
+ D.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
+ D.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
+ D.Sleeping(60)
+ D.Knockdown(300)
+ D.forceMove(L)
+ log_combat(A, D, "shoulder flipped (Rising Bass)")
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ if(!D.IsKnockdown() || !D.lying)
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.visible_message("[A] smashes [D] in the chest, throwing them away! ", \
+ "[A] smashes you in the chest, repelling you away! ")
+ playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A)))
+ D.throw_at(F, 10, 1)
+ D.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
+ D.Knockdown(90)
+ log_combat(A, D, "repulse punched (Rising Bass)")
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_rising_bass/proc/footSmash(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ if(!D.IsKnockdown() || !D.lying)
+ A.do_attack_animation(D, ATTACK_EFFECT_KICK)
+ D.visible_message("[A] smashes their foot down on [D]'s foot! ", \
+ "[A] smashes your foot! ")
+ playsound(get_turf(A), 'sound/weapons/punch1.ogg', 50, 1, -1)
+ D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
+ D.dropItemToGround(D.get_active_held_item())
+ log_combat(A, D, "foot smashed (Rising Bass)")
+ return 1
+ return basic_hit(A,D)
+
+/datum/martial_art/the_rising_bass/proc/deftSwitch(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ if(!D.IsKnockdown() || !D.lying)
+ if (D.get_active_held_item())
+ var/obj/item/G = D.get_active_held_item()
+ if (G && !(G.item_flags & (ABSTRACT|DROPDEL)) && D.temporarilyRemoveItemFromInventory(G))
+ A.put_in_hands(G)
+ D.visible_message("[A] slaps [D]'s hands, taking [G] from them! ", \
+ "[A] slaps you, taking [G] from you! ")
+ log_combat(A, D, "deft switched (Rising Bass)")
+ return 1
+ else
+ to_chat(A, "[G] can't be taken out of [D]'s hands! ")
+ return 0
+
+/datum/martial_art/the_rising_bass/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 ..()
+
+/datum/martial_art/the_rising_bass/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 ..()
+
+/datum/martial_art/the_rising_bass/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ add_to_streak("G",D)
+ if(check_streak(A,D))
+ return 1
+ return ..()
+
+/mob/living/carbon/human/proc/rising_bass_help()
+ set name = "Recall Teachings"
+ set desc = "Remember the martial techniques of the Rising Bass clan."
+ set category = "Rising Bass"
+
+ to_chat(usr, "You retreat inward and recall the teachings of the Rising Bass... ")
+
+ to_chat(usr, "Side Kick : Disarm Harm. Forces opponent to step to the side.")
+ to_chat(usr, "Shoulder Flip : Grab Harm Disarm Grab Harm Harm. Flips opponent over your shoulder and stuns.")
+ to_chat(usr, "Repulse Punch : Grab Harm Grab Harm. Slams the opponent far away from you.")
+ to_chat(usr, "Foot Smash : Harm Harm. Stuns opponent, minor damage.")
+ to_chat(usr, "Deft Switch : Grab Disarm Disarm. Switches the opponent's held item for your own. Most useful with nothing in your hand.")
+
+/datum/martial_art/the_rising_bass/teach(mob/living/carbon/human/H, make_temporary = FALSE)
+ . = ..()
+ if(!.)
+ return
+ ADD_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT)
+
+/datum/martial_art/the_rising_bass/on_remove(mob/living/carbon/human/H)
+ . = ..()
+ REMOVE_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT)
\ No newline at end of file
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index f89374dc2a..85f8a4a101 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,37 +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 == D) //no self grab stun
- return FALSE
- 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]! ", \
@@ -138,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."
@@ -177,9 +185,8 @@
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
block_chance = 50
-/obj/item/twohanded/bostaff/update_icon()
+/obj/item/twohanded/bostaff/update_icon_state()
icon_state = "bostaff[wielded]"
- return
/obj/item/twohanded/bostaff/attack(mob/target, mob/living/user)
add_fingerprint(user)
@@ -233,4 +240,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/mind.dm b/code/datums/mind.dm
index 0ded5f9912..d1b4e51a7d 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -88,6 +88,9 @@
/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)
@@ -125,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.
@@ -134,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/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index 94a64c3bd4..a6e4c8ed4f 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -198,3 +198,48 @@
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 9ae7ba2289..94fd08535f 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -134,6 +134,22 @@
mood_change = 3
timeout = 3000
+/datum/mood_event/breakfast
+ description = "Nothing like a hearty breakfast to start the shift. \n"
+ mood_change = 2
+ timeout = 15 MINUTES
+
+//Power gamer stuff below
+/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
@@ -148,3 +164,8 @@
/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 3d07e6066f..c536196e95 100644
--- a/code/datums/mutations/hulk.dm
+++ b/code/datums/mutations/hulk.dm
@@ -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/radiation_wave.dm b/code/datums/radiation_wave.dm
index 8555e4cf3f..5dce5791c2 100644
--- a/code/datums/radiation_wave.dm
+++ b/code/datums/radiation_wave.dm
@@ -3,6 +3,7 @@
var/turf/master_turf //The center of the wave
var/steps=0 //How far we've moved
var/intensity //How strong it was originaly
+ var/remaining_contam //How much contaminated material it still has
var/range_modifier //Higher than 1 makes it drop off faster, 0.5 makes it drop off half etc
var/move_dir //The direction of movement
var/list/__dirs //The directions to the side of the wave, stored for easy looping
@@ -18,6 +19,7 @@
__dirs+=turn(dir, -90)
intensity = _intensity
+ remaining_contam = intensity
range_modifier = _range_modifier
can_contaminate = _can_contaminate
@@ -46,8 +48,9 @@
qdel(src)
return
- radiate(atoms, FLOOR(strength, 1))
-
+ if(radiate(atoms, FLOOR(min(strength,remaining_contam), 1)))
+ //oof ow ouch
+ remaining_contam = max(0,remaining_contam-((min(strength,remaining_contam)-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT))
check_obstructions(atoms) // reduce our overall strength if there are radiation insulators
/datum/radiation_wave/proc/get_rad_atoms()
@@ -89,7 +92,8 @@
intensity *= (1-((1-thing.rad_insulation)/width))
/datum/radiation_wave/proc/radiate(list/atoms, strength)
- var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier))
+ var/can_contam = strength >= RAD_MINIMUM_CONTAMINATION
+ var/list/contam_atoms = list()
for(var/k in 1 to atoms.len)
var/atom/thing = atoms[k]
if(!thing)
@@ -109,8 +113,14 @@
))
if(!can_contaminate || blacklisted[thing.type])
continue
- if(prob(contamination_chance)) // Only stronk rads get to have little baby rads
- if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
- continue
- var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
+ if(CHECK_BITFIELD(thing.rad_flags, RAD_NO_CONTAMINATE) || SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
+ continue
+ contam_atoms += thing
+ var/did_contam = 0
+ if(can_contam)
+ var/rad_strength = ((strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT)/contam_atoms.len
+ for(var/k in 1 to contam_atoms.len)
+ var/atom/thing = contam_atoms[k]
thing.AddComponent(/datum/component/radioactive, rad_strength, source)
+ did_contam = 1
+ return did_contam
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/ruins/station.dm b/code/datums/ruins/station.dm
new file mode 100644
index 0000000000..156356788f
--- /dev/null
+++ b/code/datums/ruins/station.dm
@@ -0,0 +1,21 @@
+/datum/map_template/ruin/station
+ prefix = "_maps/RandomRuins/StationRuins/"
+ cost = 0
+
+// Boxstation
+ // Engine
+
+/datum/map_template/ruin/station/box/engine
+ id = "engine_sm"
+ suffix = "Box/Engine/engine_sm.dmm"
+ name = "Engine SM"
+
+/datum/map_template/ruin/station/box/engine/singulo
+ id = "engine_singulo"
+ suffix = "Box/Engine/engine_singulo.dmm"
+ name = "Engine Singulo"
+
+/datum/map_template/ruin/station/box/engine/tesla
+ id = "engine_tesla"
+ suffix = "Box/Engine/engine_tesla.dmm"
+ name = "Engine Tesla"
\ No newline at end of file
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index d1196a7753..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)
@@ -702,4 +736,4 @@ datum/status_effect/pacify
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))
\ No newline at end of file
+ owner.throw_item(pick(targets))
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index 09a4f0b060..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
@@ -108,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
@@ -121,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"
@@ -135,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"
@@ -143,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
@@ -158,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"
@@ -179,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
@@ -188,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..f65ea98cab 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -326,8 +326,13 @@ GLOBAL_LIST_EMPTY(teleportlocs)
F.update_fire_light(fire)
for(var/obj/machinery/light/L in src)
L.update()
-
-/area/proc/updateicon()
+/**
+ * Update the icon state of the area
+ *
+ * Im not sure what the heck this does, somethign to do with weather being able to set icon
+ * states on areas?? where the heck would that even display?
+ */
+/area/update_icon_state()
var/weather_icon
for(var/V in SSweather.processing)
var/datum/weather/W = V
@@ -337,7 +342,10 @@ GLOBAL_LIST_EMPTY(teleportlocs)
if(!weather_icon)
icon_state = null
-/area/space/updateicon()
+/**
+ * Update the icon of the area (overridden to always be null for space
+ */
+/area/space/update_icon_state()
icon_state = null
/*
@@ -370,7 +378,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 7de5707032..66570205e3 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -24,6 +24,8 @@
var/list/add_overlays // a very temporary list of overlays to add
var/list/managed_vis_overlays //vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays
+ ///overlays managed by update_overlays() to prevent removing overlays that weren't added by the same proc
+ var/list/managed_overlays
var/datum/proximity_monitor/proximity_monitor
var/buckle_message_cooldown = 0
@@ -310,6 +312,32 @@
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
+/// Updates the icon of the atom
+/atom/proc/update_icon()
+ // I expect we're going to need more return flags and options in this proc
+ var/signalOut = SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON)
+
+ if(!(signalOut & COMSIG_ATOM_NO_UPDATE_ICON_STATE))
+ update_icon_state()
+
+ if(!(signalOut & COMSIG_ATOM_NO_UPDATE_OVERLAYS))
+ var/list/new_overlays = update_overlays()
+ if(managed_overlays)
+ cut_overlay(managed_overlays)
+ managed_overlays = null
+ if(length(new_overlays))
+ managed_overlays = new_overlays
+ add_overlay(new_overlays)
+
+/// Updates the icon state of the atom
+/atom/proc/update_icon_state()
+
+/// Updates the overlays of the atom
+/atom/proc/update_overlays()
+ SHOULD_CALL_PARENT(1)
+ . = list()
+ SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .)
+
/atom/proc/relaymove(mob/user)
if(buckle_message_cooldown <= world.time)
buckle_message_cooldown = world.time + 50
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/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 67ea855466..0890d81dfb 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -300,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
@@ -329,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:")
@@ -340,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()
@@ -384,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
@@ -537,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
@@ -615,6 +623,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
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
@@ -639,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
@@ -655,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)
@@ -673,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
@@ -688,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.")
@@ -704,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.
@@ -721,7 +741,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
if (M.mind && (M.mind.special_role || M.mind.antag_datums?.len > 0))
current_players[CURRENT_LIVING_ANTAGS].Add(M)
else
- if (istype(M,/mob/dead/observer))
+ if (isobserver(M))
var/mob/dead/observer/O = M
if (O.started_as_observer) // Observers
current_players[CURRENT_OBSERVERS].Add(M)
@@ -795,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)
@@ -812,12 +833,14 @@ 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
@@ -825,11 +848,13 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
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.
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 4ac8cc91d3..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
//////////////////////////////////////////////
// //
@@ -146,12 +159,15 @@
/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 ..()
@@ -280,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"
@@ -293,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"
@@ -332,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 06efc113da..91ac73d142 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -87,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
@@ -179,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
@@ -291,6 +293,7 @@
/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.")
@@ -353,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 ..()
@@ -389,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 ..()
@@ -420,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 ..()
@@ -519,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 ..()
@@ -557,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)
@@ -604,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))
@@ -655,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)
@@ -694,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()
@@ -734,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 56b02a1364..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()
@@ -778,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 100%
rename from modular_citadel/code/game/gamemodes/gangs/dominator.dm
rename to code/game/gamemodes/gangs/dominator.dm
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/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/_machinery.dm b/code/game/machinery/_machinery.dm
index ff7383cd9e..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)
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/buttons.dm b/code/game/machinery/buttons.dm
index 968cbe7254..24c9e32969 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -38,21 +38,22 @@
board.one_access = 1
board.accesses = req_one_access
-
-/obj/machinery/button/update_icon()
- cut_overlays()
+/obj/machinery/button/update_icon_state()
if(panel_open)
icon_state = "button-open"
- if(device)
- add_overlay("button-device")
- if(board)
- add_overlay("button-board")
-
+ else if(stat & (NOPOWER|BROKEN))
+ icon_state = "[skin]-p"
else
- if(stat & (NOPOWER|BROKEN))
- icon_state = "[skin]-p"
- else
- icon_state = skin
+ icon_state = skin
+
+/obj/machinery/button/update_overlays()
+ . = ..()
+ if(!panel_open)
+ return
+ if(device)
+ . += "button-device"
+ if(board)
+ . += "button-board"
/obj/machinery/button/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
@@ -168,7 +169,7 @@
if(device)
device.pulsed()
- addtimer(CALLBACK(src, .proc/update_icon), 15)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 15)
/obj/machinery/button/power_change()
..()
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 17136d3c4f..bef5effb54 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -292,7 +292,7 @@
new /obj/item/stack/cable_coil(loc, 2)
qdel(src)
-/obj/machinery/camera/update_icon()
+/obj/machinery/camera/update_icon_state()
if(!status)
icon_state = "[initial(icon_state)]1"
else if (stat & EMPED)
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 1839e44e3b..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))
@@ -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/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 8d950f8458..b561224668 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -67,7 +67,9 @@
/obj/item/clothing/shoes/kindleKicks = ARCADE_WEIGHT_RARE,
/obj/item/storage/belt/military/snack = ARCADE_WEIGHT_RARE,
- /obj/item/clothing/mask/fakemoustache/italian = ARCADE_WEIGHT_RARE
+ /obj/item/clothing/mask/fakemoustache/italian = ARCADE_WEIGHT_RARE,
+ /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake = ARCADE_WEIGHT_TRICK,
+ /obj/item/clothing/suit/hooded/wintercoat/narsie/fake = ARCADE_WEIGHT_TRICK
)
light_color = LIGHT_COLOR_GREEN
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index a8b4608b36..22a523c58b 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -70,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)
@@ -279,7 +279,7 @@
// OMG CENTCOM LETTERHEAD
if("MessageCentCom")
- if(authenticated==2)
+ if(authenticated)
if(!checkCCcooldown())
to_chat(usr, "Arrays recycling. Please stand by. ")
return
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index 40ccc61b2b..f3be6ac214 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -38,17 +38,21 @@
defib.cell.give(180) //90% efficiency, slightly better than the cell charger's 87.5%
update_icon()
-/obj/machinery/defibrillator_mount/update_icon()
- cut_overlays()
- if(defib)
- add_overlay("defib")
- if(defib.powered)
- add_overlay(defib.safety ? "online" : "emagged")
- var/ratio = defib.cell.charge / defib.cell.maxcharge
- ratio = CEILING(ratio * 4, 1) * 25
- add_overlay("charge[ratio]")
- if(clamps_locked)
- add_overlay("clamps")
+/obj/machinery/defibrillator_mount/update_overlays()
+ . = ..()
+ if(!defib)
+ return
+
+ . += "defib"
+
+ if(defib.powered)
+ . += (defib.safety ? "online" : "emagged")
+ var/ratio = defib.cell.charge / defib.cell.maxcharge
+ ratio = CEILING(ratio * 4, 1) * 25
+ . += "charge[ratio]"
+
+ if(clamps_locked)
+ . += "clamps"
/obj/machinery/defibrillator_mount/get_cell()
if(defib)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 5c2676c2b9..71f39608b5 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -58,8 +58,6 @@
/obj/machinery/firealarm/update_icon()
cut_overlays()
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
- var/area/A = src.loc
- A = A.loc
if(panel_open)
icon_state = "fire_b[buildstage]"
@@ -69,23 +67,32 @@
icon_state = "firex"
return
+ icon_state = "fire0"
+
if(stat & NOPOWER)
- icon_state = "fire0"
return
- if(is_station_level(z))
- add_overlay("overlay_[GLOB.security_level]")
- SSvis_overlays.add_vis_overlay(src, icon, "overlay_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
- else
- add_overlay("overlay_[SEC_LEVEL_GREEN]")
- SSvis_overlays.add_vis_overlay(src, icon, "overlay_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+ add_overlay("fire_overlay")
- if(detecting)
- add_overlay("overlay_[A.fire ? "fire" : "clear"]")
- SSvis_overlays.add_vis_overlay(src, icon, "overlay_[A.fire ? "fire" : "clear"]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+ if(is_station_level(z))
+ add_overlay("fire_[GLOB.security_level]")
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
else
- add_overlay("overlay_fire")
- SSvis_overlays.add_vis_overlay(src, icon, "overlay_fire", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+ add_overlay("fire_[SEC_LEVEL_GREEN]")
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+
+ var/area/A = src.loc
+ A = A.loc
+
+ if(!detecting || !A.fire)
+ add_overlay("fire_off")
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_off", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+ else if(obj_flags & EMAGGED)
+ add_overlay("fire_emagged")
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
+ else
+ add_overlay("fire_on")
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_on", ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir)
/obj/machinery/firealarm/emp_act(severity)
. = ..()
@@ -101,6 +108,7 @@
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
+ update_icon()
if(user)
user.visible_message("Sparks fly out of [src]! ",
"You emag [src], disabling its thermal sensors. ")
@@ -112,51 +120,39 @@
alarm()
..()
-/obj/machinery/firealarm/proc/alarm()
- if(!is_operational() && (last_alarm+FIREALARM_COOLDOWN < world.time))
+/obj/machinery/firealarm/proc/alarm(mob/user)
+ if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time))
return
last_alarm = world.time
var/area/A = get_area(src)
A.firealert(src)
- playsound(src.loc, 'goon/sound/machinery/FireAlarm.ogg', 75)
+ playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75)
+ if(user)
+ log_game("[user] triggered a fire alarm at [COORD(src)]")
-/obj/machinery/firealarm/proc/reset()
+/obj/machinery/firealarm/proc/reset(mob/user)
if(!is_operational())
return
var/area/A = get_area(src)
A.firereset(src)
+ if(user)
+ log_game("[user] reset a fire alarm at [COORD(src)]")
-/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
- datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "firealarm", name, 300, 150, master_ui, state)
- ui.open()
-
-/obj/machinery/firealarm/ui_data(mob/user)
- var/list/data = list()
- data["emagged"] = obj_flags & EMAGGED ? 1 : 0
-
- if(is_station_level(z))
- data["seclevel"] = get_security_level()
- else
- data["seclevel"] = "green"
-
+/obj/machinery/firealarm/attack_hand(mob/user)
+ if(buildstage != 2)
+ return ..()
+ add_fingerprint(user)
var/area/A = get_area(src)
- data["alarm"] = A.fire
+ if(A.fire)
+ reset(user)
+ else
+ alarm(user)
- return data
+/obj/machinery/firealarm/attack_ai(mob/user)
+ return attack_hand(user)
-/obj/machinery/firealarm/ui_act(action, params)
- if(..() || buildstage != 2)
- return
- switch(action)
- if("reset")
- reset()
- . = TRUE
- if("alarm")
- alarm()
- . = TRUE
+/obj/machinery/firealarm/attack_robot(mob/user)
+ return attack_hand(user)
/obj/machinery/firealarm/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
@@ -200,6 +196,12 @@
to_chat(user, "You cut the wires from \the [src]. ")
update_icon()
return
+ else if(W.force) //hit and turn it on
+ ..()
+ var/area/A = get_area(src)
+ if(!A.fire)
+ alarm()
+ return
if(1)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/coil = W
@@ -322,8 +324,3 @@
if (!party_overlay)
party_overlay = iconstate2appearance('icons/turf/areas.dmi', "party")
A.add_overlay(party_overlay)
-
-/obj/machinery/firealarm/partyalarm/ui_data(mob/user)
- . = ..()
- var/area/A = get_area(src)
- .["alarm"] = A && A.party
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 694df02eb5..2a4b903906 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -21,9 +21,9 @@
name = "light switch ([area.name])"
on = area.lightswitch
- updateicon()
+ update_icon()
-/obj/machinery/light_switch/proc/updateicon()
+/obj/machinery/light_switch/update_icon()
if(stat & NOPOWER)
icon_state = "light-p"
else
@@ -41,11 +41,11 @@
on = !on
area.lightswitch = on
- area.updateicon()
+ area.update_icon()
for(var/obj/machinery/light_switch/L in area)
L.on = on
- L.updateicon()
+ L.update_icon()
area.power_change()
@@ -57,7 +57,7 @@
else
stat |= NOPOWER
- updateicon()
+ update_icon()
/obj/machinery/light_switch/emp_act(severity)
. = ..()
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index 094db5a676..370621e0c8 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -46,10 +46,10 @@
// update the invisibility and icon
/obj/machinery/magnetic_module/hide(intact)
invisibility = intact ? INVISIBILITY_MAXIMUM : 0
- updateicon()
+ update_icon()
// update the icon_state
-/obj/machinery/magnetic_module/proc/updateicon()
+/obj/machinery/magnetic_module/update_icon()
var/state="floor_magnet"
var/onstate=""
if(!on)
@@ -161,7 +161,7 @@
else
use_power = NO_POWER_USE
- updateicon()
+ update_icon()
/obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the magneting
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index d64ae75e2c..0f57bea656 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -72,10 +72,10 @@
// hide the object if turf is intact
/obj/machinery/navbeacon/hide(intact)
invisibility = intact ? INVISIBILITY_MAXIMUM : 0
- updateicon()
+ update_icon()
// update the icon_state
-/obj/machinery/navbeacon/proc/updateicon()
+/obj/machinery/navbeacon/update_icon()
var/state="navbeacon[open]"
if(invisibility)
@@ -94,7 +94,7 @@
user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover. ")
- updateicon()
+ update_icon()
else if (istype(I, /obj/item/card/id)||istype(I, /obj/item/pda))
if(open)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index f35caf514c..adc0e5bf1e 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -326,6 +326,9 @@
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
if(state_open && is_operational())
+ if(istype(I, /obj/item/clothing/head/mob_holder))
+ to_chat(user, "You can't quite fit that in while you hold it! ")
+ return
if(istype(I, /obj/item/clothing/suit))
if(suit)
to_chat(user, "The unit already contains a suit!. ")
@@ -437,4 +440,4 @@
if(I)
I.forceMove(loc)
. = TRUE
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 2ca0df75ae..6990a7a4ba 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -219,6 +219,10 @@
update_icon()
return
+ if(istype(W, /obj/item/clothing/head/mob_holder))
+ to_chat(user, "It's too unwieldly to put in this way. ")
+ return 1
+
else if(user.a_intent != INTENT_HARM)
if (!state_open)
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index c7c180af41..0e6980d6b7 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -27,6 +27,7 @@
max_temperature = 35000
leg_overload_coeff = 100
operation_req_access = list(ACCESS_SYNDICATE)
+ internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/gygax/dark
max_equip = 4
spawn_tracked = FALSE
diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm
index 3a3d98ad1e..ffe318def5 100644
--- a/code/game/mecha/combat/honker.dm
+++ b/code/game/mecha/combat/honker.dm
@@ -10,6 +10,7 @@
max_temperature = 25000
infra_luminosity = 5
operation_req_access = list(ACCESS_THEATRE)
+ internals_req_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS)
wreckage = /obj/structure/mecha_wreckage/honker
add_req_access = 0
max_equip = 3
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index 42817b586c..fa9449937b 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -10,6 +10,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
infra_luminosity = 3
operation_req_access = list(ACCESS_CENT_SPECOPS)
+ internals_req_access = list(ACCESS_CENT_SPECOPS, ACCESS_ROBOTICS)
wreckage = /obj/structure/mecha_wreckage/marauder
add_req_access = 0
internal_damage_threshold = 25
@@ -46,6 +47,7 @@
name = "\improper Seraph"
icon_state = "seraph"
operation_req_access = list(ACCESS_CENT_SPECOPS)
+ internals_req_access = list(ACCESS_CENT_SPECOPS, ACCESS_ROBOTICS)
step_in = 3
max_integrity = 550
wreckage = /obj/structure/mecha_wreckage/seraph
@@ -72,6 +74,7 @@
name = "\improper Mauler"
icon_state = "mauler"
operation_req_access = list(ACCESS_SYNDICATE)
+ internals_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/mauler
max_equip = 5
diff --git a/code/game/mecha/combat/neovgre.dm b/code/game/mecha/combat/neovgre.dm
index b1f2cdd02a..8fc1dd97b2 100644
--- a/code/game/mecha/combat/neovgre.dm
+++ b/code/game/mecha/combat/neovgre.dm
@@ -12,6 +12,8 @@
layer = ABOVE_MOB_LAYER
breach_time = 100 //ten seconds till all goes to shit
recharge_rate = 100
+ internals_req_access = list()
+ add_req_access = 0
wreckage = /obj/structure/mecha_wreckage/durand/neovgre
spawn_tracked = FALSE
@@ -47,7 +49,7 @@
for(var/mob/M in src)
to_chat(M, "You are consumed by the fires raging within Neovgre... ")
M.dust()
- playsound(src, 'sound/magic/lightning_chargeup.ogg', 100, 0)
+ playsound(src, 'sound/effects/neovgre_exploding.ogg', 100, 0)
src.visible_message("The reactor has gone critical, its going to blow! ")
addtimer(CALLBACK(src,.proc/go_critical),breach_time)
diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm
index 7e8c865517..446e2e853c 100644
--- a/code/game/mecha/combat/reticence.dm
+++ b/code/game/mecha/combat/reticence.dm
@@ -10,6 +10,7 @@
max_temperature = 15000
wreckage = /obj/structure/mecha_wreckage/reticence
operation_req_access = list(ACCESS_THEATRE)
+ internals_req_access = list(ACCESS_THEATRE, ACCESS_ROBOTICS)
add_req_access = 0
internal_damage_threshold = 25
max_equip = 2
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 35500bed07..7e860d9315 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -68,7 +68,7 @@
var/internal_damage = 0 //contains bitflags
var/list/operation_req_access = list()//required access level for mecha operation
- var/list/internals_req_access = list(ACCESS_ENGINE,ACCESS_ROBOTICS)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT
+ var/list/internals_req_access = list(ACCESS_ROBOTICS)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT
var/wreckage
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index 9f072c48b6..6f92e94759 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -72,6 +72,11 @@
desc = "It's still good. Four second rule!"
icon_state = "flour"
+/obj/effect/decal/cleanable/greenglow/ecto
+ name = "ectoplasmic puddle"
+ desc = "You know who to call."
+ light_power = 2
+
/obj/effect/decal/cleanable/greenglow
name = "glowing goo"
desc = "Jeez. I hope that's not for lunch."
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index ed88d51c2d..e01010baa5 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -432,3 +432,52 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
GLOB.ruin_landmarks -= src
ruin_template = null
. = ..()
+
+//------Station Rooms Landmarks------------//
+/obj/effect/landmark/stationroom
+ var/list/template_names = list()
+ layer = BULLET_HOLE_LAYER
+
+/obj/effect/landmark/stationroom/New()
+ ..()
+ GLOB.stationroom_landmarks += src
+
+/obj/effect/landmark/stationroom/Destroy()
+ if(src in GLOB.stationroom_landmarks)
+ GLOB.stationroom_landmarks -= src
+ return ..()
+
+/obj/effect/landmark/stationroom/proc/load(template_name)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return FALSE
+ if(!template_name)
+ for(var/t in template_names)
+ if(!SSmapping.station_room_templates[t])
+ log_world("Station room spawner placed at ([T.x], [T.y], [T.z]) has invalid ruin name of \"[t]\" in its list")
+ template_names -= t
+ template_name = safepick(template_names)
+ if(!template_name)
+ GLOB.stationroom_landmarks -= src
+ qdel(src)
+ return FALSE
+ var/datum/map_template/template = SSmapping.station_room_templates[template_name]
+ if(!template)
+ return FALSE
+ testing("Room \"[template_name]\" placed at ([T.x], [T.y], [T.z])")
+ template.load(T, centered = FALSE)
+ template.loaded++
+ GLOB.stationroom_landmarks -= src
+ qdel(src)
+ return TRUE
+
+// The landmark for the Engine on Box
+
+/obj/effect/landmark/stationroom/box/engine
+ template_names = list("Engine SM", "Engine Singulo", "Engine Tesla")
+ icon = 'icons/rooms/box/engine.dmi'
+
+
+/obj/effect/landmark/stationroom/box/engine/New()
+ . = ..()
+ template_names = CONFIG_GET(keyed_list/box_random_engine)
\ No newline at end of file
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index bdb949a570..4540e48ebc 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -165,7 +165,7 @@
/obj/item/organ/heart/gland/chem = 5,
/obj/item/organ/heart/gland/mindshock = 5,
/obj/item/organ/heart/gland/plasma = 7,
- /obj/item/organ/heart/gland/pop = 5,
+ /obj/item/organ/heart/gland/transform = 5,
/obj/item/organ/heart/gland/slime = 4,
/obj/item/organ/heart/gland/spiderman = 5,
/obj/item/organ/heart/gland/ventcrawling = 1,
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index 0990486ae3..1b85a41f7c 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -349,6 +349,10 @@
icon_state = "impact_laser_purple"
duration = 4
+/obj/effect/temp_visual/impact_effect/shrink
+ icon_state = "m_shield"
+ duration = 10
+
/obj/effect/temp_visual/impact_effect/ion
icon_state = "shieldsparkles"
duration = 6
@@ -442,3 +446,10 @@
animate(src, alpha = 0, transform = skew, time = duration)
else
return INITIALIZE_HINT_QDEL
+
+/obj/effect/temp_visual/slugboom
+ icon = 'icons/effects/96x96.dmi'
+ icon_state = "slugboom"
+ randomdir = FALSE
+ duration = 30
+ pixel_x = -24
\ No newline at end of file
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 016bfb5e8b..24c241aabc 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -133,15 +133,14 @@ RLD
if(!(A in range(custom_range, get_turf(user))))
to_chat(user, "The \'Out of Range\' light on [src] blinks red. ")
return FALSE
- else
- return TRUE
-
-/obj/item/construction/proc/prox_check(proximity)
- if(proximity)
- return TRUE
- else
+ var/view_range = user.client ? user.client.view : world.view
+ //if user can't be seen from A (only checks surroundings' opaqueness) and can't see A.
+ //jarring, but it should stop people from targetting atoms they can't see...
+ //excluding darkness, to allow RLD to be used to light pitch black dark areas.
+ if(!((user in view(view_range, A)) || (user in viewers(view_range, A))))
+ to_chat(user, "You focus, pointing \the [src] at whatever outside your field of vision in the given direction... to no avail. ")
return FALSE
-
+ return TRUE
/obj/item/construction/rcd
name = "rapid-construction-device (RCD)"
@@ -523,7 +522,12 @@ RLD
/obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity)
. = ..()
- if(!prox_check(proximity))
+ if(!proximity)
+ if(!ranged || !range_check(A,user)) //early return not-in-range sanity.
+ return
+ if(target_check(A,user))
+ user.Beam(A,icon_state="rped_upgrade",time=30)
+ rcd_create(A,user)
return
rcd_create(A, user)
@@ -635,6 +639,7 @@ RLD
max_matter = INFINITY
matter = INFINITY
upgrade = TRUE
+ ranged = TRUE
// Ranged RCD
@@ -650,20 +655,10 @@ RLD
item_state = "oldrcd"
has_ammobar = FALSE
-/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user)
- . = ..()
- if(!range_check(A,user))
- return
- if(target_check(A,user))
- user.Beam(A,icon_state="rped_upgrade",time=30)
- rcd_create(A,user)
-
-
// RAPID LIGHTING DEVICE
-
/obj/item/construction/rld
name = "rapid-light-device (RLD)"
desc = "A device used to rapidly provide lighting sources to an area. Reload with metal, plasteel, glass or compressed matter cartridges."
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 2392973b22..10a2b2c807 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -665,6 +665,13 @@
name = "Booze Dispenser (Machine Board)"
build_path = /obj/machinery/chem_dispenser/drinks/beer
+/obj/item/circuitboard/machine/chem_dispenser/abductor
+ name = "Reagent Synthetizer (Abductor Machine Board)"
+ icon_state = "abductor_mod"
+ build_path = /obj/machinery/chem_dispenser/abductor
+ def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
+ needs_anchored = FALSE
+
/obj/item/circuitboard/machine/smoke_machine
name = "Smoke Machine (Machine Board)"
build_path = /obj/machinery/smoke_machine
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 702347c220..07d58c1754 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -47,8 +47,7 @@
/obj/item/defibrillator/update_icon()
update_power()
- update_overlays()
- update_charge()
+ return ..()
/obj/item/defibrillator/proc/update_power()
if(!QDELETED(cell))
@@ -59,23 +58,20 @@
else
powered = FALSE
-/obj/item/defibrillator/proc/update_overlays()
- cut_overlays()
+/obj/item/defibrillator/update_overlays()
+ . = ..()
if(!on)
- add_overlay("[initial(icon_state)]-paddles")
+ . += "[initial(icon_state)]-paddles"
if(powered)
- add_overlay("[initial(icon_state)]-powered")
- if(!cell)
- add_overlay("[initial(icon_state)]-nocell")
- if(!safety)
- add_overlay("[initial(icon_state)]-emagged")
-
-/obj/item/defibrillator/proc/update_charge()
- if(powered) //so it doesn't show charge if it's unpowered
+ . += "[initial(icon_state)]-powered"
if(!QDELETED(cell))
var/ratio = cell.charge / cell.maxcharge
ratio = CEILING(ratio*4, 1) * 25
add_overlay("[initial(icon_state)]-charge[ratio]")
+ if(!cell)
+ . += "[initial(icon_state)]-nocell"
+ if(!safety)
+ . += "[initial(icon_state)]-emagged"
/obj/item/defibrillator/CheckParts(list/parts_list)
..()
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 7baea7f488..1654ecde41 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -69,14 +69,9 @@
if (!user.IsAdvancedToolUser())
to_chat(user, "You don't have the dexterity to do this! ")
return
- if(HAS_TRAIT(user, TRAIT_NOGUNS))
+ if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS))
to_chat(user, "Your fingers can't press the button! ")
return
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.dna.check_mutation(HULK))
- to_chat(user, "Your fingers can't press the button! ")
- return
add_fingerprint(user)
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index 4d91fee9aa..cc009b5fc2 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -44,11 +44,6 @@
icon_state = "eng_cypherkey"
channels = list(RADIO_CHANNEL_ENGINEERING = 1)
-/obj/item/encryptionkey/headset_rob
- name = "robotics radio encryption key"
- icon_state = "rob_cypherkey"
- channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1)
-
/obj/item/encryptionkey/headset_med
name = "medical radio encryption key"
icon_state = "med_cypherkey"
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 1d0f94de71..42d9ec0269 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -123,12 +123,6 @@ GLOBAL_LIST_INIT(channel_tokens, list(
icon_state = "eng_headset"
keyslot = new /obj/item/encryptionkey/headset_eng
-/obj/item/radio/headset/headset_rob
- name = "robotics radio headset"
- desc = "Made specifically for the roboticists, who cannot decide between departments."
- icon_state = "rob_headset"
- keyslot = new /obj/item/encryptionkey/headset_rob
-
/obj/item/radio/headset/headset_med
name = "medical radio headset"
desc = "A headset for the trained staff of the medbay."
@@ -230,6 +224,14 @@ GLOBAL_LIST_INIT(channel_tokens, list(
icon_state = "srv_headset"
keyslot = new /obj/item/encryptionkey/headset_service
+/obj/item/radio/headset/headset_clown
+ name = "clown's headset"
+ desc = "A headset for the clown. Finally. A megaphone you can't take away."
+ icon_state = "srv_headset"
+ keyslot = new /obj/item/encryptionkey/headset_service
+ command = TRUE
+ commandspan = SPAN_CLOWN
+
/obj/item/radio/headset/headset_cent
name = "\improper CentCom headset"
desc = "A headset used by the upper echelons of Nanotrasen."
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 7823e6bf87..22012a114f 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -29,6 +29,7 @@
var/freqlock = FALSE // Frequency lock to stop the user from untuning specialist radios.
var/use_command = FALSE // If true, broadcasts will be large and BOLD.
var/command = FALSE // If true, use_command can be toggled at will.
+ var/commandspan = SPAN_COMMAND //allow us to set what the fuck we want for headsets
// Encryption key handling
var/obj/item/encryptionkey/keyslot
@@ -206,7 +207,7 @@
return
if(use_command)
- spans |= SPAN_COMMAND
+ spans |= commandspan
/*
Roughly speaking, radios attempt to make a subspace transmission (which
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 6fb5aa47d9..00381b9838 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -412,7 +412,7 @@ SLIME SCANNER
if(ishuman(C))
if(H.bleed_rate)
msg += "Subject is bleeding! \n"
- var/blood_percent = round((C.blood_volume / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
+ var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
var/blood_type = C.dna.blood_type
if(blood_id != ("blood" || "jellyblood"))//special blood substance
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
@@ -420,12 +420,12 @@ SLIME SCANNER
blood_type = R.name
else
blood_type = blood_id
- if(C.blood_volume <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.blood_volume > (BLOOD_VOLUME_OKAY*C.blood_ratio))
- msg += "LOW blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type] \n"
- else if(C.blood_volume <= (BLOOD_VOLUME_OKAY*C.blood_ratio))
- msg += "CRITICAL blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type] \n"
+ if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio))
+ msg += "LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type] \n"
+ else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio))
+ msg += "CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type] \n"
else
- msg += "Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type] \n"
+ msg += "Blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type] \n"
var/cyberimp_detect
for(var/obj/item/organ/cyberimp/CI in C.internal_organs)
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index fca7f9bc6d..a8d57fab69 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -224,7 +224,7 @@
merge_gases()
for(var/i in 1 to 6)
- addtimer(CALLBACK(src, .proc/update_icon), 20 + (i - 1) * 10)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 20 + (i - 1) * 10)
else if(valve_open && tank_one && tank_two)
split_gases()
diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm
index f97b3f99d6..8054d8c6a4 100644
--- a/code/game/objects/items/gift.dm
+++ b/code/game/objects/items/gift.dm
@@ -76,7 +76,7 @@ GLOBAL_LIST_EMPTY(possible_gifts)
/obj/item/clothing/suit/poncho/red,
/obj/item/clothing/suit/snowman,
/obj/item/clothing/head/snowman,
- /obj/item/trash/coal)
+ /obj/item/stack/sheet/mineral/coal)
gift_type_list += subtypesof(/obj/item/clothing/head/collectable)
gift_type_list += subtypesof(/obj/item/toy) - (((typesof(/obj/item/toy/cards) - /obj/item/toy/cards/deck) + /obj/item/toy/figure + /obj/item/toy/ammo)) //All toys, except for abstract types and syndicate cards.
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 6ea68bf548..70cd503ef4 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -183,6 +183,23 @@
explosion(user.loc, 1, 0, 2, 3, FALSE, FALSE, 2)
qdel(src)
+/obj/item/book/granter/spell/nuclearfist
+ spell = /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist
+ spellname = "nuclear fist"
+ icon_state ="booknuclearfist"
+ desc = "This book radiates confidence."
+ remarks = list("Line them up....", ".. knock em' down...", "Dress in yellow for maximum effect... why?", "The energy comes from spinach... huh", "Work out for three years? No way!", "Oh I'll cast you a spell allright...", "What ho mighty wizard... ho ho ho...")
+
+/obj/item/book/granter/spell/nuclearfist/recoil(mob/living/carbon/user)
+ ..()
+ to_chat(user, "Your arm spontaneously detonates! ")
+ explosion(user.loc, -1, 0, 2, -1, FALSE, FALSE, 2)
+ var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src)
+ if(part)
+ part.dismember()
+ qdel(part)
+
+
/obj/item/book/granter/spell/sacredflame
spell = /obj/effect/proc_holder/spell/targeted/sacred_flame
spellname = "sacred flame"
@@ -397,6 +414,23 @@
name = "empty scroll"
icon_state = "blankscroll"
+/obj/item/book/granter/martial/bass
+ martial = /datum/martial_art/the_rising_bass
+ name = "shifting scroll"
+ martialname = "rising bass"
+ desc = "A paper scroll that seems to move even as you read it, the letters never seem to stay still."
+ greet = "You have learned the ancient martial art of the Rising Bass. Your skill at running away has increased quite a bit. Use the combos to get away from opponents quickly. Along with this, you now dodge all projectiles and catch anything thrown at you. "
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "scroll2"
+ remarks = list("The trick is to disarm them...","Running away helps in many situations...","Never stay still...","Fighting won't help unless you're forced to...", "Crush their limbs to incapacitate them...", "Stay as far away as possible...")
+
+/obj/item/book/granter/martial/bass/onlearned(mob/living/carbon/user)
+ ..()
+ if(oneuse == TRUE)
+ desc = "It's completely blank."
+ name = "empty scroll"
+ icon_state = "blankscroll"
+
/obj/item/book/granter/martial/plasma_fist
martial = /datum/martial_art/plasma_fist
name = "frayed scroll"
diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm
index 48ecf8273a..66897fa722 100644
--- a/code/game/objects/items/grenades/flashbang.dm
+++ b/code/game/objects/items/grenades/flashbang.dm
@@ -14,23 +14,31 @@
do_sparks(rand(5, 9), FALSE, src)
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9)
new /obj/effect/dummy/lighting_obj (flashbang_turf, LIGHT_COLOR_WHITE, (flashbang_range + 2), 4, 2)
- for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf))
- bang(get_turf(M), M)
+ flashbang_mobs(flashbang_turf, flashbang_range)
qdel(src)
-/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
+/obj/item/grenade/flashbang/proc/flashbang_mobs(turf/source, range)
+ var/list/banged = get_hearers_in_view(range, source)
+ var/list/flashed = viewers(range, source)
+ for(var/i in banged)
+ bang(i, source)
+ for(var/i in flashed)
+ flash(i, source)
+
+/obj/item/grenade/flashbang/proc/bang(mob/living/M, turf/source)
if(M.stat == DEAD) //They're dead!
return
M.show_message("BANG ", MSG_AUDIBLE)
- var/distance = max(0,get_dist(get_turf(src),T))
-
-//Flash
- if(M.flash_act(affect_silicon = 1))
- M.Knockdown(max(200/max(1,distance), 60))
-//Bang
+ var/distance = get_dist(get_turf(M), source)
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
M.Knockdown(200)
M.soundbang_act(1, 200, 10, 15)
-
else
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5))
+
+/obj/item/grenade/flashbang/proc/flash(mob/living/M, turf/source)
+ if(M.stat == DEAD) //They're dead!
+ return
+ var/distance = get_dist(get_turf(M), source)
+ if(M.flash_act(affect_silicon = 1))
+ M.Knockdown(max(200/max(1,distance), 60))
diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm
index 2a99c6e1ec..52f9f3b9a4 100644
--- a/code/game/objects/items/implants/implant_mindshield.dm
+++ b/code/game/objects/items/implants/implant_mindshield.dm
@@ -26,6 +26,9 @@
if(target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
+ if(target.mind.has_antag_datum(ANTAG_DATUM_VASSAL))
+ SSticker.mode.remove_vassal(target.mind)
+
if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable || target.mind.has_antag_datum(/datum/antagonist/gang/boss))
if(!silent)
target.visible_message("[target] seems to resist the implant! ", "You feel something interfering with your mental conditioning, but you resist it! ")
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index d7c2f7f4f6..d8abff70a6 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -79,17 +79,17 @@
final_block_chance = 0 //Don't bring a sword to a gunfight
return ..()
-/obj/item/melee/sabre/on_exit_storage(obj/item/storage/S)
- ..()
- var/obj/item/storage/belt/sabre/B = S
+/obj/item/melee/sabre/on_exit_storage(datum/component/storage/S)
+ var/obj/item/storage/belt/sabre/B = S.parent
if(istype(B))
playsound(B, 'sound/items/unsheath.ogg', 25, 1)
-
-/obj/item/melee/sabre/on_enter_storage(obj/item/storage/S)
..()
- var/obj/item/storage/belt/sabre/B = S
+
+/obj/item/melee/sabre/on_enter_storage(datum/component/storage/S)
+ var/obj/item/storage/belt/sabre/B = S.parent
if(istype(B))
playsound(B, 'sound/items/sheath.ogg', 25, 1)
+ ..()
/obj/item/melee/sabre/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "sabre")
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index 72d27ae544..e63b4d7a3a 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -213,7 +213,7 @@
loadedWeightClass -= I.w_class
else if (A == tank)
tank = null
- update_icons()
+ update_icon()
/obj/item/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller
name = "improvised pneumatic cannon"
@@ -239,14 +239,13 @@
return
to_chat(user, "You hook \the [thetank] up to \the [src]. ")
tank = thetank
- update_icons()
+ update_icon()
-/obj/item/pneumatic_cannon/proc/update_icons()
+/obj/item/pneumatic_cannon/update_icon()
cut_overlays()
if(!tank)
return
add_overlay(tank.icon_state)
- update_icon()
/obj/item/pneumatic_cannon/proc/fill_with_type(type, amount)
if(!ispath(type, /obj) && !ispath(type, /mob))
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 95110692c9..ab8030c9c2 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -24,7 +24,7 @@
/obj/item/robot_suit/New()
..()
- updateicon()
+ update_icon()
/obj/item/robot_suit/prebuilt/New()
l_arm = new(src)
@@ -39,7 +39,7 @@
chest.cell = new /obj/item/stock_parts/cell/high/plus(chest)
..()
-/obj/item/robot_suit/proc/updateicon()
+/obj/item/robot_suit/update_icon()
cut_overlays()
if(l_arm)
add_overlay("[l_arm.icon_state]+o")
@@ -96,7 +96,7 @@
to_chat(user, "You disassemble the cyborg shell. ")
else
to_chat(user, "There is nothing to remove from the endoskeleton. ")
- updateicon()
+ update_icon()
/obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc
if(!user.put_in_hands(I))
@@ -160,7 +160,7 @@
W.icon_state = initial(W.icon_state)
W.cut_overlays()
src.l_leg = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/r_leg/robot))
if(src.r_leg)
@@ -170,7 +170,7 @@
W.icon_state = initial(W.icon_state)
W.cut_overlays()
src.r_leg = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/l_arm/robot))
if(src.l_arm)
@@ -180,7 +180,7 @@
W.icon_state = initial(W.icon_state)
W.cut_overlays()
src.l_arm = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/r_arm/robot))
if(src.r_arm)
@@ -190,7 +190,7 @@
W.icon_state = initial(W.icon_state)//in case it is a dismembered robotic limb
W.cut_overlays()
src.r_arm = W
- src.updateicon()
+ update_icon()
else if(istype(W, /obj/item/bodypart/chest/robot))
var/obj/item/bodypart/chest/robot/CH = W
@@ -202,7 +202,7 @@
CH.icon_state = initial(CH.icon_state) //in case it is a dismembered robotic limb
CH.cut_overlays()
src.chest = CH
- src.updateicon()
+ update_icon()
else if(!CH.wired)
to_chat(user, "You need to attach wires to it first! ")
else
@@ -222,7 +222,7 @@
HD.icon_state = initial(HD.icon_state)//in case it is a dismembered robotic limb
HD.cut_overlays()
src.head = HD
- src.updateicon()
+ update_icon()
else
to_chat(user, "You need to attach a flash to it first! ")
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 3d5aa6c3bc..7c07f37b14 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -74,7 +74,7 @@
/obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
- if(R.speed < 0)
+ if(!R.cansprint)
to_chat(R, "A VTEC unit is already installed! ")
to_chat(user, "There's no room for another VTEC unit! ")
return FALSE
@@ -82,11 +82,13 @@
//R.speed = -2 // Gotta go fast.
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
R.AddAbility(new/obj/effect/proc_holder/silicon/cyborg/vtecControl)
+ R.cansprint = 0
/obj/item/borg/upgrade/vtec/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
R.speed = initial(R.speed)
+ R.cansprint = 1
/obj/item/borg/upgrade/disablercooler
name = "cyborg rapid energy blaster cooling module"
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 9f3e5f6bd4..178bdd8a5e 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -2,8 +2,8 @@
name = "medical pack"
singular_name = "medical pack"
icon = 'icons/obj/stack_objects.dmi'
- amount = 6
- max_amount = 6
+ amount = 12
+ max_amount = 12
w_class = WEIGHT_CLASS_TINY
full_w_class = WEIGHT_CLASS_TINY
throw_speed = 3
@@ -11,95 +11,42 @@
resistance_flags = FLAMMABLE
max_integrity = 40
novariants = FALSE
- var/heal_brute = 0
- var/heal_burn = 0
- var/stop_bleeding = 0
+ item_flags = NOBLUDGEON
var/self_delay = 50
/obj/item/stack/medical/attack(mob/living/M, mob/user)
- if(M.stat == DEAD && !stop_bleeding)
- var/t_him = "it"
- if(M.gender == MALE)
- t_him = "him"
- else if(M.gender == FEMALE)
- t_him = "her"
- to_chat(user, "\The [M] is dead, you cannot help [t_him]! ")
+ . = ..()
+ if(!M.can_inject(user, TRUE))
return
-
- if(!iscarbon(M) && !isanimal(M))
- to_chat(user, "You don't know how to apply \the [src] to [M]! ")
- return 1
-
- var/obj/item/bodypart/affecting
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- affecting = C.get_bodypart(check_zone(user.zone_selected))
- if(!affecting) //Missing limb?
- to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]! ")
+ if(M == user)
+ user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self... ", "You begin applying \the [src] on yourself... ")
+ if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE)))
return
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(stop_bleeding)
- if(H.bleedsuppress)
- to_chat(user, "[H]'s bleeding is already bandaged! ")
- return
- else if(!H.bleed_rate)
- to_chat(user, "[H] isn't bleeding! ")
- return
+ if(heal(M, user))
+ log_combat(user, M, "healed", src.name)
+ use(1)
- if(isliving(M))
- if(!M.can_inject(user, 1))
- return
+/obj/item/stack/medical/proc/heal(mob/living/M, mob/user)
+ return
- if(user)
- if (M != user)
- if (isanimal(M))
- var/mob/living/simple_animal/critter = M
- if (!(critter.healable))
- to_chat(user, " You cannot use [src] on [M]! ")
- return
- else if (critter.health == critter.maxHealth)
- to_chat(user, " [M] is at full health. ")
- return
- else if(src.heal_brute < 1)
- to_chat(user, " [src] won't help [M] at all. ")
- return
- user.visible_message("[user] applies [src] on [M]. ", "You apply [src] on [M]. ")
- else
- var/t_himself = "itself"
- if(user.gender == MALE)
- t_himself = "himself"
- else if(user.gender == FEMALE)
- t_himself = "herself"
- user.visible_message("[user] starts to apply [src] on [t_himself]... ", "You begin applying [src] on yourself... ")
- if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject,user,1)))
- return
- user.visible_message("[user] applies [src] on [t_himself]. ", "You apply [src] on yourself. ")
-
-
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- affecting = C.get_bodypart(check_zone(user.zone_selected))
- if(!affecting) //Missing limb?
- to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]! ")
- return
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(stop_bleeding)
- if(!H.bleedsuppress) //so you can't stack bleed suppression
- H.suppress_bloodloss(stop_bleeding)
- if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
- if(affecting.heal_damage(heal_brute, heal_burn))
+/obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/C, mob/user, brute, burn)
+ var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected))
+ if(!affecting) //Missing limb?
+ to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]! ")
+ return
+ if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR
+ if(affecting.brute_dam && brute || affecting.burn_dam && burn)
+ user.visible_message("[user] applies \the [src] on [C]'s [affecting.name]. ", "You apply \the [src] on [C]'s [affecting.name]. ")
+ if(affecting.heal_damage(brute, burn))
C.update_damage_overlays()
- else
- to_chat(user, "Medicine won't work on a robotic limb! ")
- else
- M.heal_bodypart_damage((src.heal_brute/2), (src.heal_burn/2))
-
- use(1)
-
+ return TRUE
+ to_chat(user, "[C]'s [affecting.name] can not be healed with \the [src]. ")
+ return
+ to_chat(user, "\The [src] won't work on a robotic limb! ")
+/obj/item/stack/medical/get_belt_overlay()
+ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
/obj/item/stack/medical/bruise_pack
name = "bruise pack"
@@ -108,27 +55,54 @@
icon_state = "brutepack"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- heal_brute = 40
+ var/heal_brute = 20
self_delay = 20
grind_results = list("styptic_powder" = 10)
+/obj/item/stack/medical/bruise_pack/heal(mob/living/M, mob/user)
+ if(M.stat == DEAD)
+ to_chat(user, " [M] is dead. You can not help [M.p_them()]! ")
+ return
+ if(isanimal(M))
+ var/mob/living/simple_animal/critter = M
+ if (!(critter.healable))
+ to_chat(user, " You cannot use \the [src] on [M]! ")
+ return FALSE
+ else if (critter.health == critter.maxHealth)
+ to_chat(user, " [M] is at full health. ")
+ return FALSE
+ user.visible_message("[user] applies \the [src] on [M]. ", "You apply \the [src] on [M]. ")
+ M.heal_bodypart_damage((heal_brute/2))
+ return TRUE
+ if(iscarbon(M))
+ return heal_carbon(M, user, heal_brute, 0)
+ to_chat(user, "You can't heal [M] with the \the [src]! ")
+
/obj/item/stack/medical/bruise_pack/suicide_act(mob/user)
user.visible_message("[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
return (BRUTELOSS)
/obj/item/stack/medical/gauze
name = "medical gauze"
- desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds."
+ desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, heals minor wounds."
gender = PLURAL
singular_name = "medical gauze"
icon_state = "gauze"
- stop_bleeding = 1800
- self_delay = 20
- max_amount = 12
+ var/stop_bleeding = 1800
+ var/heal_brute = 5
+ self_delay = 10
+/obj/item/stack/medical/gauze/heal(mob/living/M, mob/user)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression
+ H.suppress_bloodloss(stop_bleeding)
+ to_chat(user, "You stop the bleeding of [M]! ")
+ return TRUE
+ to_chat(user, "You can not use \the [src] on [M]! ")
/obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/wirecutters) || I.get_sharpness())
+ if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness())
if(get_amount() < 2)
to_chat(user, "You need at least two gauzes to do this! ")
return
@@ -149,6 +123,7 @@
singular_name = "improvised gauze"
desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
stop_bleeding = 900
+ heal_brute = 0
/obj/item/stack/medical/gauze/cyborg
materials = list()
@@ -163,13 +138,18 @@
icon_state = "ointment"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- heal_burn = 40
+ var/heal_burn = 20
self_delay = 20
grind_results = list("silver_sulfadiazine" = 10)
+/obj/item/stack/medical/ointment/heal(mob/living/M, mob/user)
+ if(M.stat == DEAD)
+ to_chat(user, " [M] is dead. You can not help [M.p_them()]! ")
+ return
+ if(iscarbon(M))
+ return heal_carbon(M, user, 0, heal_burn)
+ to_chat(user, "You can't heal [M] with the \the [src]! ")
+
/obj/item/stack/medical/ointment/suicide_act(mob/living/user)
user.visible_message("[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic? ")
return TOXLOSS
-
-/obj/item/stack/medical/get_belt_overlay()
- return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 63ebd24b16..fe42f88f56 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -4,7 +4,6 @@ Mineral Sheets
- Sandstone
- Sandbags
- Diamond
- - Snow
- Uranium
- Plasma
- Gold
@@ -15,8 +14,9 @@ Mineral Sheets
Others:
- Adamantine
- Mythril
- - Enriched Uranium
+ - Snow
- Abductor
+ - Coal
*/
/obj/item/stack/sheet/mineral/Initialize(mapload)
@@ -410,3 +410,36 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
/obj/item/stack/sheet/mineral/abductor/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.abductor_recipes
. = ..()
+
+/*
+ * Coal
+ */
+
+/obj/item/stack/sheet/mineral/coal
+ name = "coal"
+ desc = "Someone's gotten on the naughty list."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "slag"
+ singular_name = "coal lump"
+ merge_type = /obj/item/stack/sheet/mineral/coal
+ grind_results = list("carbon" = 20)
+
+/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params)
+ if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
+ var/turf/T = get_turf(src)
+ message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
+ log_game("Coal ignited by [key_name(user)] in [AREACOORD(T)]")
+ fire_act(W.get_temperature())
+ return TRUE
+ else
+ return ..()
+
+/obj/item/stack/sheet/mineral/coal/fire_act(exposed_temperature, exposed_volume)
+ atmos_spawn_air("co2=[amount*10];TEMP=[exposed_temperature]")
+ qdel(src)
+
+/obj/item/stack/sheet/mineral/coal/five
+ amount = 5
+
+/obj/item/stack/sheet/mineral/coal/ten
+ amount = 10
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 33a895cad7..4fc31ea674 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -228,7 +228,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood
name = "wooden plank"
- desc = "One can only guess that this is a bunch of wood."
+ desc = "One can only guess that this is a bunch of wood. You might be able to make a stake with this if you use something sharp on it"
singular_name = "wood plank"
icon_state = "sheet-wood"
item_state = "sheet-wood"
@@ -240,6 +240,35 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
novariants = TRUE
grind_results = list("carbon" = 20)
+
+/obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there.
+ // Taken from /obj/item/stack/rods/attackby in [rods.dm]
+ if(W.get_sharpness())
+ user.visible_message("[user] begins whittling [src] into a pointy object.", \
+ "You begin whittling [src] into a sharp point at one end. ", \
+ "You hear wood carving. ")
+ // 8 Second Timer
+ if(!do_after(user, 80, TRUE, src))
+ return
+ // Make Stake
+ var/obj/item/stake/basic/new_item = new(user.loc)
+ user.visible_message("[user] finishes carving a stake out of [src].", \
+ "You finish carving a stake out of [src]. ")
+ // Prepare to Put in Hands (if holding wood)
+ var/obj/item/stack/sheet/mineral/wood/N = src
+ var/replace = (user.get_inactive_held_item() == N)
+ // Use Wood
+ N.use(1)
+ // If stack depleted, put item in that hand (if it had one)
+ if (!N && replace)
+ user.put_in_hands(new_item)
+ if(istype(W, merge_type))
+ var/obj/item/stack/S = W
+ if(merge(S))
+ to_chat(user, "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s. ")
+ else
+ . = ..()
+
/obj/item/stack/sheet/mineral/wood/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.wood_recipes
return ..()
@@ -247,6 +276,33 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood/fifty
amount = 50
+/*
+ * Bamboo
+ */
+
+GLOBAL_LIST_INIT(bamboo_recipes, list ( \
+ new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 30, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 70), \
+ ))
+
+/obj/item/stack/sheet/mineral/bamboo
+ name = "bamboo cuttings"
+ desc = "Finely cut bamboo sticks."
+ singular_name = "cut bamboo"
+ icon_state = "sheet-bamboo"
+ item_state = "sheet-bamboo"
+ icon = 'icons/obj/stack_objects.dmi'
+ throwforce = 15
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ resistance_flags = FLAMMABLE
+ merge_type = /obj/item/stack/sheet/mineral/bamboo
+ grind_results = list("carbon" = 5)
+
+/obj/item/stack/sheet/mineral/bamboo/Initialize(mapload, new_amount, merge = TRUE)
+ recipes = GLOB.bamboo_recipes
+ return ..()
+
+
/*
* Cloth
*/
@@ -696,5 +752,3 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
merge_type = /obj/item/stack/sheet/cotton/durathread
pull_effort = 70
loom_result = /obj/item/stack/sheet/durathread
-
-
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 15db8e2ebd..d200471b5b 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -551,7 +551,7 @@
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
- new /obj/item/storage/firstaid/tactical(src)
+ new /obj/item/storage/firstaid/tactical/nukeop(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 0d9b86fd68..8c96e567d1 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -176,18 +176,36 @@
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.max_combined_w_class = 16
+ STR.max_items = 8
/obj/item/storage/firstaid/tactical/PopulateContents()
if(empty)
return
new /obj/item/stack/medical/gauze(src)
new /obj/item/defibrillator/compact/combat/loaded(src)
- new /obj/item/reagent_containers/hypospray/combat(src)
- new /obj/item/reagent_containers/pill/patch/styptic(src)
- new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/reagent_containers/syringe/lethal/choral(src)
+ new /obj/item/reagent_containers/hypospray/combat/omnizine(src)
+ new /obj/item/reagent_containers/medspray/styptic(src)
+ new /obj/item/reagent_containers/medspray/silver_sulf(src)
+ new /obj/item/healthanalyzer/advanced(src)
+ new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for
new /obj/item/clothing/glasses/hud/health/night(src)
+/obj/item/storage/firstaid/tactical/nukeop
+ name = "improved combat medical kit"
+
+/obj/item/storage/firstaid/tactical/nukeop/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/defibrillator/compact/combat/loaded(src)
+ new /obj/item/reagent_containers/hypospray/combat(src)
+ new /obj/item/reagent_containers/medspray/styptic(src)
+ new /obj/item/reagent_containers/medspray/silver_sulf(src)
+ new /obj/item/healthanalyzer/advanced(src)
+ new /obj/item/reagent_containers/syringe/lethal/choral(src) // what the fuck does anyone use this piece of shit for
+ new /obj/item/clothing/glasses/hud/health/night(src)
+
/*
* Pill Bottles
*/
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 223c8e9cf6..817465a16c 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -390,4 +390,10 @@
new /obj/item/seeds/random(src)
if(prob(50))
- new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box
\ No newline at end of file
+ new /obj/item/seeds/random(src) //oops, an additional packet might have slipped its way into the box
+
+/obj/item/storage/box/syndie_kit/revolver
+
+/obj/item/storage/box/syndie_kit/revolver/PopulateContents()
+ new /obj/item/gun/ballistic/revolver(src)
+ new /obj/item/ammo_box/a357(src)
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 37ab948332..b2158eb1c8 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -72,17 +72,10 @@
resistance_flags = NONE
grind_results = list("aluminium" = 10)
+/obj/item/trash/boritos
+ name = "boritos bag"
+ icon_state = "boritos"
+ grind_results = list("aluminium" = 1) //from the mylar bag
+
/obj/item/trash/attack(mob/M, mob/living/user)
return
-
-/obj/item/trash/coal
- name = "lump of coal"
- icon = 'icons/obj/mining.dmi'
- icon_state = "slag"
- desc = "Someone's gotten on the naughty list."
- grind_results = list("carbon" = 20)
-
-/obj/item/trash/coal/burn()
- visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...")
- new /obj/item/stack/ore/diamond(loc)
- qdel(src)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 51386c791c..f5dfa690db 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -173,9 +173,6 @@
/obj/proc/container_resist(mob/living/user)
return
-/obj/proc/update_icon()
- return
-
/mob/proc/unset_machine()
if(machine)
machine.on_unset_machine(src)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 23703c7891..e416b2b436 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -79,6 +79,15 @@
material_drop = /obj/item/stack/sheet/mineral/wood
material_drop_amount = 5
+/obj/structure/closet/crate/coffin/examine(mob/user)
+ . = ..()
+ if(user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ . += {"This is a coffin which you can use to regenerate your burns and other wounds faster. "}
+ . += {"You can also thicken your blood if you survive the day, and hide from the sun safely while inside. "}
+ /* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ . += {"This is a coffin which your master can use to shield himself from the unforgiving sun.\n
+ You yourself are still human and dont need it. Yet. "} */
+
/obj/structure/closet/crate/internals
desc = "An internals crate."
name = "internals crate"
diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm
index 5fd480f6fd..e7a0ac2d04 100644
--- a/code/game/objects/structures/divine.dm
+++ b/code/game/objects/structures/divine.dm
@@ -40,11 +40,11 @@
last_process = world.time
to_chat(user, "The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards. ")
user.reagents.add_reagent("godblood",20)
- update_icons()
- addtimer(CALLBACK(src, .proc/update_icons), time_between_uses)
+ update_icon()
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), time_between_uses)
-/obj/structure/healingfountain/proc/update_icons()
+/obj/structure/healingfountain/update_icon()
if(last_process + time_between_uses > world.time)
icon_state = "fountain"
else
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 07a66505e7..271ae72d47 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -73,7 +73,7 @@
else if(glass)
user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly...")
- if(W.use_tool(src, user, 40, volume=50))
+ if(W.use_tool(src, user, 40, volume=50) && glass)
to_chat(user, "You weld the glass panel out. ")
if(heat_proof_finished)
new /obj/item/stack/sheet/rglass(get_turf(src))
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index 688006a6e3..fdc85475fb 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -595,3 +595,48 @@
/obj/effect/mob_spawn/human/pirate/gunner
rank = "Gunner"
+
+/obj/effect/mob_spawn/human/ghostcafe
+ name = "ghost cafe sleeper"
+ uses = -1
+ icon = 'icons/obj/machines/sleeper.dmi'
+ icon_state = "sleeper"
+ mob_name = "a ghost cafe visitor"
+ roundstart = FALSE
+ anchored = TRUE
+ density = FALSE
+ death = FALSE
+ assignedrole = "Ghost Cafe Visitor"
+ flavour_text = "Is this what life after death is like?"
+ skip_reentry_check = TRUE
+ banType = "ghostcafe"
+
+/obj/effect/mob_spawn/human/ghostcafe/special(mob/living/carbon/human/new_spawn)
+ if(new_spawn.client)
+ new_spawn.client.prefs.copy_to(new_spawn)
+ var/datum/outfit/O = new /datum/outfit/ghostcafe()
+ O.equip(new_spawn, FALSE, new_spawn.client)
+ SSjob.equip_loadout(null, new_spawn, FALSE)
+ SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
+
+/datum/outfit/ghostcafe
+ name = "ID, jumpsuit and shoes"
+ uniform = /obj/item/clothing/under/color/random
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ id = /obj/item/card/id
+
+
+/datum/outfit/ghostcafe/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+ ..()
+ var/suited = !preference_source || preference_source.prefs.jumpsuit_style == PREF_SUIT
+ if (CONFIG_GET(flag/grey_assistants))
+ if(suited)
+ uniform = /obj/item/clothing/under/color/grey
+ else
+ uniform = /obj/item/clothing/under/skirt/color/grey
+ else
+ if(suited)
+ uniform = /obj/item/clothing/under/color/random
+ else
+ uniform = /obj/item/clothing/under/skirt/color/random
+
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index a7f751e63c..ba45ae5ef0 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -20,10 +20,9 @@
return
if(broken || !Adjacent(user))
return
-
+
if(ishuman(user))
var/mob/living/carbon/human/H = user
-
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
//this is largely copypasted from there.
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 9dee1e26cc..58588c5693 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -285,6 +285,13 @@
. += new /obj/item/shard(location)
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
+ if (get_dist(src,user) > 1)
+ if (iscarbon(user))
+ var/mob/living/carbon/H = user
+ if (!(H.dna && H.dna.check_mutation(TK) && tkMaxRangeCheck(src,H)))
+ return FALSE
+ else
+ return FALSE
if(anchored)
to_chat(user, "[src] cannot be rotated while it is fastened to the floor! ")
return FALSE
diff --git a/code/game/say.dm b/code/game/say.dm
index 3bfd11bac0..7f01bf163d 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -126,8 +126,14 @@ GLOBAL_LIST_INIT(freqtospan, list(
return returntext
return "[copytext("[freq]", 1, 4)].[copytext("[freq]", 4, 5)]"
-/proc/attach_spans(input, list/spans)
- return "[message_spans_start(spans)][input]"
+/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
/proc/message_spans_start(list/spans)
var/output = "Transferring to virtual reality... ")
- if(vr_mob && (!istype(vr_mob) || !vr_mob.InCritical()) && !vr_mob.GetComponent(/datum/component/virtual_reality))
- vr_mob.AddComponent(/datum/component/virtual_reality, human_occupant, src, you_die_in_the_game_you_die_for_real)
- to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR! ")
- else
+ var/mob/M = occupant
+ if(M?.mind && M == usr)
+ to_chat(M, "Transferring to virtual reality... ")
+ var/datum/component/virtual_reality/VR
+ if(vr_mob)
+ VR = vr_mob.GetComponent(/datum/component/virtual_reality)
+ if(!(VR?.connect(M)))
if(allow_creating_vr_mobs)
- to_chat(occupant, "Virtual avatar not found, attempting to create one... ")
+ to_chat(occupant, "Virtual avatar [vr_mob ? "corrupted" : "missing"], attempting to create one... ")
var/obj/effect/landmark/vr_spawn/V = get_vr_spawnpoint()
var/turf/T = get_turf(V)
if(T)
- SStgui.close_user_uis(occupant, src)
new_player(occupant, T, V.vr_outfit)
- to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR! ")
else
to_chat(occupant, "Virtual world misconfigured, aborting transfer ")
else
to_chat(occupant, "The virtual world does not support the creation of new virtual avatars, aborting transfer ")
+ else
+ to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR! ")
. = TRUE
if("delete_avatar")
if(!occupant || usr == occupant)
@@ -157,17 +154,31 @@
for(var/obj/effect/landmark/vr_spawn/V in GLOB.landmarks_list)
GLOB.vr_spawnpoints[V.vr_category] = V
-/obj/machinery/vr_sleeper/proc/new_player(mob/living/carbon/human/H, location, datum/outfit/outfit, transfer = TRUE)
- if(!H)
+/obj/machinery/vr_sleeper/proc/new_player(mob/M, location, datum/outfit/outfit, transfer = TRUE)
+ if(!M)
return
cleanup_vr_mob()
vr_mob = new virtual_mob_type(location)
- if(vr_mob.build_virtual_character(H, outfit))
- var/mob/living/carbon/human/vr_H = vr_mob
- vr_H.updateappearance(TRUE, TRUE, TRUE)
- if(!transfer || !H.mind)
- return
- vr_mob.AddComponent(/datum/component/virtual_reality, H, src, you_die_in_the_game_you_die_for_real)
+ if(vr_mob.build_virtual_character(M, outfit) && iscarbon(vr_mob))
+ var/mob/living/carbon/C = vr_mob
+ C.updateappearance(TRUE, TRUE, TRUE)
+ var/datum/component/virtual_reality/VR = vr_mob.AddComponent(/datum/component/virtual_reality, you_die_in_the_game_you_die_for_real)
+ if(VR.connect(M))
+ RegisterSignal(VR, COMSIG_COMPONENT_UNREGISTER_PARENT, .proc/unset_vr_mob)
+ RegisterSignal(VR, COMSIG_COMPONENT_REGISTER_PARENT, .proc/set_vr_mob)
+ if(!only_current_user_can_interact)
+ VR.RegisterSignal(src, COMSIG_ATOM_EMAG_ACT, /datum/component/virtual_reality.proc/you_only_live_once)
+ VR.RegisterSignal(src, COMSIG_MACHINE_EJECT_OCCUPANT, /datum/component/virtual_reality.proc/revert_to_reality)
+ VR.RegisterSignal(src, COMSIG_PARENT_QDELETING, /datum/component/virtual_reality.proc/machine_destroyed)
+ to_chat(vr_mob, "Transfer successful! You are now playing as [vr_mob] in VR! ")
+ else
+ to_chat(M, "Transfer failed! virtual reality data likely corrupted! ")
+
+/obj/machinery/vr_sleeper/proc/unset_vr_mob(datum/component/virtual_reality/VR)
+ vr_mob = null
+
+/obj/machinery/vr_sleeper/proc/set_vr_mob(datum/component/virtual_reality/VR)
+ vr_mob = VR.parent
/obj/machinery/vr_sleeper/proc/cleanup_vr_mob()
if(vr_mob)
@@ -222,6 +233,7 @@
qdel(C)
for (var/A in corpse_party)
var/mob/M = A
- if(get_area(M) == vr_area && M.stat == DEAD)
+ if(M && M.stat == DEAD && get_area(M) == vr_area)
qdel(M)
+ corpse_party -= M
addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES)
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 3723b99f4e..c8fbfde4d2 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -37,6 +37,8 @@
dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing. "
dat += "Robeless "
dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap. "
+ dat += "Martial Artist "
+ dat += "Your apprentice is training in ancient martial arts. They know the Plasmafist and Nuclear Fist. "
user << browse(dat, "window=radio")
onclose(user, "radio")
return
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index e8d30e8dbe..92504641a9 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -65,6 +65,8 @@
//Equip
var/mob/living/carbon/human/H = owner.current
H.set_species(/datum/species/abductor)
+ var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE)
+ T.mothership = "[team.name]"
H.real_name = "[team.name] [sub_role]"
H.equipOutfit(outfit)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index b708c59ef7..433f52306b 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -17,7 +17,7 @@
actions_types = list(/datum/action/item_action/hands_free/activate)
allowed = list(
/obj/item/abductor,
- /obj/item/abductor_baton,
+ /obj/item/abductor/baton,
/obj/item/melee/baton,
/obj/item/gun/energy,
/obj/item/restraints/handcuffs
@@ -57,7 +57,7 @@
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A)
if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it.
- return 1
+ return TRUE
/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry)
disguise = entry
@@ -89,11 +89,9 @@
/obj/item/clothing/suit/armor/abductor/vest/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
DeactivateStealth()
- return 0
/obj/item/clothing/suit/armor/abductor/vest/IsReflect()
DeactivateStealth()
- return 0
/obj/item/clothing/suit/armor/abductor/vest/ui_action_click()
switch(mode)
@@ -111,7 +109,10 @@
to_chat(loc, "Combat injection is still recharging. ")
return
var/mob/living/carbon/human/M = loc
- M.do_adrenaline(150, FALSE, 0, 0, TRUE, list("inaprovaline" = 3, "synaptizine" = 10, "omnizine" = 10), "You feel a sudden surge of energy! ")
+ M.adjustStaminaLoss(-75)
+ M.SetUnconscious(0)
+ M.SetStun(0)
+ M.SetKnockdown(0)
combat_cooldown = 0
START_PROCESSING(SSobj, src)
@@ -131,9 +132,11 @@
/obj/item/abductor
icon = 'icons/obj/abductor.dmi'
+ lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
/obj/item/abductor/proc/AbductorCheck(mob/user)
- if(HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
+ if (HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
return TRUE
if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
return TRUE
@@ -158,8 +161,6 @@
desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras."
icon_state = "gizmo_scan"
item_state = "silencer"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
var/mode = GIZMO_SCAN
var/mob/living/marked = null
var/obj/machinery/abductor/console/console
@@ -218,12 +219,9 @@
if(marked == target)
to_chat(user, "This specimen is already marked! ")
return
- if(ishuman(target))
- if(isabductor(target))
- marked = target
- to_chat(user, "You mark [target] for future retrieval. ")
- else
- prepare(target,user)
+ if(isabductor(target) || iscow(target))
+ marked = target
+ to_chat(user, "You mark [target] for future retrieval. ")
else
prepare(target,user)
@@ -247,8 +245,6 @@
desc = "A compact device used to shut down communications equipment."
icon_state = "silencer"
item_state = "gizmo"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
/obj/item/abductor/silencer/attack(mob/living/M, mob/user)
if(!AbductorCheck(user))
@@ -292,8 +288,6 @@
or to send a command to a test subject with a charged gland."
icon_state = "mind_device_message"
item_state = "silencer"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
var/mode = MIND_DEVICE_MESSAGE
/obj/item/abductor/mind_device/attack_self(mob/user)
@@ -389,6 +383,17 @@
item_state = "alienpistol"
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
+/obj/item/gun/energy/shrink_ray
+ name = "shrink ray blaster"
+ desc = "This is a piece of frightening alien tech that enhances the magnetic pull of atoms in a localized space to temporarily make an object shrink. \
+ That or it's just space magic. Either way, it shrinks stuff."
+ ammo_type = list(/obj/item/ammo_casing/energy/shrink)
+ item_state = "shrink_ray"
+ icon_state = "shrink_ray"
+ fire_delay = 30
+ selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds
+ trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them)
+
/obj/item/paper/guides/antag/abductor
name = "Dissection Guide"
icon_state = "alienpaper_words"
@@ -422,21 +427,18 @@
#define BATON_PROBE 3
#define BATON_MODES 4
-/obj/item/abductor_baton
+/obj/item/abductor/baton
name = "advanced baton"
desc = "A quad-mode baton used for incapacitation and restraining of specimens."
var/mode = BATON_STUN
- icon = 'icons/obj/abductor.dmi'
icon_state = "wonderprodStun"
item_state = "wonderprod"
- lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
force = 7
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_mode)
-/obj/item/abductor_baton/proc/toggle(mob/living/user=usr)
+/obj/item/abductor/baton/proc/toggle(mob/living/user=usr)
mode = (mode+1)%BATON_MODES
var/txt
switch(mode)
@@ -452,7 +454,7 @@
to_chat(usr, "You switch the baton to [txt] mode. ")
update_icon()
-/obj/item/abductor_baton/update_icon()
+/obj/item/abductor/baton/update_icon()
switch(mode)
if(BATON_STUN)
icon_state = "wonderprodStun"
@@ -467,8 +469,8 @@
icon_state = "wonderprodProbe"
item_state = "wonderprodProbe"
-/obj/item/abductor_baton/attack(mob/target, mob/living/user)
- if(!isabductor(user))
+/obj/item/abductor/baton/attack(mob/target, mob/living/user)
+ if(!AbductorCheck(user))
return
if(iscyborg(target))
@@ -485,8 +487,8 @@
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
- playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
- return 0
+ playsound(H, 'sound/weapons/genhit.ogg', 50, TRUE)
+ return FALSE
switch (mode)
if(BATON_STUN)
@@ -498,10 +500,10 @@
if(BATON_PROBE)
ProbeAttack(L,user)
-/obj/item/abductor_baton/attack_self(mob/living/user)
+/obj/item/abductor/baton/attack_self(mob/living/user)
toggle(user)
-/obj/item/abductor_baton/proc/StunAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/StunAttack(mob/living/L,mob/living/user)
L.lastattacker = user.real_name
L.lastattackerckey = user.ckey
@@ -513,7 +515,7 @@
L.visible_message("[user] has stunned [L] with [src]! ", \
"[user] has stunned you with [src]! ")
- playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
+ playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -521,7 +523,7 @@
log_combat(user, L, "stunned")
-/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/SleepAttack(mob/living/L,mob/living/user)
if(L.incapacitated(TRUE, TRUE))
if(L.anti_magic_check(FALSE, FALSE, TRUE, 0))
to_chat(user, "The specimen's tinfoil protection is interfering with the sleep inducement! ")
@@ -531,7 +533,7 @@
return
L.visible_message("[user] has induced sleep in [L] with [src]! ", \
"You suddenly feel very drowsy! ")
- playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
+ playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
L.Sleeping(1200)
log_combat(user, L, "put to sleep")
else
@@ -545,13 +547,13 @@
L.visible_message("[user] tried to induce sleep in [L] with [src]! ", \
"You suddenly feel drowsy! ")
-/obj/item/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/CuffAttack(mob/living/L,mob/living/user)
if(!iscarbon(L))
return
var/mob/living/carbon/C = L
if(!C.handcuffed)
if(C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore())
- playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
+ playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2)
C.visible_message("[user] begins restraining [C] with [src]! ", \
"[user] begins shaping an energy field around your hands! ")
if(do_mob(user, C, 30) && (C.get_num_arms(FALSE) >= 2 || C.get_arm_ignore()))
@@ -565,7 +567,7 @@
else
to_chat(user, "[C] doesn't have two hands... ")
-/obj/item/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user)
+/obj/item/abductor/baton/proc/ProbeAttack(mob/living/L,mob/living/user)
L.visible_message("[user] probes [L] with [src]! ", \
"[user] probes you! ")
@@ -610,7 +612,7 @@
S.start()
. = ..()
-/obj/item/abductor_baton/examine(mob/user)
+/obj/item/abductor/baton/examine(mob/user)
. = ..()
switch(mode)
if(BATON_STUN)
@@ -639,10 +641,44 @@
AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/screwdriver))
+ if(W.tool_behaviour == TOOL_SCREWDRIVER)
return // Stops humans from disassembling abductor headsets.
return ..()
+/obj/item/abductor_machine_beacon
+ name = "machine beacon"
+ desc = "A beacon designed to instantly tele-construct abductor machinery."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "beacon"
+ w_class = WEIGHT_CLASS_TINY
+ var/obj/machinery/spawned_machine
+
+/obj/item/abductor_machine_beacon/attack_self(mob/user)
+ ..()
+ user.visible_message("[user] places down [src] and activates it. ", "You place down [src] and activate it. ")
+ user.dropItemToGround(src)
+ playsound(src, 'sound/machines/terminal_alert.ogg', 50)
+ addtimer(CALLBACK(src, .proc/try_spawn_machine), 30)
+
+/obj/item/abductor_machine_beacon/proc/try_spawn_machine()
+ var/viable = FALSE
+ if(isfloorturf(loc))
+ var/turf/T = loc
+ viable = TRUE
+ for(var/obj/thing in T.contents)
+ if(thing.density || ismachinery(thing) || isstructure(thing))
+ viable = FALSE
+ if(viable)
+ playsound(src, 'sound/effects/phasein.ogg', 50, TRUE)
+ var/new_machine = new spawned_machine(loc)
+ visible_message("[new_machine] warps on top of the beacon! ")
+ qdel(src)
+ else
+ playsound(src, 'sound/machines/buzz-two.ogg', 50)
+
+/obj/item/abductor_machine_beacon/chem_dispenser
+ name = "beacon - Reagent Synthesizer"
+ spawned_machine = /obj/machinery/chem_dispenser/abductor
/obj/item/scalpel/alien
name = "alien scalpel"
@@ -706,11 +742,11 @@
framestackamount = 1
/obj/structure/table_frame/abductor/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/wrench))
+ if(I.tool_behaviour == TOOL_WRENCH)
to_chat(user, "You start disassembling [src]... ")
I.play_tool_sound(src)
if(I.use_tool(src, user, 30))
- playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
+ playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
for(var/i = 1, i <= framestackamount, i++)
new framestack(get_turf(src))
qdel(src)
@@ -760,7 +796,6 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "bed"
can_buckle = 1
- buckle_lying = 1
var/static/list/injected_reagents = list("corazone")
@@ -798,3 +833,11 @@
airlock_type = /obj/machinery/door/airlock/abductor
material_type = /obj/item/stack/sheet/mineral/abductor
noglass = TRUE
+
+/obj/item/clothing/under/abductor
+ desc = "The most advanced form of jumpsuit known to reality, looks uncomfortable."
+ name = "alien jumpsuit"
+ icon_state = "abductor"
+ item_state = "bl_suit"
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0)
+ can_adjust = 0
diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
index 7bfadf6f3b..ec76f61ec6 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
@@ -1,6 +1,6 @@
/datum/outfit/abductor
name = "Abductor Basic"
- uniform = /obj/item/clothing/under/color/grey //they're greys gettit
+ uniform = /obj/item/clothing/under/abductor
shoes = /obj/item/clothing/shoes/combat
back = /obj/item/storage/backpack
ears = /obj/item/radio/headset/abductor
@@ -34,7 +34,7 @@
name = "Abductor Agent"
head = /obj/item/clothing/head/helmet/abductor
suit = /obj/item/clothing/suit/armor/abductor/vest
- suit_store = /obj/item/abductor_baton
+ suit_store = /obj/item/abductor/baton
belt = /obj/item/storage/belt/military/abductor/full
backpack_contents = list(
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index f7b49e1cf4..82170444d0 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -5,18 +5,23 @@
icon_state = "gland"
status = ORGAN_ROBOTIC
beating = TRUE
+ organ_flags = ORGAN_NO_SPOIL
var/true_name = "baseline placebo referencer"
var/cooldown_low = 300
var/cooldown_high = 300
var/next_activation = 0
var/uses // -1 For infinite
- var/human_only = 0
- var/active = 0
+ var/human_only = FALSE
+ var/active = FALSE
var/mind_control_uses = 1
var/mind_control_duration = 1800
var/active_mind_control = FALSE
+/obj/item/organ/heart/gland/Initialize()
+ . = ..()
+ icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral"))
+
/obj/item/organ/heart/gland/examine(mob/user)
. = ..()
if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user))
@@ -55,14 +60,18 @@
active_mind_control = TRUE
message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]")
update_gland_hud()
-
+ var/obj/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /obj/screen/alert/mind_control)
+ mind_alert.command = command
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
+ return TRUE
/obj/item/organ/heart/gland/proc/clear_mind_control()
if(!ownerCheck() || !active_mind_control)
return FALSE
- to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders. ")
+ to_chat(owner, "You feel the compulsion fade, and you completely forget about your previous orders. ")
+ owner.clear_alert("mind_control")
active_mind_control = FALSE
+ return TRUE
/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = 0)
active = 0
@@ -98,257 +107,4 @@
active = 0
/obj/item/organ/heart/gland/proc/activate()
- return
-
-/obj/item/organ/heart/gland/heals
- true_name = "coherency harmonizer"
- cooldown_low = 200
- cooldown_high = 400
- uses = -1
- icon_state = "health"
- mind_control_uses = 3
- mind_control_duration = 3000
-
-/obj/item/organ/heart/gland/heals/activate()
- to_chat(owner, "You feel curiously revitalized. ")
- owner.adjustToxLoss(-20, FALSE, TRUE)
- owner.heal_bodypart_damage(20, 20, 0, TRUE)
- owner.adjustOxyLoss(-20)
-
-/obj/item/organ/heart/gland/slime
- true_name = "gastric animation galvanizer"
- cooldown_low = 600
- cooldown_high = 1200
- uses = -1
- icon_state = "slime"
- mind_control_uses = 1
- mind_control_duration = 2400
-
-/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
- ..()
- owner.faction |= "slime"
- owner.grant_language(/datum/language/slime)
-
-/obj/item/organ/heart/gland/slime/activate()
- to_chat(owner, "You feel nauseated! ")
- owner.vomit(20)
-
- var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
- Slime.Friends = list(owner)
- Slime.Leader = owner
-
-/obj/item/organ/heart/gland/mindshock
- true_name = "neural crosstalk uninhibitor"
- cooldown_low = 400
- cooldown_high = 700
- uses = -1
- icon_state = "mindshock"
- mind_control_uses = 1
- mind_control_duration = 6000
-
-/obj/item/organ/heart/gland/mindshock/activate()
- to_chat(owner, "You get a headache. ")
-
- var/turf/T = get_turf(owner)
- for(var/mob/living/carbon/H in orange(4,T))
- if(H == owner)
- continue
- switch(pick(1,3))
- if(1)
- to_chat(H, "You hear a loud buzz in your head, silencing your thoughts! ")
- H.Stun(50)
- if(2)
- to_chat(H, "You hear an annoying buzz in your head. ")
- H.confused += 15
- H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
- if(3)
- H.hallucination += 60
-
-/obj/item/organ/heart/gland/pop
- true_name = "anthropmorphic translocator"
- cooldown_low = 900
- cooldown_high = 1800
- uses = -1
- human_only = TRUE
- icon_state = "species"
- mind_control_uses = 5
- mind_control_duration = 300
-
-/obj/item/organ/heart/gland/pop/activate()
- to_chat(owner, "You feel unlike yourself. ")
- randomize_human(owner)
- var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
- owner.set_species(species)
-
-/obj/item/organ/heart/gland/ventcrawling
- true_name = "pliant cartilage enabler"
- cooldown_low = 1800
- cooldown_high = 2400
- uses = 1
- icon_state = "vent"
- mind_control_uses = 4
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/ventcrawling/activate()
- to_chat(owner, "You feel very stretchy. ")
- owner.ventcrawler = VENTCRAWLER_ALWAYS
-
-/obj/item/organ/heart/gland/viral
- true_name = "contamination incubator"
- cooldown_low = 1800
- cooldown_high = 2400
- uses = 1
- icon_state = "viral"
- mind_control_uses = 1
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/viral/activate()
- to_chat(owner, "You feel sick. ")
- var/datum/disease/advance/A = random_virus(pick(2,6),6)
- A.carrier = TRUE
- owner.ForceContractDisease(A, FALSE, TRUE)
-
-/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
- if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
- max_symptoms = VIRUS_SYMPTOM_LIMIT
- var/datum/disease/advance/A = new /datum/disease/advance()
- var/list/datum/symptom/possible_symptoms = list()
- for(var/symptom in subtypesof(/datum/symptom))
- var/datum/symptom/S = symptom
- if(initial(S.level) > max_level)
- continue
- if(initial(S.level) <= 0) //unobtainable symptoms
- continue
- possible_symptoms += S
- for(var/i in 1 to max_symptoms)
- var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
- if(chosen_symptom)
- var/datum/symptom/S = new chosen_symptom
- A.symptoms += S
- A.Refresh() //just in case someone already made and named the same disease
- return A
-
-/obj/item/organ/heart/gland/trauma
- true_name = "white matter randomiser"
- cooldown_low = 800
- cooldown_high = 1200
- uses = 5
- icon_state = "emp"
- mind_control_uses = 3
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/trauma/activate()
- to_chat(owner, "You feel a spike of pain in your head. ")
- if(prob(33))
- owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
- else
- if(prob(20))
- owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
- else
- owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
-
-/obj/item/organ/heart/gland/spiderman
- true_name = "araneae cloister accelerator"
- cooldown_low = 450
- cooldown_high = 900
- uses = -1
- icon_state = "spider"
- mind_control_uses = 2
- mind_control_duration = 2400
-
-/obj/item/organ/heart/gland/spiderman/activate()
- to_chat(owner, "You feel something crawling in your skin. ")
- owner.faction |= "spiders"
- var/obj/structure/spider/spiderling/S = new(owner.drop_location())
- S.directive = "Protect your nest inside [owner.real_name]."
-
-/obj/item/organ/heart/gland/egg
- true_name = "roe/enzymatic synthesizer"
- cooldown_low = 300
- cooldown_high = 400
- uses = -1
- icon_state = "egg"
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- mind_control_uses = 2
- mind_control_duration = 1800
-
-/obj/item/organ/heart/gland/egg/activate()
- owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)] ")
- var/turf/T = owner.drop_location()
- new /obj/item/reagent_containers/food/snacks/egg/gland(T)
-
-/obj/item/organ/heart/gland/electric
- true_name = "electron accumulator/discharger"
- cooldown_low = 800
- cooldown_high = 1200
- uses = -1
- mind_control_uses = 2
- mind_control_duration = 900
-
-/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
- ..()
- ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
-
-/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
- REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
- ..()
-
-/obj/item/organ/heart/gland/electric/activate()
- owner.visible_message("[owner]'s skin starts emitting electric arcs! ",\
- "You feel electric energy building up inside you! ")
- playsound(get_turf(owner), "sparks", 100, 1, -1)
- addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
-
-/obj/item/organ/heart/gland/electric/proc/zap()
- tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN)
- playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, 1)
-
-/obj/item/organ/heart/gland/chem
- true_name = "intrinsic pharma-provider"
- cooldown_low = 50
- cooldown_high = 50
- uses = -1
- mind_control_uses = 3
- mind_control_duration = 1200
- var/list/possible_reagents = list()
-
-/obj/item/organ/heart/gland/chem/Initialize()
- ..()
- for(var/X in subtypesof(/datum/reagent/drug))
- var/datum/reagent/R = X
- possible_reagents += initial(R.id)
- for(var/X in subtypesof(/datum/reagent/medicine))
- var/datum/reagent/R = X
- possible_reagents += initial(R.id)
- for(var/X in typesof(/datum/reagent/toxin))
- var/datum/reagent/R = X
- possible_reagents += initial(R.id)
-
-/obj/item/organ/heart/gland/chem/activate()
- var/chem_to_add = pick(possible_reagents)
- owner.reagents.add_reagent(chem_to_add, 2)
- owner.adjustToxLoss(-2, TRUE, TRUE)
- ..()
-
-/obj/item/organ/heart/gland/plasma
- true_name = "effluvium sanguine-synonym emitter"
- cooldown_low = 1200
- cooldown_high = 1800
- uses = -1
- mind_control_uses = 1
- mind_control_duration = 800
-
-/obj/item/organ/heart/gland/plasma/activate()
- to_chat(owner, "You feel bloated. ")
- addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you. "), 150)
- addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
-
-/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
- if(!owner)
- return
- owner.visible_message("[owner] vomits a cloud of plasma! ")
- var/turf/open/T = get_turf(owner)
- if(istype(T))
- T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
- owner.vomit()
+ return
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/access.dm b/code/modules/antagonists/abductor/equipment/glands/access.dm
new file mode 100644
index 0000000000..548650d4e3
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/access.dm
@@ -0,0 +1,19 @@
+/obj/item/organ/heart/gland/access
+ true_name = "anagraphic electro-scrambler"
+ cooldown_low = 600
+ cooldown_high = 1200
+ uses = 1
+ icon_state = "mindshock"
+ mind_control_uses = 3
+ mind_control_duration = 900
+
+/obj/item/organ/heart/gland/access/activate()
+ to_chat(owner, "You feel like a VIP for some reason. ")
+ RegisterSignal(owner, COMSIG_MOB_ALLOWED, .proc/free_access)
+
+/obj/item/organ/heart/gland/access/proc/free_access(datum/source, obj/O)
+ return TRUE
+
+/obj/item/organ/heart/gland/access/Remove(mob/living/carbon/M, special = 0)
+ UnregisterSignal(owner, COMSIG_MOB_ALLOWED)
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/blood.dm b/code/modules/antagonists/abductor/equipment/glands/blood.dm
new file mode 100644
index 0000000000..06b8249484
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/blood.dm
@@ -0,0 +1,18 @@
+/obj/item/organ/heart/gland/blood
+ true_name = "pseudonuclear hemo-destabilizer"
+ cooldown_low = 1200
+ cooldown_high = 1800
+ uses = -1
+ icon_state = "egg"
+ lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
+ mind_control_uses = 3
+ mind_control_duration = 1500
+
+/obj/item/organ/heart/gland/blood/activate()
+ if(!ishuman(owner) || !owner.dna.species)
+ return
+ var/mob/living/carbon/human/H = owner
+ var/datum/species/species = H.dna.species
+ to_chat(H, "You feel your blood heat up for a moment. ")
+ species.exotic_blood = get_random_reagent_id()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/chem.dm b/code/modules/antagonists/abductor/equipment/glands/chem.dm
new file mode 100644
index 0000000000..e7b6fda85f
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/chem.dm
@@ -0,0 +1,20 @@
+/obj/item/organ/heart/gland/chem
+ true_name = "intrinsic pharma-provider"
+ cooldown_low = 50
+ cooldown_high = 50
+ uses = -1
+ icon_state = "viral"
+ mind_control_uses = 3
+ mind_control_duration = 1200
+ var/list/possible_reagents = list()
+
+/obj/item/organ/heart/gland/chem/Initialize()
+ . = ..()
+ for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin))
+ possible_reagents += R
+
+/obj/item/organ/heart/gland/chem/activate()
+ var/chem_to_add = pick(possible_reagents)
+ owner.reagents.add_reagent(chem_to_add, 2)
+ owner.adjustToxLoss(-5, TRUE, TRUE)
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/egg.dm b/code/modules/antagonists/abductor/equipment/glands/egg.dm
new file mode 100644
index 0000000000..429a24b19c
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/egg.dm
@@ -0,0 +1,15 @@
+/obj/item/organ/heart/gland/egg
+ true_name = "roe/enzymatic synthesizer"
+ cooldown_low = 300
+ cooldown_high = 400
+ uses = -1
+ icon_state = "egg"
+ lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
+ mind_control_uses = 2
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/egg/activate()
+ owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)] ")
+ var/turf/T = owner.drop_location()
+ new /obj/item/reagent_containers/food/snacks/egg/gland(T)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm
new file mode 100644
index 0000000000..63d95f8b1f
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/electric.dm
@@ -0,0 +1,26 @@
+/obj/item/organ/heart/gland/electric
+ true_name = "electron accumulator/discharger"
+ cooldown_low = 800
+ cooldown_high = 1200
+ icon_state = "species"
+ uses = -1
+ mind_control_uses = 2
+ mind_control_duration = 900
+
+/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
+ ..()
+ ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
+
+/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
+ REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
+ ..()
+
+/obj/item/organ/heart/gland/electric/activate()
+ owner.visible_message("[owner]'s skin starts emitting electric arcs! ",\
+ "You feel electric energy building up inside you! ")
+ playsound(get_turf(owner), "sparks", 100, TRUE, -1)
+ addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
+
+/obj/item/organ/heart/gland/electric/proc/zap()
+ tesla_zap(owner, 4, 8000, TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN)
+ playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm
new file mode 100644
index 0000000000..bf9a00e13c
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm
@@ -0,0 +1,178 @@
+/obj/item/organ/heart/gland/heal
+ true_name = "organic replicator"
+ cooldown_low = 200
+ cooldown_high = 400
+ uses = -1
+ human_only = TRUE
+ icon_state = "health"
+ mind_control_uses = 3
+ mind_control_duration = 3000
+
+/obj/item/organ/heart/gland/heal/activate()
+ if(!(owner.mob_biotypes & MOB_ORGANIC))
+ return
+
+ for(var/organ in owner.internal_organs)
+ if(istype(organ, /obj/item/organ/cyberimp))
+ reject_implant(organ)
+ return
+
+ var/obj/item/organ/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER)
+ if((!liver/* && !HAS_TRAIT(owner, TRAIT_NOMETABOLISM)*/) || (liver && ((liver.damage > (liver.maxHealth / 2)) || (istype(liver, /obj/item/organ/liver/cybernetic)))))
+ replace_liver(liver)
+ return
+
+ var/obj/item/organ/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS)
+ if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && (istype(lungs, /obj/item/organ/lungs/cybernetic))))
+ replace_lungs(lungs)
+ return
+
+ var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES)
+ if(!eyes || (eyes && ((HAS_TRAIT_FROM(owner, TRAIT_NEARSIGHT, EYE_DAMAGE)) || (HAS_TRAIT_FROM(owner, TRAIT_BLIND, EYE_DAMAGE)) || (istype(eyes, /obj/item/organ/eyes/robotic)))))
+ replace_eyes(eyes)
+ return
+
+ var/obj/item/bodypart/limb
+ var/list/limb_list = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
+ for(var/zone in limb_list)
+ limb = owner.get_bodypart(zone)
+ if(!limb)
+ replace_limb(zone)
+ return
+ if((limb.get_damage() >= (limb.max_damage / 2)) || (limb.status == BODYPART_ROBOTIC))
+ replace_limb(zone, limb)
+ return
+
+ if(owner.getToxLoss() > 40)
+ replace_blood()
+ return
+ var/tox_amount = 0
+ for(var/datum/reagent/toxin/T in owner.reagents.reagent_list)
+ tox_amount += owner.reagents.get_reagent_amount(T.type)
+ if(tox_amount > 10)
+ replace_blood()
+ return
+ if(owner.blood_volume < BLOOD_VOLUME_OKAY)
+ owner.blood_volume = BLOOD_VOLUME_NORMAL
+ to_chat(owner, "You feel your blood pulsing within you. ")
+ return
+
+ var/obj/item/bodypart/chest/chest = owner.get_bodypart(BODY_ZONE_CHEST)
+ if((chest.get_damage() >= (chest.max_damage / 4)) || (chest.status == BODYPART_ROBOTIC))
+ replace_chest(chest)
+ return
+
+/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/organ/cyberimp/implant)
+ owner.visible_message("[owner] vomits up his [implant.name]! ", "You suddenly vomit up your [implant.name]! ")
+ owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
+ implant.Remove(owner)
+ implant.forceMove(owner.drop_location())
+
+/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver)
+ if(liver)
+ owner.visible_message("[owner] vomits up his [liver.name]! ", "You suddenly vomit up your [liver.name]! ")
+ owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
+ liver.Remove(owner)
+ liver.forceMove(owner.drop_location())
+ else
+ to_chat(owner, "You feel a weird rumble in your bowels... ")
+
+ var/liver_type = /obj/item/organ/liver
+ if(owner?.dna?.species?.mutantliver)
+ liver_type = owner.dna.species.mutantliver
+ var/obj/item/organ/liver/new_liver = new liver_type()
+ new_liver.Insert(owner)
+
+/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs)
+ if(lungs)
+ owner.visible_message("[owner] vomits up his [lungs.name]! ", "You suddenly vomit up your [lungs.name]! ")
+ owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
+ lungs.Remove(owner)
+ lungs.forceMove(owner.drop_location())
+ else
+ to_chat(owner, "You feel a weird rumble inside your chest... ")
+
+ var/lung_type = /obj/item/organ/lungs
+ if(owner.dna.species && owner.dna.species.mutantlungs)
+ lung_type = owner.dna.species.mutantlungs
+ var/obj/item/organ/lungs/new_lungs = new lung_type()
+ new_lungs.Insert(owner)
+
+/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes)
+ if(eyes)
+ owner.visible_message("[owner]'s [eyes.name] fall out of their sockets! ", "Your [eyes.name] fall out of their sockets! ")
+ playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
+ eyes.Remove(owner)
+ eyes.forceMove(owner.drop_location())
+ else
+ to_chat(owner, "You feel a weird rumble behind your eye sockets... ")
+
+ addtimer(CALLBACK(src, .proc/finish_replace_eyes), rand(100, 200))
+
+/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes()
+ var/eye_type = /obj/item/organ/eyes
+ if(owner.dna.species && owner.dna.species.mutanteyes)
+ eye_type = owner.dna.species.mutanteyes
+ var/obj/item/organ/eyes/new_eyes = new eye_type()
+ new_eyes.Insert(owner)
+ owner.visible_message("A pair of new eyes suddenly inflates into [owner]'s eye sockets! ", "A pair of new eyes suddenly inflates into your eye sockets! ")
+
+/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
+ if(limb)
+ owner.visible_message("[owner]'s [limb.name] suddenly detaches from [owner.p_their()] body! ", "Your [limb.name] suddenly detaches from your body! ")
+ playsound(owner, "desceration", 50, TRUE, -1)
+ limb.drop_limb()
+ else
+ to_chat(owner, "You feel a weird tingle in your [parse_zone(body_zone)]... even if you don't have one. ")
+
+ addtimer(CALLBACK(src, .proc/finish_replace_limb, body_zone), rand(150, 300))
+
+/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone)
+ owner.visible_message("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body! ",
+ "With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body! ",
+ "Your hear a loud snap. ")
+ playsound(owner, 'sound/magic/demon_consume.ogg', 50, TRUE)
+ owner.regenerate_limb(body_zone)
+
+/obj/item/organ/heart/gland/heal/proc/replace_blood()
+ owner.visible_message("[owner] starts vomiting huge amounts of blood! ", "You suddenly start vomiting huge amounts of blood! ")
+ keep_replacing_blood()
+
+/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood()
+ var/keep_going = FALSE
+ owner.vomit(0, TRUE, FALSE, 3, FALSE, FALSE, FALSE, TRUE)
+ owner.Stun(15)
+ owner.adjustToxLoss(-15, TRUE, TRUE)
+
+ owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)
+ if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
+ keep_going = TRUE
+
+ if(owner.getToxLoss())
+ keep_going = TRUE
+ for(var/datum/reagent/toxin/R in owner.reagents.reagent_list)
+ owner.reagents.remove_reagent(R.type, 4)
+ if(owner.reagents.has_reagent(R.type))
+ keep_going = TRUE
+ if(keep_going)
+ addtimer(CALLBACK(src, .proc/keep_replacing_blood), 30)
+
+/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
+ if(chest.status == BODYPART_ROBOTIC)
+ owner.visible_message("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh! ", "Your [chest.name] rapidly expels its mechanical components, replacing them with flesh! ")
+ playsound(owner, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE)
+ var/list/dirs = GLOB.alldirs.Copy()
+ for(var/i in 1 to 3)
+ var/obj/effect/decal/cleanable/robot_debris/debris = new(get_turf(owner))
+ debris.streak(dirs)
+ else
+ owner.visible_message("[owner]'s [chest.name] sheds off its damaged flesh, rapidly replacing it! ", "Your [chest.name] sheds off its damaged flesh, rapidly replacing it! ")
+ playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
+ var/list/dirs = GLOB.alldirs.Copy()
+ for(var/i in 1 to 3)
+ var/obj/effect/decal/cleanable/blood/gibs/gibs = new(get_turf(owner))
+ gibs.streak(dirs)
+
+ var/obj/item/bodypart/chest/new_chest = new(null)
+ new_chest.replace_limb(owner, TRUE)
+ qdel(chest)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
new file mode 100644
index 0000000000..f8b91343f2
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
@@ -0,0 +1,64 @@
+/obj/item/organ/heart/gland/mindshock
+ true_name = "neural crosstalk uninhibitor"
+ cooldown_low = 400
+ cooldown_high = 700
+ uses = -1
+ icon_state = "mindshock"
+ mind_control_uses = 1
+ mind_control_duration = 6000
+ var/list/mob/living/carbon/human/broadcasted_mobs = list()
+
+/obj/item/organ/heart/gland/mindshock/activate()
+ to_chat(owner, "You get a headache. ")
+
+ var/turf/T = get_turf(owner)
+ for(var/mob/living/carbon/H in orange(4,T))
+ if(H == owner)
+ continue
+ switch(pick(1,3))
+ if(1)
+ to_chat(H, "You hear a loud buzz in your head, silencing your thoughts! ")
+ H.Stun(50)
+ if(2)
+ to_chat(H, "You hear an annoying buzz in your head. ")
+ H.confused += 15
+ H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
+ if(3)
+ H.hallucination += 60
+
+/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user)
+ if(!ownerCheck() || !mind_control_uses || active_mind_control)
+ return FALSE
+ mind_control_uses--
+ for(var/mob/M in oview(7, owner))
+ if(!ishuman(M))
+ continue
+ var/mob/living/carbon/human/H = M
+ if(H.stat)
+ continue
+
+ broadcasted_mobs += H
+ to_chat(H, "You suddenly feel an irresistible compulsion to follow an order... ")
+ to_chat(H, "[command] ")
+
+ message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]")
+
+ var/obj/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /obj/screen/alert/mind_control)
+ mind_alert.command = command
+
+ if(LAZYLEN(broadcasted_mobs))
+ active_mind_control = TRUE
+ addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
+
+ update_gland_hud()
+ return TRUE
+
+/obj/item/organ/heart/gland/mindshock/clear_mind_control()
+ if(!active_mind_control || !LAZYLEN(broadcasted_mobs))
+ return FALSE
+ for(var/M in broadcasted_mobs)
+ var/mob/living/carbon/human/H = M
+ to_chat(H, "You feel the compulsion fade, and you completely forget about your previous orders. ")
+ H.clear_alert("mind_control")
+ active_mind_control = FALSE
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
new file mode 100644
index 0000000000..4a30d99d44
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
@@ -0,0 +1,22 @@
+/obj/item/organ/heart/gland/plasma
+ true_name = "effluvium sanguine-synonym emitter"
+ cooldown_low = 1200
+ cooldown_high = 1800
+ icon_state = "slime"
+ uses = -1
+ mind_control_uses = 1
+ mind_control_duration = 800
+
+/obj/item/organ/heart/gland/plasma/activate()
+ to_chat(owner, "You feel bloated. ")
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you. "), 150)
+ addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
+
+/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
+ if(!owner)
+ return
+ owner.visible_message("[owner] vomits a cloud of plasma! ")
+ var/turf/open/T = get_turf(owner)
+ if(istype(T))
+ T.atmos_spawn_air("plasma=50;TEMP=[T20C]")
+ owner.vomit()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/quantum.dm b/code/modules/antagonists/abductor/equipment/glands/quantum.dm
new file mode 100644
index 0000000000..a5b8815437
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/quantum.dm
@@ -0,0 +1,47 @@
+/obj/item/organ/heart/gland/quantum
+ true_name = "quantic de-observation matrix"
+ cooldown_low = 150
+ cooldown_high = 150
+ uses = -1
+ icon_state = "emp"
+ mind_control_uses = 2
+ mind_control_duration = 1200
+ var/mob/living/carbon/entangled_mob
+
+/obj/item/organ/heart/gland/quantum/activate()
+ if(entangled_mob)
+ return
+ for(var/mob/M in oview(owner, 7))
+ if(!iscarbon(M))
+ continue
+ entangled_mob = M
+ addtimer(CALLBACK(src, .proc/quantum_swap), rand(600, 2400))
+ return
+
+/obj/item/organ/heart/gland/quantum/proc/quantum_swap()
+ if(QDELETED(entangled_mob))
+ entangled_mob = null
+ return
+ var/turf/T = get_turf(owner)
+ do_teleport(owner, get_turf(entangled_mob),null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM)
+ do_teleport(entangled_mob, T,null,TRUE,channel = TELEPORT_CHANNEL_QUANTUM)
+ to_chat(owner, "You suddenly find yourself somewhere else! ")
+ to_chat(entangled_mob, "You suddenly find yourself somewhere else! ")
+ if(!active_mind_control) //Do not reset entangled mob while mind control is active
+ entangled_mob = null
+
+/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user)
+ if(..())
+ if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD))
+ to_chat(entangled_mob, "You suddenly feel an irresistible compulsion to follow an order... ")
+ to_chat(entangled_mob, "[command] ")
+ var/obj/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /obj/screen/alert/mind_control)
+ mind_alert.command = command
+ message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]")
+ update_gland_hud()
+
+/obj/item/organ/heart/gland/quantum/clear_mind_control()
+ if(active_mind_control)
+ to_chat(entangled_mob, "You feel the compulsion fade, and you completely forget about your previous orders. ")
+ entangled_mob.clear_alert("mind_control")
+ ..()
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm
new file mode 100644
index 0000000000..53b8133528
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm
@@ -0,0 +1,21 @@
+/obj/item/organ/heart/gland/slime
+ true_name = "gastric animation galvanizer"
+ cooldown_low = 600
+ cooldown_high = 1200
+ uses = -1
+ icon_state = "slime"
+ mind_control_uses = 1
+ mind_control_duration = 2400
+
+/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
+ ..()
+ owner.faction |= "slime"
+ owner.grant_language(/datum/language/slime)
+
+/obj/item/organ/heart/gland/slime/activate()
+ to_chat(owner, "You feel nauseated! ")
+ owner.vomit(20)
+
+ var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
+ Slime.Friends = list(owner)
+ Slime.Leader = owner
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/spider.dm b/code/modules/antagonists/abductor/equipment/glands/spider.dm
new file mode 100644
index 0000000000..f0421b23b2
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/spider.dm
@@ -0,0 +1,14 @@
+/obj/item/organ/heart/gland/spiderman
+ true_name = "araneae cloister accelerator"
+ cooldown_low = 450
+ cooldown_high = 900
+ uses = -1
+ icon_state = "spider"
+ mind_control_uses = 2
+ mind_control_duration = 2400
+
+/obj/item/organ/heart/gland/spiderman/activate()
+ to_chat(owner, "You feel something crawling in your skin. ")
+ owner.faction |= "spiders"
+ var/obj/structure/spider/spiderling/S = new(owner.drop_location())
+ S.directive = "Protect your nest inside [owner.real_name]."
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/transform.dm b/code/modules/antagonists/abductor/equipment/glands/transform.dm
new file mode 100644
index 0000000000..05c4760d37
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/transform.dm
@@ -0,0 +1,15 @@
+/obj/item/organ/heart/gland/transform
+ true_name = "anthropmorphic transmorphosizer"
+ cooldown_low = 900
+ cooldown_high = 1800
+ uses = -1
+ human_only = TRUE
+ icon_state = "species"
+ mind_control_uses = 7
+ mind_control_duration = 300
+
+/obj/item/organ/heart/gland/transform/activate()
+ to_chat(owner, "You feel unlike yourself. ")
+ randomize_human(owner)
+ var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
+ owner.set_species(species)
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/trauma.dm b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
new file mode 100644
index 0000000000..b6280ec017
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
@@ -0,0 +1,18 @@
+/obj/item/organ/heart/gland/trauma
+ true_name = "white matter randomiser"
+ cooldown_low = 800
+ cooldown_high = 1200
+ uses = 5
+ icon_state = "emp"
+ mind_control_uses = 3
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/trauma/activate()
+ to_chat(owner, "You feel a spike of pain in your head. ")
+ if(prob(33))
+ owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
+ else
+ if(prob(20))
+ owner.gain_trauma_type(BRAIN_TRAUMA_SEVERE, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
+ else
+ owner.gain_trauma_type(BRAIN_TRAUMA_MILD, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
new file mode 100644
index 0000000000..d1ea135497
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
@@ -0,0 +1,12 @@
+/obj/item/organ/heart/gland/ventcrawling
+ true_name = "pliant cartilage enabler"
+ cooldown_low = 1800
+ cooldown_high = 2400
+ uses = 1
+ icon_state = "vent"
+ mind_control_uses = 4
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/ventcrawling/activate()
+ to_chat(owner, "You feel very stretchy. ")
+ owner.ventcrawler = VENTCRAWLER_ALWAYS
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/equipment/glands/viral.dm b/code/modules/antagonists/abductor/equipment/glands/viral.dm
new file mode 100644
index 0000000000..4d4f865a7c
--- /dev/null
+++ b/code/modules/antagonists/abductor/equipment/glands/viral.dm
@@ -0,0 +1,34 @@
+/obj/item/organ/heart/gland/viral
+ true_name = "contamination incubator"
+ cooldown_low = 1800
+ cooldown_high = 2400
+ uses = 1
+ icon_state = "viral"
+ mind_control_uses = 1
+ mind_control_duration = 1800
+
+/obj/item/organ/heart/gland/viral/activate()
+ to_chat(owner, "You feel sick. ")
+ var/datum/disease/advance/A = random_virus(pick(2,6),6)
+ A.carrier = TRUE
+ owner.ForceContractDisease(A, FALSE, TRUE)
+
+/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
+ if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
+ max_symptoms = VIRUS_SYMPTOM_LIMIT
+ var/datum/disease/advance/A = new /datum/disease/advance()
+ var/list/datum/symptom/possible_symptoms = list()
+ for(var/symptom in subtypesof(/datum/symptom))
+ var/datum/symptom/S = symptom
+ if(initial(S.level) > max_level)
+ continue
+ if(initial(S.level) <= 0) //unobtainable symptoms
+ continue
+ possible_symptoms += S
+ for(var/i in 1 to max_symptoms)
+ var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
+ if(chosen_symptom)
+ var/datum/symptom/S = new chosen_symptom
+ A.symptoms += S
+ A.Refresh() //just in case someone already made and named the same disease
+ return A
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index bcf02bda01..47294bc766 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -43,12 +43,15 @@
dat += "Collected Samples : [points] "
dat += "Gear Credits: [credits] "
dat += "Transfer data in exchange for supplies: "
- dat += "Advanced Baton "
- dat += "Agent Helmet "
- dat += "Agent Vest "
- dat += "Radio Silencer "
- dat += "Science Tool "
- dat += "Mental Interface Device "
+ dat += "Advanced Baton (2 Credits) "
+ dat += "Mental Interface Device (2 Credits) "
+ dat += "Reagent Synthesizer (2 Credits) "
+ dat += "Shrink Ray Blaster (2 Credits) "
+ dat += "Agent Helmet (1 Credit) "
+ dat += "Agent Vest (1 Credit) "
+ dat += "Radio Silencer (1 Credit) "
+ dat += "Science Tool (1 Credit) "
+ dat += "Superlingual Matrix (1 Credit) "
else
dat += "NO EXPERIMENT MACHINE DETECTED "
@@ -101,7 +104,7 @@
else if(href_list["dispense"])
switch(href_list["dispense"])
if("baton")
- Dispense(/obj/item/abductor_baton,cost=2)
+ Dispense(/obj/item/abductor/baton,cost=2)
if("helmet")
Dispense(/obj/item/clothing/head/helmet/abductor)
if("silencer")
@@ -112,6 +115,12 @@
Dispense(/obj/item/clothing/suit/armor/abductor/vest)
if("mind_device")
Dispense(/obj/item/abductor/mind_device,cost=2)
+ if("chem_dispenser")
+ Dispense(/obj/item/abductor_machine_beacon/chem_dispenser,cost=2)
+ if("tongue")
+ Dispense(/obj/item/organ/tongue/abductor)
+ if("shrink_ray")
+ Dispense(/obj/item/gun/energy/shrink_ray,cost=2)
updateUsrDialog()
/obj/machinery/abductor/console/proc/TeleporterRetrieve()
@@ -136,9 +145,9 @@
var/entry_name
if(remote)
- entry_name = show_radial_menu(usr, camera.eyeobj, disguises2)
+ entry_name = show_radial_menu(usr, camera.eyeobj, disguises2, tooltips = TRUE)
else
- entry_name = show_radial_menu(usr, src, disguises2)
+ entry_name = show_radial_menu(usr, src, disguises2, require_near = TRUE, tooltips = TRUE)
var/datum/icon_snapshot/chosen = disguises[entry_name]
if(chosen && vest && (remote || in_range(usr,src)))
@@ -236,4 +245,4 @@
new item(drop_location)
else
- say("Insufficent data!")
+ say("Insufficent data!")
\ No newline at end of file
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm b/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm
new file mode 100644
index 0000000000..77169efd61
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_flaws.dm
@@ -0,0 +1,84 @@
+
+// Getting Flaws:
+//
+// Killing crew
+//
+// Gaining ranks
+
+
+
+// * COMPULSION * Things you must do
+//
+// SELECTIVE: -Gender/BloodType/Job sustains you, but others give you less.
+//
+
+
+
+
+// * WEAKNESSES * Things that may harm you
+//
+// LIGHTS: -Bright light nullifies the Examine benefits of Masquerade.
+// -Bright lights disable your healing (including in Torpor)
+//
+// STAKES: -Stakes kill you immediately.
+//
+// PAINFUL: -Your feed victims scream, despite being unconscious.
+//
+// FIRE: -You only need your max health (not x2) in fire damage to die.
+//
+// CORPSE: -Your Masquerade turns off when unconscious or crit.
+//
+// FERAL: -
+//
+// CRAVEN
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // BANES //
+
+// These are basically small weaknesses that affect your character in certain circumstances.
+// As a rule, they should be specific as to when they happen, or have only some certain
+// drawback.
+
+// (core ideas)
+// SENSITIVE: You are slightly blinded by bright lights.
+// DARKFRIEND: Your automatic healing is at a crawl when in bright light.
+// TRADITIONAL: Every five minutes spent outside a coffin lowers your rate of automatic healing.
+// CONSUMED: Every five minutes spent outside a coffin increases the rate at which your blood ticks down.
+// GOURMAND: Animals and blood bags offer you no nourishment when feeding.
+// DEATHMASK: You no longer fake having a heartbeat, and always show up as pale when examined.
+// BESTIAL: When your blood is low, you will twitch involuntarily.
+
+// (alternate ideas)
+// STERILE: There is a high chance that turning corpses to Bloodsuckers will fail, and further attempts on them by you are impossible.
+// FERAL: You're a threat to Vampire-kind: New Bloodsuckers may have an Objective to destroy you.
+// UNHOLY: The Chapel, the Bible, and Holy Water set you on fire.
+// PARANOID: Only your own claimed coffin counts for healing and banes.
+
+
+// ON LEVEL-UP:
+// Burn Damage increases
+// Regen Rate increases
+// Max Punch Damage increase
+// Reset Level Timer
+// Select Bane
+
+
+// How to Burn Vamps:
+// C.adjustFireLoss(20)
+// C.adjust_fire_stacks(6)
+// C.IgniteMob()
+
+
+/datum/antagonist/bloodsucker/proc/AssignRandomBane()
+ return
\ No newline at end of file
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm
new file mode 100644
index 0000000000..3a6b4efedb
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_integration.dm
@@ -0,0 +1,148 @@
+// INTEGRATION: Adding Procs and Datums to existing "classes"
+/mob/living/proc/AmBloodsucker(falseIfInDisguise=FALSE)
+ // No Datum
+ if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ return FALSE
+ return TRUE
+
+
+/mob/living/proc/HaveBloodsuckerBodyparts(var/displaymessage="") // displaymessage can be something such as "rising from death" for Torpid Sleep. givewarningto is the person receiving messages.
+ if(!getorganslot(ORGAN_SLOT_HEART))
+ if(displaymessage != "")
+ to_chat(src, "Without a heart, you are incapable of [displaymessage]. ")
+ return FALSE
+ if(!get_bodypart(BODY_ZONE_HEAD))
+ if(displaymessage != "")
+ to_chat(src, "Without a head, you are incapable of [displaymessage]. ")
+ return FALSE
+ if(!getorgan(/obj/item/organ/brain)) // NOTE: This is mostly just here so we can do one scan for all needed parts when creating a vamp. You probably won't be trying to use powers w/out a brain.
+ if(displaymessage != "")
+ to_chat(src, "Without a brain, you are incapable of [displaymessage]. ")
+ return FALSE
+ return TRUE
+
+
+
+// GET DAMAGE
+
+
+// Do NOT count the damage on prosthetics for this.
+/mob/living/proc/getBruteLoss_nonProsthetic()
+ return getBruteLoss()
+
+/mob/living/proc/getFireLoss_nonProsthetic()
+ return getFireLoss()
+
+/mob/living/carbon/getBruteLoss_nonProsthetic()
+ var/amount = 0
+ for(var/obj/item/bodypart/BP in bodyparts)
+ if(BP.status < 2)
+ amount += BP.brute_dam
+ return amount
+
+/mob/living/carbon/getFireLoss_nonProsthetic()
+ var/amount = 0
+ for(var/obj/item/bodypart/BP in bodyparts)
+ if(BP.status < 2)
+ amount += BP.burn_dam
+ return amount
+
+/mob/living/carbon
+// EXAMINING
+/mob/living/carbon/human/proc/ReturnVampExamine(var/mob/viewer)
+ if(!mind || !viewer.mind)
+ return ""
+ // Target must be a Vamp
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!bloodsuckerdatum)
+ return ""
+ // Viewer is Target's Vassal?
+ if(viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in bloodsuckerdatum.vassals)
+ var/returnString = "\[This is your Master! \]"
+ var/returnIcon = "[icon2html('icons/misc/language.dmi', world, "bloodsucker")]"
+ returnString += "\n"
+ return returnIcon + returnString
+ // Viewer not a Vamp AND not the target's vassal?
+ if(!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !(viewer in bloodsuckerdatum.vassals))
+ return ""
+ // Default String
+ var/returnString = "\[[bloodsuckerdatum.ReturnFullName(1)] \]"
+ var/returnIcon = "[icon2html('icons/misc/language.dmi', world, "bloodsucker")]"
+
+ // In Disguise (Veil)?
+ //if (name_override != null)
+ // returnString += " ([real_name] in disguise!) "
+
+ //returnString += "\n" Don't need spacers. Using . += "" in examine.dm does this on its own.
+ return returnIcon + returnString
+
+
+/mob/living/carbon/human/proc/ReturnVassalExamine(var/mob/viewer)
+ if(!mind || !viewer.mind)
+ return ""
+ // Am I not even a Vassal? Then I am not marked.
+ var/datum/antagonist/vassal/vassaldatum = mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if(!vassaldatum)
+ return ""
+ // Only Vassals and Bloodsuckers can recognize marks.
+ if(!viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) && !viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL))
+ return ""
+
+ // Default String
+ var/returnString = "\["
+ var/returnIcon = ""
+ // Am I Viewer's Vassal?
+ if(vassaldatum.master.owner == viewer.mind)
+ returnString += "This [dna.species.name] bears YOUR mark!"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal")]"
+ // Am I someone ELSE'S Vassal?
+ else if(viewer.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ returnString += "This [dna.species.name] bears the mark of [vassaldatum.master.ReturnFullName(vassaldatum.master.owner.current,1)] "
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal_grey")]"
+ // Are you serving the same master as I am?
+ else if(viewer.mind.has_antag_datum(ANTAG_DATUM_VASSAL) in vassaldatum.master.vassals)
+ returnString += "[p_they(TRUE)] bears the mark of your Master"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal")]"
+ // You serve a different Master than I do.
+ else
+ returnString += "[p_they(TRUE)] bears the mark of another Bloodsucker"
+ returnIcon = "[icon2html('icons/misc/mark_icons.dmi', world, "vassal_grey")]"
+
+ returnString += " \]" // \n" Don't need spacers. Using . += "" in examine.dm does this on its own.
+ return returnIcon + returnString
+
+
+// Am I "pale" when examined? Bloodsuckers can trick this.
+/mob/living/carbon/proc/ShowAsPaleExamine()
+
+ // Normal Creatures:
+ if(!mind || !mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ return blood_volume < (BLOOD_VOLUME_SAFE * blood_ratio)
+
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsuckerdatum.poweron_masquerade)
+ return FALSE
+
+ // If a Bloodsucker is malnourished, AND if his temperature matches his surroundings (aka he hasn't fed recently and looks COLD)...
+ return blood_volume < (BLOOD_VOLUME_OKAY * blood_ratio) // && !(bodytemperature <= get_temperature() + 2)
+
+/mob/living/carbon/human/ShowAsPaleExamine()
+ // Check for albino, as per human/examine.dm's check.
+ if(dna.species.use_skintones && skin_tone == "albino")
+ return TRUE
+
+ return ..() // Return vamp check
+
+/mob/living/carbon/proc/scan_blood_volume()
+ // Vamps don't show up normally to scanners unless Masquerade power is on ----> scanner.dm
+ if(mind)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (istype(bloodsuckerdatum) && bloodsuckerdatum.poweron_masquerade)
+ return BLOOD_VOLUME_NORMAL
+ return blood_volume
+
+/mob/living/proc/IsFrenzied()
+ return FALSE
+
+/mob/living/proc/StartFrenzy(inTime = 120)
+ set waitfor = FALSE
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
new file mode 100644
index 0000000000..9174692b49
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
@@ -0,0 +1,361 @@
+
+
+// TO PLUG INTO LIFE:
+
+// Cancel BLOOD life
+// Cancel METABOLISM life (or find a way to control what gets digested)
+// Create COLDBLOODED trait (thermal homeostasis)
+
+// EXAMINE
+//
+// Show as dead when...
+
+/datum/antagonist/bloodsucker/proc/LifeTick()// Should probably run from life.dm, same as handle_changeling, but will be an utter pain to move
+ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
+ var/notice_healing = FALSE
+ while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src
+ if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood
+ AddBloodVolume(-0.1) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now)
+ if(HandleHealing(1)) // Heal
+ if(notice_healing == FALSE && owner.current.blood_volume > 0)
+ to_chat(owner, "The power of your blood begins knitting your wounds... ")
+ notice_healing = TRUE
+ else if(notice_healing == TRUE)
+ notice_healing = FALSE // Apply Low Blood Effects
+ HandleStarving() // Death
+ HandleDeath() // Standard Update
+ update_hud()// Daytime Sleep in Coffin
+ if (SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker"))
+ if(istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ Torpor_Begin()
+ // Wait before next pass
+ sleep(10)
+ FreeAllVassals() // Free my Vassals! (if I haven't yet)
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// BLOOD
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/antagonist/bloodsucker/proc/AddBloodVolume(value)
+ owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, maxBloodVolume)
+ update_hud()
+
+/datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1)
+ // mult: SILENT feed is 1/3 the amount
+ var/blood_taken = min(feedAmount, target.blood_volume) * mult // Starts at 15 (now 8 since we doubled the Feed time)
+ target.blood_volume -= blood_taken
+ // Simple Animals lose a LOT of blood, and take damage. This is to keep cats, cows, and so forth from giving you insane amounts of blood.
+ if(!ishuman(target))
+ target.blood_volume -= (blood_taken / max(target.mob_size, 0.1)) * 3.5 // max() to prevent divide-by-zero
+ target.apply_damage_type(blood_taken / 3.5) // Don't do too much damage, or else they die and provide no blood nourishment.
+ if(target.blood_volume <= 0)
+ target.blood_volume = 0
+ target.death(0)
+ ///////////
+ // Shift Body Temp (toward Target's temp, by volume taken)
+ owner.current.bodytemperature = ((owner.current.blood_volume * owner.current.bodytemperature) + (blood_taken * target.bodytemperature)) / (owner.current.blood_volume + blood_taken)
+ // our volume * temp, + their volume * temp, / total volume
+ ///////////
+ // Reduce Value Quantity
+ if(target.stat == DEAD) // Penalty for Dead Blood
+ blood_taken /= 3
+ if(!ishuman(target)) // Penalty for Non-Human Blood
+ blood_taken /= 2
+ //if (!iscarbon(target)) // Penalty for Animals (they're junk food)
+ // Apply to Volume
+ AddBloodVolume(blood_taken)
+ // Reagents (NOT Blood!)
+ if(target.reagents && target.reagents.total_volume)
+ target.reagents.reaction(owner.current, INGEST, 1) // Run Reaction: what happens when what they have mixes with what I have?
+ target.reagents.trans_to(owner.current, 1) // Run transfer of 1 unit of reagent from them to me.
+ // Blood Gulp Sound
+ owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// HEALING
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1)
+ // NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor!
+ //It is called from your coffin on close (by you only)
+ if(poweron_masquerade == TRUE || owner.current.AmStaked())
+ return FALSE
+ owner.current.adjustStaminaLoss(-2 + (regenRate * -10) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
+ owner.current.adjustCloneLoss(-1 * (regenRate * 4) * mult, 0)
+ owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0)
+ // No Bleeding
+ if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
+ var/mob/living/carbon/human/H = owner.current
+ H.bleed_rate = 0
+ if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart?
+ var/mob/living/carbon/C = owner.current
+ var/costMult = 1 // Coffin makes it cheaper
+ var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire)
+ var/amInCoffinWhileTorpor = istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_DEATHCOMA)) // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin)
+ if(amInCoffinWhileTorpor)
+ mult *= 5 // Increase multiplier if we're sleeping in a coffin.
+ fireheal = min(C.getFireLoss_nonProsthetic(), regenRate) // NOTE: Burn damage ONLY heals in torpor.
+ costMult = 0.25
+ C.ExtinguishMob()
+ CureDisabilities() // Extinguish Fire
+ C.remove_all_embedded_objects() // Remove Embedded!
+ owner.current.regenerate_organs() // Heal Organs (will respawn original eyes etc. but we replace right away, next)
+ CheckVampOrgans() // Heart, Eyes
+ else
+ if(owner.current.blood_volume <= 0) // No Blood? Lower Mult
+ mult = 0.25
+ // Crit from burn? Lower damage to maximum allowed.
+ //if (C.getFireLoss() > owner.current.getMaxHealth())
+ // fireheal = regenRate / 2
+ // BRUTE: Always Heal
+ var/bruteheal = min(C.getBruteLoss_nonProsthetic(), regenRate)
+ var/toxinheal = min(C.getToxLoss(), regenRate)
+ // Heal if Damaged
+ if(bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return.
+ if(mult == 0)
+ return TRUE
+ // We have damage. Let's heal (one time)
+ C.adjustBruteLoss(-bruteheal * mult, forced = TRUE)// Heal BRUTE / BURN in random portions throughout the body.
+ C.adjustFireLoss(-fireheal * mult, forced = TRUE)
+ C.adjustToxLoss(-toxinheal * mult * 2, forced = TRUE) //Toxin healing because vamps arent immune
+ //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above.
+ AddBloodVolume((bruteheal * -0.5 + fireheal * -1) / mult * costMult) // Costs blood to heal
+ return TRUE // Healed! Done for this tick.
+ if(amInCoffinWhileTorpor) // Limbs? (And I have no other healing)
+ var/list/missing = owner.current.get_missing_limbs() // Heal Missing
+ if (missing.len) // Cycle through ALL limbs and regen them!
+ for (var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it.
+ owner.current.regenerate_limb(targetLimbZone, 0) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head"))
+ var/obj/item/bodypart/L = owner.current.get_bodypart( targetLimbZone ) // 2) Limb returns Damaged
+ AddBloodVolume(50 * costMult) // Costs blood to heal
+ L.brute_dam = 60
+ to_chat(owner.current, "Your flesh knits as it regrows [L]! ")
+ playsound(owner.current, 'sound/magic/demon_consume.ogg', 50, 1)
+ // DONE! After regenerating ANY number of limbs, we stop here.
+ return TRUE
+ /*else // REMOVED: For now, let's just leave prosthetics on. Maybe you WANT to be a robovamp.
+ // Remove Prosthetic/False Limb
+ for(var/obj/item/bodypart/BP in C.bodyparts)
+ message_admins("T1: [BP] ")
+ if (istype(BP) && BP.status == 2)
+ message_admins("T2: [BP] ")
+ BP.drop_limb()
+ return TRUE */
+ // NOTE: Limbs have a "status", like their hosts "stat". 2 is dead (aka Prosthetic). 1 seems to be idle/alive.*/
+ return FALSE
+
+/datum/antagonist/bloodsucker/proc/CureDisabilities()
+ var/mob/living/carbon/C = owner.current
+ C.cure_blind(list(EYE_DAMAGE))//()
+ C.cure_nearsighted(EYE_DAMAGE)
+ C.set_blindness(0) // Added 9/2/19
+ C.set_blurriness(0) // Added 9/2/19
+ C.update_tint() // Added 9/2/19
+ C.update_sight() // Added 9/2/19
+ for(var/O in C.internal_organs) //owner.current.adjust_eye_damage(-100) // This was removed by TG
+ var/obj/item/organ/organ = O
+ organ.setOrganDamage(0)
+ owner.current.cure_husk()
+
+// I am thirsty for blud!
+/datum/antagonist/bloodsucker/proc/HandleStarving()
+
+ // High: Faster Healing
+ // Med: Pale
+ // Low: Twitch
+ // V.Low: Blur Vision
+ // EMPTY: Frenzy!
+ // BLOOD_VOLUME_GOOD: [336] Pale (handled in bloodsucker_integration.dm
+ // BLOOD_VOLUME_BAD: [224] Jitter
+ if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5))
+ owner.current.Jitter(3)
+ // BLOOD_VOLUME_SURVIVE: [122] Blur Vision
+ if(owner.current.blood_volume < BLOOD_VOLUME_BAD / 2)
+ owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD))
+ // Nutrition
+ owner.current.nutrition = min(owner.current.blood_volume, NUTRITION_LEVEL_FED) // <-- 350 //NUTRITION_LEVEL_FULL
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// DEATH
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/antagonist/bloodsucker/proc/HandleDeath()
+ // FINAL DEATH
+ // Fire Damage? (above double health)
+ if (owner.current.getFireLoss_nonProsthetic() >= owner.current.getMaxHealth() * 2)
+ FinalDeath()
+ return
+ // Staked while "Temp Death" or Asleep
+ if (owner.current.StakeCanKillMe() && owner.current.AmStaked())
+ FinalDeath()
+ return
+ // Not "Alive"?
+ if (!owner.current || !isliving(owner.current) || isbrain(owner.current) || !get_turf(owner.current))
+ FinalDeath()
+ return
+ // Missing Brain or Heart?
+ if (!owner.current.HaveBloodsuckerBodyparts())
+ FinalDeath()
+ return
+ // Disable Powers: Masquerade * NOTE * This should happen as a FLAW!
+ //if (stat >= UNCONSCIOUS)
+ // for (var/datum/action/bloodsucker/masquerade/P in powers)
+ // P.Deactivate()
+ // TEMP DEATH
+ var/total_brute = owner.current.getBruteLoss_nonProsthetic()
+ var/total_burn = owner.current.getFireLoss_nonProsthetic()
+ var/total_toxloss = owner.current.getToxLoss() //This is neater than just putting it in total_damage
+ var/total_damage = total_brute + total_burn + total_toxloss
+ // Died? Convert to Torpor (fake death)
+ if (owner.current.stat >= DEAD)
+ Torpor_Begin()
+ to_chat(owner, "Your immortal body will not yet relinquish your soul to the abyss. You enter Torpor. ")
+ if (poweron_masquerade == TRUE)
+ to_chat(owner, "Your wounds will not heal until you disable the Masquerade power. ")
+ // End Torpor:
+ else // No damage, OR toxin healed AND brute healed and NOT in coffin (since you cannot heal burn)
+ if (total_damage <= 0 || total_toxloss <= 0 && total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ // Not Daytime, Not in Torpor
+ if (!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker"))
+ Torpor_End()
+ // Fake Unconscious
+ if (poweron_masquerade == TRUE && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT)
+ owner.current.Unconscious(20,1)
+
+ //HEALTH_THRESHOLD_CRIT 0
+ //HEALTH_THRESHOLD_FULLCRIT -30
+ //HEALTH_THRESHOLD_DEAD -100
+
+/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin=FALSE)
+ owner.current.stat = UNCONSCIOUS
+ owner.current.fakedeath("bloodsucker") // Come after UNCONSCIOUS or else it fails
+ ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover.
+ ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
+ ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
+ // Visuals
+ owner.current.update_sight()
+ owner.current.reload_fullscreen()
+ // Disable ALL Powers
+ for (var/datum/action/bloodsucker/power in powers)
+ if (power.active && !power.can_use_in_torpor)
+ power.DeactivatePower()
+
+
+/datum/antagonist/bloodsucker/proc/Torpor_End()
+ owner.current.stat = SOFT_CRIT
+ owner.current.cure_fakedeath("bloodsucker") // Come after SOFT_CRIT or else it fails
+ REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker")
+ REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker")
+ REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker")
+ to_chat(owner, "You have recovered from Torpor. ")
+
+
+/datum/antagonist/proc/AmFinalDeath()
+ // Standard Antags can be dead OR final death
+ return owner && (owner.current && owner.current.stat >= DEAD || owner.AmFinalDeath())
+
+/datum/antagonist/bloodsucker/AmFinalDeath()
+ return owner && owner.AmFinalDeath()
+/datum/antagonist/changeling/AmFinalDeath()
+ return owner && owner.AmFinalDeath()
+
+/datum/mind/proc/AmFinalDeath()
+ return !current || QDELETED(current) || !isliving(current) || isbrain(current) || !get_turf(current) // NOTE: "isliving()" is not the same as STAT == CONSCIOUS. This is to make sure you're not a BORG (aka silicon)
+
+/datum/antagonist/bloodsucker/proc/FinalDeath()
+ if(!iscarbon(owner.current)) //Check for non carbons.
+ owner.current.gib()
+ return
+ playsound(get_turf(owner.current), 'sound/effects/tendril_destroyed.ogg', 60, 1)
+ owner.current.drop_all_held_items()
+ owner.current.unequip_everything()
+ var/mob/living/carbon/C = owner.current
+ C.remove_all_embedded_objects()
+ // Make me UN-CLONEABLE
+ owner.current.hellbound = TRUE // This was done during creation, but let's do it again one more time...to make SURE this guy stays dead, but they dont stay dead because brains can be cloned!
+ // Free my Vassals!
+ FreeAllVassals()
+ // Elders get Dusted
+ if (vamplevel >= 4) // (vamptitle)
+ owner.current.visible_message("[owner.current]'s skin crackles and dries, their skin and bones withering to dust. A hollow cry whips from what is now a sandy pile of remains. ", \
+ "Your soul escapes your withering body as the abyss welcomes you to your Final Death. ", \
+ "You hear a dry, crackling sound. ")
+ owner.current.dust()
+ // Fledglings get Gibbed
+ else
+ owner.current.visible_message("[owner.current]'s skin bursts forth in a spray of gore and detritus. A horrible cry echoes from what is now a wet pile of decaying meat. ", \
+ "Your soul escapes your withering body as the abyss welcomes you to your Final Death. ", \
+ "You hear a wet, bursting sound. ")
+ owner.current.gib(TRUE, FALSE, FALSE)//Brain cloning is wierd and allows hellbounds. Lets destroy the brain for safety.
+ playsound(owner.current.loc, 'sound/effects/tendril_destroyed.ogg', 40, 1)
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// HUMAN FOOD
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/mob/proc/CheckBloodsuckerEatFood(var/food_nutrition)
+ if (!isliving(src))
+ return
+ var/mob/living/L = src
+ if (!L.AmBloodsucker())
+ return
+ // We're a vamp? Try to eat food...
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ bloodsuckerdatum.handle_eat_human_food(food_nutrition)
+
+
+/datum/antagonist/bloodsucker/proc/handle_eat_human_food(var/food_nutrition) // Called from snacks.dm and drinks.dm
+ set waitfor = FALSE
+ if (!owner.current || !iscarbon(owner.current))
+ return
+ var/mob/living/carbon/C = owner.current
+ // Remove Nutrition, Give Bad Food
+ C.nutrition -= food_nutrition
+ foodInGut += food_nutrition
+ // Already ate some bad clams? Then we can back out, because we're already sick from it.
+ if (foodInGut != food_nutrition)
+ return
+ // Haven't eaten, but I'm in a Human Disguise.
+ else if (poweron_masquerade)
+ to_chat(C, "Your stomach turns, but your \"human disguise\" keeps the food down...for now. ")
+ // Keep looping until we purge. If we have activated our Human Disguise, we ignore the food. But it'll come up eventually...
+ var/sickphase = 0
+ while (foodInGut)
+ sleep(50)
+ C.adjust_disgust(10 * sickphase)
+ // Wait an interval...
+ sleep(50 + 50 * sickphase) // At intervals of 100, 150, and 200. (10 seconds, 15 seconds, and 20 seconds)
+ // Died? Cancel
+ if(C.stat == DEAD)
+ return
+ // Put up disguise? Then hold off the vomit.
+ if(poweron_masquerade)
+ if(sickphase > 0)
+ to_chat(C, "Your stomach settles temporarily. You regain your composure...for now. ")
+ sickphase = 0
+ continue
+ switch(sickphase)
+ if (1)
+ to_chat(C, "You feel unwell. You can taste ash on your tongue. ")
+ C.Stun(10)
+ if (2)
+ to_chat(C, "Your stomach turns. Whatever you ate tastes of grave dirt and brimstone. ")
+ C.Dizzy(15)
+ C.Stun(13)
+ if (3)
+ to_chat(C, "You purge the food of the living from your viscera! You've never felt worse. ")
+ C.vomit(foodInGut * 4, foodInGut * 2, 0) // (var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0)
+ C.blood_volume = max(0, C.blood_volume - foodInGut * 2)
+ C.Stun(30)
+ //C.Dizzy(50)
+ foodInGut = 0
+ sickphase ++
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
new file mode 100644
index 0000000000..63e1470576
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm
@@ -0,0 +1,351 @@
+
+
+// Hide a random object somewhere on the station:
+// var/turf/targetturf = get_random_station_turf()
+// var/turf/targetturf = get_safe_random_station_turf()
+
+
+
+
+/datum/objective/bloodsucker
+ martyr_compatible = TRUE
+
+// GENERATE!
+/datum/objective/bloodsucker/proc/generate_objective()
+ update_explanation_text()
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// // PROCS // //
+
+
+/datum/objective/bloodsucker/proc/return_possible_targets()
+ var/list/possible_targets = list()
+
+ // Look at all crew members, and for/loop through.
+ for(var/datum/mind/possible_target in get_crewmember_minds())
+ // Check One: Default Valid User
+ if(possible_target != owner && ishuman(possible_target.current) && possible_target.current.stat != DEAD)// && is_unique_objective(possible_target))
+ // Check Two: Am Bloodsucker? OR in Bloodsucker list?
+ if (possible_target.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) || (possible_target in SSticker.mode.bloodsuckers))
+ continue
+ else
+ possible_targets += possible_target
+
+ return possible_targets
+
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/lair
+
+// EXPLANATION
+/datum/objective/bloodsucker/lair/update_explanation_text()
+ explanation_text = "Create a lair by claiming a coffin, and protect it until the end of the shift"// Make sure to keep it safe!"
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/lair/check_completion()
+ var/datum/antagonist/bloodsucker/antagdatum = owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (antagdatum && antagdatum.coffin && antagdatum.lair)
+ return TRUE
+ return FALSE
+
+ // Space_Station_13_areas.dm <--- all the areas
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Vassal becomes a Head, or part of a department
+/datum/objective/bloodsucker/protege
+
+ // LOOKUP: /datum/crewmonitor/proc/update_data(z) for .assignment to see how to get a person's PDA.
+ var/list/roles = list(
+ "Captain",
+ "Head of Personnel",
+ "Research Director",
+ "Chief Engineer",
+ "Chief Medical Officer",
+ "Quartermaster"
+ )
+ var/list/departs = list(
+ "Research Director",
+ "Chief Engineer",
+ "Chief Medical Officer",
+ "Quartermaster"
+ )
+
+
+ var/target_role // Equals "HEAD" when it's not a department role.
+ var/department_string
+
+// GENERATE!
+/datum/objective/bloodsucker/protege/generate_objective()
+ target_role = rand(0,2) == 0 ? "HEAD" : pick(departs)
+
+ // Heads?
+ if (target_role == "HEAD")
+ target_amount = rand(1, round(SSticker.mode.num_players() / 20))
+ target_amount = CLAMP(target_amount,1,3)
+ // Department?
+ else
+ switch(target_role)
+ if("Research Director")
+ department_string = "Science"
+ if("Chief Engineer")
+ department_string = "Engineering"
+ if("Chief Medical Officer")
+ department_string = "Medical"
+ if("Quartermaster")
+ department_string = "Cargo"
+ target_amount = rand(round(SSticker.mode.num_players() / 20), round(SSticker.mode.num_players() / 10))
+ target_amount = CLAMP(target_amount, 2, 4)
+ ..()
+
+// EXPLANATION
+/datum/objective/bloodsucker/protege/update_explanation_text()
+ if (target_role == "HEAD")
+ if (target_amount == 1)
+ explanation_text = "Guarantee a Vassal ends up as a Department Head or in a Leadership role."
+ else
+ explanation_text = "Guarantee [target_amount] Vassals end up as different Leadership or Department Heads."
+ else
+ explanation_text = "Have [target_amount] Vassal[target_amount==1?"":"s"] in the [department_string] department."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/protege/check_completion()
+
+ var/datum/antagonist/bloodsucker/antagdatum = owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (!antagdatum || antagdatum.vassals.len == 0)
+ return FALSE
+
+ // Get list of all jobs that are qualified (for HEAD, this is already done)
+ var/list/valid_jobs
+ if (target_role == "HEAD")
+ valid_jobs = roles
+ else
+ valid_jobs = list()
+ var/list/alljobs = subtypesof(/datum/job) // This is just a list of TYPES, not the actual variables!
+ for(var/T in alljobs)
+ var/datum/job/J = SSjob.GetJobType(T) //
+ if (!istype(J))
+ continue
+ // Found a job whose Dept Head matches either list of heads, or this job IS the head
+ if ((target_role in J.department_head) || target_role == J.title)
+ valid_jobs += J.title
+
+
+ // Check Vassals, and see if they match
+ var/objcount = 0
+ var/list/counted_roles = list() // So you can't have more than one Captain count.
+ for(var/datum/antagonist/vassal/V in antagdatum.vassals)
+ if (!V || !V.owner) // Must exist somewhere, and as a vassal.
+ continue
+
+ var/thisRole = "none"
+
+ // Mind Assigned
+ if ((V.owner.assigned_role in valid_jobs) && !(V.owner.assigned_role in counted_roles))
+ //to_chat(owner, "PROTEGE OBJECTIVE: (MIND ROLE) ")
+ thisRole = V.owner.assigned_role
+ // Mob Assigned
+ else if ((V.owner.current.job in valid_jobs) && !(V.owner.current.job in counted_roles))
+ //to_chat(owner, "PROTEGE OBJECTIVE: (MOB JOB) ")
+ thisRole = V.owner.current.job
+ // PDA Assigned
+ else if (V.owner.current && ishuman(V.owner.current))
+ var/mob/living/carbon/human/H = V.owner.current
+ var/obj/item/card/id/I = H.wear_id ? H.wear_id.GetID() : null
+ if (I && (I.assignment in valid_jobs) && !(I.assignment in counted_roles))
+ //to_chat(owner, "PROTEGE OBJECTIVE: (GET ID) ")
+ thisRole = I.assignment
+
+ // NO MATCH
+ if (thisRole == "none")
+ continue
+
+ // SUCCESS!
+ objcount ++
+ if (target_role == "HEAD")
+ counted_roles += thisRole // Add to list so we don't count it again (but only if it's a Head)
+
+ // NOTE!!!!!!!!!!!
+
+ // Look for jobs value on mobs! This is assigned at start, but COULD be assigned from HoP?
+ //
+ // ALSO - Search through all jobs (look for prefs earlier that look for all jobs, and search through all jobs to see if their head matches the head listed, or it IS the head)
+ //
+ // ALSO - registered_account in _vending.dm for banks, and assigning new ones.
+
+ //to_chat(antagdatum.owner, "PROTEGE OBJECTIVE: Final Count: [objcount] of [antagdatum.vassals.len] vassals ")
+ return objcount >= target_amount
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Eat blood from a lot of people
+/datum/objective/bloodsucker/gourmand
+
+// HOW: Track each feed (if human). Count victory.
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Convert a crewmate
+/datum/objective/bloodsucker/embrace
+
+// HOW: Find crewmate. Check if person is a bloodsucker
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Defile a facility with blood
+/datum/objective/bloodsucker/desecrate
+
+ // Space_Station_13_areas.dm <--- all the areas
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Destroy the Solar Arrays
+/datum/objective/bloodsucker/solars
+
+// Space_Station_13_areas.dm <--- all the areas
+/datum/objective/bloodsucker/solars/update_explanation_text()
+ explanation_text = "Prevent all solar arrays on the station from functioning."
+
+/datum/objective/bloodsucker/solars/check_completion()
+ // Sort through all /obj/machinery/power/solar_control in the station ONLY, and check that they are functioning.
+ // Make sure that lastgen is 0 or connected_panels.len is 0. Doesnt matter if it's tracking.
+ for (var/obj/machinery/power/solar_control/SC in SSsun.solars)
+ // Check On Station:
+ var/turf/T = get_turf(SC)
+ if(!T || !is_station_level(T.z)) // <------ Taken from NukeOp
+ //message_admins("DEBUG A: [SC] not on station!")
+ continue // Not on station! We don't care about this.
+ if (SC && SC.lastgen > 0 && SC.connected_panels.len > 0 && SC.connected_tracker)
+ return FALSE
+ return TRUE
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Steal hearts. You just really wanna have some hearts.
+/datum/objective/bloodsucker/heartthief
+ // NOTE: Look up /steal in objective.dm for inspiration.
+
+// GENERATE!
+/datum/objective/bloodsucker/heartthief/generate_objective()
+ target_amount = rand(2,3)
+
+ update_explanation_text()
+ //dangerrating += target_amount * 2
+
+// EXPLANATION
+/datum/objective/bloodsucker/heartthief/update_explanation_text()
+ explanation_text = "Steal and keep [target_amount] heart[target_amount == 1 ? "" : "s"]." // TO DO: Limit them to Human Only!
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/heartthief/check_completion()
+ // -Must have a body.
+ if (!owner.current)
+ return FALSE
+ // Taken from /steal in objective.dm
+ var/list/all_items = owner.current.GetAllContents() // Includes items inside other items.
+ var/itemcount = FALSE
+ for(var/obj/I in all_items) //Check for items
+ if(I == /obj/item/organ/heart)
+ itemcount ++
+ if (itemcount >= target_amount) // Got the right amount?
+ return TRUE
+
+ return FALSE
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/survive
+ martyr_compatible = FALSE
+
+
+// EXPLANATION
+/datum/objective/bloodsucker/survive/update_explanation_text()
+ explanation_text = "Survive the entire shift without succumbing to Final Death."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/survive/check_completion()
+ // -Must have a body.
+ if (!owner.current || !isliving(owner.current))
+ return FALSE
+ // Dead, without a head or heart? Cya
+ return owner.current.stat != DEAD// || owner.current.HaveBloodsuckerBodyparts()
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/vamphunter
+
+// GENERATE!
+/datum/objective/bloodsucker/vamphunter/generate_objective()
+ update_explanation_text()
+
+// EXPLANATION
+/datum/objective/bloodsucker/vamphunter/update_explanation_text()
+ explanation_text = "Destroy all Bloodsuckers on [station_name()]."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/vamphunter/check_completion()
+ for (var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if (M && M.current && M.current.stat != DEAD && get_turf(M.current))
+ return FALSE
+ return TRUE
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/monsterhunter
+
+// GENERATE!
+/datum/objective/bloodsucker/monsterhunter/generate_objective()
+ update_explanation_text()
+
+// EXPLANATION
+/datum/objective/bloodsucker/monsterhunter/update_explanation_text()
+ explanation_text = "Destroy all monsters on [station_name()]."
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/monsterhunter/check_completion()
+ var/list/datum/mind/monsters = list()
+ monsters += SSticker.mode.bloodsuckers
+ monsters += SSticker.mode.devils
+ monsters += SSticker.mode.cult
+ monsters += SSticker.mode.wizards
+ monsters += SSticker.mode.apprentices
+ //monsters += SSticker.mode.servants_of_ratvar
+ //monsters += SSticker.mode.changelings disabled anyways
+
+ for (var/datum/mind/M in monsters)
+ if (M && M != owner && M.current && M.current.stat != DEAD && get_turf(M.current))
+ return FALSE
+ return TRUE
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/datum/objective/bloodsucker/vassal
+
+// GENERATE!
+/datum/objective/bloodsucker/vassal/generate_objective()
+ update_explanation_text()
+
+// EXPLANATION
+/datum/objective/bloodsucker/vassal/update_explanation_text()
+ explanation_text = "Guarantee the success of your Master's mission!"
+
+// WIN CONDITIONS?
+/datum/objective/bloodsucker/vassal/check_completion()
+ var/datum/antagonist/vassal/antag_datum = owner.has_antag_datum(ANTAG_DATUM_VASSAL)
+ return antag_datum.master && antag_datum.master.owner && antag_datum.master.owner.current && antag_datum.master.owner.current.stat != DEAD
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
new file mode 100644
index 0000000000..dffdeaf7fc
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
@@ -0,0 +1,284 @@
+/datum/action/bloodsucker
+ name = "Vampiric Gift"
+ desc = "A vampiric gift."
+ button_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the BACKGROUND icon
+ background_icon_state = "vamp_power_off" //And this is the state for the background icon
+ var/background_icon_state_on = "vamp_power_on" // FULP: Our "ON" icon alternative.
+ var/background_icon_state_off = "vamp_power_off" // FULP: Our "OFF" icon alternative.
+ icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon
+ button_icon_state = "power_feed" //And this is the state for the action icon
+ buttontooltipstyle = "cult"
+
+ // Action-Related
+ //var/amPassive = FALSE // REMOVED: Just made it its own kind. // Am I just "on" at all times? (aka NO ICON)
+ var/amTargetted = FALSE // Am I asked to choose a target when enabled? (Shows as toggled ON when armed)
+ var/amToggle = FALSE // Can I be actively turned on and off?
+ var/amSingleUse = FALSE // Am I removed after a single use?
+ var/active = FALSE
+ var/cooldown = 20 // 10 ticks, 1 second.
+ var/cooldownUntil = 0 // From action.dm: next_use_time = world.time + cooldown_time
+ // Power-Related
+ var/level_current = 0 // Can increase to yield new abilities. Each power goes up in strength each Rank.
+ //var/level_max = 1 //
+ var/bloodcost = 10
+ var/needs_button = TRUE // Taken from Changeling - for passive abilities that dont need a button
+ var/bloodsucker_can_buy = FALSE // Must be a bloodsucker to use this power.
+ var/warn_constant_cost = FALSE // Some powers charge you for staying on. Masquerade, Cloak, Veil, etc.
+ var/can_use_in_torpor = FALSE // Most powers don't function if you're in torpor.
+ var/must_be_capacitated = FALSE // Some powers require you to be standing and ready.
+ var/can_be_immobilized = FALSE // Brawn can be used when incapacitated/laying if it's because you're being immobilized. NOTE: If must_be_capacitated is FALSE, this is irrelevant.
+ var/can_be_staked = FALSE // Only Feed can happen with a stake in you.
+ var/cooldown_static = FALSE // Feed, Masquerade, and One-Shot powers don't improve their cooldown.
+ //var/not_bloodsucker = FALSE // This goes to Vassals or Hunters, but NOT bloodsuckers.
+
+/datum/action/bloodsucker/New()
+ if (bloodcost > 0)
+ desc += "COST: [bloodcost] Blood" // Modify description to add cost.
+ if (warn_constant_cost)
+ desc += "Your over-time blood consumption increases while [name] is active. "
+ if (amSingleUse)
+ desc += "Useable once per night. "
+ ..()
+
+// NOTES
+//
+// click.dm <--- Where we can take over mouse clicks
+// spells.dm /add_ranged_ability() <--- How we take over the mouse click to use a power on a target.
+
+/datum/action/bloodsucker/Trigger()
+ // Active? DEACTIVATE AND END!
+ if (active && CheckCanDeactivate(TRUE))
+ DeactivatePower()
+ return
+ if (!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE))
+ return
+ PayCost()
+ if (amToggle)
+ active = !active
+ UpdateButtonIcon()
+ if (!amToggle || !active)
+ StartCooldown() // Must come AFTER UpdateButton(), otherwise icon will revert.
+ ActivatePower() // NOTE: ActivatePower() freezes this power in place until it ends.
+ if (active) // Did we not manually disable? Handle it here.
+ DeactivatePower()
+ if (amSingleUse)
+ RemoveAfterUse()
+
+/datum/action/bloodsucker/proc/CheckCanPayCost(display_error)
+ if(!owner || !owner.mind)
+ return FALSE
+ // Cooldown?
+ if (cooldownUntil > world.time)
+ if (display_error)
+ to_chat(owner, "[src] is unavailable. Wait [(cooldownUntil - world.time) / 10] seconds.")
+ return FALSE
+ // Have enough blood?
+ var/mob/living/L = owner
+ if (L.blood_volume < bloodcost)
+ if (display_error)
+ to_chat(owner, "You need at least [bloodcost] blood to activate [name] ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/proc/CheckCanUse(display_error) // These checks can be scanned every frame while a ranged power is on.
+ if(!owner || !owner.mind)
+ return FALSE
+ // Torpor?
+ if(!can_use_in_torpor && HAS_TRAIT(owner, TRAIT_DEATHCOMA))
+ if(display_error)
+ to_chat(owner, "Not while you're in Torpor. ")
+ return FALSE
+ // Stake?
+ if(!can_be_staked && owner.AmStaked())
+ if(display_error)
+ to_chat(owner, "You have a stake in your chest! Your powers are useless. ")
+ return FALSE
+ // Incap?
+ if(must_be_capacitated)
+ var/mob/living/L = owner
+ if (L.incapacitated(TRUE, TRUE) || L.resting && !can_be_immobilized)
+ if(display_error)
+ to_chat(owner, "Not while you're incapacitated! ")
+ return FALSE
+ // Constant Cost (out of blood)
+ if(warn_constant_cost)
+ var/mob/living/L = owner
+ if(L.blood_volume <= 0)
+ if(display_error)
+ to_chat(owner, "You don't have the blood to upkeep [src]. ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/proc/StartCooldown()
+ set waitfor = FALSE
+ // Alpha Out
+ button.color = rgb(128,0,0,128)
+ button.alpha = 100
+ // Calculate Cooldown (by power's level)
+ var/this_cooldown = (cooldown_static || amSingleUse) ? cooldown : max(cooldown / 2, cooldown - (cooldown / 16 * (level_current-1)))
+ // NOTE: With this formula, you'll hit half cooldown at level 8 for that power.
+
+ // Wait for cooldown
+ cooldownUntil = world.time + this_cooldown
+ spawn(this_cooldown)
+ // Alpha In
+ button.color = rgb(255,255,255,255)
+ button.alpha = 255
+
+/datum/action/bloodsucker/proc/CheckCanDeactivate(display_error)
+ return TRUE
+
+/datum/action/bloodsucker/UpdateButtonIcon(force = FALSE)
+ background_icon_state = active? background_icon_state_on : background_icon_state_off
+ ..()//UpdateButtonIcon()
+
+
+/datum/action/bloodsucker/proc/PayCost()
+ // owner for actions is the mob, not mind.
+ var/mob/living/L = owner
+ L.blood_volume -= bloodcost
+
+
+/datum/action/bloodsucker/proc/ActivatePower()
+
+
+/datum/action/bloodsucker/proc/DeactivatePower(mob/living/user = owner, mob/living/target)
+ active = FALSE
+ UpdateButtonIcon()
+ StartCooldown()
+
+/datum/action/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active.
+ return active && user && (!warn_constant_cost || user.blood_volume > 0)
+
+/datum/action/bloodsucker/proc/RemoveAfterUse()
+ // Un-Learn Me! (GO HOME
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (istype(bloodsuckerdatum))
+ bloodsuckerdatum.powers -= src
+ Remove(owner)
+
+/datum/action/bloodsucker/proc/Upgrade()
+ level_current ++
+
+/////////////////////////////////// PASSIVE POWERS ///////////////////////////////////
+
+// New Type: Passive (Always on, no button)
+/datum/action/bloodsucker/passive
+
+/datum/action/bloodsucker/passive/New()
+ // REMOVED: DO NOTHBING!
+ ..()
+ // Don't Display Button! (it doesn't do anything anyhow)
+ button.screen_loc = DEFAULT_BLOODSPELLS
+ button.moved = DEFAULT_BLOODSPELLS
+ button.ordered = FALSE
+/datum/action/bloodsucker/passive/Destroy()
+ if(owner)
+ Remove(owner)
+ target = null
+
+/////////////////////////////////// TARGETTED POWERS ///////////////////////////////////
+
+/datum/action/bloodsucker/targeted
+ // NOTE: All Targeted spells are Toggles! We just don't bother checking here.
+ var/target_range = 99
+ var/message_Trigger = "Select a target."
+ var/obj/effect/proc_holder/bloodsucker/bs_proc_holder
+ var/power_activates_immediately = TRUE // Most powers happen the moment you click. Some, like Mesmerize, require time and shouldn't cost you if they fail.
+
+ var/power_in_use = FALSE // Is this power LOCKED due to being used?
+
+/datum/action/bloodsucker/targeted/New(Target)
+ desc += " \[Targeted Power \]" // Modify description to add notice that this is aimed.
+ ..()
+ // Create Proc Holder for intercepting clicks
+ bs_proc_holder = new ()
+ bs_proc_holder.linked_power = src
+
+// Click power: Begin Aim
+/datum/action/bloodsucker/targeted/Trigger()
+ if(active && CheckCanDeactivate(TRUE))
+ DeactivateRangedAbility()
+ DeactivatePower()
+ return
+ if(!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE))
+ return
+ active = !active
+ UpdateButtonIcon()
+ // Create & Link Targeting Proc
+ var/mob/living/L = owner
+ if(L.ranged_ability)
+ L.ranged_ability.remove_ranged_ability()
+ bs_proc_holder.add_ranged_ability(L)
+
+ if(message_Trigger != "")
+ to_chat(owner, "[message_Trigger] ")
+
+/datum/action/bloodsucker/targeted/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if(!owner.client) // <--- We don't allow non client usage so that using powers like mesmerize will FAIL if you try to use them as ghost. Why? because ranged_abvility in spell.dm
+ return FALSE // doesn't let you remove powers if you're not there. So, let's just cancel the power entirely.
+ return TRUE
+
+/datum/action/bloodsucker/targeted/DeactivatePower(mob/living/user = owner, mob/living/target)
+ // Don't run ..(), we don't want to engage the cooldown until we USE this power!
+ active = FALSE
+ UpdateButtonIcon()
+
+/datum/action/bloodsucker/targeted/proc/DeactivateRangedAbility()
+ // Only Turned off when CLICK is disabled...aka, when you successfully clicked (or
+ bs_proc_holder.remove_ranged_ability()
+
+// Check if target is VALID (wall, turf, or character?)
+/datum/action/bloodsucker/targeted/proc/CheckValidTarget(atom/A)
+ return FALSE // FALSE targets nothing.
+
+// Check if valid target meets conditions
+/datum/action/bloodsucker/targeted/proc/CheckCanTarget(atom/A, display_error)
+ // Out of Range
+ if(!(A in view(target_range, owner)))
+ if(display_error && target_range > 1) // Only warn for range if it's greater than 1. Brawn doesn't need to announce itself.
+ to_chat(owner, "Your target is out of range. ")
+ return FALSE
+ return istype(A)
+
+// Click Target
+/datum/action/bloodsucker/targeted/proc/ClickWithPower(atom/A)
+ // CANCEL RANGED TARGET check
+ if(power_in_use || !CheckValidTarget(A))
+ return FALSE
+ // Valid? (return true means DON'T cancel power!)
+ if(!CheckCanPayCost(TRUE) || !CheckCanUse(TRUE) || !CheckCanTarget(A, TRUE))
+ return TRUE
+ // Skip this part so we can return TRUE right away.
+ if(power_activates_immediately)
+ PowerActivatedSuccessfully() // Mesmerize pays only after success.
+ power_in_use = TRUE // Lock us into this ability until it successfully fires off. Otherwise, we pay the blood even if we fail.
+ FireTargetedPower(A) // We use this instead of ActivatePower(), which has no input
+ power_in_use = FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/proc/FireTargetedPower(atom/A)
+ // Like ActivatePower, but specific to Targeted (and takes an atom input). We don't use ActivatePower for targeted.
+
+/datum/action/bloodsucker/targeted/proc/PowerActivatedSuccessfully()
+ // The power went off! We now pay the cost of the power.
+ PayCost()
+ DeactivateRangedAbility()
+ DeactivatePower()
+ StartCooldown() // Do AFTER UpdateIcon() inside of DeactivatePower. Otherwise icon just gets wiped.
+
+/datum/action/bloodsucker/targeted/ContinueActive(mob/living/user, mob/living/target) // Used by loops to make sure this power can stay active.
+ return ..()
+// Target Proc Holder
+/obj/effect/proc_holder/bloodsucker
+ var/datum/action/bloodsucker/targeted/linked_power
+
+/obj/effect/proc_holder/bloodsucker/remove_ranged_ability(msg)
+ ..()
+ linked_power.DeactivatePower()
+
+/obj/effect/proc_holder/bloodsucker/InterceptClickOn(mob/living/caller, params, atom/A)
+ return linked_power.ClickWithPower(A)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
new file mode 100644
index 0000000000..bb6e2a69f9
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm
@@ -0,0 +1,195 @@
+#define TIME_BLOODSUCKER_NIGHT 900 // 15 minutes
+#define TIME_BLOODSUCKER_DAY_WARN 90 // 1.5 minutes
+#define TIME_BLOODSUCKER_DAY_FINAL_WARN 25 // 25 sec
+#define TIME_BLOODSUCKER_DAY 60 // 1.5 minutes // 10 is a second, 600 is a minute.
+#define TIME_BLOODSUCKER_BURN_INTERVAL 40 // 4 sec
+
+
+// Over Time, tick down toward a "Solar Flare" of UV buffeting the station. This period is harmful to vamps.
+/obj/effect/sunlight
+ //var/amDay = FALSE
+ var/cancel_me = FALSE
+ var/amDay = FALSE
+ var/time_til_cycle = 0
+
+/obj/effect/sunlight/Initialize()
+ countdown()
+ hud_tick()
+
+/obj/effect/sunlight/proc/countdown()
+ set waitfor = FALSE
+
+ while(!cancel_me)
+
+ time_til_cycle = TIME_BLOODSUCKER_NIGHT
+
+ // Part 1: Night (all is well)
+ while(time_til_cycle > TIME_BLOODSUCKER_DAY_WARN)
+ sleep(10)
+ if(cancel_me)
+ return
+ //sleep(TIME_BLOODSUCKER_NIGHT - TIME_BLOODSUCKER_DAY_WARN)
+ warn_daylight(1,"Solar Flares will bombard the station with dangerous UV in [TIME_BLOODSUCKER_DAY_WARN / 60] minutes. Prepare to seek cover in a coffin or closet. ") // time2text <-- use Help On
+ give_home_power() // Give VANISHING ACT power to all vamps with a lair!
+
+ // Part 2: Night Ending
+ while(time_til_cycle > TIME_BLOODSUCKER_DAY_FINAL_WARN)
+ sleep(10)
+ if(cancel_me)
+ return
+ //sleep(TIME_BLOODSUCKER_DAY_WARN - TIME_BLOODSUCKER_DAY_FINAL_WARN)
+ message_admins("BLOODSUCKER NOTICE: Daylight beginning in [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds.)")
+ warn_daylight(2,"Solar Flares are about to bombard the station! You have [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds to find cover! ",\
+ "In [TIME_BLOODSUCKER_DAY_FINAL_WARN / 10], your master will be at risk of a Solar Flare. Make sure they find cover! ")
+
+ // (FINAL LIL WARNING)
+ while(time_til_cycle > 5)
+ sleep(10)
+ if (cancel_me)
+ return
+ //sleep(TIME_BLOODSUCKER_DAY_FINAL_WARN - 50)
+ warn_daylight(3,"Seek cover, for Sol rises! ")
+
+ // Part 3: Night Ending
+ while (time_til_cycle > 0)
+ sleep(10)
+ if (cancel_me)
+ return
+ //sleep(50)
+ warn_daylight(4,"Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death! ",\
+ "Solar flares bombard the station with UV light! ")
+
+ // Part 4: Day
+ amDay = TRUE
+ message_admins("BLOODSUCKER NOTICE: Daylight Beginning (Lasts for [TIME_BLOODSUCKER_DAY / 60] minutes.)")
+ time_til_cycle = TIME_BLOODSUCKER_DAY
+ sleep(10) // One second grace period.
+ //var/daylight_time = TIME_BLOODSUCKER_DAY
+ var/issued_XP = FALSE
+ while(time_til_cycle > 0)
+ punish_vamps()
+ sleep(TIME_BLOODSUCKER_BURN_INTERVAL)
+ if (cancel_me)
+ return
+ //daylight_time -= TIME_BLOODSUCKER_BURN_INTERVAL
+ // Issue Level Up!
+ if(!issued_XP && time_til_cycle <= 15)
+ issued_XP = TRUE
+ vamps_rank_up()
+
+ warn_daylight(5,"The solar flare has ended, and the daylight danger has passed...for now. ",\
+ "The solar flare has ended, and the daylight danger has passed...for now. ")
+ amDay = FALSE
+ day_end() // Remove VANISHING ACT power from all vamps who have it! Clear Warnings (sunlight, locker protection)
+ message_admins("BLOODSUCKER NOTICE: Daylight Ended. Resetting to Night (Lasts for [TIME_BLOODSUCKER_NIGHT / 60] minutes.)")
+
+
+/obj/effect/sunlight/proc/hud_tick()
+ set waitfor = FALSE
+ while(!cancel_me)
+ // Update all Bloodsucker sunlight huds
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(istype(bloodsuckerdatum))
+ bloodsuckerdatum.update_sunlight(max(0, time_til_cycle), amDay) // This pings all HUDs
+ sleep(10)
+ time_til_cycle --
+
+/obj/effect/sunlight/proc/warn_daylight(danger_level=0, vampwarn = "", vassalwarn = "")
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M))
+ continue
+ to_chat(M,vampwarn)
+ if(M.current)
+ if(danger_level == 1)
+ M.current.playsound_local(null, 'sound/chatter/griffin_3.ogg', 50 + danger_level, 1)
+ else if(danger_level == 2)
+ M.current.playsound_local(null, 'sound/chatter/griffin_5.ogg', 50 + danger_level, 1)
+ else if(danger_level == 3)
+ M.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1)
+ else if(danger_level == 4)
+ M.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1)
+ else if(danger_level == 5)
+ M.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1)
+
+ if(vassalwarn != "")
+ for(var/datum/mind/M in SSticker.mode.vassals)
+ if(!istype(M))
+ continue
+ to_chat(M,vassalwarn)
+
+
+/obj/effect/sunlight/proc/punish_vamps()
+ // Cycle through all vamp antags and check if they're inside a closet.
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(bloodsuckerdatum))
+ continue
+ // Closets offer SOME protection
+ if(istype(M.current.loc, /obj/structure))
+ // Coffins offer the BEST protection
+ if(istype(M.current.loc, /obj/structure/closet/crate/coffin))
+ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep)
+ continue
+ else
+ if(!bloodsuckerdatum.warn_sun_locker)
+ to_chat(M, "Your skin sizzles. The [M.current.loc] doesn't protect well against UV bombardment. ")
+ bloodsuckerdatum.warn_sun_locker = TRUE
+ M.current.adjustFireLoss(0.5 + bloodsuckerdatum.vamplevel / 2) // M.current.fireloss += 0.5 + bloodsuckerdatum.vamplevel / 2 // Do DIRECT damage. Being spaced was causing this to not occur. setFireLoss(bloodsuckerdatum.vamplevel)
+ M.current.updatehealth()
+ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_1)
+ // Out in the Open? Buh Bye
+ else
+ if(!bloodsuckerdatum.warn_sun_burn)
+ if(bloodsuckerdatum.vamplevel > 0)
+ to_chat(M, "The solar flare sets your skin ablaze! ")
+ else
+ to_chat(M, "The solar flare scalds your neophyte skin! ")
+ bloodsuckerdatum.warn_sun_burn = TRUE
+ if(M.current.fire_stacks <= 0)
+ M.current.fire_stacks = 0
+ if(bloodsuckerdatum.vamplevel > 0)
+ M.current.adjust_fire_stacks(0.2 + bloodsuckerdatum.vamplevel / 10)
+ M.current.IgniteMob()
+ M.current.adjustFireLoss(2 + bloodsuckerdatum.vamplevel) // M.current.fireloss += 2 + bloodsuckerdatum.vamplevel // Do DIRECT damage. Being spaced was causing this to not occur. //setFireLoss(2 + bloodsuckerdatum.vamplevel)
+ M.current.updatehealth()
+ SEND_SIGNAL(M.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/daylight_2)
+
+/obj/effect/sunlight/proc/day_end()
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(bloodsuckerdatum))
+ continue
+ // Reset Warnings
+ bloodsuckerdatum.warn_sun_locker = FALSE
+ bloodsuckerdatum.warn_sun_burn = FALSE
+ // Remove Dawn Powers
+ for(var/datum/action/bloodsucker/P in bloodsuckerdatum.powers)
+ if(istype(P, /datum/action/bloodsucker/gohome))
+ bloodsuckerdatum.powers -= P
+ P.Remove(M.current)
+
+/obj/effect/sunlight/proc/vamps_rank_up()
+ set waitfor = FALSE
+ // Cycle through all vamp antags and check if they're inside a closet.
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(istype(bloodsuckerdatum))
+ bloodsuckerdatum.RankUp() // Rank up! Must still be in a coffin to level!
+
+/obj/effect/sunlight/proc/give_home_power()
+ // It's late...! Give the "Vanishing Act" gohome power to bloodsuckers.
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if(!istype(M) || !istype(M.current))
+ continue
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(istype(bloodsuckerdatum) && bloodsuckerdatum.lair && !(locate(/datum/action/bloodsucker/gohome) in bloodsuckerdatum.powers))
+ bloodsuckerdatum.BuyPower(new /datum/action/bloodsucker/gohome)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm b/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm
new file mode 100644
index 0000000000..b922af6066
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_ui.dm
@@ -0,0 +1,116 @@
+
+
+// For all things visual, such as leveling up
+
+
+// Look up: _vending.dm proc/ui_interact()
+// Malf_Modules.dm proc/use()
+
+/*
+/datum/antagonist/bloodsucker/proc/LevelUpMenu()
+ var/list/dat = list()
+
+ dat += "You have become more ancient. Direct the path of your blood "
+ dat += " "
+
+ // Step One: Decide powers you CAN buy.
+ for(var/pickedpower in typesof(/datum/action/bloodsucker))
+ var/obj/effect/proc_holder/spell/bloodsucker/power = pickedpower
+ // NAME
+ dat += "[power.name] "
+ // COST
+ dat += "[power.name] Vend "
+ dat == " "
+
+ var/datum/browser/popup = new(owner.current, "bloodsuckerrank", "Bloodsucker Rank Up")
+ popup.set_content(dat.Join())
+ popup.open()
+
+/datum/antagonist/bloodsucker/Topic(href, href_list)
+ if(..())
+ return
+*/
+
+
+// From browser.dm: /datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
+
+
+/*
+ var/list/dat = list()
+ dat += "Select use of processing time: (currently #[processing_time] left.) "
+ dat += " "
+ dat += "Install Module: "
+ dat += "The number afterwards is the amount of processing time it consumes. "
+ for(var/datum/AI_Module/large/module in possible_modules)
+ dat += "[module.module_name] \[?\] ([module.cost]) "
+ for(var/datum/AI_Module/small/module in possible_modules)
+ dat += "[module.module_name] \[?\] ([module.cost]) "
+ dat += " "
+ if(temp)
+ dat += "[temp]"
+ var/datum/browser/popup = new(user, "modpicker", "Malf Module Menu")
+ popup.set_content(dat.Join())
+ popup.open()
+*/
+
+/*
+ var/dat = ""
+ var/datum/bank_account/account
+ var/mob/living/carbon/human/H
+ var/obj/item/card/id/C
+ if(ishuman(user))
+ H = user
+ C = H.get_idcard(TRUE)
+
+ if(!C)
+ dat += "No ID Card detected! "
+ else if (!C.registered_account)
+ dat += "No account on registered ID card! "
+ if(onstation && C && C.registered_account)
+ account = C.registered_account
+ dat += "Select an item "
+ dat += ""
+ if(!product_records.len)
+ dat += "
No product loaded! "
+ else
+ var/list/display_records = product_records + coin_records
+ if(extended_inventory)
+ display_records = product_records + coin_records + hidden_records
+ dat += "
"
+ for (var/datum/data/vending_product/R in display_records)
+ var/price_listed = "$[default_price]"
+ var/is_hidden = hidden_records.Find(R)
+ if(is_hidden && !extended_inventory)
+ continue
+ if(R.custom_price)
+ price_listed = "$[R.custom_price]"
+ if(!onstation || account && account.account_job && account.account_job.paycheck_department == payment_department)
+ price_listed = "FREE"
+ if(coin_records.Find(R) || is_hidden)
+ price_listed = "$[R.custom_premium_price ? R.custom_premium_price : extra_price]"
+ dat += " "
+ dat += "[sanitize(R.name)] ([price_listed]) "
+ if(R.amount > 0 && ((C && C.registered_account && onstation) || (!onstation && isliving(user))))
+ dat += "[R.amount] Vend "
+ else
+ dat += "Not Available "
+ dat += " "
+ dat += "
"
+ dat += "
"
+ if(onstation && C && C.registered_account)
+ dat += "Balance: $[account.account_balance] "
+ if(istype(src, /obj/machinery/vending/snack))
+ dat += "Chef's Food Selection "
+ dat += ""
+ for (var/O in dish_quants)
+ if(dish_quants[O] > 0)
+ var/N = dish_quants[O]
+ dat += "
Dispense "
+ dat += "
[capitalize(O)] ($[default_price]): [N] "
+ dat += "
"
+
+ var/datum/browser/popup = new(user, "vending", (name))
+ popup.set_content(dat)
+ popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
+ popup.open()
+*/
\ No newline at end of file
diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
new file mode 100644
index 0000000000..febf53c324
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm
@@ -0,0 +1,765 @@
+/datum/team/vampireclan
+ name = "Clan" // Teravanni,
+
+/datum/antagonist/bloodsucker
+ name = "Bloodsucker"
+ roundend_category = "bloodsuckers"
+ antagpanel_category = "Bloodsucker"
+ job_rank = ROLE_BLOODSUCKER
+
+ // NAME
+ var/vampname // My Dracula name
+ var/vamptitle // My Dracula title
+ var/vampreputation // My "Surname" or description of my deeds
+ // CLAN
+ var/datum/team/vampireclan/clan
+ var/list/datum/antagonist/vassal/vassals = list()// Vassals under my control. Periodically remove the dead ones.
+ var/datum/mind/creator // Who made me? For both Vassals AND Bloodsuckers (though Master Vamps won't have one)
+ // POWERS
+ var/list/datum/action/powers = list()// Purchased powers
+ var/poweron_feed = FALSE // Am I feeding?
+ var/poweron_masquerade = FALSE
+ // STATS
+ var/vamplevel = 0
+ var/vamplevel_unspent = 1
+ var/regenRate = 0.3 // How many points of Brute do I heal per tick?
+ var/feedAmount = 15 // Amount of blood drawn from a target per tick.
+ var/maxBloodVolume = 600 // Maximum blood a Vamp can hold via feeding. // BLOOD_VOLUME_NORMAL 550 // BLOOD_VOLUME_SAFE 475 //BLOOD_VOLUME_OKAY 336 //BLOOD_VOLUME_BAD 224 // BLOOD_VOLUME_SURVIVE 122
+ // OBJECTIVES
+ var/list/datum/objective/objectives_given = list() // For removal if needed.
+ var/area/lair
+ var/obj/structure/closet/crate/coffin
+ // TRACKING
+ var/foodInGut = 0 // How much food to throw up later. You shouldn't have eaten that.
+ var/warn_sun_locker = FALSE // So we only get the locker burn message once per day.
+ var/warn_sun_burn = FALSE // So we only get the sun burn message once per day.
+ var/had_toxlover = FALSE
+ // LISTS
+ var/static/list/defaultTraits = list (TRAIT_STABLEHEART, TRAIT_NOBREATH, TRAIT_SLEEPIMMUNE, TRAIT_NOCRITDAMAGE, TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_VIRUSIMMUNE, TRAIT_NIGHT_VISION, \
+ TRAIT_NOSOFTCRIT, TRAIT_NOHARDCRIT, TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_NONATURALHEAL, TRAIT_NOMARROW, TRAIT_NOPULSE, TRAIT_NOCLONE)
+ // NOTES: TRAIT_AGEUSIA <-- Doesn't like flavors.
+ // REMOVED: TRAIT_NODEATH
+ // TO ADD:
+ //var/static/list/defaultOrgans = list (/obj/item/organ/heart/vampheart,/obj/item/organ/heart/vampeyes)
+
+/datum/antagonist/bloodsucker/on_gain()
+ SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start)
+ SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp)
+ SelectFirstName()// Name & Title
+ SelectTitle(am_fledgling=TRUE) // If I have a creator, then set as Fledgling.
+ SelectReputation(am_fledgling=TRUE)
+ AssignStarterPowersAndStats()// Give Powers & Stats
+ forge_bloodsucker_objectives()// Objectives & Team
+ update_bloodsucker_icons_added(owner.current, "bloodsucker") // Add Antag HUD
+ LifeTick() // Run Life Function
+ . = ..()
+
+
+/datum/antagonist/bloodsucker/on_removal()
+ SSticker.mode.bloodsuckers -= owner
+ SSticker.mode.check_cancel_sunlight()// End Sunlight? (if last Vamp)
+ ClearAllPowersAndStats()// Clear Powers & Stats
+ clear_bloodsucker_objectives() // Objectives
+ update_bloodsucker_icons_removed(owner.current)// Clear Antag HUD
+ . = ..()
+
+
+
+/datum/antagonist/bloodsucker/greet()
+ var/fullname = ReturnFullName(TRUE)
+ to_chat(owner, "You are [fullname], a bloodsucking vampire! ")
+ owner.announce_objectives()
+ to_chat(owner, "* You regenerate your health slowly, you're weak to fire, and you depend on blood to survive. Allow your stolen blood to run too low, and you will find yourself at \
+ risk of being discovered! ")
+ //to_chat(owner, "As an immortal, your power is linked to your age. The older you grow, the more abilities you will have access to.")
+ var/vamp_greet
+ vamp_greet += "* Other Bloodsuckers are not necessarily your friends, but your survival may depend on cooperation. Betray them at your own discretion and peril. "
+ vamp_greet += "* Use \",b\" to speak your ancient Bloodsucker language. "
+ vamp_greet += "Bloodsucker Tip: Rest in a Coffin to claim it, and that area, as your lair. "
+ vamp_greet += "Bloodsucker Tip: Fear the daylight! Solar flares will bombard the station periodically, and only your coffin can guarantee your safety. "
+ vamp_greet += "Bloodsucker Tip: You wont loose blood if you are unconcious or sleeping. Use this to your advantage to conserve blood. "
+ to_chat(owner, vamp_greet)
+
+ owner.current.playsound_local(null, 'sound/bloodsucker/BloodsuckerAlert.ogg', 100, FALSE, pressure_affected = FALSE)
+ antag_memory += "Although you were born a mortal, in un-death you earned the name [fullname] . "
+
+
+/datum/antagonist/bloodsucker/farewell()
+ owner.current.visible_message("[owner.current]'s skin flushes with color, their eyes growing glossier. They look...alive.",\
+ "With a snap, your curse has ended. You are no longer a Bloodsucker. You live once more! ")
+ // Refill with Blood
+ owner.current.blood_volume = max(owner.current.blood_volume,BLOOD_VOLUME_SAFE)
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+/datum/antagonist/bloodsucker/proc/SelectFirstName()
+ // Names (EVERYONE gets one))
+ if (owner.current.gender == MALE)
+ vampname = pick("Desmond","Rudolph","Dracul","Vlad","Pyotr","Gregor","Cristian","Christoff","Marcu","Andrei","Constantin","Gheorghe","Grigore","Ilie","Iacob","Luca","Mihail","Pavel","Vasile","Octavian","Sorin", \
+ "Sveyn","Aurel","Alexe","Iustin","Theodor","Dimitrie","Octav","Damien","Magnus","Caine","Abel", // Romanian/Ancient
+ "Lucius","Gaius","Otho","Balbinus","Arcadius","Romanos","Alexios","Vitellius", // Latin
+ "Melanthus","Teuthras","Orchamus","Amyntor","Axion", // Greek
+ "Thoth","Thutmose","Osorkon,","Nofret","Minmotu","Khafra", // Egyptian
+ "Dio")
+
+ else
+ vampname = pick("Islana","Tyrra","Greganna","Pytra","Hilda","Andra","Crina","Viorela","Viorica","Anemona","Camelia","Narcisa","Sorina","Alessia","Sophia","Gladda","Arcana","Morgan","Lasarra","Ioana","Elena", \
+ "Alina","Rodica","Teodora","Denisa","Mihaela","Svetla","Stefania","Diyana","Kelssa","Lilith", // Romanian/Ancient
+ "Alexia","Athanasia","Callista","Karena","Nephele","Scylla","Ursa", // Latin
+ "Alcestis","Damaris","Elisavet","Khthonia","Teodora", // Greek
+ "Nefret","Ankhesenpep") // Egyptian
+
+/datum/antagonist/bloodsucker/proc/SelectTitle(am_fledgling = 0, forced = FALSE)
+ // Already have Title
+ if (!forced && vamptitle != null)
+ return
+ // Titles [Master]
+ if (!am_fledgling)
+ if (owner.current.gender == MALE)
+ vamptitle = pick ("Count","Baron","Viscount","Prince","Duke","Tzar","Dreadlord","Lord","Master")
+ else
+ vamptitle = pick ("Countess","Baroness","Viscountess","Princess","Duchess","Tzarina","Dreadlady","Lady","Mistress")
+ to_chat(owner, "You have earned a title! You are now known as [ReturnFullName(TRUE)] ! ")
+ // Titles [Fledgling]
+ else
+ vamptitle = null
+
+/datum/antagonist/bloodsucker/proc/SelectReputation(am_fledgling = 0, forced=FALSE)
+ // Already have Reputation
+ if (!forced && vampreputation != null)
+ return
+ // Reputations [Master]
+ if (!am_fledgling)
+ vampreputation = pick("Butcher","Blood Fiend","Crimson","Red","Black","Terror","Nightman","Feared","Ravenous","Fiend","Malevolent","Wicked","Ancient","Plaguebringer","Sinister","Forgotten","Wretched","Baleful", \
+ "Inqisitor","Harvester","Reviled","Robust","Betrayer","Destructor","Damned","Accursed","Terrible","Vicious","Profane","Vile","Depraved","Foul","Slayer","Manslayer","Sovereign","Slaughterer", \
+ "Forsaken","Mad","Dragon","Savage","Villainous","Nefarious","Inquisitor","Marauder","Horrible","Immortal","Undying","Overlord","Corrupt","Hellspawn","Tyrant","Sanguineous")
+ if (owner.current.gender == MALE)
+ if (prob(10)) // Gender override
+ vampreputation = pick("King of the Damned", "Blood King", "Emperor of Blades", "Sinlord", "God-King")
+ else
+ if (prob(10)) // Gender override
+ vampreputation = pick("Queen of the Damned", "Blood Queen", "Empress of Blades", "Sinlady", "God-Queen")
+
+ to_chat(owner, "You have earned a reputation! You are now known as [ReturnFullName(TRUE)] ! ")
+
+ // Reputations [Fledgling]
+ else
+ vampreputation = pick ("Crude","Callow","Unlearned","Neophyte","Novice","Unseasoned","Fledgling","Young","Neonate","Scrapling","Untested","Unproven","Unknown","Newly Risen","Born","Scavenger","Unknowing",\
+ "Unspoiled","Disgraced","Defrocked","Shamed","Meek","Timid","Broken")//,"Fresh")
+
+
+/datum/antagonist/bloodsucker/proc/AmFledgling()
+ return !vamptitle
+
+/datum/antagonist/bloodsucker/proc/ReturnFullName(var/include_rep=0)
+
+ var/fullname
+ // Name First
+ fullname = (vampname ? vampname : owner.current.name)
+ // Title
+ if(vamptitle)
+ fullname = vamptitle + " " + fullname
+ // Rep
+ if(include_rep && vampreputation)
+ fullname = fullname + " the " + vampreputation
+
+ return fullname
+
+
+/datum/antagonist/bloodsucker/proc/BuyPower(datum/action/bloodsucker/power)//(obj/effect/proc_holder/spell/power)
+ powers += power
+ power.Grant(owner.current)// owner.AddSpell(power)
+
+/datum/antagonist/bloodsucker/proc/AssignStarterPowersAndStats()
+ // Blood/Rank Counter
+ add_hud()
+ update_hud(TRUE) // Set blood value, current rank
+ // Powers
+ BuyPower(new /datum/action/bloodsucker/feed)
+ BuyPower(new /datum/action/bloodsucker/masquerade)
+ BuyPower(new /datum/action/bloodsucker/veil)
+ // Traits
+ for (var/T in defaultTraits)
+ ADD_TRAIT(owner.current, T, "bloodsucker")
+ if(HAS_TRAIT(owner.current, TRAIT_TOXINLOVER)) //No slime bonuses here, no thank you
+ had_toxlover = TRUE
+ REMOVE_TRAIT(owner.current, TRAIT_TOXINLOVER, "species")
+ // Traits: Species
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ var/datum/species/S = H.dna.species
+ S.species_traits |= DRINKSBLOOD
+ // Clear Addictions
+ owner.current.reagents.addiction_list = list() // Start over from scratch. Lucky you! At least you're not addicted to blood anymore (if you were)
+ // Stats
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ var/datum/species/S = H.dna.species
+ // Make Changes
+ S.brutemod *= 0.5 // <-------------------- Start small, but burn mod increases based on rank!
+ S.coldmod = 0
+ S.stunmod *= 0.25
+ S.siemens_coeff *= 0.75 //base electrocution coefficient 1
+ //S.heatmod += 0.5 // Heat shouldn't affect. Only Fire.
+ //S.punchstunthreshold = 8 //damage at which punches from this race will stun 9
+ S.punchdamagelow += 1 //lowest possible punch damage 0
+ S.punchdamagehigh += 1 //highest possible punch damage 9
+ // Clown
+ if(istype(H) && owner.assigned_role == "Clown")
+ H.dna.remove_mutation(CLOWNMUT)
+ to_chat(H, "As a vampiric clown, you are no longer a danger to yourself. Your nature is subdued.")
+ // Physiology
+ CheckVampOrgans() // Heart, Eyes
+ // Language
+ owner.current.grant_language(/datum/language/vampiric)
+ // Soul
+ //owner.current.hellbound = TRUE Causes wierd stuff
+ owner.hasSoul = FALSE // If false, renders the character unable to sell their soul.
+ owner.isholy = FALSE // is this person a chaplain or admin role allowed to use bibles
+ // Disabilities
+ CureDisabilities()
+
+/datum/antagonist/bloodsucker/proc/ClearAllPowersAndStats()
+ // Blood/Rank Counter
+ remove_hud()
+ // Powers
+ while(powers.len)
+ var/datum/action/bloodsucker/power = pick(powers)
+ powers -= power
+ power.Remove(owner.current)
+ // owner.RemoveSpell(power)
+ // Traits
+ for(var/T in defaultTraits)
+ REMOVE_TRAIT(owner.current, T, "bloodsucker")
+ if(had_toxlover == TRUE)
+ ADD_TRAIT(owner.current, TRAIT_TOXINLOVER, "species")
+
+ // Traits: Species
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ H.set_species(H.dna.species.type)
+ // Stats
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ H.set_species(H.dna.species.type)
+ // Clown
+ if(istype(H) && owner.assigned_role == "Clown")
+ H.dna.add_mutation(CLOWNMUT)
+ // NOTE: Use initial() to return things to default!
+ // Physiology
+ owner.current.regenerate_organs()
+ // Update Health
+ owner.current.setMaxHealth(100)
+ // Language
+ owner.current.remove_language(/datum/language/vampiric)
+ // Soul
+ if (owner.soulOwner == owner) // Return soul, if *I* own it.
+ owner.hasSoul = TRUE
+//owner.current.hellbound = FALSE
+
+datum/antagonist/bloodsucker/proc/RankUp()
+ set waitfor = FALSE
+ if(!owner || !owner.current)
+ return
+ vamplevel_unspent ++
+ // Spend Rank Immediately?
+ if(istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ SpendRank()
+ else
+ to_chat(owner, "You have grown more ancient! Sleep in a coffin that you have claimed to thicken your blood and become more powerful. ")
+ if(vamplevel_unspent >= 2)
+ to_chat(owner, "Bloodsucker Tip: If you cannot find or steal a coffin to use, they can be built from wooden planks. ")
+
+datum/antagonist/bloodsucker/proc/LevelUpPowers()
+ for(var/datum/action/bloodsucker/power in powers)
+ power.level_current ++
+
+datum/antagonist/bloodsucker/proc/SpendRank()
+ set waitfor = FALSE
+ if (vamplevel_unspent <= 0 || !owner || !owner.current || !owner.current.client)
+ return
+ /////////
+ // Powers
+ //TODO: Make this into a radial
+ // Purchase Power Prompt
+ var/list/options = list() // Taken from gasmask.dm, for Clown Masks.
+ for(var/pickedpower in typesof(/datum/action/bloodsucker))
+ var/datum/action/bloodsucker/power = pickedpower
+ // If I don't own it, and I'm allowed to buy it.
+ if(!(locate(power) in powers) && initial(power.bloodsucker_can_buy))
+ options[initial(power.name)] = power // TESTING: After working with TGUI, it seems you can use initial() to view the variables inside a path?
+ options["\[ Not Now \]"] = null
+ // Abort?
+ if(options.len > 1)
+ var/choice = input(owner.current, "You have the opportunity to grow more ancient. Select a power to advance your Rank.", "Your Blood Thickens...") in options
+ // Cheat-Safety: Can't keep opening/closing coffin to spam levels
+ if(vamplevel_unspent <= 0) // Already spent all your points, and tried opening/closing your coffin, pal.
+ return
+ if(!istype(owner.current.loc, /obj/structure/closet/crate/coffin))
+ to_chat(owner.current, "Return to your coffin to advance your Rank. ")
+ return
+ if(!choice || !options[choice] || (locate(options[choice]) in powers)) // ADDED: Check to see if you already have this power, due to window stacking.
+ to_chat(owner.current, "You prevent your blood from thickening just yet, but you may try again later. ")
+ return
+ // Buy New Powers
+ var/datum/action/bloodsucker/P = options[choice]
+ BuyPower(new P)
+ to_chat(owner.current, "You have learned [initial(P.name)]! ")
+ else
+ to_chat(owner.current, "You grow more ancient by the night! ")
+ /////////
+ // Advance Powers (including new)
+ LevelUpPowers()
+ ////////
+ // Advance Stats
+ if(ishuman(owner.current))
+ var/mob/living/carbon/human/H = owner.current
+ var/datum/species/S = H.dna.species
+ S.burnmod *= 0.025 // Slightly more burn damage
+ S.stunmod *= 0.95 // Slightly less stun time.
+ S.punchdamagelow += 0.5
+ S.punchdamagehigh += 0.5 // NOTE: This affects the hitting power of Brawn.
+ // More Health
+ owner.current.setMaxHealth(owner.current.maxHealth + 5)
+ // Vamp Stats
+ regenRate += 0.05 // Points of brute healed (starts at 0.3)
+ feedAmount += 2 // Increase how quickly I munch down vics (15)
+ maxBloodVolume += 50 // Increase my max blood (600)
+ /////////
+ vamplevel ++
+ vamplevel_unspent --
+
+ // Assign True Reputation
+ if(vamplevel == 4)
+ SelectReputation(am_fledgling = FALSE, forced = TRUE)
+ to_chat(owner.current, "You are now a rank [vamplevel] Bloodsucker. Your strength, resistence, health, feed rate, regen rate, and maximum blood have all increased! ")
+ to_chat(owner.current, "Your existing powers have all ranked up as well! ")
+ update_hud(TRUE)
+ owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//This handles the application of antag huds/special abilities
+/datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override)
+ return
+
+//This handles the removal of antag huds/special abilities
+/datum/antagonist/bloodsucker/remove_innate_effects(mob/living/mob_override)
+ return
+
+//Assign default team and creates one for one of a kind team antagonists
+/datum/antagonist/bloodsucker/create_team(datum/team/team)
+ return
+
+// Create Objectives
+/datum/antagonist/bloodsucker/proc/forge_bloodsucker_objectives() // Fledgling vampires can have different objectives.
+
+ // TEAM
+ //clan = new /datum/team/vampireclan(owner)
+
+
+ // Lair Objective: Create a Lair
+ var/datum/objective/bloodsucker/lair/lair_objective = new
+ lair_objective.owner = owner
+ lair_objective.generate_objective()
+ add_objective(lair_objective)
+
+ // Protege Objective
+ var/datum/objective/bloodsucker/protege/protege_objective = new
+ protege_objective.owner = owner
+ protege_objective.generate_objective()
+ add_objective(protege_objective)
+
+ if (rand(0,1) == 0)
+ // Heart Thief Objective
+ var/datum/objective/bloodsucker/heartthief/heartthief_objective = new
+ heartthief_objective.owner = owner
+ heartthief_objective.generate_objective()
+ add_objective(heartthief_objective)
+
+ else
+ // Solars Objective
+ var/datum/objective/bloodsucker/solars/solars_objective = new
+ solars_objective.owner = owner
+ solars_objective.generate_objective()
+ add_objective(solars_objective)
+
+ // Survive Objective
+ var/datum/objective/bloodsucker/survive/survive_objective = new
+ survive_objective.owner = owner
+ survive_objective.generate_objective()
+ add_objective(survive_objective)
+
+
+/datum/antagonist/bloodsucker/proc/add_objective(var/datum/objective/O)
+ objectives += O
+ objectives_given += O
+
+/datum/antagonist/bloodsucker/proc/clear_bloodsucker_objectives()
+
+ var/datum/team/team = get_team()
+ if(team)
+ team.remove_member(owner)
+
+ for(var/O in objectives_given)
+ objectives -= O
+ qdel(O)
+ objectives_given = list() // Traitors had this, so I added it. Not sure why.
+
+
+/datum/antagonist/bloodsucker/get_team()
+ return clan
+
+//Name shown on antag list
+/datum/antagonist/bloodsucker/antag_listing_name()
+ return ..() + "([ReturnFullName(TRUE)])"
+
+//Whatever interesting things happened to the antag admins should know about
+//Include additional information about antag in this part
+/datum/antagonist/bloodsucker/antag_listing_status()
+ if (owner && owner.AmFinalDeath())
+ return "Final Death "
+ return ..()
+
+
+
+//Individual roundend report
+/datum/antagonist/bloodsucker/roundend_report()
+ // Get the default Objectives
+ var/list/report = list()
+
+ // Vamp Name
+ report += " "
+
+ // Default Report
+ report += ..()
+
+ // Now list their vassals
+ if (vassals.len > 0)
+ report += ""
+ for (var/datum/antagonist/vassal/V in vassals)
+ if (V.owner)
+ var/jobname = V.owner.assigned_role ? "the [V.owner.assigned_role]" : ""
+ report += "[V.owner.name] [jobname]"
+
+ return report.Join(" ")
+
+//Displayed at the start of roundend_category section, default to roundend_category header
+/datum/antagonist/bloodsucker/roundend_report_header()
+ return " "
+
+
+
+
+
+// 2019 Breakdown of Bloodsuckers:
+
+// G A M E P L A Y
+//
+// Bloodsuckers should be inherrently powerful: they never stay dead, and they can hide in plain sight
+// better than any other antagonist aboard the station.
+//
+// However, only elder Bloodsuckers are the powerful creatures of legend. Ranking up as a Bloodsucker
+// should impart slight strength and health benefits, as well as powers that can grow over time. But
+// their weaknesses should grow as well, and not just to fire.
+
+
+// A B I L I T I E S
+//
+// * Bloodsuckers can FEIGN LIFE + DEATH.
+// Feigning LIFE:
+// - Warms up the body
+// - Creates a heartbeat
+// - Fake blood amount (550)
+// Feign DEATH: Not yet done
+// - When lying down or sitting, you appear "dead and lifeless"
+
+// * Bloodsuckers REGENERATE
+// - Brute damage heals rather rapidly. Burn damage heals slowly.
+// - Healing is reduced when hungry or starved.
+// - Burn does not heal when starved. A starved vampire remains "dead" until burns can heal.
+// - Bodyparts and organs regrow in Torpor (except for the Heart and Brain).
+//
+// * Bloodsuckers are IMMORTAL
+// - Brute damage cannot destroy them (and it caps very low, so they don't stack too much)
+// - Burn damage can only kill them at very high amounts.
+// - Removing the head kills the vamp forever.
+// - Removing the heart kills the vamp until replaced.
+//
+// * Bloodsuckers are DEAD
+// - They do not breathe.
+// - Cold affects them less.
+// - They are immune to disease (but can spread it)
+// - Food is useless and cause sickness.
+// - Nothing can heal the vamp other than his own blood.
+//
+// * Bloodsuckers are PREDATORS
+// - They detect life/heartbeats nearby.
+// - They know other predators instantly (Vamps, Werewolves, and alien types) regardless of disguise.
+//
+//
+//
+// * Bloodsuckers enter Torpor when DEAD or RESTING in coffin
+// - Torpid vampires regenerate their health. Coffins negate cost and speed up the process.
+// ** To rest in a coffin, either SLEEP or CLOSE THE LID while you're in it. You will be given a prompt to sleep until healed. Healing in a coffin costs NO blood!
+//
+
+
+
+// O B J E C T I V E S
+//
+//
+//
+//
+// 1) GROOM AN HEIR: Find a person with appropriate traits (hair, blood type, gender) to be turned as a Vampire. Before they rise, they must be properly trained. Raise them to great power after their change.
+//
+// 2) BIBLIOPHILE: Research objects of interest, study items looking for clues of ancient secrets, and hunt down the clues to a Vampiric artifact of horrible power.
+//
+// 3) CRYPT LORD: Build a terrifying sepulcher to your evil, with servants to lavish upon you in undeath. The trappings of a true crypt lord come at grave cost.
+//
+// 4) GOURMOND: Oh, to taste all the delicacies the station has to offer! DRINK ## BLOOD FROM VICTIMS WHO LIVE, EAT ## ORGANS FROM VICTIMS WHO LIVE
+
+
+// Vassals
+//
+// - Loyal to (and In Love With) Master
+// - Master can speak to, summon, or punish his Vassals, even while asleep or torpid.
+// - Master may have as many Vassals as Rank
+// - Vassals see their Master's speech emboldened!
+
+
+
+
+
+
+
+
+// Dev Notes
+//
+// HEALING: Maybe Vamps metabolize specially? Like, they slowly drip their own blood into their system?
+// - Give Vamps their own metabolization proc, perhaps?
+// ** shadowpeople.dm has rules for healing.
+//
+// KILLING: It's almost impossible to track who someone has directly killed. But an Admin could be given
+// an easy way to whip a Bloodsucker for cruel behavior, as a RP mechanic but not a punishment.
+// **
+//
+// HUNGER: Just keep adjusting mob's nutrition to Blood Hunger level. No need to cancel nutrition from eating.
+// ** mob.dm /set_nutrition()
+// ** snacks.dm / attack() <-- Stop food from doing anything?
+
+// ORGANS: Liver
+// ** life.dm /handle_liver()
+//
+// CORPSE: Most of these effects likely go away when using "Masquerade" to appear alive.
+// ** status_procs.dm /adjust_bodytemperature()
+// ** traits.dm /TRAIT_NOBREATH /TRAIT_SLEEPIMMUNE /TRAIT_RESISTCOLD /TRAIT_RADIMMUNE /TRAIT_VIRUSIMMUNE
+// * MASQUERADE ON/OFF: /TRAIT_FAKEDEATH (M)
+// * /TRAIT_NIGHT_VISION
+// * /TRAIT_DEATHCOMA <-- This basically makes you immobile. When using status_procs /fakedeath(), make sure to remove Coma unless we're in Torpor!
+// * /TRAIT_NODEATH <--- ???
+// ** species /NOZOMBIE
+// * ADD: TRAIT_COLDBLOODED <-- add to carbon/life.dm /natural_bodytemperature_stabilization()
+//
+// MASQUERADE Appear as human!
+// ** examine.dm /examine() <-- Change "blood_volume < BLOOD_VOLUME_SAFE" to a new examine
+//
+// NOSFERATU ** human.add_trait(TRAIT_DISFIGURED, "insert_vamp_datum_here") <-- Makes you UNKNOWN unless your ID says otherwise.
+// STEALTH ** human_helpers.dm /get_visible_name() ** shadowpeople.dm has rules for Light.
+//
+// FRENZY ** living.dm /update_mobility() (USED TO be update_canmove)
+//
+// PREDATOR See other Vamps!
+// * examine.dm /examine()
+//
+// WEAKNESSES: -Poor mood in Chapel or near Chaplain. -Stamina damage from Bible
+
+
+
+ //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ")
+
+
+// TODO:
+//
+// Death (fire, heart, brain, head)
+// Disable Life: BLOOD
+// Body Temp
+// Spend blood over time (more if imitating life) (none if sleeping in coffin)
+// Auto-Heal (brute to 0, fire to 99) (toxin/o2 always 0)
+//
+// Hud Icons
+// UI Blood Counter
+// Examine Name (+Masquerade, only "Dead and lifeless" if not standing?)
+//
+//
+// Turn vamps
+// Create vassals
+//
+
+
+// FIX LIST
+//
+
+
+/////////////////////////////////////
+
+ // HUD! //
+
+/datum/antagonist/bloodsucker/proc/update_bloodsucker_icons_added(datum/mind/m)
+ var/datum/atom_hud/antag/vamphud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ vamphud.join_hud(owner.current)
+ set_antag_hud(owner.current, "bloodsucker") // "bloodsucker"
+ owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker") //Check prepare_huds in mob.dm to see why.
+
+/datum/antagonist/bloodsucker/proc/update_bloodsucker_icons_removed(datum/mind/m)
+ var/datum/atom_hud/antag/vamphud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ vamphud.leave_hud(owner.current)
+ set_antag_hud(owner.current, null)
+
+/datum/atom_hud/antag/bloodsucker // from hud.dm in /datums/ Also see data_huds.dm + antag_hud.dm
+
+/datum/atom_hud/antag/bloodsucker/add_to_single_hud(mob/M, atom/A)
+ if (!check_valid_hud_user(M,A)) // FULP: This checks if the Mob is a Vassal, and if the Atom is his master OR on his team.
+ return
+ ..()
+
+/datum/atom_hud/antag/bloodsucker/proc/check_valid_hud_user(mob/M, atom/A) // Remember: A is being added to M's hud. Because M's hud is a /antag/vassal hud, this means M is the vassal here.
+ // Ghost Admins always see Bloodsuckers/Vassals
+ if (isobserver(M))
+ return TRUE
+ // GOAL: Vassals see their Master and his other Vassals.
+ // GOAL: Vassals can BE seen by their Bloodsucker and his other Vassals.
+ // GOAL: Bloodsuckers can see each other.
+ if (!M || !A || !ismob(A) || !M.mind)// || !A.mind)
+ return FALSE
+ var/mob/A_mob = A
+ if (!A_mob.mind)
+ return FALSE
+ // Find Datums: Bloodsucker
+ var/datum/antagonist/bloodsucker/atom_B = A_mob.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/datum/antagonist/bloodsucker/mob_B = M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // Check 1) Are we both Bloodsuckers?
+ if (atom_B && mob_B)
+ return TRUE
+ // Find Datums: Vassal
+ var/datum/antagonist/vassal/atom_V = A_mob.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ var/datum/antagonist/vassal/mob_V = M.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ // Check 2) If they are a BLOODSUCKER, then are they my Master?
+ if (mob_V && atom_B == mob_V.master)
+ return TRUE // SUCCESS!
+ // Check 3) If I am a BLOODSUCKER, then are they my Vassal?
+ if (mob_B && atom_V && (atom_V in mob_B.vassals))
+ return TRUE // SUCCESS!
+ // Check 4) If we are both VASSAL, then do we have the same master?
+ if (atom_V && mob_V && atom_V.master == mob_V.master)
+ return TRUE // SUCCESS!
+ return FALSE
+
+
+
+ /////////////////////////////////////
+
+
+ // BLOOD COUNTER & RANK MARKER ! //
+
+#define ui_sunlight_display "WEST:6,CENTER-0:0" // 6 pixels to the right, zero tiles & 5 pixels DOWN.
+#define ui_blood_display "WEST:6,CENTER-1:0" // 1 tile down
+#define ui_vamprank_display "WEST:6,CENTER-2:-5" // 2 tiles down
+
+/datum/hud
+ var/obj/screen/bloodsucker/blood_counter/blood_display
+ var/obj/screen/bloodsucker/rank_counter/vamprank_display
+ var/obj/screen/bloodsucker/sunlight_counter/sunlight_display
+
+/datum/antagonist/bloodsucker/proc/add_hud()
+ return
+
+/datum/antagonist/bloodsucker/proc/remove_hud()
+ // No Hud? Get out.
+ if (!owner.current.hud_used)
+ return
+ owner.current.hud_used.blood_display.invisibility = INVISIBILITY_ABSTRACT
+ owner.current.hud_used.vamprank_display.invisibility = INVISIBILITY_ABSTRACT
+ owner.current.hud_used.sunlight_display.invisibility = INVISIBILITY_ABSTRACT
+
+/datum/antagonist/bloodsucker/proc/update_hud(updateRank=FALSE)
+ // No Hud? Get out.
+ if(!owner.current.hud_used)
+ return
+ // Update Blood Counter
+ if (owner.current.hud_used.blood_display)
+ var/valuecolor = "#FF6666"
+ if(owner.current.blood_volume > BLOOD_VOLUME_SAFE)
+ valuecolor = "#FFDDDD"
+ else if(owner.current.blood_volume > BLOOD_VOLUME_BAD)
+ valuecolor = "#FFAAAA"
+ owner.current.hud_used.blood_display.update_counter(owner.current.blood_volume, valuecolor)
+
+ // Update Rank Counter
+ if(owner.current.hud_used.vamprank_display)
+ var/valuecolor = vamplevel_unspent ? "#FFFF00" : "#FF0000"
+ owner.current.hud_used.vamprank_display.update_counter(vamplevel, valuecolor)
+ if(updateRank) // Only change icon on special request.
+ owner.current.hud_used.vamprank_display.icon_state = (vamplevel_unspent > 0) ? "rank_up" : "rank"
+
+
+/obj/screen/bloodsucker
+ invisibility = INVISIBILITY_ABSTRACT
+
+/obj/screen/bloodsucker/proc/clear()
+ invisibility = INVISIBILITY_ABSTRACT
+
+/obj/screen/bloodsucker/proc/update_counter(value, valuecolor)
+ invisibility = 0 // Make Visible
+
+/obj/screen/bloodsucker/blood_counter // NOTE: Look up /obj/screen/devil/soul_counter in _onclick / hud / human.dm
+ icon = 'icons/mob/actions/bloodsucker.dmi'//'icons/mob/screen_gen.dmi'
+ name = "Blood Consumed"
+ icon_state = "blood_display"//"power_display"
+ screen_loc = ui_blood_display
+
+/obj/screen/bloodsucker/blood_counter/update_counter(value, valuecolor)
+ ..()
+ maptext = "[round(value,1)]
"
+
+/obj/screen/bloodsucker/rank_counter
+ name = "Bloodsucker Rank"
+ icon = 'icons/mob/actions/bloodsucker.dmi'
+ icon_state = "rank"
+ screen_loc = ui_vamprank_display
+
+/obj/screen/bloodsucker/rank_counter/update_counter(value, valuecolor)
+ ..()
+ maptext = "[round(value,1)]
"
+
+/obj/screen/bloodsucker/sunlight_counter
+ icon = 'icons/mob/actions/bloodsucker.dmi'
+ name = "Solar Flare Timer"
+ icon_state = "sunlight_night"
+ screen_loc = ui_sunlight_display
+
+/datum/antagonist/bloodsucker/proc/update_sunlight(value, amDay = FALSE)
+ // No Hud? Get out.
+ if (!owner.current.hud_used)
+ return
+ // Update Sun Time
+ if (owner.current.hud_used.sunlight_display)
+ var/valuecolor = "#BBBBFF"
+ if (amDay)
+ valuecolor = "#FF5555"
+ else if(value <= 25)
+ valuecolor = "#FFCCCC"
+ else if(value < 10)
+ valuecolor = "#FF5555"
+ var/value_string = (value >= 60) ? "[round(value / 60, 1)] m" : "[round(value,1)] s"
+ owner.current.hud_used.sunlight_display.update_counter( value_string, valuecolor )
+ owner.current.hud_used.sunlight_display.icon_state = "sunlight_" + (amDay ? "day":"night")
+
+
+/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor)
+ ..()
+ maptext = "[value]
"
diff --git a/code/modules/antagonists/bloodsucker/datum_hunter.dm b/code/modules/antagonists/bloodsucker/datum_hunter.dm
new file mode 100644
index 0000000000..2d680d0e09
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/datum_hunter.dm
@@ -0,0 +1,295 @@
+/*
+#define HUNTER_SCAN_MIN_DISTANCE 8
+#define HUNTER_SCAN_MAX_DISTANCE 35
+#define HUNTER_SCAN_PING_TIME 20 //5s update time.
+
+
+/datum/antagonist/vamphunter
+ name = "Hunter"
+ roundend_category = "hunters"
+ antagpanel_category = "Monster Hunter"
+ job_rank = ROLE_MONSTERHUNTER
+ var/list/datum/action/powers = list()// Purchased powers
+ var/list/datum/objective/objectives_given = list() // For removal if needed.
+ var/datum/martial_art/my_kungfu // Hunters know a lil kung fu.
+ var/bad_dude = FALSE // Every first hunter spawned is a SHIT LORD.
+
+
+/datum/antagonist/vamphunter/on_gain()
+
+ SSticker.mode.vamphunters |= owner // Add if not already in here (and you might be, if you were picked at round start)
+
+ // Hunter Pinpointer
+ //owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+
+ // Give Hunter Power
+ var/datum/action/P = new /datum/action/bloodsucker/trackvamp
+ P.Grant(owner.current)
+
+ // Give Hunter Martial Arts
+ //if (rand(1,3) == 1)
+ // var/datum/martial_art/pick_type = pick (/datum/martial_art/cqc, /datum/martial_art/krav_maga, /datum/martial_art/cqc, /datum/martial_art/krav_maga, /datum/martial_art/wrestling) // /datum/martial_art/boxing <--- doesn't include grabbing, so don't use!
+ // my_kungfu = new pick_type //pick (/datum/martial_art/boxing, /datum/martial_art/cqc) // ick_type
+ // my_kungfu.teach(owner.current, 0)
+
+ // Give Hunter Objective
+ var/datum/objective/bloodsucker/monsterhunter/monsterhunter_objective = new
+ monsterhunter_objective.owner = owner
+ monsterhunter_objective.generate_objective()
+ objectives += monsterhunter_objective
+ objectives_given += monsterhunter_objective
+ // Badguy Hunter? (Give him BADGUY objectives)
+ if (bad_dude)
+ // Stolen DIRECTLY from datum_traitor.dm
+ if(prob(15) && !(locate(/datum/objective/download) in objectives) && !(owner.assigned_role in list("Research Director", "Scientist", "Roboticist")))
+ var/datum/objective/download/download_objective = new
+ download_objective.owner = owner
+ download_objective.gen_amount_goal()
+ objectives += download_objective
+ objectives_given += download_objective
+ else
+ var/datum/objective/steal/steal_objective = new
+ steal_objective.owner = owner
+ steal_objective.find_target()
+ objectives += steal_objective
+ objectives_given += steal_objective
+
+
+ . = ..()
+
+/datum/antagonist/vamphunter/on_removal()
+
+ SSticker.mode.vamphunters -= owner // Add if not already in here (and you might be, if you were picked at round start)
+
+ // Master Pinpointer
+ //owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+
+ // Take Hunter Power
+ if (owner.current)
+ for (var/datum/action/bloodsucker/P in owner.current.actions)
+ P.Remove(owner.current)
+
+ // Take Hunter Martial Arts
+ //my_kungfu.remove(owner.current)
+
+ // Remove Hunter Objectives
+ for(var/O in objectives_given)
+ objectives -= O
+ qdel(O)
+ objectives_given = list()
+
+ . = ..()
+
+/datum/antagonist/vamphunter/greet()
+ var/vamp_hunter_greet = "You are a fearless Monster Hunter! "
+ vamp_hunter_greet += "You know there's one or more filthy creature onboard the station, though their identities elude you."
+ vamp_hunter_greet += "It's your job to root them out, destroy their nests, and save the crew."
+ vamp_hunter_greet += "Use WHATEVER MEANS NECESSARY to find these creatures...no matter who gets hurt or what you have to destroy to do it. "
+ vamp_hunter_greet += "There are greater stakes at hand than the safety of the station!"
+ vamp_hunter_greet += "However, security may detain you if they discover your mission..."
+ antag_memory += "You remember your training: "
+ antag_memory += " -Bloodsuckers are weak to fire, or a stake to the heart. Removing their head or heart will also destroy them permanently. "
+ antag_memory += " -Wooden stakes can be made from planks, and hardened by a welding tool. Your recipes list has ways of making them even stronger. "
+ antag_memory += " -Changelings return to life unless their body is destroyed. Not even decapitation can stop them for long. "
+ antag_memory += " -Cultists are weak to the Chaplain's holy water. "
+ antag_memory += " -Wizards are notoriously hard to outmatch. Rob or steal whatever weapons you need to destroy them, and shoot before asking questions. "
+ if (my_kungfu != null)
+ vamp_hunter_greet += "Hunter Tip: Use your [my_kungfu.name] techniques to give you an advantage over the enemy. "
+ antag_memory += "You remember your training: You are skilled in the [my_kungfu.name] style of combat. "
+ to_chat(owner, vamp_hunter_greet)
+
+/datum/antagonist/vamphunter/farewell()
+ to_chat(owner, "Your hunt has ended: you are no longer a monster hunter! ")
+
+
+// TAKEN FROM: /datum/action/changeling/pheromone_receptors // pheromone_receptors.dm for a version of tracking that Changelings have!
+
+
+/datum/status_effect/agent_pinpointer/hunter_edition
+ alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition
+ minimum_range = HUNTER_SCAN_MIN_DISTANCE
+ tick_interval = HUNTER_SCAN_PING_TIME
+ duration = 160 // Lasts 10s
+ range_fuzz_factor = 5//PINPOINTER_EXTRA_RANDOM_RANGE
+
+/obj/screen/alert/status_effect/agent_pinpointer/hunter_edition
+ name = "Monster Tracking"
+ desc = "You always know where the hellspawn are."
+
+
+/datum/status_effect/agent_pinpointer/hunter_edition/on_creation(mob/living/new_owner, ...)
+ ..()
+
+ // Pick target
+ var/turf/my_loc = get_turf(owner)
+ var/list/mob/living/carbon/vamps = list()
+
+ for(var/datum/mind/M in SSticker.mode.bloodsuckers)
+ if (!M.current || M.current == owner || !get_turf(M.current) || !get_turf(new_owner))
+ continue
+ var/datum/antagonist/bloodsucker/antag_datum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(antag_datum))
+ continue
+ var/their_loc = get_turf(M.current)
+ var/distance = get_dist_euclidian(my_loc, their_loc)
+ if (distance < HUNTER_SCAN_MAX_DISTANCE)
+ vamps[M.current] = (HUNTER_SCAN_MAX_DISTANCE ** 2) - (distance ** 2)
+ // Found one!
+ if(vamps.len)
+ scan_target = pickweight(vamps) //Point at a 'random' vamp, biasing heavily towards closer ones.
+ to_chat(owner, "You detect signs of monsters to the [dir2text(get_dir(my_loc,get_turf(scan_target)))]! ")
+ // Will yield a "?"
+ else
+ to_chat(owner, "There are no monsters nearby. ")
+ // Force Point-To Immediately
+ point_to_target()
+
+/datum/status_effect/agent_pinpointer/hunter_edition/scan_for_target()
+ // Lose target? Done. Otherwise, scan for target's current position.
+ if (!scan_target && owner)
+ owner.remove_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+
+ // NOTE: Do NOT run ..(), or else we'll remove our target.
+
+
+/datum/status_effect/agent_pinpointer/hunter_edition/Destroy()
+ if (scan_target)
+ to_chat(owner, "You've lost the trail. ")
+ ..()
+*/
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/*
+
+
+/datum/action/bloodsucker/trackvamp/
+ name = "Track Monster"//"Cellular Emporium"
+ desc = "Take a moment to look for clues of any nearby monsters. These creatures are slippery, and often look like the crew."
+ button_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the BACKGROUND icon
+ background_icon_state = "vamp_power_off" //And this is the state for the background icon
+ icon_icon = 'icons/mob/actions/bloodsucker.dmi' //This is the file for the ACTION icon
+ button_icon_state = "power_hunter" //And this is the state for the action icon
+ amToggle = FALSE // Action-Related
+ cooldown = 300 // 10 ticks, 1 second.
+ bloodcost = 0
+
+/datum/action/bloodsucker/trackvamp/ActivatePower()
+
+ var/mob/living/user = owner
+ to_chat(user, "You look around, scanning your environment and discerning signs of any filthy, wretched affronts to the natural order. ")
+
+ if (!do_mob(user,owner,80))
+ return
+ // Add Power
+ // REMOVED //user.apply_status_effect(/datum/status_effect/agent_pinpointer/hunter_edition)
+ // We don't track direction anymore!
+ // Return text indicating direction
+ display_proximity()
+ // NOTE: DON'T DEACTIVATE!
+ //DeactivatePower()
+
+/datum/action/bloodsucker/trackvamp/proc/display_proximity()
+ // Pick target
+ var/turf/my_loc = get_turf(owner)
+ //var/list/mob/living/carbon/vamps = list()
+ var/best_dist = 9999
+ var/mob/living/best_vamp
+
+ // Track ALL MONSTERS in Game Mode
+ var/list/datum/mind/monsters = list()
+ monsters += SSticker.mode.bloodsuckers
+ monsters += SSticker.mode.devils
+ //monsters += SSticker.mode.cult
+ monsters += SSticker.mode.wizards
+ monsters += SSticker.mode.apprentices
+ monsters += SSticker.mode.servants_of_ratvar
+ //monsters += SSticker.mode.changelings Disabled anyways
+ //
+ for(var/datum/mind/M in monsters)
+ if (!M.current || M.current == owner)// || !get_turf(M.current) || !get_turf(owner))
+ continue
+ for(var/a in M.antag_datums)
+ var/datum/antagonist/antag_datum = a // var/datum/antagonist/antag_datum = M.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(!istype(antag_datum) || antag_datum.AmFinalDeath())
+ continue
+ var/their_loc = get_turf(M.current)
+ var/distance = get_dist_euclidian(my_loc, their_loc)
+ // Found One: Closer than previous/max distance
+ if (distance < best_dist && distance <= HUNTER_SCAN_MAX_DISTANCE)
+ best_dist = distance
+ best_vamp = M.current
+ break // Stop searching through my antag datums and go to the next guy
+
+ // Found one!
+ if(best_vamp)
+ var/distString = best_dist <= HUNTER_SCAN_MAX_DISTANCE / 2 ? "somewhere closeby! " : "somewhere in the distance."
+ //to_chat(owner, "You detect signs of Bloodsuckers to the [dir2text(get_dir(my_loc,get_turf(targetVamp)))]! ")
+ to_chat(owner, "You detect signs of monsters [distString] ")
+
+ // Will yield a "?"
+ else
+ to_chat(owner, "There are no monsters nearby. ")
+
+
+
+
+
+
+
+
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// From martial.dm
+
+/*
+/datum/martial_art/hunter
+ name = "Hunter-Fu"
+ id = "MARTIALART_HUNTER" //ID, used by mind/has_martialart
+ //streak = ""
+ //max_streak_length = 6
+ //current_target
+ //datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary
+ //deflection_chance = 0 //Chance to deflect projectiles
+ //reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction?
+ //block_chance = 0 //Chance to block melee attacks using items while on throw mode.
+ //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
+ //help_verb
+ //no_guns = FALSE
+ //allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts
+
+/datum/martial_art/hunter/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ return FALSE
+
+/datum/martial_art/hunter/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ return FALSE
+
+/datum/martial_art/hunter/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ return FALSE
+
+/datum/martial_art/hunter/can_use(mob/living/carbon/human/H)
+ return TRUE
+
+
+/datum/martial_art/hunter/add_to_streak(element,mob/living/carbon/human/D)
+ if(D != current_target)
+ current_target = D
+ streak = ""
+ restraining = 0
+ streak = streak+element
+ if(length(streak) > max_streak_length)
+ streak = copytext(streak,2)
+ return
+
+
+/datum/martial_art/hunter/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D)
+
+ var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
+*/
+*/
diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm
new file mode 100644
index 0000000000..71ee0bcc1d
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm
@@ -0,0 +1,151 @@
+#define VASSAL_SCAN_MIN_DISTANCE 5
+#define VASSAL_SCAN_MAX_DISTANCE 500
+#define VASSAL_SCAN_PING_TIME 20 //2s update time.
+
+
+/datum/antagonist/bloodsucker/proc/attempt_turn_vassal(mob/living/carbon/C)
+ C.silent = 0
+ return SSticker.mode.make_vassal(C,owner)
+
+/datum/antagonist/bloodsucker/proc/FreeAllVassals()
+ for (var/datum/antagonist/vassal/V in vassals)
+ SSticker.mode.remove_vassal(V.owner)
+
+/datum/antagonist/vassal
+ name = "Vassal"//WARNING: DO NOT SELECT" // "Vassal"
+ roundend_category = "vassals"
+ antagpanel_category = "Bloodsucker"
+ job_rank = ROLE_BLOODSUCKER
+ var/datum/antagonist/bloodsucker/master // Who made me?
+ var/list/datum/action/powers = list()// Purchased powers
+ var/list/datum/objective/objectives_given = list() // For removal if needed.
+
+/datum/antagonist/vassal/can_be_owned(datum/mind/new_owner)
+ // If we weren't created by a bloodsucker, then we cannot be a vassal (assigned from antag panel)
+ if (!master)
+ return FALSE
+ return ..()
+
+/datum/antagonist/vassal/on_gain()
+ SSticker.mode.vassals |= owner // Add if not already in here (and you might be, if you were picked at round start)
+ // Mindslave Add
+ if(master)
+ var/datum/antagonist/bloodsucker/B = master.owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(B)
+ B.vassals |= src
+ owner.enslave_mind_to_creator(master.owner.current)
+ // Master Pinpointer
+ owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition)
+ // Powers
+ var/datum/action/bloodsucker/vassal/recuperate/new_Recuperate = new ()
+ new_Recuperate.Grant(owner.current)
+ powers += new_Recuperate
+ // Give Vassal Objective
+ var/datum/objective/bloodsucker/vassal/vassal_objective = new
+ vassal_objective.owner = owner
+ vassal_objective.generate_objective()
+ objectives += vassal_objective
+ objectives_given += vassal_objective
+ give_thrall_eyes()
+ owner.current.grant_language(/datum/language/vampiric)
+ // Add Antag HUD
+ update_vassal_icons_added(owner.current, "vassal")
+ . = ..()
+
+/datum/antagonist/vassal/proc/give_thrall_eyes()
+ var/obj/item/organ/eyes/vassal/E = new
+ E.Insert(owner.current)
+
+/obj/item/organ/eyes/vassal/
+ lighting_alpha = 180 // LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE <--- This is too low a value at 128. We need to SEE what the darkness is so we can hide in it.
+ see_in_dark = 12
+ flash_protect = -1 //These eyes are weaker to flashes, but let you see in the dark
+
+/datum/antagonist/vassal/proc/remove_thrall_eyes()
+ var/obj/item/organ/eyes/E = new
+ E.Insert(owner.current)
+
+/datum/antagonist/vassal/on_removal()
+ SSticker.mode.vassals -= owner // Add if not already in here (and you might be, if you were picked at round start)
+ // Mindslave Remove
+ if (master && master.owner)
+ master.vassals -= src
+ if (owner.enslaved_to == master.owner.current)
+ owner.enslaved_to = null
+ // Master Pinpointer
+ owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition)
+ // Powers
+ while(powers.len)
+ var/datum/action/power = pick(powers)
+ powers -= power
+ power.Remove(owner.current)
+ // Remove Hunter Objectives
+ for(var/O in objectives_given)
+ objectives -= O
+ qdel(O)
+ objectives_given = list()
+ remove_thrall_eyes()
+ owner.current.remove_language(/datum/language/vampiric)
+ // Clear Antag HUD
+ update_vassal_icons_removed(owner.current)
+
+ . = ..()
+
+/datum/antagonist/vassal/greet()
+ to_chat(owner, "You are now the mortal servant of [master.owner.current], a bloodsucking vampire! ")
+ to_chat(owner, "The power of [master.owner.current.p_their()] immortal blood compells you to obey [master.owner.current.p_them()] in all things, even offering your own life to prolong theirs. \
+ You are not required to obey any other Bloodsucker, for only [master.owner.current] is your master. The laws of Nanotransen do not apply to you now; only your vampiric master's word must be obeyed.")
+ // Effects...
+ owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE)
+ //owner.store_memory("You became the mortal servant of [master.owner.current], a bloodsucking vampire!")
+ antag_memory += "You became the mortal servant of [master.owner.current] , a bloodsucking vampire! "
+ // And to your new Master...
+ to_chat(master.owner, "[owner.current] has become addicted to your immortal blood. [owner.current.p_they(TRUE)] [owner.current.p_are()] now your undying servant! ")
+ master.owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE)
+
+/datum/antagonist/vassal/farewell()
+ owner.current.visible_message("[owner.current]'s eyes dart feverishly from side to side, and then stop. [owner.current.p_they(TRUE)] seem[owner.current.p_s()] calm, \
+ like [owner.current.p_they()] [owner.current.p_have()] regained some lost part of [owner.current.p_them()]self.",\
+ "With a snap, you are no longer enslaved to [master.owner]! You breathe in heavily, having regained your free will. ")
+ owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE)
+ // And to your former Master...
+ //if (master && master.owner)
+ // to_chat(master.owner, "You feel the bond with your vassal [owner.current] has somehow been broken! ")
+
+/datum/status_effect/agent_pinpointer/vassal_edition
+ id = "agent_pinpointer"
+ alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition
+ minimum_range = VASSAL_SCAN_MIN_DISTANCE
+ tick_interval = VASSAL_SCAN_PING_TIME
+ duration = -1 // runs out fast
+ range_fuzz_factor = 0
+
+/obj/screen/alert/status_effect/agent_pinpointer/vassal_edition
+ name = "Blood Bond"
+ desc = "You always know where your master is."
+ //icon = 'icons/obj/device.dmi'
+ //icon_state = "pinon"
+
+/datum/status_effect/agent_pinpointer/vassal_edition/on_creation(mob/living/new_owner, ...)
+ ..()
+
+ var/datum/antagonist/vassal/antag_datum = new_owner.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ scan_target = antag_datum?.master?.owner?.current
+
+/datum/status_effect/agent_pinpointer/vassal_edition/scan_for_target()
+ // DO NOTHING. We already have our target, and don't wanna do anything from agent_pinpointer
+
+/datum/antagonist/vassal/proc/update_vassal_icons_added(mob/living/vassal, icontype="vassal")
+ var/datum/atom_hud/antag/bloodsucker/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ hud.join_hud(vassal)
+ set_antag_hud(vassal, icontype) // Located in icons/mob/hud.dmi
+ owner.current.hud_list[ANTAG_HUD].icon = image('icons/mob/hud.dmi', owner.current, "bloodsucker")
+
+/datum/antagonist/vassal/proc/update_vassal_icons_removed(mob/living/vassal)
+ var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_BLOODSUCKER]
+ hud.leave_hud(vassal)
+ set_antag_hud(vassal, null)
+
+//Displayed at the start of roundend_category section, default to roundend_category header
+/*/datum/antagonist/vassal/roundend_report_header()
+ return " "*/
diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm
new file mode 100644
index 0000000000..5a905857c5
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm
@@ -0,0 +1,70 @@
+
+
+/datum/antagonist/bloodsucker/proc/CheckVampOrgans()
+ // Do I have any parts that need replacing?
+ var/obj/item/organ/O
+ // Heart
+ O = owner.current.getorganslot(ORGAN_SLOT_HEART)
+ if(!istype(O, /obj/item/organ/heart/vampheart))
+ qdel(O)
+ var/obj/item/organ/heart/vampheart/H = new
+ H.Insert(owner.current)
+ H.Stop() // Now...stop beating!
+ // Eyes
+ O = owner.current.getorganslot(ORGAN_SLOT_EYES)
+ if(!istype(O, /obj/item/organ/eyes/vassal/bloodsucker))
+ qdel(O)
+ var/obj/item/organ/eyes/vassal/bloodsucker/E = new
+ E.Insert(owner.current)
+
+/datum/antagonist/bloodsucker/proc/RemoveVampOrgans()
+ // Heart
+ var/obj/item/organ/heart/H = new
+ H.Insert(owner.current)
+ // Eyes
+ var/obj/item/organ/eyes/E = new
+ E.Insert(owner.current)
+// HEART: OVERWRITE //
+// HEART //
+/obj/item/organ/heart/vampheart
+ beating = 0
+ var/fakingit = 0
+
+/obj/item/organ/heart/vampheart/prepare_eat()
+ ..()
+ // Do cool stuff for eating vamp heart?
+
+/obj/item/organ/heart/vampheart/Restart()
+ beating = 0 // DONT run ..(). We don't want to start beating again.
+ return 0
+
+/obj/item/organ/heart/vampheart/Stop()
+ fakingit = 0
+ return ..()
+
+/obj/item/organ/heart/vampheart/proc/FakeStart()
+ fakingit = 1 // We're pretending to beat, to fool people.
+
+/obj/item/organ/heart/vampheart/HeartStrengthMessage()
+ if(fakingit)
+ return "a healthy"
+ return "no " // Bloodsuckers don't have a heartbeat at all when stopped (default is "an unstable")
+// EYES //
+
+/obj/item/organ/eyes/vassal/bloodsucker
+ flash_protect = 2 //Eye healing isnt working properly
+ sight_flags = SEE_MOBS // Taken from augmented_eyesight.dm
+
+/*
+// LIVER //
+/obj/item/organ/liver/vampliver
+ // Livers run on_life(), which calls reagents.metabolize() in holder.dm, which calls on_mob_life.dm in the cheam (medicine_reagents.dm)
+ // Holder also calls reagents.reaction_mob for the moment it happens
+
+/obj/item/organ/liver/vampliver/on_life()
+ var/mob/living/carbon/C = owner
+
+ if(!istype(C))
+ return
+
+*/
diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
new file mode 100644
index 0000000000..9db4cae1ff
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_stake.dm
@@ -0,0 +1,176 @@
+
+
+// organ_internal.dm -- /obj/item/organ
+
+
+
+// Do I have a stake in my heart?
+/mob/living/AmStaked()
+ var/obj/item/bodypart/BP = get_bodypart("chest")
+ if (!BP)
+ return FALSE
+ for(var/obj/item/I in BP.embedded_objects)
+ if (istype(I,/obj/item/stake/))
+ return TRUE
+ return FALSE
+/mob/proc/AmStaked()
+ return FALSE
+
+
+/mob/living/proc/StakeCanKillMe()
+ return IsSleeping() || stat >= UNCONSCIOUS || blood_volume <= 0 || HAS_TRAIT(src, TRAIT_DEATHCOMA) // NOTE: You can't go to sleep in a coffin with a stake in you.
+
+
+///obj/item/weapon/melee/stake
+/obj/item/stake/
+ name = "wooden stake"
+ desc = "A simple wooden stake carved to a sharp point."
+ icon = 'icons/obj/items_and_weapons.dmi'
+ icon_state = "wood" // Inventory Icon
+ item_state = "wood" // In-hand Icon
+ lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' // File for in-hand icon
+ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
+ attack_verb = list("staked")
+ slot_flags = ITEM_SLOT_BELT
+ w_class = WEIGHT_CLASS_SMALL
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ force = 6
+ throwforce = 10
+ embedding = list("embed_chance" = 25, "embedded_fall_chance" = 0.5) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled
+ //embed_chance = 25 // Look up "is_pointed" to see where we set stakes able to do this.
+ //embedded_fall_chance = 0.5 // Chance it will fall out.
+ obj_integrity = 30
+ max_integrity = 30
+ //embedded_fall_pain_multiplier
+ var/staketime = 120 // Time it takes to embed the stake into someone's chest.
+
+/obj/item/stake/basic
+ name = "wooden stake"
+ // This exists so Hardened/Silver Stake can't have a welding torch used on them.
+
+/obj/item/stake/basic/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/weldingtool))
+ //if (amWelded)
+ // to_chat(user, "This stake has already been treated with fire. ")
+ // return
+ //amWelded = TRUE
+ // Weld it
+ var/obj/item/weldingtool/WT = W
+ if(WT.use(0))//remove_fuel(0,user))
+ user.visible_message("[user.name] scorched the pointy end of [src] with the welding tool.", \
+ "You scorch the pointy end of [src] with the welding tool. ", \
+ "You hear welding. ")
+ // 8 Second Timer
+ if(!do_mob(user, src, 80))
+ return
+ // Create the Stake
+ qdel(src)
+ var/obj/item/stake/hardened/new_item = new(usr.loc)
+ user.put_in_hands(new_item)
+ else
+ return ..()
+
+/obj/item/stake/afterattack(atom/target, mob/user, proximity)
+ //to_chat(world, "DEBUG: Staking ")
+ // Invalid Target, or not targetting chest with HARM intent?
+ if(!iscarbon(target) || check_zone(user.zone_selected) != "chest" || user.a_intent != INTENT_HARM)
+ return
+ var/mob/living/carbon/C = target
+ // Needs to be Down/Slipped in some way to Stake.
+ if(!C.can_be_staked() || target == user)
+ to_chat(user, "You cant stake [target] when they are moving moving about! They have to be laying down! ")
+ return
+ // Oops! Can't.
+ if(HAS_TRAIT(C, TRAIT_PIERCEIMMUNE))
+ to_chat(user, "[target]'s chest resists the stake. It won't go in. ")
+ return
+ // Make Attempt...
+ to_chat(user, "You put all your weight into embedding the stake into [target]'s chest... ")
+ playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1)
+ if(!do_mob(user, C, staketime, 0, 1, extra_checks=CALLBACK(C, /mob/living/carbon/proc/can_be_staked))) // user / target / time / uninterruptable / show progress bar / extra checks
+ return
+ // Drop & Embed Stake
+ user.visible_message("[user.name] drives the [src] into [target]'s chest! ", \
+ "You drive the [src] into [target]'s chest! ")
+ playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1)
+ user.dropItemToGround(src, TRUE) //user.drop_item() // "drop item" doesn't seem to exist anymore. New proc is user.dropItemToGround() but it doesn't seem like it's needed now?
+ var/obj/item/bodypart/B = C.get_bodypart("chest") // This was all taken from hitby() in human_defense.dm
+ B.embedded_objects |= src
+ add_mob_blood(target)//Place blood on the stake
+ loc = C // Put INSIDE the character
+ B.receive_damage(w_class * embedding.embedded_impact_pain_multiplier)
+ if(C.mind)
+ var/datum/antagonist/bloodsucker/bloodsucker = C.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsucker)
+ // If DEAD or TORPID...kill vamp!
+ if(C.StakeCanKillMe()) // NOTE: This is the ONLY time a staked Torpid vamp dies.
+ bloodsucker.FinalDeath()
+ return
+ else
+ to_chat(target, "You have been staked! Your powers are useless, your death forever, while it remains in place. ")
+ to_chat(user, "You missed [C.p_their(TRUE)]'s heart! It would be easier if [C.p_they(TRUE)] weren't struggling so much. ")
+
+// Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary.
+/mob/living/carbon/proc/can_be_staked()
+ //return resting || IsKnockdown() || IsUnconscious() || (stat && (stat != SOFT_CRIT || pulledby)) || (has_trait(TRAIT_FAKEDEATH)) || resting || IsStun() || IsFrozen() || (pulledby && pulledby.grab_state >= GRAB_NECK)
+ return (src.resting || src.lying)
+ // ABOVE: Taken from update_mobility() in living.dm
+
+/obj/item/stake/hardened
+ // Created by welding and acid-treating a simple stake.
+ name = "hardened stake"
+ desc = "A hardened wooden stake carved to a sharp point and scorched at the end."
+ icon_state = "hardened" // Inventory Icon
+ force = 8
+ throwforce = 12
+ armour_penetration = 10
+ embedding = list("embed_chance" = 50, "embedded_fall_chance" = 0) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled
+ obj_integrity = 120
+ max_integrity = 120
+
+ staketime = 80
+
+/obj/item/stake/hardened/silver
+ name = "silver stake"
+ desc = "Polished and sharp at the end. For when some mofo is always trying to iceskate uphill."
+ icon_state = "silver" // Inventory Icon
+ item_state = "silver" // In-hand Icon
+ siemens_coefficient = 1 //flags = CONDUCT // var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
+ force = 9
+ armour_penetration = 25
+ embedding = list("embed_chance" = 65) // UPDATE 2/10/18 embedding_behavior.dm is how this is handled
+ obj_integrity = 300
+ max_integrity = 300
+
+ staketime = 60
+
+// Convert back to Silver
+/obj/item/stake/hardened/silver/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/weldingtool))
+ var/obj/item/weldingtool/WT = I
+ if(WT.use(0))//remove_fuel(0, user))
+ var/obj/item/stack/sheet/mineral/silver/newsheet = new (user.loc)
+ for(var/obj/item/stack/sheet/mineral/silver/S in user.loc)
+ if(S == newsheet)
+ continue
+ if(S.amount >= S.max_amount)
+ continue
+ S.attackby(newsheet, user)
+ to_chat(user, "You melt down the stake and add it to the stack. It now contains [newsheet.amount] sheet\s. ")
+ qdel(src)
+ else
+ return ..()
+
+
+// Look up recipes.dm OR pneumaticCannon.dm
+/datum/crafting_recipe/silver_stake
+ name = "Silver Stake"
+ result = /obj/item/stake/hardened/silver
+ tools = list(/obj/item/weldingtool)
+ reqs = list(/obj/item/stack/sheet/mineral/silver = 1,
+ /obj/item/stake/hardened = 1)
+ ///obj/item/stack/packageWrap = 8,
+ ///obj/item/pipe = 2)
+ time = 80
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
new file mode 100644
index 0000000000..946c472f11
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm
@@ -0,0 +1,242 @@
+
+
+// TRAIT_DEATHCOMA - Activate this when you're in your coffin to simulate sleep/death.
+
+
+// Coffins...
+// -heal all wounds, and quickly.
+// -restore limbs & organs
+//
+
+// Without Coffins...
+// -
+// -limbs stay lost
+
+
+
+// To put to sleep: use owner.current.fakedeath("bloodsucker") but change name to "bloodsucker_coffin" so you continue to stay fakedeath despite healing in the main thread!
+
+
+/datum/antagonist/bloodsucker/proc/ClaimCoffin(obj/structure/closet/crate/claimed) // NOTE: This can be any "closet" that you are resting AND inside of.
+ // ALREADY CLAIMED
+ if(claimed.resident)
+ if(claimed.resident == owner.current)
+ to_chat(owner, "This is your [src].")
+ else
+ to_chat(owner, "This [src] has already been claimed by another.")
+ return FALSE
+ // Bloodsucker Learns new Recipes!
+ owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/vassalrack)
+ owner.teach_crafting_recipe(/datum/crafting_recipe/bloodsucker/candelabrum)
+ // This is my Lair
+ coffin = claimed
+ lair = get_area(claimed)
+ // DONE
+ to_chat(owner, "You have claimed the [claimed] as your place of immortal rest! Your lair is now [lair]. ")
+ to_chat(owner, "You have learned new construction recipes to improve your lair. ")
+ to_chat(owner, "Bloodsucker Tip: Find new lair recipes in the misc tab of the Crafting Menu at the bottom of the screen, including the Persuasion Rack for converting crew into Vassals. ")
+ RunLair() // Start
+ return TRUE
+
+// crate.dm
+/obj/structure/closet/crate
+ var/mob/living/resident // This lets bloodsuckers claim any "closet" as a Coffin, so long as they could get into it and close it. This locks it in place, too.
+
+/obj/structure/closet/crate/coffin
+ var/pryLidTimer = 250
+ can_weld_shut = FALSE
+ breakout_time = 200
+
+
+/obj/structure/closet/crate/coffin/blackcoffin
+ name = "black coffin"
+ desc = "For those departed who are not so dear."
+ icon_state = "coffin"
+ icon = 'icons/obj/vamp_obj.dmi'
+ can_weld_shut = FALSE
+ resistance_flags = 0 // Start off with no bonuses.
+ open_sound = 'sound/bloodsucker/coffin_open.ogg'
+ close_sound = 'sound/bloodsucker/coffin_close.ogg'
+ breakout_time = 600
+ pryLidTimer = 400
+ resistance_flags = NONE
+
+/obj/structure/closet/crate/coffin/meatcoffin
+ name = "meat coffin"
+ desc = "When you're ready to meat your maker, the steaks can never be too high."
+ icon_state = "meatcoffin"
+ icon = 'icons/obj/vamp_obj.dmi'
+ can_weld_shut = FALSE
+ resistance_flags = 0 // Start off with no bonuses.
+ open_sound = 'sound/effects/footstep/slime1.ogg'
+ close_sound = 'sound/effects/footstep/slime1.ogg'
+ breakout_time = 200
+ pryLidTimer = 200
+ resistance_flags = NONE
+ material_drop = /obj/item/reagent_containers/food/snacks/meat/slab
+ material_drop_amount = 3
+
+/obj/structure/closet/crate/coffin/metalcoffin
+ name = "metal coffin"
+ desc = "A big metal sardine can inside of another big metal sardine can, in space."
+ icon_state = "metalcoffin"
+ icon = 'icons/obj/vamp_obj.dmi'
+ can_weld_shut = FALSE
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ open_sound = 'sound/effects/pressureplate.ogg'
+ close_sound = 'sound/effects/pressureplate.ogg'
+ breakout_time = 300
+ pryLidTimer = 200
+ resistance_flags = NONE
+ material_drop = /obj/item/stack/sheet/metal
+ material_drop_amount = 5
+
+//////////////////////////////////////////////
+
+/obj/structure/closet/crate/proc/ClaimCoffin(mob/living/claimant) // NOTE: This can be any "closet" that you are resting AND inside of.
+ // Bloodsucker Claim
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = claimant.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsuckerdatum)
+ // Vamp Successfuly Claims Me?
+ if(bloodsuckerdatum.ClaimCoffin(src))
+ resident = claimant
+ anchored = 1 // No moving this
+
+/obj/structure/closet/crate/coffin/Destroy()
+ UnclaimCoffin()
+ return ..()
+
+/obj/structure/closet/crate/proc/UnclaimCoffin()
+ if (resident)
+ // Vamp Un-Claim
+ if (resident.mind)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = resident.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (bloodsuckerdatum && bloodsuckerdatum.coffin == src)
+ bloodsuckerdatum.coffin = null
+ bloodsuckerdatum.lair = null
+ to_chat(resident, "You sense that the link with your coffin, your sacred place of rest, has been brokem! You will need to seek another. ")
+ resident = null // Remove resident. Because this object isnt removed from the game immediately (GC?) we need to give them a way to see they don't have a home anymore.
+
+/obj/structure/closet/crate/coffin/can_open(mob/living/user)
+ // You cannot lock in/out a coffin's owner. SORRY.
+ if (locked)
+ if(user == resident)
+ if (welded)
+ welded = FALSE
+ update_icon()
+ //to_chat(user, "You flip a secret latch and unlock [src]. ") // Don't bother. We know it's unlocked.
+ locked = FALSE
+ return 1
+ else
+ playsound(get_turf(src), 'sound/machines/door_locked.ogg', 20, 1)
+ to_chat(user, "[src] is locked tight from the inside. ")
+ return ..()
+
+/obj/structure/closet/crate/coffin/close(mob/living/user)
+ var/turf/Turf = get_turf(src)
+ var/area/A = get_area(src)
+ if (!..())
+ return FALSE
+ // Only the User can put themself into Torpor (if you're already in it, you'll start to heal)
+ if((user in src))
+ // Bloodsucker Only
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(bloodsuckerdatum)
+ LockMe(user)
+ Turf = get_turf(user) //we may have moved. adjust as needed...
+ A = get_area(src)
+ // Claim?
+ if(!bloodsuckerdatum.coffin && !resident && (is_station_level(Turf.z) || !A.map_name == "Space"))
+ switch(alert(user,"Do you wish to claim this as your coffin? [get_area(src)] will be your lair.","Claim Lair","Yes", "No"))
+ if("Yes")
+ ClaimCoffin(user)
+ if (user.AmStaked()) // Stake? No Heal!
+ to_chat(bloodsuckerdatum.owner.current, "You are staked! Remove the offending weapon from your heart before sleeping. ")
+ return
+ // Heal
+ if(bloodsuckerdatum.HandleHealing(0)) // Healing Mult 0 <--- We only want to check if healing is valid!
+ to_chat(bloodsuckerdatum.owner.current, "You enter the horrible slumber of deathless Torpor. You will heal until you are renewed. ")
+ bloodsuckerdatum.Torpor_Begin()
+ // Level Up?
+ bloodsuckerdatum.SpendRank() // Auto-Fails if not appropriate
+ return TRUE
+
+/obj/structure/closet/crate/coffin/attackby(obj/item/W, mob/user, params)
+ // You cannot weld or deconstruct an owned coffin. STILL NOT SORRY.
+ if (resident != null && user != resident) // Owner can destroy their own coffin.
+ if(opened)
+ if(istype(W, cutting_tool))
+ to_chat(user, "This is a much more complex mechanical structure than you thought. You don't know where to begin cutting [src]. ")
+ return
+ else if(anchored && istype(W, /obj/item/wrench)) // Can't unanchor unless owner.
+ to_chat(user, "The coffin won't come unanchored from the floor. ")
+ return
+
+ if(locked && istype(W, /obj/item/crowbar))
+ var/pry_time = pryLidTimer * W.toolspeed // Pry speed must be affected by the speed of the tool.
+ user.visible_message("[user] tries to pry the lid off of [src] with [W]. ", \
+ "You begin prying the lid off of [src] with [W]. This should take about [DisplayTimeText(pry_time)]. ")
+ if (!do_mob(user,src,pry_time))
+ return
+ bust_open()
+ user.visible_message("[user] snaps the door of [src] wide open. ", \
+ "The door of [src] snaps open. ")
+ return
+ ..()
+
+
+
+/obj/structure/closet/crate/coffin/AltClick(mob/user)
+ // Distance Check (Inside Of)
+ if (user in src) // user.Adjacent(src)
+ LockMe(user, !locked)
+
+/obj/structure/closet/crate/proc/LockMe(mob/user, inLocked = TRUE)
+ // Lock
+ if (user == resident)
+ if (!broken)
+ locked = inLocked
+ to_chat(user, "You flip a secret latch and [locked?"":"un"]lock yourself inside [src]. ")
+ else
+ to_chat(resident, "The secret latch to lock [src] from the inside is broken. You set it back into place... ")
+ if (do_mob(resident, src, 50))//sleep(10)
+ if (broken) // Spam Safety
+ to_chat(resident, "You fix the mechanism and lock it. ")
+ broken = FALSE
+ locked = TRUE
+
+// Look up recipes.dm OR pneumaticCannon.dm
+/datum/crafting_recipe/bloodsucker/blackcoffin
+ name = "Black Coffin"
+ result = /obj/structure/closet/crate/coffin/blackcoffin
+ tools = list(/obj/item/weldingtool,
+ /obj/item/screwdriver)
+ reqs = list(/obj/item/stack/sheet/cloth = 1,
+ /obj/item/stack/sheet/mineral/wood = 5,
+ /obj/item/stack/sheet/metal = 1)
+ ///obj/item/stack/packageWrap = 8,
+ ///obj/item/pipe = 2)
+ time = 150
+ category = CAT_MISC
+ always_availible = TRUE
+
+/datum/crafting_recipe/bloodsucker/meatcoffin
+ name = "Meat Coffin"
+ result =/obj/structure/closet/crate/coffin/meatcoffin
+ tools = list(/obj/item/kitchen/knife,
+ /obj/item/kitchen/rollingpin)
+ reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5,
+ /obj/item/restraints/handcuffs/cable = 1)
+ time = 150
+ category = CAT_MISC
+ always_availible = TRUE
+
+/datum/crafting_recipe/bloodsucker/metalcoffin
+ name = "Metal Coffin"
+ result =/obj/structure/closet/crate/coffin/metalcoffin
+ tools = list(/obj/item/weldingtool,
+ /obj/item/screwdriver)
+ reqs = list(/obj/item/stack/sheet/metal = 5)
+ time = 100
+ category = CAT_MISC
+ always_availible = TRUE
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
new file mode 100644
index 0000000000..f73912d0f5
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_crypt.dm
@@ -0,0 +1,497 @@
+
+
+
+// IDEAS --
+// An object that disguises your coffin while you're in it!
+//
+// An object that lets your lair itself protect you from sunlight, like a coffin would (no healing tho)
+
+
+
+// Hide a random object somewhere on the station:
+// var/turf/targetturf = get_random_station_turf()
+// var/turf/targetturf = get_safe_random_station_turf()
+
+
+
+
+// CRYPT OBJECTS
+//
+//
+// PODIUM Stores your Relics
+//
+// ALTAR Transmute items into sacred items.
+//
+// PORTRAIT Gaze into your past to: restore mood boost?
+//
+// BOOKSHELF Discover secrets about crew and locations. Learn languages. Learn marial arts.
+//
+// BRAZER Burn rare ingredients to gleen insights.
+//
+// RUG Ornate, and creaks when stepped upon by any humanoid other than yourself and your vassals.
+//
+// X COFFIN (Handled elsewhere)
+//
+// X CANDELABRA (Handled elsewhere)
+//
+// THRONE Your mental powers work at any range on anyone inside your crypt.
+//
+// MIRROR Find any person
+//
+// BUST/STATUE Create terror, but looks just like you (maybe just in Examine?)
+
+
+// RELICS
+//
+// RITUAL DAGGER
+//
+// SKULL
+//
+// VAMPIRIC SCROLL
+//
+// SAINTS BONES
+//
+// GRIMOIRE
+
+
+// RARE INGREDIENTS
+// Ore
+// Books (Manuals)
+
+
+// NOTE: Look up AI and Sentient Disease to see how the game handles the selector logo that only one player is allowed to see. We could add hud for vamps to that?
+// ALTERNATIVELY, use the Vamp Huds on relics to mark them, but only show to relevant vamps?
+
+
+/obj/structure/bloodsucker
+ var/mob/living/owner
+
+/*
+/obj/structure/bloodsucker/bloodthrone
+ name = "wicked throne"
+ desc = "Twisted metal shards jut from the arm rests. Very uncomfortable looking. It would take a sadistic sort to sit on this jagged piece of furniture."
+
+/obj/structure/bloodsucker/bloodaltar
+ name = "bloody altar"
+ desc = "It is marble, lined with basalt, and radiates an unnerving chill that puts your skin on edge."
+
+/obj/structure/bloodsucker/bloodstatue
+ name = "bloody countenance"
+ desc = "It looks upsettingly familiar..."
+
+/obj/structure/bloodsucker/bloodportrait
+ name = "oil portrait"
+ desc = "A disturbingly familiar face stares back at you. On second thought, the reds don't seem to be painted in oil..."
+
+/obj/structure/bloodsucker/bloodbrazer
+ name = "lit brazer"
+ desc = "It burns slowly, but doesn't radiate any heat."
+
+/obj/structure/bloodsucker/bloodmirror
+ name = "faded mirror"
+ desc = "You get the sense that the foggy reflection looking back at you has an alien intelligence to it."
+*/
+
+
+/obj/structure/bloodsucker/vassalrack
+ name = "persuasion rack"
+ desc = "If this wasn't meant for torture, then someone has some fairly horrifying hobbies."
+ icon = 'icons/obj/vamp_obj.dmi'
+ icon_state = "vassalrack"
+ buckle_lying = FALSE
+ anchored = FALSE
+ density = TRUE // Start dense. Once fixed in place, go non-dense.
+ can_buckle = TRUE
+ var/useLock = FALSE // So we can't just keep dragging ppl on here.
+ var/mob/buckled
+ var/convert_progress = 3 // Resets on each new character to be added to the chair. Some effects should lower it...
+ var/disloyalty_confirm = FALSE // Command & Antags need to CONFIRM they are willing to lose their role (and will only do it if the Vassal'ing succeeds)
+ var/disloyalty_offered = FALSE // Has the popup been issued? Don't spam them.
+ var/convert_cost = 100
+
+/obj/structure/bloodsucker/vassalrack/deconstruct(disassembled = TRUE)
+ new /obj/item/stack/sheet/metal(src.loc, 4)
+ new /obj/item/stack/rods(loc, 4)
+ qdel(src)
+
+/obj/structure/bloodsucker/vassalrack/examine(mob/user)
+ . = ..()
+ if((user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) || isobserver(user))
+ . += {"This is the vassal rack, which allows you to thrall crewmembers into loyal minions in your service. "}
+ . += {"You need to first secure the vassal rack by clicking on it while it is in your lair. "}
+ . += {"Simply click and hold on a victim, and then drag their sprite on the vassal rack. "}
+ . += {"Make sure that the victim is handcuffed, or else they can simply run away or resist, as the process is not instant. "}
+ . += {"To convert the victim, simply click on the vassal rack itself. Sharp weapons work faster than other tools. "}
+/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ . += {"This is the vassal rack, which allows your master to thrall crewmembers into his minions.\n
+ Aid your master in bringing their victims here and keeping them secure.\n
+ You can secure victims to the vassal rack by click dragging the victim onto the rack while it is secured "} */
+
+/obj/structure/bloodsucker/vassalrack/MouseDrop_T(atom/movable/O, mob/user)
+ if(!O.Adjacent(src) || O == user || !isliving(O) || !isliving(user) || useLock || has_buckled_mobs() || user.incapacitated())
+ return
+ if(!anchored && user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ to_chat(user, "Until this rack is secured in place, it cannot serve its purpose. ")
+ return
+ // PULL TARGET: Remember if I was pullin this guy, so we can restore this
+ var/waspulling = (O == owner.pulling)
+ var/wasgrabstate = owner.grab_state
+ // * MOVE! *
+ O.forceMove(drop_location())
+ // PULL TARGET: Restore?
+ if(waspulling)
+ owner.start_pulling(O, wasgrabstate, TRUE)
+ // NOTE: in bs_lunge.dm, we use [target.grabbedby(owner)], which simulates doing a grab action. We don't want that though...we're cutting directly back to where we were in a grab.
+ // Do Action!
+ useLock = TRUE
+ if(do_mob(user, O, 50))
+ attach_victim(O,user)
+ useLock = FALSE
+
+/obj/structure/bloodsucker/vassalrack/AltClick(mob/user)
+ if(!has_buckled_mobs() || !isliving(user) || useLock)
+ return
+ // Attempt Release (Owner vs Non Owner)
+ var/mob/living/carbon/C = pick(buckled_mobs)
+ if(C)
+ if(user == owner)
+ unbuckle_mob(C)
+ else
+ user_unbuckle_mob(C,user)
+
+/obj/structure/bloodsucker/vassalrack/proc/attach_victim(mob/living/M, mob/living/user)
+ // Standard Buckle Check
+ if(!buckle_mob(M)) // force=TRUE))
+ return
+ // Attempt Buckle
+ user.visible_message("[user] straps [M] into the rack, immobilizing them. ", \
+ "You secure [M] tightly in place. They won't escape you now. ")
+
+ playsound(src.loc, 'sound/effects/pop_expl.ogg', 25, 1)
+ //M.forceMove(drop_location()) <--- CANT DO! This cancels the buckle_mob() we JUST did (even if we foced the move)
+ M.setDir(2)
+ density = TRUE
+ var/matrix/m180 = matrix(M.transform)
+ m180.Turn(180)//90)//180
+ animate(M, transform = m180, time = 2)
+ M.pixel_y = -2 //M.get_standard_pixel_y_offset(120)//180)
+ update_icon()
+ // Torture Stuff
+ convert_progress = 2 // Goes down unless you start over.
+ disloyalty_confirm = FALSE // New guy gets the chance to say NO if he's special.
+ disloyalty_offered = FALSE // Prevents spamming torture window.
+
+/obj/structure/bloodsucker/vassalrack/user_unbuckle_mob(mob/living/M, mob/user)
+ // Attempt Unbuckle
+ if(!user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if(M == user)
+ M.visible_message("[user] tries to release themself from the rack! ",\
+ "You attempt to release yourself from the rack! ") // For sound if not seen --> "You hear a squishy wet noise. ")
+ else
+ M.visible_message("[user] tries to pull [M] rack! ",\
+ "[user] attempts to release you from the rack! ") // For sound if not seen --> "You hear a squishy wet noise. ")
+ if(!do_mob(user, M, 100))
+ return
+ // Did the time. Now try to do it.
+ ..()
+ unbuckle_mob(M)
+
+/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE)
+ if(!..())
+ return
+ var/matrix/m180 = matrix(buckled_mob.transform)
+ m180.Turn(180)//-90)//180
+ animate(buckled_mob, transform = m180, time = 2)
+ buckled_mob.pixel_y = buckled_mob.get_standard_pixel_y_offset(180)
+ src.visible_message(text("[buckled_mob][buckled_mob.stat==DEAD?"'s corpse":""] slides off of the rack. "))
+ density = FALSE
+ buckled_mob.AdjustKnockdown(30)
+ update_icon()
+ useLock = FALSE // Failsafe
+
+/obj/structure/bloodsucker/vassalrack/attackby(obj/item/W, mob/user, params)
+ if(has_buckled_mobs()) // Attack w/weapon vs guy standing there? Don't do an attack.
+ attack_hand(user)
+ return FALSE
+ return ..()
+
+/obj/structure/bloodsucker/vassalrack/attack_hand(mob/user)
+ //. = ..() // Taken from sacrificial altar in divine.dm
+ //if(.)
+ // return
+ // Go away. Torturing.
+ if(useLock)
+ return
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // CHECK ONE: Am I claiming this? Is it in the right place?
+ if(istype(bloodsuckerdatum) && !owner)
+ if(!bloodsuckerdatum.lair)
+ to_chat(user, "You don't have a lair. Claim a coffin to make that location your lair. ")
+ if(bloodsuckerdatum.lair != get_area(src))
+ to_chat(user, "You may only activate this structure in your lair: [bloodsuckerdatum.lair]. ")
+ return
+ switch(alert(user,"Do you wish to afix this structure here? Be aware you wont be able to unsecure it anymore","Secure [src]","Yes", "No"))
+ if("Yes")
+ owner = user
+ density = FALSE
+ anchored = TRUE
+ return //No, you cant move this ever again
+ // No One Home
+ if(!has_buckled_mobs())
+ return
+ // CHECK TWO: Am I a non-bloodsucker?
+ var/mob/living/carbon/C = pick(buckled_mobs)
+ if(!istype(bloodsuckerdatum))
+ // Try to release this guy
+ user_unbuckle_mob(C, user)
+ return
+ // Bloodsucker Owner! Let the boy go.
+ if(C.mind)
+ var/datum/antagonist/vassal/vassaldatum = C.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if (istype(vassaldatum) && vassaldatum.master == bloodsuckerdatum || C.stat >= DEAD)
+ unbuckle_mob(C)
+ useLock = FALSE // Failsafe
+ return
+ // Just torture the boy
+ torture_victim(user, C)
+
+/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target)
+ // Check Bloodmob/living/M, force = FALSE, check_loc = TRUE
+ if(user.blood_volume < convert_cost + 5)
+ to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target]. ")
+ return
+ // Prep...
+ useLock = TRUE
+ // Step One: Tick Down Conversion from 3 to 0
+ // Step Two: Break mindshielding/antag (on approve)
+ // Step Three: Blood Ritual
+ // Conversion Process
+ if(convert_progress > 0)
+ to_chat(user, "You prepare to initiate [target] into your service. ")
+ if(!do_torture(user,target))
+ to_chat(user, "The ritual has been interrupted! ")
+ else
+ convert_progress -- // Ouch. Stop. Don't.
+ // All done!
+ if(convert_progress <= 0)
+ // FAIL: Can't be Vassal
+ if(!SSticker.mode.can_make_vassal(target, user, display_warning=FALSE) && HAS_TRAIT(target, TRAIT_MINDSHIELD)) // If I'm an unconvertable Antag ONLY
+ to_chat(user, "[target] doesn't respond to your persuasion. It doesn't appear they can be converted to follow you, they either have a mindshield or their external loyalties are too difficult for you to break.\[ALT+click to release\] ")
+ convert_progress ++ // Pop it back up some. Avoids wasting Blood on a lost cause.
+ // SUCCESS: All done!
+ else
+ if(RequireDisloyalty(target))
+ to_chat(user, "[target] has external loyalties! [target.p_they(TRUE)] will require more persuasion to break [target.p_them()] to your will! ")
+ else
+ to_chat(user, "[target] looks ready for the Dark Communion . ")
+ // Still Need More Persuasion...
+ else
+ to_chat(user, "[target] could use [convert_progress == 1?"a little":"some"] more persuasion . ")
+ useLock = FALSE
+ return
+ // Check: Mindshield & Antag
+ if(!disloyalty_confirm && RequireDisloyalty(target))
+ if(!do_disloyalty(user,target))
+ to_chat(user, "The ritual has been interrupted! ")
+ else if (!disloyalty_confirm)
+ to_chat(user, "[target] refuses to give into your persuasion. Perhaps a little more? ")
+ else
+ to_chat(user, "[target] looks ready for the Dark Communion . ")
+ useLock = FALSE
+ return
+ // Check: Blood
+ if(user.blood_volume < convert_cost)
+ to_chat(user, "You don't have enough blood to initiate the Dark Communion with [target]. ")
+ useLock = FALSE
+ return
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ bloodsuckerdatum.AddBloodVolume(-convert_cost)
+ target.add_mob_blood(user)
+ user.visible_message("[user] marks a bloody smear on [target]'s forehead and puts a wrist up to [target.p_their()] mouth! ", \
+ "You paint a bloody marking across [target]'s forehead, place your wrist to [target.p_their()] mouth, and subject [target.p_them()] to the Dark Communion. ")
+ if(!do_mob(user, src, 50))
+ to_chat(user, "The ritual has been interrupted! ")
+ useLock = FALSE
+ return
+ // Convert to Vassal!
+ if(bloodsuckerdatum && bloodsuckerdatum.attempt_turn_vassal(target))
+ //remove_loyalties(target) // In case of Mindshield, or appropriate Antag (Traitor, Internal, etc)
+ //if (!target.buckled)
+ // to_chat(user, "The ritual has been interrupted! ")
+ // useLock = FALSE
+ // return
+ user.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+ target.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+ target.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+ target.Jitter(25)
+ target.emote("laugh")
+ //remove_victim(target) // Remove on CLICK ONLY!
+ useLock = FALSE
+
+/obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/target, mult=1)
+ var/torture_time = 15 // Fifteen seconds if you aren't using anything. Shorter with weapons and such.
+ var/torture_dmg_brute = 2
+ var/torture_dmg_burn = 0
+ // Get Bodypart
+ var/target_string = ""
+ var/obj/item/bodypart/BP = null
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
+ BP = pick(C.bodyparts)
+ if(BP)
+ target_string += BP.name
+ // Get Weapon
+ var/obj/item/I = user.get_active_held_item()
+ if(!istype(I))
+ I = user.get_inactive_held_item()
+ // Create Strings
+ var/method_string = I?.attack_verb?.len ? pick(I.attack_verb) : pick("harmed","tortured","wrenched","twisted","scoured","beaten","lashed","scathed")
+ var/weapon_string = I ? I.name : pick("bare hands","hands","fingers","fists")
+ // Weapon Bonus + SFX
+ if(I)
+ torture_time -= I.force / 4
+ torture_dmg_brute += I.force / 4
+ //torture_dmg_burn += I.
+ if(I.sharpness == IS_SHARP)
+ torture_time -= 1
+ else if(I.sharpness == IS_SHARP_ACCURATE)
+ torture_time -= 2
+ if(istype(I, /obj/item/weldingtool))
+ var/obj/item/weldingtool/welder = I
+ welder.welding = TRUE
+ torture_time -= 5
+ torture_dmg_burn += 5
+ I.play_tool_sound(target)
+ torture_time = max(50, torture_time * 10) // Minimum 5 seconds.
+ // Now run process.
+ if(!do_mob(user, target, torture_time * mult))
+ return FALSE
+ // SUCCESS
+ if(I)
+ playsound(loc, I.hitsound, 30, 1, -1)
+ I.play_tool_sound(target)
+ target.visible_message("[user] has [method_string] [target]'s [target_string] with [user.p_their()] [weapon_string]! ", \
+ "[user] has [method_string] your [target_string] with [user.p_their()] [weapon_string]! ")
+ if(!target.is_muzzled())
+ target.emote("scream")
+ target.Jitter(5)
+ target.apply_damages(brute = torture_dmg_brute, burn = torture_dmg_burn, def_zone = (BP ? BP.body_zone : null)) // take_overall_damage(6,0)
+ return TRUE
+
+/obj/structure/bloodsucker/vassalrack/proc/do_disloyalty(mob/living/user, mob/living/target)
+
+ // OFFER YES/NO NOW!
+ spawn(10)
+ if(useLock && target && target.client) // Are we still torturing? Did we cancel? Are they still here?
+ to_chat(user, "[target] has been given the opportunity for servitude. You await their decision... ")
+ var/alert_text = "You are being tortured! Do you want to give in and pledge your undying loyalty to [user]?"
+ /* if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ alert_text += "\n\nYou will no longer be loyal to the station!"
+ if(SSticker.mode.AmValidAntag(target.mind)) */
+ alert_text += "\n\nYou will not lose your current objectives, but they come second to the will of your new master!"
+ switch(alert(target, alert_text,"THE HORRIBLE PAIN! WHEN WILL IT END?!","Yes, Master!", "NEVER!"))
+ if("Yes, Master!")
+ disloyalty_accept(target)
+ else
+ disloyalty_refuse(target)
+ if(!do_torture(user,target, 2))
+ return FALSE
+
+ // NOTE: We only remove loyalties when we're CONVERTED!
+ return TRUE
+
+/obj/structure/bloodsucker/vassalrack/proc/RequireDisloyalty(mob/living/target)
+ return SSticker.mode.AmValidAntag(target.mind) //|| HAS_TRAIT(target, TRAIT_MINDSHIELD)
+
+/obj/structure/bloodsucker/vassalrack/proc/disloyalty_accept(mob/living/target)
+ // FAILSAFE: Still on the rack?
+ if(!(locate(target) in buckled_mobs))
+ return
+ // NOTE: You can say YES after torture. It'll apply to next time.
+ disloyalty_confirm = TRUE
+ /*if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ to_chat(target, "You give in to the will of your torturer. If they are successful, you will no longer be loyal to the station! ")
+*/
+/obj/structure/bloodsucker/vassalrack/proc/disloyalty_refuse(mob/living/target)
+ // FAILSAFE: Still on the rack?
+ if(!(locate(target) in buckled_mobs))
+ return
+ // Failsafe: You already said YES.
+ if(disloyalty_confirm)
+ return
+ to_chat(target, "You refuse to give in! You will not break! ")
+
+
+/obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target)
+ // Find Mind Implant & Destroy
+ if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
+ for(var/obj/item/implant/I in target.implants)
+ if(I.type == /obj/item/implant/mindshield)
+ I.removed(target,silent=TRUE)
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/structure/bloodsucker/candelabrum
+ name = "candelabrum"
+ desc = "It burns slowly, but doesn't radiate any heat."
+ icon = 'icons/obj/vamp_obj.dmi'
+ icon_state = "candelabrum"
+ light_color = "#66FFFF"//LIGHT_COLOR_BLUEGREEN // lighting.dm
+ light_power = 3
+ light_range = 0 // to 2
+ density = FALSE
+ anchored = FALSE
+ var/lit = FALSE
+///obj/structure/bloodsucker/candelabrum/is_hot() // candle.dm
+ //return FALSE
+
+/obj/structure/bloodsucker/candelabrum/Destroy()
+ STOP_PROCESSING(SSobj, src)
+
+/obj/structure/bloodsucker/candelabrum/update_icon()
+ icon_state = "candelabrum[lit ? "_lit" : ""]"
+
+/obj/structure/bloodsucker/candelabrum/examine(mob/user)
+ . = ..()
+ if((user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)) || isobserver(user))
+ . += {"This is a magical candle which drains at the sanity of mortals who are not under your command while it is active. "}
+ . += {"You can alt click on it from any range to turn it on remotely, or simply be next to it and click on it to turn it on and off normally. "}
+/* if(user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ . += {"This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n
+ You can turn it on and off by clicking on it while you are next to it "} */
+
+/obj/structure/bloodsucker/candelabrum/attack_hand(mob/user)
+ var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) //I wish there was a better way to do this
+ var/datum/antagonist/vassal/T = user.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ if(istype(V) || istype(T))
+ toggle()
+
+/obj/structure/bloodsucker/candelabrum/AltClick(mob/user)
+ var/datum/antagonist/bloodsucker/V = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // Bloodsuckers can turn their candles on from a distance. SPOOOOKY.
+ if(istype(V))
+ toggle()
+
+/obj/structure/bloodsucker/candelabrum/proc/toggle(mob/user)
+ lit = !lit
+ if(lit)
+ set_light(2, 3, "#66FFFF")
+ START_PROCESSING(SSobj, src)
+ else
+ set_light(0)
+ STOP_PROCESSING(SSobj, src)
+ update_icon()
+
+/obj/structure/bloodsucker/candelabrum/process()
+ if(lit)
+ for(var/mob/living/carbon/human/H in viewers(7, src))
+ var/datum/antagonist/vassal/T = H.mind.has_antag_datum(ANTAG_DATUM_VASSAL)
+ var/datum/antagonist/bloodsucker/V = H.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if(V || T) //We dont want vassals or vampires affected by this
+ return
+ H.hallucination = 20
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vampcandle", /datum/mood_event/vampcandle)
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// OTHER THINGS TO USE: HUMAN BLOOD. /obj/effect/decal/cleanable/blood
+
+/obj/item/restraints/legcuffs/beartrap/bloodsucker
diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
new file mode 100644
index 0000000000..f68191d6d7
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm
@@ -0,0 +1,88 @@
+
+
+// Created by claiming a Coffin.
+
+
+
+// THINGS TO SPAWN:
+//
+// /obj/effect/decal/cleanable/cobweb && /obj/effect/decal/cleanable/cobweb/cobweb2
+// /obj/effect/decal/cleanable/generic
+// /obj/effect/decal/cleanable/dirt/dust <-- Pretty cool, just stains the tile itself.
+// /obj/effect/decal/cleanable/blood/old
+
+/*
+/area/
+ // All coffins assigned to this area
+ var/list/obj/structure/closet/crate/laircoffins = new list()
+
+// Called by Coffin when an area is claimed as a vamp's lair
+/area/proc/ClaimAsLair(/obj/structure/closet/crate/inClaimant)
+ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
+
+ laircoffins += laircoffins
+ sleep()
+
+ // Cancel!
+ if (laircoffins.len == 0)
+ return
+ */
+
+/datum/antagonist/bloodsucker/proc/RunLair()
+ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
+ while(!AmFinalDeath() && coffin && lair)
+ // WAit 2 min and Repeat
+ sleep(120)
+ // Coffin Moved SOMEHOW?
+ if(lair != get_area(coffin))
+ if(coffin)
+ coffin.UnclaimCoffin()
+ //lair = get_area(coffin)
+ break // DONE
+ var/list/turf/area_turfs = get_area_turfs(lair)
+ // Create Dirt etc.
+ var/turf/T_Dirty = pick(area_turfs)
+ if(T_Dirty && !T_Dirty.density)
+ // Default: Dirt
+ // CHECK: Cobweb already there?
+ //if (!locate(var/obj/effect/decal/cleanable/cobweb) in T_Dirty) // REMOVED! Cleanables don't stack.
+ // STEP ONE: COBWEBS
+ // CHECK: Wall to North?
+ var/turf/check_N = get_step(T_Dirty, NORTH)
+ if(istype(check_N, /turf/closed/wall))
+ // CHECK: Wall to West?
+ var/turf/check_W = get_step(T_Dirty, WEST)
+ if(istype(check_W, /turf/closed/wall))
+ new /obj/effect/decal/cleanable/cobweb (T_Dirty)
+ // CHECK: Wall to East?
+ var/turf/check_E = get_step(T_Dirty, EAST)
+ if(istype(check_E, /turf/closed/wall))
+ new /obj/effect/decal/cleanable/cobweb/cobweb2 (T_Dirty)
+ // STEP TWO: DIRT
+ new /obj/effect/decal/cleanable/dirt (T_Dirty)
+ // Find Animals in Area
+ /* if(rand(0,2) == 0)
+ var/mobCount = 0
+ var/mobMax = CLAMP(area_turfs.len / 25, 1, 4)
+ for (var/turf/T in area_turfs)
+ if(!T) continue
+ var/mob/living/simple_animal/SA = locate() in T
+ if(SA)
+ mobCount ++
+ if (mobCount >= mobMax) // Already at max
+ break
+ Spawn One
+ if(mobCount < mobMax)
+ Seek Out Location
+ while(area_turfs.len > 0)
+ var/turf/T = pick(area_turfs) // We use while&pick instead of a for/loop so it's random, rather than from the top of the list.
+ if(T && !T.density)
+ var/mob/living/simple_animal/SA = /mob/living/simple_animal/mouse // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse,
+ new SA (T)
+ break
+ area_turfs -= T*/
+ // NOTE: area_turfs is now cleared out!
+ if(coffin)
+ coffin.UnclaimCoffin()
+ // Done (somehow)
+ lair = null
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
new file mode 100644
index 0000000000..49aada3611
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_brawn.dm
@@ -0,0 +1,174 @@
+
+
+/datum/action/bloodsucker/targeted/brawn
+ name = "Brawn"//"Cellular Emporium"
+ desc = "Snap restraints with ease, or deal terrible damage with your bare hands."
+ button_icon_state = "power_strength"
+ bloodcost = 10
+ cooldown = 130
+ target_range = 1
+ power_activates_immediately = TRUE
+ message_Trigger = ""//"Whom will you subvert to your will?"
+ must_be_capacitated = TRUE
+ can_be_immobilized = TRUE
+ bloodsucker_can_buy = TRUE
+ // Level Up
+ var/upgrade_canLocker = FALSE
+ var/upgrade_canDoor = FALSE
+
+/datum/action/bloodsucker/targeted/brawn/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ . = TRUE
+ // Break Out of Restraints! (And then cancel)
+ if(CheckBreakRestraints())
+ //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE!
+ . = FALSE //return FALSE
+ // Throw Off Attacker! (And then cancel)
+ if(CheckEscapePuller())
+ //PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE!
+ . = FALSE //return FALSE
+ /*if(CheckBreakLocker())
+ .= FALSE */
+ // Did we successfuly use power to BREAK CUFFS and/or ESCAPE PULLER and/or escape from a locker?
+ // Then PAY COST!
+ if(. == FALSE)
+ PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!DEACTIVATE!
+
+ // NOTE: We use . = FALSE so that we can break cuffs AND throw off our attacker in one use!
+ //return TRUE
+/datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/A)
+ return isliving(A) || istype(A, /obj/machinery/door)
+
+/datum/action/bloodsucker/targeted/brawn/CheckCanTarget(atom/A, display_error)
+ // DEFAULT CHECKS (Distance)
+ if(!..()) // Disable range notice for Brawn.
+ return FALSE
+ // Must outside Closet to target anyone!
+ if(!isturf(owner.loc))
+ return FALSE
+ // Check: Self
+ if(A == owner)
+ return FALSE
+ // Target Type: Living
+ if(isliving(A))
+ return TRUE
+ // Target Type: Door
+ else if(istype(A, /obj/machinery/door))
+ return TRUE
+ return ..() // yes, FALSE! You failed if you got here! BAD TARGET
+
+/datum/action/bloodsucker/targeted/brawn/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/mob/living/user = owner
+ // Target Type: Mob
+ if(isliving(target))
+ var/mob/living/carbon/user_C = user
+ var/hitStrength = user_C.dna.species.punchdamagehigh * 1.3 + 5
+ // Knockdown!
+ var/powerlevel = min(5, 1 + level_current)
+ if(rand(5 + powerlevel) >= 5)
+ target.visible_message("[user] lands a vicious punch, sending [target] away! ", \
+ "[user] has landed a horrifying punch on you, sending you flying!! ", null, COMBAT_MESSAGE_RANGE)
+ target.Knockdown(min(5, rand(10, 10 * powerlevel)) )
+ // Chance of KO
+ if(rand(6 + powerlevel) >= 6 && target.stat <= UNCONSCIOUS)
+ target.Unconscious(40)
+ // Attack!
+ playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1)
+ user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
+ var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected))
+ target.apply_damage(hitStrength, BRUTE, affecting)
+ // Knockback
+ var/send_dir = get_dir(owner, target)
+ var/turf/T = get_ranged_target_turf(target, send_dir, powerlevel)
+ owner.newtonian_move(send_dir) // Bounce back in 0 G
+ target.throw_at(T, powerlevel, TRUE, owner) //new /datum/forced_movement(target, get_ranged_target_turf(target, send_dir, (hitStrength / 4)), 1, FALSE)
+ // Target Type: Door
+ else if(istype(target, /obj/machinery/door))
+ var/obj/machinery/door/D = target
+ playsound(get_turf(usr), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1)
+ to_chat(user, "You prepare to tear open [D]. ")
+ if(do_mob(usr,target,25))
+ if (D.Adjacent(user))
+ to_chat(user, "You tear open the [D]. ")
+ user.Stun(10)
+ user.do_attack_animation(D, ATTACK_EFFECT_SMASH)
+ playsound(get_turf(D), 'sound/effects/bang.ogg', 30, 1, -1)
+ D.open(2) // open(2) is like a crowbar or jaws of life.
+ // Target Type: Closet
+
+/datum/action/bloodsucker/targeted/brawn/proc/CheckBreakRestraints()
+ if(!iscarbon(owner)) // || !owner.restrained()
+ return FALSE
+ // (NOTE: Just like biodegrade.dm, we only remove one thing per use //
+ // Destroy Cuffs
+ var/mob/living/carbon/user_C = owner
+ //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ")
+ if(user_C.handcuffed)
+ var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED)
+ if(istype(O))
+ //user_C.visible_message("[user_C] attempts to remove [O]! ", \
+ // "You snap [O] like it's nothing! ")
+ user_C.clear_cuffs(O,TRUE)
+ playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
+ return TRUE
+/* Doesnt work
+ // Destroy Straightjacket
+ if(ishuman(owner))
+ var/mob/living/carbon/human/user_H = owner
+ if(user_H.wear_suit && user_H.wear_suit.breakouttime)
+ var/obj/item/clothing/suit/straight_jacket/S = user_H.get_item_by_slot(ITEM_SLOT_ICLOTHING)
+ if(istype(S))
+ user_C.visible_message("[user_C] attempts to remove [S]! ", \
+ "You rip through [S] like it's nothing! ")
+ user_C.clear_cuffs(S,TRUE)
+ playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
+ return TRUE */
+ // Destroy Leg Cuffs
+ if(user_C.legcuffed)
+ var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED)
+ if(istype(O))
+ //user_C.visible_message("[user_C] attempts to remove [O]! ", \
+ // "You snap [O] like it's nothing! ")
+ user_C.clear_cuffs(O,TRUE)
+ playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
+ return TRUE
+ return FALSE
+
+/datum/action/bloodsucker/targeted/brawn/proc/CheckEscapePuller()
+ if(!owner.pulledby)// || owner.pulledby.grab_state <= GRAB_PASSIVE)
+ return FALSE
+ var/mob/M = owner.pulledby
+ var/pull_power = M.grab_state
+ playsound(get_turf(M), 'sound/effects/woodhit.ogg', 75, 1, -1)
+ // Knock Down (if Living)
+ if (isliving(M))
+ var/mob/living/L = M
+ L.Knockdown(pull_power * 10 + 20)
+ // Knock Back (before Knockdown, which probably cancels pull)
+ var/send_dir = get_dir(owner, M)
+ var/turf/T = get_ranged_target_turf(M, send_dir, pull_power)
+ owner.newtonian_move(send_dir) // Bounce back in 0 G
+ M.throw_at(T, pull_power, TRUE, owner, FALSE) // Throw distance based on grab state! Harder grabs punished more aggressively.
+ // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null)
+ log_combat(owner, M, "used Brawn power")
+ owner.visible_message("[owner] tears free of [M]'s grasp! ", \
+ "You shrug off [M]'s grasp! ")
+ owner.pulledby = null // It's already done, but JUST IN CASE.
+ return TRUE
+/* Doesnt work
+/datum/action/bloodsucker/targeted/brawn/proc/CheckBreakLocker()
+ if(!istype(owner.loc, /obj/structure/closet))
+ return FALSE
+ playsound(get_turf(owner), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1)
+ if(do_mob(owner ,target, 25))
+ var/obj/structure/closet/C = owner.loc
+ to_chat(owner, "You prepare to tear open the [C]. ")
+ owner.do_attack_animation(C, ATTACK_EFFECT_SMASH)
+ playsound(get_turf(C), 'sound/effects/bang.ogg', 30, 1, -1)
+ C.bust_open()
+ return TRUE
+*/
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
new file mode 100644
index 0000000000..cea942e26d
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_cloak.dm
@@ -0,0 +1,57 @@
+
+
+/datum/action/bloodsucker/cloak
+ name = "Cloak of Darkness"
+ desc = "Blend into the shadows and become invisible to the untrained eye."
+ button_icon_state = "power_cloak"
+ bloodcost = 5
+ cooldown = 50
+ bloodsucker_can_buy = TRUE
+ amToggle = TRUE
+ warn_constant_cost = TRUE
+
+ var/light_min = 0.5 // If lum is above this, no good.
+
+/datum/action/bloodsucker/cloak/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Must be Dark
+ var/turf/T = owner.loc
+ if(istype(T) && T.get_lumcount() > light_min)
+ to_chat(owner, "This area is not dark enough to blend in ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/cloak/ActivatePower()
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/mob/living/user = owner
+ var/was_running = (user.m_intent == MOVE_INTENT_RUN)
+ if(was_running)
+ user.toggle_move_intent()
+ ADD_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
+ while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN)
+ // Pay Blood Toll (if awake)
+ owner.alpha = max(0, owner.alpha - min(75, 20 + 15 * level_current))
+ bloodsuckerdatum.AddBloodVolume(-0.2)
+ sleep(5) // Check every few ticks that we haven't disabled this power
+ // Return to Running (if you were before)
+ if(was_running && user.m_intent != MOVE_INTENT_RUN)
+ user.toggle_move_intent()
+
+/datum/action/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target)
+ if (!..())
+ return FALSE
+ if(user.stat == !CONSCIOUS) // Must be CONSCIOUS
+ to_chat(owner, "Your cloak failed due to you falling unconcious! ")
+ return FALSE
+ var/turf/T = owner.loc // Must be DARK
+ if(istype(T) && T.get_lumcount() > light_min)
+ to_chat(owner, "Your cloak failed due to there being too much light! ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/cloak/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..()
+ REMOVE_TRAIT(user, TRAIT_NORUNNING, "cloak of darkness")
+ user.alpha = 255
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_feed.dm b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm
new file mode 100644
index 0000000000..7c4cf46e3c
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_feed.dm
@@ -0,0 +1,324 @@
+
+
+/datum/action/bloodsucker/feed
+ name = "Feed"
+ desc = "Draw the heartsblood of living victims in your grasp.None/Passive: Feed silently and unnoticed by your victim.Aggressive: Subdue your target quickly."
+ button_icon_state = "power_feed"
+
+ bloodcost = 0
+ cooldown = 30
+ amToggle = TRUE
+ bloodsucker_can_buy = TRUE
+ can_be_staked = TRUE
+ cooldown_static = TRUE
+
+ var/notice_range = 2 // Distance before silent feeding is noticed.
+ var/mob/living/feed_target // So we can validate more than just the guy we're grappling.
+ var/target_grappled = FALSE // If you started grappled, then ending it will end your Feed.
+
+/datum/action/bloodsucker/feed/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Wearing mask
+ var/mob/living/L = owner
+ if (L.is_mouth_covered())
+ if (display_error)
+ to_chat(owner, "You cannot feed with your mouth covered! Remove your mask. ")
+ return FALSE
+ // Find my Target!
+ if (!FindMyTarget(display_error)) // Sets feed_target within after Validating
+ return FALSE
+ // Not in correct state
+ // DONE!
+ return TRUE
+
+/datum/action/bloodsucker/feed/proc/ValidateTarget(mob/living/target, display_error) // Called twice: validating a subtle victim, or validating your grapple victim.
+ // Bloodsuckers + Animals MUST be grabbed aggressively!
+ if (!owner.pulling || target == owner.pulling && owner.grab_state < GRAB_AGGRESSIVE)
+ // NOTE: It's OKAY that we are checking if(!target) below, AFTER animals here. We want passive check vs animal to warn you first, THEN the standard warning.
+ // Animals:
+ if (isliving(target) && !iscarbon(target))
+ if (display_error)
+ to_chat(owner, "Lesser beings require a tighter grip. ")
+ return FALSE
+ // Bloodsuckers:
+ else if (iscarbon(target) && target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if (display_error)
+ to_chat(owner, "Other Bloodsuckers will not fall for your subtle approach. ")
+ return FALSE
+ // Must have Target
+ if (!target) // || !ismob(target)
+ if (display_error)
+ to_chat(owner, "You must be next to or grabbing a victim to feed from them. ")
+ return FALSE
+ // Not even living!
+ if (!isliving(target) || issilicon(target))
+ if (display_error)
+ to_chat(owner, "You may only feed from living beings. ")
+ return FALSE
+ if (target.blood_volume <= 0)
+ if (display_error)
+ to_chat(owner, "Your victim has no blood to take. ")
+ return FALSE
+ if (ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(NOBLOOD in H.dna.species.species_traits)// || owner.get_blood_id() != target.get_blood_id())
+ if (display_error)
+ to_chat(owner, "Your victim's blood is not suitable for you to take. ")
+ return FALSE
+ return TRUE
+
+// If I'm not grabbing someone, find me someone nearby.
+/datum/action/bloodsucker/feed/proc/FindMyTarget(display_error)
+ // Default
+ feed_target = null
+ target_grappled = FALSE
+ // If you are pulling a mob, that's your target. If you don't like it, then release them.
+ if (owner.pulling && ismob(owner.pulling))
+ // Check grapple target Valid
+ if (!ValidateTarget(owner.pulling, display_error)) // Grabbed targets display error.
+ return FALSE
+ target_grappled = TRUE
+ feed_target = owner.pulling
+ return TRUE
+ // Find Targets
+ var/list/mob/living/seen_targets = view(1, owner)
+ var/list/mob/living/seen_mobs = list()
+ for(var/mob/living/M in seen_targets)
+ if (isliving(M) && M != owner)
+ seen_mobs += M
+ // None Seen!
+ if (seen_mobs.len == 0)
+ if (display_error)
+ to_chat(owner, "You must be next to or grabbing a victim to feed from them. ")
+ return FALSE
+ // Check Valids...
+ var/list/targets_valid = list()
+ var/list/targets_dead = list()
+ for(var/mob/living/M in seen_mobs)
+ // Check adjecent Valid target
+ if (M != owner && ValidateTarget(M, display_error = FALSE)) // Do NOT display errors. We'll be doing this again in CheckCanUse(), which will rule out grabbed targets.
+ // Prioritize living, but remember dead as backup
+ if (M.stat < DEAD)
+ targets_valid += M
+ else
+ targets_dead += M
+ // No Living? Try dead.
+ if (targets_valid.len == 0 && targets_dead.len > 0)
+ targets_valid = targets_dead
+ // No Targets
+ if (targets_valid.len == 0)
+ // Did I see targets? Then display at least one error
+ if (seen_mobs.len > 1)
+ if (display_error)
+ to_chat(owner, "None of these are valid targets to feed from subtly. ")
+ else
+ ValidateTarget(seen_mobs[1], display_error)
+ return FALSE
+ // Too Many Targets
+ //else if (targets.len > 1)
+ // if (display_error)
+ // to_chat(owner, "You are adjecent to too many witnesses. Either grab your victim or move away. ")
+ // return FALSE
+ // One Target!
+ else
+ feed_target = pick(targets_valid)//targets[1]
+ return TRUE
+
+/datum/action/bloodsucker/feed/ActivatePower()
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up Activate(), so Deactivate() can happen after.
+ var/mob/living/target = feed_target // Stored during CheckCanUse(). Can be a grabbed OR adjecent character.
+ var/mob/living/user = owner
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // Am I SECRET or LOUD? It stays this way the whole time! I must END IT to try it the other way.
+ var/amSilent = (!target_grappled || owner.grab_state <= GRAB_PASSIVE) // && iscarbon(target) // Non-carbons (animals) not passive. They go straight into aggressive.
+ // Initial Wait
+ var/feed_time = (amSilent ? 45 : 25) - (2.5 * level_current)
+ feed_time = max(15, feed_time)
+ if (amSilent)
+ to_chat(user, "You lean quietly toward [target] and secretly draw out your fangs... ")
+ else
+ to_chat(user, "You pull [target] close to you and draw out your fangs... ")
+ if (!do_mob(user, target, feed_time,0,1,extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))//sleep(10)
+ to_chat(user, "Your feeding was interrupted. ")
+ //DeactivatePower(user,target)
+ return
+ // Put target to Sleep (Bloodsuckers are immune to their own bite's sleep effect)
+ if (!amSilent)
+ ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute
+ if(target.stat <= UNCONSCIOUS)
+ sleep(1)
+ // Wait, then Cancel if Invalid
+ if (!ContinueActive(user,target)) // Cancel. They're gone.
+ //DeactivatePower(user,target)
+ return
+ // Pull Target Close
+ if (!target.density) // Pull target to you if they don't take up space.
+ target.Move(user.loc)
+ // Broadcast Message
+ if (amSilent)
+ //if (!iscarbon(target))
+ // user.visible_message("[user] shifts [target] closer to [user.p_their()] mouth. ", \
+ // "You secretly slip your fangs into [target]'s flesh. ", \
+ // vision_distance = 2, ignored_mobs=target) // Only people who AREN'T the target will notice this action.
+ //else
+ var/deadmessage = target.stat == DEAD ? "" : " [target.p_they(TRUE)] looks dazed, and will not remember this. "
+ user.visible_message("[user] puts [target]'s wrist up to [user.p_their()] mouth. ", \
+ "You secretly slip your fangs into [target]'s wrist.[deadmessage] ", \
+ vision_distance = notice_range, ignored_mobs=target) // Only people who AREN'T the target will notice this action.
+ // Warn Feeder about Witnesses...
+ var/was_unnoticed = TRUE
+ for(var/mob/living/M in viewers(notice_range, owner))
+ if(M != owner && M != target && iscarbon(M) && M.mind && !M.has_unlimited_silicon_privilege && !M.eye_blind && !M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ was_unnoticed = FALSE
+ break
+ if (was_unnoticed)
+ to_chat(user, "You think no one saw you... ")
+ else
+ to_chat(user, "Someone may have noticed... ")
+
+ else // /atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mobs)
+ user.visible_message("[user] closes [user.p_their()] mouth around [target]'s neck! ", \
+ "You sink your fangs into [target]'s neck. ")
+ // My mouth is full!
+ ADD_TRAIT(user, TRAIT_MUTE, "bloodsucker_feed")
+
+ // Begin Feed Loop
+ var/warning_target_inhuman = FALSE
+ var/warning_target_dead = FALSE
+ var/warning_full = FALSE
+ var/warning_target_bloodvol = 99999
+ var/amount_taken = 0
+ var/blood_take_mult = amSilent ? 0.3 : 1 // Quantity to take per tick, based on Silent or not.
+ var/was_alive = target.stat < DEAD && ishuman(target)
+ // Activate Effects
+ //target.add_trait(TRAIT_MUTE, "bloodsucker_victim") // <----- Make mute a power you buy?
+
+ // FEEEEEEEEED!!! //
+ bloodsuckerdatum.poweron_feed = TRUE
+ while (bloodsuckerdatum && target && active)
+ //user.mobility_flags &= ~MOBILITY_MOVE // user.canmove = 0 // Prevents spilling blood accidentally.
+
+ // Abort? A bloody mistake.
+ if (!do_mob(user, target, 20, 0, 0, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
+ // May have disabled Feed during do_mob
+ if (!active || !ContinueActive(user, target))
+ break
+
+ if (amSilent)
+ to_chat(user, "Your feeding has been interrupted...but [target.p_they()] didn't seem to notice you.")
+ else
+ to_chat(user, "Your feeding has been interrupted! ")
+ user.visible_message("[user] is ripped from [target]'s throat. [target.p_their(TRUE)] blood sprays everywhere! ", \
+ "Your teeth are ripped from [target]'s throat. [target.p_their(TRUE)] blood sprays everywhere! ")
+
+ // Deal Damage to Target (should have been more careful!)
+ if (iscarbon(target))
+ var/mob/living/carbon/C = target
+ C.bleed(15)
+ playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1)
+ if (ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.bleed_rate += 5
+ target.add_splatter_floor(get_turf(target))
+ user.add_mob_blood(target) // Put target's blood on us. The donor goes in the ( )
+ target.add_mob_blood(target)
+ target.take_overall_damage(10,0)
+ target.emote("scream")
+
+ // Killed Target?
+ if (was_alive)
+ CheckKilledTarget(user,target)
+
+ return
+
+ ///////////////////////////////////////////////////////////
+ // Handle Feeding! User & Victim Effects (per tick)
+ bloodsuckerdatum.HandleFeeding(target, blood_take_mult)
+ amount_taken += amSilent ? 0.3 : 1
+ if (!amSilent)
+ ApplyVictimEffects(target) // Sleep, paralysis, immobile, unconscious, and mute
+ if (amount_taken > 5 && target.stat < DEAD && ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood) // GOOD // in bloodsucker_life.dm
+
+ ///////////////////////////////////////////////////////////
+ // Not Human?
+ if (!ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood_bad) // BAD // in bloodsucker_life.dm
+ if (!warning_target_inhuman)
+ to_chat(user, "You recoil at the taste of a lesser lifeform. ")
+ warning_target_inhuman = TRUE
+ // Dead Blood?
+ if (target.stat >= DEAD)
+ if (ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankblood", /datum/mood_event/drankblood_dead) // BAD // in bloodsucker_life.dm
+ if (!warning_target_dead)
+ to_chat(user, "Your victim is dead. [target.p_their(TRUE)] blood barely nourishes you. ")
+ warning_target_dead = TRUE
+ // Full?
+ if (!warning_full && user.blood_volume >= bloodsuckerdatum.maxBloodVolume)
+ to_chat(user, "You are full. Further blood will be wasted. ")
+ warning_full = TRUE
+ // Blood Remaining? (Carbons/Humans only)
+ if (iscarbon(target) && !target.AmBloodsucker(1))
+ if (target.blood_volume <= BLOOD_VOLUME_BAD && warning_target_bloodvol > BLOOD_VOLUME_BAD)
+ to_chat(user, "Your victim's blood volume is fatally low! ")
+ else if (target.blood_volume <= BLOOD_VOLUME_OKAY && warning_target_bloodvol > BLOOD_VOLUME_OKAY)
+ to_chat(user, "Your victim's blood volume is dangerously low. ")
+ else if (target.blood_volume <= BLOOD_VOLUME_SAFE && warning_target_bloodvol > BLOOD_VOLUME_SAFE)
+ to_chat(user, "Your victim's blood is at an unsafe level. ")
+ warning_target_bloodvol = target.blood_volume // If we had a warning to give, it's been given by now.
+ // Done?
+ if (target.blood_volume <= 0)
+ to_chat(user, "You have bled your victim dry. ")
+ break
+
+ // Blood Gulp Sound
+ owner.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head.
+
+ // DONE!
+ //DeactivatePower(user,target)
+ if (amSilent)
+ to_chat(user, "You slowly release [target]'s wrist." + (target.stat == 0 ? " [target.p_their(TRUE)] face lacks expression, like you've already been forgotten. " : ""))
+ else
+ user.visible_message("[user] unclenches their teeth from [target]'s neck. ", \
+ "You retract your fangs and release [target] from your bite. ")
+
+ // /proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null)
+ log_combat(owner, target, "fed on blood", addition="(and took [amount_taken] blood)")
+
+ // Killed Target?
+ if (was_alive)
+ CheckKilledTarget(user,target)
+
+
+/datum/action/bloodsucker/feed/proc/CheckKilledTarget(mob/living/user, mob/living/target)
+ // Bad Vampire. You shouldn't do that.
+ if (target && target.stat >= DEAD && ishuman(target))
+ SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "drankkilled", /datum/mood_event/drankkilled) // BAD // in bloodsucker_life.dm
+
+/datum/action/bloodsucker/feed/ContinueActive(mob/living/user, mob/living/target)
+ return ..() && target && (!target_grappled || user.pulling == target)// Active, and still Antag,
+ // NOTE: We only care about pulling if target started off that way. Mostly only important for Aggressive feed.
+
+/datum/action/bloodsucker/feed/proc/ApplyVictimEffects(mob/living/target)
+ // Bloodsuckers not affected by "the Kiss" of another vampire
+ if (!target.mind || !target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ target.Unconscious(50,0)
+ target.Knockdown(40 + 5 * level_current,1)
+ // NOTE: THis is based on level of power!
+ if (ishuman(target))
+ target.adjustStaminaLoss(5, forced = TRUE)// Base Stamina Damage
+
+/datum/action/bloodsucker/feed/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // No longer Feeding
+ if (bloodsuckerdatum)
+ bloodsuckerdatum.poweron_feed = FALSE
+ feed_target = null
+ // My mouth is no longer full
+ REMOVE_TRAIT(owner, TRAIT_MUTE, "bloodsucker_feed")
+ // Let me move immediately
+ user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm
new file mode 100644
index 0000000000..3305504c15
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_fortitude.dm
@@ -0,0 +1,54 @@
+
+
+
+
+/datum/action/bloodsucker/fortitude
+ name = "Fortitude"//"Cellular Emporium"
+ desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings. You cannot run while active."
+ button_icon_state = "power_fortitude"
+ bloodcost = 5
+ cooldown = 80
+ bloodsucker_can_buy = TRUE
+ amToggle = TRUE
+ warn_constant_cost = TRUE
+
+ var/this_resist // So we can raise and lower your brute resist based on what your level_current WAS.
+
+/datum/action/bloodsucker/fortitude/ActivatePower()
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ var/mob/living/user = owner
+ to_chat(user, "Your flesh, skin, and muscles become as steel. ")
+ // Traits & Effects
+ ADD_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude")
+ ADD_TRAIT(user, TRAIT_NODISMEMBER, "fortitude")
+ ADD_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
+ ADD_TRAIT(user, TRAIT_NORUNNING, "fortitude")
+ if (ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ this_resist = max(0.3, 0.7 - level_current * 0.1)
+ H.physiology.brute_mod *= this_resist//0.5
+ H.physiology.burn_mod *= this_resist//0.5
+ // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm)
+ var/was_running = (user.m_intent == MOVE_INTENT_RUN)
+ if(was_running)
+ user.toggle_move_intent()
+ while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN)
+ // Pay Blood Toll (if awake)
+ if (user.stat == CONSCIOUS)
+ bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on.
+ sleep(20) // Check every few ticks that we haven't disabled this power
+ // Return to Running (if you were before)
+ if(was_running && user.m_intent != MOVE_INTENT_RUN)
+ user.toggle_move_intent()
+
+/datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..()
+ // Restore Traits & Effects
+ REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
+ REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude")
+ if (ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ H.physiology.brute_mod /= this_resist//0.5
+ H.physiology.burn_mod /= this_resist//0.5
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
new file mode 100644
index 0000000000..0da9ab5ba3
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_gohome.dm
@@ -0,0 +1,115 @@
+
+
+/datum/action/bloodsucker/gohome
+ name = "Vanishing Act"
+ desc = "As dawn aproaches, disperse into mist and return directly to your Lair.WARNING: You will drop ALL of your possessions if observed by mortals."
+ button_icon_state = "power_gohome"
+ background_icon_state_on = "vamp_power_off_oneshot" // Even though this never goes off.
+ background_icon_state_off = "vamp_power_off_oneshot"
+
+ bloodcost = 25
+ cooldown = 99999 // It'll never come back.
+ amToggle = FALSE
+ amSingleUse = TRUE
+
+ bloodsucker_can_buy = FALSE // You only get this if you've claimed a lair, and only just before sunrise.
+ can_use_in_torpor = TRUE
+ must_be_capacitated = TRUE
+ can_be_immobilized = TRUE
+
+/datum/action/bloodsucker/gohome/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Have No Lair (NOTE: You only got this power if you had a lair, so this means it's destroyed)
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin)
+ if (display_error)
+ to_chat(owner, "Your coffin has been destroyed! ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/gohome/ActivatePower()
+ var/mob/living/carbon/user = owner
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ // IMPORTANT: Check for lair at every step! It might get destroyed.
+ to_chat(user, "You focus on separating your consciousness from your physical form... ")
+ // STEP ONE: Flicker Lights
+ for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ L.flicker(5)
+ playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 20, 1)
+ sleep(50)
+ for(var/obj/machinery/light/L in view(3, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ L.flicker(5)
+ playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1)
+ sleep(50)
+ for(var/obj/machinery/light/L in view(6, get_turf(owner))) // /obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
+ L.flicker(5)
+ playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', 60, 1)
+ // ( STEP TWO: Lights OFF? )
+ // CHECK: Still have Coffin?
+ if (!istype(bloodsuckerdatum) || !bloodsuckerdatum.coffin)
+ to_chat(user, "Your coffin has been destroyed! You no longer have a destination. ")
+ return FALSE
+ if (!owner)
+ return
+ // SEEN?: (effects ONLY if there are witnesses! Otherwise you just POOF)
+ // NOTE: Stolen directly from statue.dm, thanks guys!
+ var/am_seen = FALSE // Do Effects (seen by anyone)
+ var/drop_item = FALSE // Drop Stuff (seen by non-vamp)
+ if (isturf(owner.loc)) // Only check if I'm not in a Locker or something.
+ // A) Check for Darkness (we can just leave)
+ var/turf/T = get_turf(user)
+ if(T && T.lighting_object && T.get_lumcount()>= 0.1)
+ // B) Check for Viewers
+ for(var/mob/living/M in viewers(owner))
+ if(M != owner && isliving(M) && M.mind && !M.has_unlimited_silicon_privilege && !M.eye_blind) // M.client <--- add this in after testing!
+ am_seen = TRUE
+ if (!M.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ drop_item = TRUE
+ break
+ // LOSE CUFFS
+ if(user.handcuffed)
+ var/obj/O = user.handcuffed
+ user.dropItemToGround(O)
+ if(user.legcuffed)
+ var/obj/O = user.legcuffed
+ user.dropItemToGround(O)
+ // SEEN!
+ if (drop_item)
+ // DROP: Clothes, held items, and cuffs etc
+ // NOTE: Taken from unequip_everything() in inventory.dm. We need to
+ // *force* all items to drop, so we had to just gut the code out of it.
+ var/list/items = list()
+ items |= user.get_equipped_items()
+ for(var/I in items)
+ user.dropItemToGround(I,TRUE)
+ for(var/obj/item/I in owner.held_items) // drop_all_held_items()
+ user.dropItemToGround(I, TRUE)
+ if (am_seen)
+ // POOF EFFECTS
+ playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1)
+ var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, get_turf(owner))
+ puff.start()
+ // TELEPORT: Move to Coffin & Close it!
+ do_teleport(owner, bloodsuckerdatum.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm?
+ // SLEEP
+ user.resting = TRUE
+ //user.Unconscious(30,0)
+ user.Stun(30,1)
+ // CLOSE LID: If fail, force me in.
+ if (!bloodsuckerdatum.coffin.close(owner))
+ bloodsuckerdatum.coffin.insert(owner) // Puts me inside.
+ // The following was taken from close() proc in closets.dm
+ // (but we had to do it this way because there is no way to force entry)
+ playsound(bloodsuckerdatum.coffin.loc, bloodsuckerdatum.coffin.close_sound, 15, 1, -3)
+ bloodsuckerdatum.coffin.opened = FALSE
+ bloodsuckerdatum.coffin.density = TRUE
+ bloodsuckerdatum.coffin.update_icon()
+ // Lock Coffin
+ bloodsuckerdatum.coffin.LockMe(owner)
+ // ( STEP FIVE: Create animal at prev location? )
+ //var/mob/living/simple_animal/SA = /mob/living/simple_animal/hostile/retaliate/bat // pick(/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse,/mob/living/simple_animal/mouse, /mob/living/simple_animal/hostile/retaliate/bat) //prob(300) /mob/living/simple_animal/mouse,
+ //new SA (owner.loc)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_haste.dm b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
new file mode 100644
index 0000000000..ee1dd3007c
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_haste.dm
@@ -0,0 +1,85 @@
+
+// Level 1: Speed to location
+// Level 2: Dodge Bullets
+// Level 3: Stun People Passed
+
+/datum/action/bloodsucker/targeted/haste
+ name = "Immortal Haste"
+ desc = "Dash somewhere with supernatural speed. Those nearby may be knocked away, stunned, or left empty-handed."
+ button_icon_state = "power_speed"
+ bloodcost = 6
+ cooldown = 30
+ target_range = 15
+ power_activates_immediately = TRUE
+ message_Trigger = ""//"Whom will you subvert to your will?"
+ bloodsucker_can_buy = TRUE
+ must_be_capacitated = TRUE
+
+/datum/action/bloodsucker/targeted/haste/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ // Being Grabbed
+ if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE)
+ if(display_error)
+ to_chat(owner, "You're being grabbed! ")
+ return FALSE
+ if(!owner.has_gravity(owner.loc)) //We dont want people to be able to use this to fly around in space
+ if(display_error)
+ to_chat(owner, "You cant dash while floating! ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/haste/CheckValidTarget(atom/A)
+ return isturf(A) || A.loc != owner.loc // Anything will do, if it's not me or my square
+
+/datum/action/bloodsucker/targeted/haste/CheckCanTarget(atom/A, display_error)
+ // DEFAULT CHECKS (Distance)
+ if (!..())
+ return FALSE
+ // Check: Range
+ //if (!(A in view(target_range, get_turf(owner))))
+ // return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/haste/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/user = owner
+ var/turf/T = isturf(A) ? A : get_turf(A)
+ // Pulled? Not anymore.
+ owner.pulledby = null
+ // Step One: Heatseek toward Target's Turf
+ walk_to(owner, T, 0, 0.01, 20) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path.
+ playsound(get_turf(owner), 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ var/safety = 20
+ while(get_turf(owner) != T && safety > 0 && !(isliving(target) && target.Adjacent(owner)))
+ user.canmove = FALSE //Dont move while doing the thing, or itll break
+ safety --
+ // Did I get knocked down?
+ if(owner && owner.incapacitated(ignore_restraints=TRUE, ignore_grab=TRUE))// owner.incapacitated())
+ // We're gonna cancel. But am I on the ground? Spin me!
+ if(user.resting)
+ var/send_dir = get_dir(owner, T)
+ new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
+ owner.spin(10)
+ break
+ // Spin/Stun people we pass.
+ //var/mob/living/newtarget = locate(/mob/living) in oview(1, owner)
+ var/list/mob/living/foundtargets = list()
+ for(var/mob/living/newtarget in oview(1, owner))
+ if (newtarget && newtarget != target && !(newtarget in foundtargets))//!newtarget.IsKnockdown())
+ if (rand(0, 5) < level_current)
+ playsound(get_turf(newtarget), "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1)
+ newtarget.Knockdown(10 + level_current * 5)
+ if(newtarget.IsStun())
+ newtarget.spin(10,1)
+ if (rand(0,4))
+ newtarget.drop_all_held_items()
+ foundtargets += newtarget
+ sleep(1)
+ if(user)
+ user.update_canmove() //Let the poor guy move again
+
+/datum/action/bloodsucker/targeted/haste/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+ user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
new file mode 100644
index 0000000000..2c1b8d6321
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_lunge.dm
@@ -0,0 +1,83 @@
+// Level 1: Grapple level 2
+// Level 2: Grapple 3 from Behind
+// Level 3: Grapple 3 from Shadows
+/datum/action/bloodsucker/targeted/lunge
+ name = "Predatory Lunge"
+ desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down."
+ button_icon_state = "power_lunge"
+ bloodcost = 10
+ cooldown = 100
+ target_range = 3
+ power_activates_immediately = TRUE
+ message_Trigger = ""//"Whom will you subvert to your will?"
+ must_be_capacitated = TRUE
+ bloodsucker_can_buy = TRUE
+
+/datum/action/bloodsucker/targeted/lunge/CheckCanUse(display_error)
+ if(!..(display_error))// DEFAULT CHECKS
+ return FALSE
+ // Being Grabbed
+ if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE)
+ if(display_error)
+ to_chat(owner, "You're being grabbed! ")
+ return FALSE
+ if(!owner.has_gravity(owner.loc))//TODO figure out how to check if theyre able to move while in nograv
+ if(display_error)
+ to_chat(owner, "You cant lunge while floating! ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A)
+ return isliving(A)
+
+/datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error)
+ // Check: Self
+ if(target == owner)
+ return FALSE
+ // Check: Range
+ //if (!(target in view(target_range, get_turf(owner))))
+ // if (display_error)
+ // to_chat(owner, "Your victim is too far away. ")
+ // return FALSE
+ // DEFAULT CHECKS (Distance)
+ if(!..())
+ return FALSE
+ // Check: Turf
+ var/mob/living/L = A
+ if(!isturf(L.loc))
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/turf/T = get_turf(target)
+ // Clear Vars
+ owner.pulling = null
+ // Will we Knock them Down?
+ var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet)
+ // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet
+ // Step One: Heatseek toward Target's Turf
+
+ walk_towards(owner, T, 0.1, 10) // NOTE: this runs in the background! to cancel it, you need to use walk(owner.current,0), or give them a new path.
+ addtimer(CALLBACK(owner, .proc/_walk, 0), 2 SECONDS)
+ if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && owner.resting)
+ var/send_dir = get_dir(owner, T)
+ new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE)
+ owner.spin(10)
+ // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination)
+ sleep(1)
+ if(target.Adjacent(owner))
+ // LEVEL 2: If behind target, mute or unconscious!
+ if(do_knockdown) // && level_current >= 1)
+ target.Knockdown(15 + 10 * level_current,1)
+ target.adjustStaminaLoss(40 + 10 * level_current)
+ // Cancel Walk (we were close enough to contact them)
+ walk(owner, 0)
+ target.Stun(10,1) //Without this the victim can just walk away
+ target.grabbedby(owner) // Taken from mutations.dm under changelings
+ target.grippedby(owner, instant = TRUE) //instant aggro grab
+
+/datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+ user.update_canmove()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
new file mode 100644
index 0000000000..6ee17b3014
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_masquerade.dm
@@ -0,0 +1,97 @@
+
+
+
+// WITHOUT THIS POWER:
+//
+// - Mid-Blood: SHOW AS PALE
+// - Low-Blood: SHOW AS DEAD
+// - No Heartbeat
+// - Examine shows actual blood
+// - Thermal homeostasis (ColdBlooded)
+
+
+
+// WITH THIS POWER:
+// - Normal body temp -- remove Cold Blooded (return on deactivate)
+// -
+
+
+/datum/action/bloodsucker/masquerade
+ name = "Masquerade"
+ desc = "Feign the vital signs of a mortal, and escape both casual and medical notice as the monster you truly are."
+ button_icon_state = "power_human"
+ bloodcost = 10
+ cooldown = 50
+ amToggle = TRUE
+ bloodsucker_can_buy = TRUE
+ warn_constant_cost = TRUE
+ can_use_in_torpor = TRUE // Masquerade is maybe the only one that can do this. It stops your healing.
+ cooldown_static = TRUE
+
+// NOTE: Firing off vulgar powers disables your Masquerade!
+
+/*/datum/action/bloodsucker/masquerade/CheckCanUse(display_error)
+ if(!..(display_error))// DEFAULT CHECKS
+ return FALSE
+ // DONE!
+ return TRUE
+*/
+
+
+/datum/action/bloodsucker/masquerade/ActivatePower()
+
+ var/mob/living/user = owner
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+
+ to_chat(user, "Your heart beats falsely within your lifeless chest. You may yet pass for a mortal. ")
+ to_chat(user, "Your vampiric healing is halted while imitating life. ")
+
+
+ // Remove ColdBlooded & Hard/SoftCrit
+ REMOVE_TRAIT(user, TRAIT_COLDBLOODED, "bloodsucker")
+ REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker")
+ REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker")
+ var/obj/item/organ/heart/vampheart/H = user.getorganslot(ORGAN_SLOT_HEART)
+
+ // WE ARE ALIVE! //
+ bloodsuckerdatum.poweron_masquerade = TRUE
+ while(bloodsuckerdatum && ContinueActive(user))
+
+ // HEART
+ if (istype(H))
+ H.FakeStart()
+
+ // PASSIVE (done from LIFE)
+ // Don't Show Pale/Dead on low blood
+ // Don't vomit food
+ // Don't Heal
+
+ // Pay Blood Toll (if awake)
+ if (user.stat == CONSCIOUS)
+ bloodsuckerdatum.AddBloodVolume(-0.2)
+
+ sleep(20) // Check every few ticks that we haven't disabled this power
+
+
+/datum/action/bloodsucker/masquerade/ContinueActive(mob/living/user)
+ // Disable if unable to use power anymore.
+ //if (user.stat == DEAD || user.blood_volume <= 0) // not conscious or soft critor uncon, just dead
+ // return FALSE
+ return ..() // Active, and still Antag
+
+
+/datum/action/bloodsucker/masquerade/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..() // activate = FALSE
+
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ bloodsuckerdatum.poweron_masquerade = FALSE
+
+ ADD_TRAIT(user, TRAIT_COLDBLOODED, "bloodsucker")
+ ADD_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker")
+ ADD_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker")
+
+ // HEART
+ var/obj/item/organ/heart/H = user.getorganslot(ORGAN_SLOT_HEART)
+ H.Stop()
+
+ to_chat(user, "Your heart beats one final time, while your skin dries out and your icy pallor returns. ")
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
new file mode 100644
index 0000000000..94bc0e11d0
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_mesmerize.dm
@@ -0,0 +1,114 @@
+
+// * MEZMERIZE
+// LOVE: Target falls in love with you. Being harmed directly causes them harm if they see it?
+// STAY: Target will do everything they can to stand in the same place.
+// FOLLOW: Target follows you, spouting random phrases from their history (or maybe Poly's or NPC's vocab?)
+// ATTACK: Target finds a nearby non-Bloodsucker victim to attack.
+
+/datum/action/bloodsucker/targeted/mesmerize
+ name = "Mesmerize"
+ desc = "Dominate the mind of a mortal who can see your eyes."
+ button_icon_state = "power_mez"
+ bloodcost = 30
+ cooldown = 200
+ target_range = 1
+ power_activates_immediately = FALSE
+ message_Trigger = "Whom will you subvert to your will?"
+ must_be_capacitated = TRUE
+ bloodsucker_can_buy = TRUE
+
+/datum/action/bloodsucker/targeted/mesmerize/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if (!owner.getorganslot(ORGAN_SLOT_EYES))
+ if (display_error)
+ to_chat(owner, "You have no eyes with which to mesmerize. ")
+ return FALSE
+ // Check: Eyes covered?
+ var/mob/living/L = owner
+ if (istype(L) && L.is_eyes_covered() || !isturf(owner.loc))
+ if (display_error)
+ to_chat(owner, "Your eyes are concealed from sight. ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/mesmerize/CheckValidTarget(atom/A)
+ return iscarbon(A)
+
+/datum/action/bloodsucker/targeted/mesmerize/CheckCanTarget(atom/A,display_error)
+ // Check: Self
+ if (A == owner)
+ return FALSE
+ var/mob/living/carbon/target = A // We already know it's carbon due to CheckValidTarget()
+ // Bloodsucker
+ if (target.mind && target.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER))
+ if (display_error)
+ to_chat(owner, "Bloodsuckers are immune to [src]. ")
+ return FALSE
+ // Dead/Unconscious
+ if (target.stat > CONSCIOUS)
+ if (display_error)
+ to_chat(owner, "Your victim is not [(target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH))?"alive":"conscious"]. ")
+ return FALSE
+ // Check: Target has eyes?
+ if (!target.getorganslot(ORGAN_SLOT_EYES))
+ if (display_error)
+ to_chat(owner, "They have no eyes! ")
+ return FALSE
+ // Check: Target blind?
+ if (target.eye_blind > 0)
+ if (display_error)
+ to_chat(owner, "Your victim's eyes are glazed over. They cannot perceive you. ")
+ return FALSE
+ // Check: Target See Me? (behind wall)
+ if (!(owner in view(target_range, get_turf(target))))
+ // Sub-Check: GET CLOSER
+ //if (!(owner in range(target_range, get_turf(target)))
+ // if (display_error)
+ // to_chat(owner, "You're too far from your victim. ")
+ if (display_error)
+ to_chat(owner, "You're too far outside your victim's view. ")
+ return FALSE
+ // Check: Facing target?
+ if (!is_A_facing_B(owner,target)) // in unsorted.dm
+ if (display_error)
+ to_chat(owner, "You must be facing your victim. ")
+ return FALSE
+ // Check: Target facing me?
+ if (!target.resting && !is_A_facing_B(target,owner))
+ if (display_error)
+ to_chat(owner, "Your victim must be facing you to see into your eyes. ")
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+ var/mob/living/carbon/target = A
+ var/mob/living/user = owner
+
+ if(istype(target))
+ target.Stun(40) //Utterly useless without this, its okay since there are so many checks to go through
+ target.silent = 45 //Shhhh little lamb
+ target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 45) //So you cant rotate with combat mode, plus fancy status alert
+
+ if(do_mob(user, target, 40, 0, TRUE, extra_checks=CALLBACK(src, .proc/ContinueActive, user, target)))
+ PowerActivatedSuccessfully() // PAY COST! BEGIN COOLDOWN!
+ var/power_time = 90 + level_current * 12
+ target.silent = power_time + 20
+ target.apply_status_effect(STATUS_EFFECT_MESMERIZE, 100 + level_current * 15)
+ to_chat(user, "[target] is fixed in place by your hypnotic gaze. ")
+ target.Stun(power_time)
+ //target.silent += power_time / 10 // Silent isn't based on ticks.
+ target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // target.changeNext_move(power_time) // check click.dm
+ target.notransform = TRUE // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze.
+ spawn(power_time)
+ if(istype(target))
+ target.notransform = FALSE
+ // They Woke Up! (Notice if within view)
+ if(istype(user) && target.stat == CONSCIOUS && (target in view(10, get_turf(user))) )
+ to_chat(user, "[target] has snapped out of their trance. ")
+
+
+/datum/action/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target)
+ return ..() && CheckCanUse() && CheckCanTarget(target)
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm
new file mode 100644
index 0000000000..c650a6af15
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_trespass.dm
@@ -0,0 +1,124 @@
+
+
+/datum/action/bloodsucker/targeted/trespass
+ name = "Trespass"
+ desc = "Become mist and advance two tiles in one direction, ignoring all obstacles except for walls. Useful for skipping past doors and barricades."
+ button_icon_state = "power_tres"
+
+ bloodcost = 10
+ cooldown = 60
+ amToggle = FALSE
+ //target_range = 2
+
+ bloodsucker_can_buy = TRUE
+ must_be_capacitated = FALSE
+ can_be_immobilized = TRUE
+
+ var/turf/target_turf // We need to decide where we're going based on where we clicked. It's not actually the tile we clicked.
+
+/datum/action/bloodsucker/targeted/trespass/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if(owner.notransform || !get_turf(owner))
+ return FALSE
+
+ return TRUE
+
+
+/datum/action/bloodsucker/targeted/trespass/CheckValidTarget(atom/A)
+ // Can't target my tile
+ if (A == get_turf(owner) || get_turf(A) == get_turf(owner))
+ return FALSE
+
+ return TRUE // All we care about is destination. Anything you click is fine.
+
+
+/datum/action/bloodsucker/targeted/trespass/CheckCanTarget(atom/A, display_error)
+ // NOTE: Do NOT use ..()! We don't want to check distance or anything.
+
+ // Get clicked tile
+ var/final_turf = isturf(A) ? A : get_turf(A)
+
+ // Are either tiles WALLS?
+ var/turf/from_turf = get_turf(owner)
+ var/this_dir // = get_dir(from_turf, target_turf)
+ for (var/i=1 to 2)
+ // Keep Prev Direction if we've reached final turf
+ if (from_turf != final_turf)
+ this_dir = get_dir(from_turf, final_turf) // Recalculate dir so we don't overshoot on a diagonal.
+ from_turf = get_step(from_turf, this_dir)
+ // ERROR! Wall!
+ if (iswallturf(from_turf))
+ if (display_error)
+ var/wallwarning = (i == 1) ? "in the way" : "at your destination"
+ to_chat(owner, "There is a solid wall [wallwarning]. ")
+ return FALSE
+ // Done
+ target_turf = from_turf
+
+ return TRUE
+
+
+/datum/action/bloodsucker/targeted/trespass/FireTargetedPower(atom/A)
+ // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done.
+
+ // Find target turf, at or below Atom
+ var/mob/living/carbon/user = owner
+ var/turf/my_turf = get_turf(owner)
+
+ user.visible_message("[user]'s form dissipates into a cloud of mist! ", \
+ "You disspiate into formless mist. ")
+
+
+ // Effect Origin
+ playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1)
+ var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, my_turf)
+ puff.start()
+
+ var/mist_delay = max(5, 20 - level_current * 2.5) // Level up and do this faster.
+
+ // Freeze Me
+ user.next_move = world.time + mist_delay
+ user.Stun(mist_delay, ignore_canstun = TRUE)
+ user.notransform = TRUE
+ user.density = 0
+ var/invis_was = user.invisibility
+ user.invisibility = INVISIBILITY_MAXIMUM
+
+ // LOSE CUFFS
+ if(user.handcuffed)
+ var/obj/O = user.handcuffed
+ user.dropItemToGround(O)
+ if(user.legcuffed)
+ var/obj/O = user.legcuffed
+ user.dropItemToGround(O)
+
+ // Wait...
+ sleep(mist_delay / 2)
+
+ // Move & Freeze
+ if (isturf(target_turf))
+ do_teleport(owner, target_turf, no_effects=TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm?
+ user.next_move = world.time + mist_delay / 2
+ user.Stun(mist_delay / 2, ignore_canstun = TRUE)
+
+ // Wait...
+ sleep(mist_delay / 2)
+
+ // Un-Hide & Freeze
+ user.dir = get_dir(my_turf, target_turf)
+ user.next_move = world.time + mist_delay / 2
+ user.Stun(mist_delay / 2, ignore_canstun = TRUE)
+ user.notransform = FALSE
+ user.density = 1
+ user.invisibility = invis_was
+
+ // Effect Destination
+ playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1)
+ puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, target_turf)
+ puff.start()
diff --git a/code/modules/antagonists/bloodsucker/powers/bs_veil.dm b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
new file mode 100644
index 0000000000..0c83cc2d44
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/bs_veil.dm
@@ -0,0 +1,163 @@
+
+/datum/action/bloodsucker/veil
+ name = "Veil of Many Faces"
+ desc = "Disguise yourself in the illusion of another identity."
+ button_icon_state = "power_veil"
+ bloodcost = 15
+ cooldown = 100
+ amToggle = TRUE
+ bloodsucker_can_buy = TRUE
+ warn_constant_cost = TRUE
+
+ // Outfit Vars
+ var/list/original_items = list()
+
+ // Identity Vars
+ var/prev_gender
+ var/prev_skin_tone
+ var/prev_hair_style
+ var/prev_facial_hair_style
+ var/prev_hair_color
+ var/prev_facial_hair_color
+ var/prev_underwear
+ var/prev_undie_color
+ var/prev_undershirt
+ var/prev_shirt_color
+ var/prev_socks
+ var/prev_socks_color
+ var/prev_disfigured
+ var/list/prev_features // For lizards and such
+
+
+/datum/action/bloodsucker/veil/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+
+ return TRUE
+
+
+/datum/action/bloodsucker/veil/ActivatePower()
+
+ cast_effect() // POOF
+
+ //if (blahblahblah)
+ // Disguise_Outfit()
+
+ Disguise_FaceName()
+
+
+/datum/action/bloodsucker/veil/proc/Disguise_Outfit()
+
+ // Step One: Back up original items
+
+
+
+
+/datum/action/bloodsucker/veil/proc/Disguise_FaceName()
+
+ // Change Name/Voice
+ var/mob/living/carbon/human/H = owner
+ H.name_override = H.dna.species.random_name(H.gender)
+ H.name = H.name_override
+ H.SetSpecialVoice(H.name_override)
+ to_chat(owner, "You mystify the air around your person. Your identity is now altered. ")
+
+ // Store Prev Appearance
+ prev_gender = H.gender
+ prev_skin_tone = H.skin_tone
+ prev_hair_style = H.hair_style
+ prev_facial_hair_style = H.facial_hair_style
+ prev_hair_color = H.hair_color
+ prev_facial_hair_color = H.facial_hair_color
+ prev_underwear = H.underwear
+ prev_undie_color = H.undie_color
+ prev_undershirt = H.undershirt
+ prev_shirt_color = H.shirt_color
+ prev_socks = H.socks
+ prev_socks_color = H.socks_color
+ //prev_eye_color
+ prev_disfigured = HAS_TRAIT(H, TRAIT_DISFIGURED) // I was disfigured! //prev_disabilities = H.disabilities
+ prev_features = H.dna.features
+
+ // Change Appearance, not randomizing clothes colour, itll just be janky
+ H.gender = pick(MALE, FEMALE)
+ H.skin_tone = random_skin_tone()
+ H.hair_style = random_hair_style(H.gender)
+ H.facial_hair_style = pick(random_facial_hair_style(H.gender),"Shaved")
+ H.hair_color = random_short_color()
+ H.facial_hair_color = H.hair_color
+ H.underwear = random_underwear(H.gender)
+ H.undershirt = random_undershirt(H.gender)
+ H.socks = random_socks(H.gender)
+ //H.eye_color = random_eye_color()
+ REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) //
+ H.dna.features = random_features()
+
+ // Apply Appearance
+ H.update_body() // Outfit and underware, also body.
+ //H.update_mutant_bodyparts() // Lizard tails etc
+ H.update_hair()
+ H.update_body_parts()
+
+ // Wait here til we deactivate power or go unconscious
+ var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
+ while (ContinueActive(owner) && istype(bloodsuckerdatum))//active && owner && owner.stat == CONSCIOUS)
+ bloodsuckerdatum.AddBloodVolume(-0.2)
+ sleep(10)
+
+ // Wait for a moment if you fell unconscious...
+ if (owner && owner.stat > CONSCIOUS)
+ sleep(50)
+
+
+/datum/action/bloodsucker/veil/DeactivatePower(mob/living/user = owner, mob/living/target)
+ ..()
+ if (ishuman(user))
+ var/mob/living/carbon/human/H = user
+
+ // Revert Identity
+ H.UnsetSpecialVoice()
+ H.name_override = null
+ H.name = H.real_name
+
+ // Revert Appearance
+ H.gender = prev_gender
+ H.skin_tone = prev_skin_tone
+ H.hair_style = prev_hair_style
+ H.facial_hair_style = prev_facial_hair_style
+ H.hair_color = prev_hair_color
+ H.facial_hair_color = prev_facial_hair_color
+ H.underwear = prev_underwear
+ H.undie_color = prev_undie_color
+ H.undershirt = prev_undershirt
+ H.shirt_color = prev_shirt_color
+ H.socks = prev_socks
+ H.socks_color = prev_socks_color
+
+ //H.disabilities = prev_disabilities // Restore HUSK, CLUMSY, etc.
+ if (prev_disfigured)
+ ADD_TRAIT(H, TRAIT_DISFIGURED, "husk") // NOTE: We are ASSUMING husk. // H.status_flags |= DISFIGURED // Restore "Unknown" disfigurement
+ H.dna.features = prev_features
+ // Apply Appearance
+ H.update_body() // Outfit and underware, also body.
+ H.update_hair()
+ H.update_body_parts() // Body itself, maybe skin color?
+ cast_effect() // POOF
+
+ // CAST EFFECT // // General effect (poof, splat, etc) when you cast. Doesn't happen automatically!
+/datum/action/bloodsucker/veil/proc/cast_effect()
+ // Effect
+ playsound(get_turf(owner), 'sound/magic/smoke.ogg', 20, 1)
+ var/datum/effect_system/steam_spread/puff = new /datum/effect_system/steam_spread/()
+ puff.effect_type = /obj/effect/particle_effect/smoke/vampsmoke
+ puff.set_up(3, 0, get_turf(owner))
+ puff.attach(owner) // OPTIONAL
+ puff.start()
+ owner.spin(8, 1) // Spin around like a loon.
+
+/obj/effect/particle_effect/smoke/vampsmoke
+ opaque = FALSE
+ lifetime = 0
+/obj/effect/particle_effect/smoke/vampsmoke/fade_out(frames = 6)
+ ..(frames)
diff --git a/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
new file mode 100644
index 0000000000..6b8795ea02
--- /dev/null
+++ b/code/modules/antagonists/bloodsucker/powers/v_recuperate.dm
@@ -0,0 +1,38 @@
+/datum/action/bloodsucker/vassal/recuperate
+ name = "Sanguine Recuperation"
+ desc = "Slowly heal brute damage while active. This process is exhausting, and requires some of your tainted blood."
+ button_icon_state = "power_recup"
+ amToggle = TRUE
+ bloodcost = 5
+ cooldown = 100
+
+/datum/action/bloodsucker/vassal/recuperate/CheckCanUse(display_error)
+ . = ..()
+ if(!.)
+ return
+ if (owner.stat >= DEAD)
+ return FALSE
+ return TRUE
+
+/datum/action/bloodsucker/vassal/recuperate/ActivatePower()
+ to_chat(owner, "Your muscles clench and your skin crawls as your master's immortal blood knits your wounds and gives you stamina. ")
+ var/mob/living/carbon/C = owner
+ var/mob/living/carbon/human/H
+ if(ishuman(owner))
+ H = owner
+ while(ContinueActive(owner))
+ C.adjustBruteLoss(-1.5)
+ C.adjustFireLoss(-0.5)
+ C.adjustToxLoss(-2, forced = TRUE)
+ C.blood_volume -= 0.2
+ C.adjustStaminaLoss(-15)
+ // Stop Bleeding
+ if(istype(H) && H.bleed_rate > 0 && rand(20) == 0)
+ H.bleed_rate --
+ C.Jitter(5)
+ sleep(10)
+ // DONE!
+ //DeactivatePower(owner)
+
+/datum/action/bloodsucker/vassal/recuperate/ContinueActive(mob/living/user, mob/living/target)
+ return ..() && user.stat <= DEAD && user.blood_volume > 500
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index 0125dc7cf5..a27f911163 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -77,13 +77,16 @@
for(var/mob/living/M in viewers(5, src))
if(!is_servant_of_ratvar(M) && M != L)
M.flash_act()
- if(iscultist(L))
+ if(iscultist(L)) //No longer stuns cultists, instead sets them on fire and burns them
to_chat(L, "\"Watch your step, wretch.\" ")
- L.adjustBruteLoss(10)
- L.Knockdown(80, FALSE)
+ L.adjustFireLoss(10)
+ L.Knockdown(20, FALSE)
+ L.adjust_fire_stacks(5) //Burn!
+ L.IgniteMob()
+ else
+ L.Stun(40)
L.visible_message("[src] appears around [L] in a burst of light! ", \
- "[target_flashed ? "An unseen force":"The glowing sigil around you"] holds you in place! ")
- L.Stun(40)
+ "[target_flashed ? "An unseen force":"The glowing sigil around you"] [iscultist(L) ? "painfully bursts into flames!" : "holds you in place!"] ")
L.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
new /obj/effect/temp_visual/ratvar/sigil/transgression(get_turf(src))
qdel(src)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
index bd986bac25..05f11294de 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
@@ -345,3 +345,8 @@
if(!power_amount)
power_amount = -(CLOCKCULT_POWER_UNIT*0.02)
return ..()
+
+
+// Winter coat
+/obj/item/clothing/suit/hooded/wintercoat/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) //four sheets of metal
+ return list("operation_time" = 30, "new_obj_type" = /obj/item/clothing/suit/hooded/wintercoat/ratvar, "power_cost" = POWER_METAL * 4, "spawn_dir" = SOUTH)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index 23caa788d4..1f616b7dbc 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -193,15 +193,26 @@
L.visible_message("[L]'s eyes flare with dim light! ")
playsound(L, 'sound/weapons/sear.ogg', 50, TRUE)
else
- L.visible_message("[L]'s eyes blaze with brilliant light! ", \
- "Your vision suddenly screams with white-hot light! ")
- L.Knockdown(15, TRUE, FALSE, 15)
- L.apply_status_effect(STATUS_EFFECT_KINDLE)
- L.flash_act(1, 1)
- if(issilicon(target))
- var/mob/living/silicon/S = L
- S.emp_act(EMP_HEAVY)
- if(iscultist(L))
+ if(!iscultist(L))
+ L.visible_message("[L]'s eyes blaze with brilliant light! ", \
+ "Your vision suddenly screams with white-hot light! ")
+ L.Knockdown(15, TRUE, FALSE, 15)
+ L.apply_status_effect(STATUS_EFFECT_KINDLE)
+ L.flash_act(1, 1)
+ if(issilicon(target))
+ var/mob/living/silicon/S = L
+ S.emp_act(EMP_HEAVY)
+ else //for Nar'sian weaklings
+ to_chat(L, "\"How does it feel to see the light, dog?\" ")
+ L.visible_message("[L]'s eyes flare with burning light! ", \
+ "Your vision suddenly screams with a flash of burning hot light! ") //Debuffs Narsian cultists hard + deals some burn instead of just hardstunning them; Only the confusion part can stack
+ L.flash_act(1,1)
+ if(iscarbon(target))
+ var/mob/living/carbon/C = L
+ C.stuttering = max(8, C.stuttering)
+ C.drowsyness = max(8, C.drowsyness)
+ C.confused += CLAMP(16 - C.confused, 0, 8)
+ C.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
L.adjustFireLoss(15)
..()
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
index a7fcf0a3b0..7534f7c043 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm
@@ -56,8 +56,14 @@
L.visible_message("[src] bounces off of [L], as if repelled by an unseen force! ")
else if(!..())
if(!L.anti_magic_check())
- if(issilicon(L) || iscultist(L))
+ if(issilicon(L))
L.Knockdown(100)
+ else if(iscultist(L))
+ L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage
+ to_chat(L, "[src] crashes into you with burning force, sending you reeling! ")
+ L.adjust_fire_stacks(2)
+ L.Knockdown(1)
+ L.IgniteMob()
else
L.Knockdown(40)
GLOB.clockwork_vitality += L.adjustFireLoss(bonus_burn * 3) //normally a total of 40 damage, 70 with ratvar
diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
index 42ca9e07e2..311f552467 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
@@ -1,5 +1,7 @@
#define MARAUDER_SLOWDOWN_PERCENTAGE 0.40 //Below this percentage of health, marauders will become slower
#define MARAUDER_SHIELD_REGEN_TIME 200 //In deciseconds, how long it takes for shields to regenerate after breaking
+#define MARAUDER_SPACE_FULL_DAMAGE 6 //amount of damage per life tick while inside space
+#define MARAUDER_SPACE_NEAR_DAMAGE 4 //amount of damage taking per Life() tick from being next to space.
//Clockwork marauder: A well-rounded frontline construct. Only one can exist for every two human servants.
/mob/living/simple_animal/hostile/clockwork/marauder
@@ -20,12 +22,14 @@
movement_type = FLYING
a_intent = INTENT_HARM
loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor)
- light_range = 2
- light_power = 1.1
+ light_range = 3
+ light_power = 1.7
playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \
unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles! Obey the Servants and do as they \
- tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm. "
+ tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm. \
+ Be warned, however, that you will rapidly decay near the void of space. "
empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable. "
+ var/default_speed = 0
var/max_shield_health = 3
var/shield_health = 3 //Amount of projectiles that can be deflected within
var/shield_health_regen = 0 //When world.time equals this, shield health will regenerate
@@ -36,10 +40,21 @@
/mob/living/simple_animal/hostile/clockwork/marauder/Life()
..()
+ var/turf/T = get_turf(src)
+ var/turf/open/space/S = isspaceturf(T)? T : null
+ var/less_space_damage
+ if(!istype(S))
+ var/turf/open/space/nearS = locate() in oview(1)
+ if(nearS)
+ S = nearS
+ less_space_damage = TRUE
+ if(S)
+ to_chat(src, "The void of space drains Ratvar's Light from you! You feel yourself rapidly decaying. It would be wise to get back inside! ")
+ adjustBruteLoss(less_space_damage? MARAUDER_SPACE_NEAR_DAMAGE : MARAUDER_SPACE_FULL_DAMAGE)
if(!GLOB.ratvar_awakens && health / maxHealth <= MARAUDER_SLOWDOWN_PERCENTAGE)
- speed = initial(speed) + 1 //Yes, this slows them down
+ speed = default_speed + 1 //Yes, this slows them down
else
- speed = initial(speed)
+ speed = default_speed
if(shield_health < max_shield_health && world.time >= shield_health_regen)
shield_health_regen = world.time + MARAUDER_SHIELD_REGEN_TIME
to_chat(src, "Your shield has recovered, [shield_health] blocks remaining! ")
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
index 3d467350ff..0fd6c8a8dc 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm
@@ -87,9 +87,22 @@
object_path = /obj/item/clockwork/construct_chassis/clockwork_marauder
construct_type = /mob/living/simple_animal/hostile/clockwork/marauder
combat_construct = TRUE
- var/static/recent_marauders = 0
- var/static/time_since_last_marauder = 0
- var/static/scaled_recital_time = 0
+ var/static/last_marauder = 0
+
+/datum/clockwork_scripture/create_object/construct/clockwork_marauder/post_recital()
+ last_marauder = world.time
+ return ..()
+
+/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital()
+ if(!is_reebe(invoker.z))
+ if(!CONFIG_GET(flag/allow_clockwork_marauder_on_station))
+ to_chat(invoker, "This particular station is too far from the influence of the Hierophant Network. You can not summon a marauder here. ")
+ return FALSE
+ if(world.time < (last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)))
+ to_chat(invoker, "The hierophant network is still strained from the last summoning of a marauder on a plane without the strong energy connection of Reebe to support it. \
+ You must wait another [DisplayTimeText((last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)) - world.time, TRUE)]! ")
+ return FALSE
+ return ..()
/datum/clockwork_scripture/create_object/construct/clockwork_marauder/update_construct_limit()
var/human_servants = 0
@@ -98,27 +111,7 @@
var/mob/living/L = M.current
if(ishuman(L) && L.stat != DEAD)
human_servants++
- construct_limit = round(CLAMP((human_servants / 4), 1, 3)) - recent_marauders //1 per 4 human servants, maximum of 3, reduced by recent marauder creation
- if(recent_marauders)
- to_chat(invoker, "The Hierophant Network is depleted by a summoning in the last [DisplayTimeText(MARAUDER_SCRIPTURE_SCALING_THRESHOLD, TRUE)] - limiting the number of available marauders by [recent_marauders]! ")
-
-/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital()
- channel_time = initial(channel_time)
- if(recent_marauders)
- scaled_recital_time = min(recent_marauders * MARAUDER_SCRIPTURE_SCALING_TIME, MARAUDER_SCRIPTURE_SCALING_MAX)
- to_chat(invoker, "The Hierophant Network is under strain from repeated summoning, making this scripture [DisplayTimeText(scaled_recital_time)] slower! ")
- channel_time += scaled_recital_time
- return TRUE
-
-/datum/clockwork_scripture/create_object/construct/clockwork_marauder/scripture_effects()
- . = ..()
- recent_marauders++
- addtimer(CALLBACK(GLOBAL_PROC, .proc/marauder_reset),MARAUDER_SCRIPTURE_SCALING_THRESHOLD)
-
-/proc/marauder_reset()
- var/datum/clockwork_scripture/create_object/construct/clockwork_marauder/CM = new()
- CM.recent_marauders--
- qdel(CM)
+ construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3
//Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage.
/datum/clockwork_scripture/create_object/summon_arbiter
@@ -146,6 +139,6 @@
/datum/clockwork_scripture/create_object/summon_arbiter/check_special_requirements()
if(GLOB.neovgre_exists)
- to_chat(invoker, "\"You've already got one...\" ")
+ to_chat(invoker, "\"Only one of my weapons may exist in this temporal stream!\" ")
return FALSE
return ..()
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index beea67e596..794010d9c0 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -438,21 +438,27 @@
target.visible_message("[L] starts to glow in a halo of light! ", \
"A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light! ")
else
- to_chat(user, "In an brilliant flash of red, [L] falls to the ground! ")
- L.Knockdown(160)
- L.adjustStaminaLoss(140) //Ensures hard stamcrit
- L.flash_act(1,1)
- if(issilicon(target))
- var/mob/living/silicon/S = L
- S.emp_act(EMP_HEAVY)
- else if(iscarbon(target))
- var/mob/living/carbon/C = L
- C.silent += 6
- C.stuttering += 15
- C.cultslurring += 15
- C.Jitter(15)
- if(is_servant_of_ratvar(L))
+ if(!iscultist(L))
+ L.Knockdown(160)
+ L.adjustStaminaLoss(140) //Ensures hard stamcrit
+ L.flash_act(1,1)
+ if(issilicon(target))
+ var/mob/living/silicon/S = L
+ S.emp_act(EMP_HEAVY)
+ else if(iscarbon(target))
+ var/mob/living/carbon/C = L
+ C.silent += CLAMP(12 - C.silent, 0, 6)
+ C.stuttering += CLAMP(30 - C.stuttering, 0, 15)
+ C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15)
+ C.Jitter(15)
+ else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff
+ if(iscarbon(target))
+ var/mob/living/carbon/C = L
+ C.stuttering = max(10, C.stuttering)
+ C.drowsyness = max(10, C.drowsyness)
+ C.confused += CLAMP(20 - C.confused, 0, 10)
L.adjustBruteLoss(15)
+ to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"] ")
uses--
..()
@@ -579,6 +585,12 @@
new /obj/item/stack/sheet/runed_metal(T,quantity)
to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal! ")
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
+ if(istype(target, /obj/item/clothing/suit/hooded/wintercoat) && target.type != /obj/item/clothing/suit/hooded/wintercoat/narsie)
+ if (do_after(user,30,target=target))
+ new /obj/item/clothing/suit/hooded/wintercoat/narsie(T)
+ qdel(target)
+ to_chat(user, "A dark cloud emanates from you hand and swirls around [target], transforming it into a narsian winter coat! ")
+ SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else if(istype(target,/mob/living/silicon/robot))
var/mob/living/silicon/robot/candidate = target
if(candidate.mmi)
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 5fe941d32f..b4ddb9dbff 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -703,7 +703,10 @@
else if(!..())
if(!L.anti_magic_check())
if(is_servant_of_ratvar(L))
- L.Knockdown(100)
+ to_chat(L, "\"Kneel for me, scum\" ")
+ L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before
+ L.Knockdown(15)
+ L.adjustBruteLoss(10)
else
L.Knockdown(50)
break_spear(T)
diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm
index 5968c7643a..0fb41cabc8 100644
--- a/code/modules/antagonists/ert/ert.dm
+++ b/code/modules/antagonists/ert/ert.dm
@@ -34,6 +34,12 @@
. = ..()
name_source = GLOB.commando_names
+/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override)
+ ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
+
+/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override)
+ REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT)
+
/datum/antagonist/ert/security // kinda handled by the base template but here for completion
/datum/antagonist/ert/security/amber
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index 8021ee5f08..e1c50a7cf5 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -611,10 +611,7 @@ This is here to make the tiles around the station mininuke change when it's arme
if(!fake)
return
- var/ghost = isobserver(user)
- var/captain = user.mind && user.mind.assigned_role == "Captain"
- var/nukie = user.mind && user.mind.has_antag_datum(/datum/antagonist/nukeop)
- if(ghost || captain || nukie)
+ if(isobserver(user) || HAS_TRAIT(user, TRAIT_DISK_VERIFIER) || (user.mind && HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER)))
. += "The serial numbers on [src] are incorrect. "
/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params)
@@ -653,3 +650,7 @@ This is here to make the tiles around the station mininuke change when it's arme
/obj/item/disk/nuclear/fake
fake = TRUE
+
+/obj/item/disk/nuclear/fake/obvious
+ name = "cheap plastic imitation of the nuclear authentication disk"
+ desc = "How anyone could mistake this for the real thing is beyond you."
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index 4604439fc8..d343951d53 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -23,10 +23,12 @@
/datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
update_synd_icons_added(M)
+ ADD_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT)
/datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
update_synd_icons_removed(M)
+ REMOVE_TRAIT(owner, TRAIT_DISK_VERIFIER, NUKEOP_TRAIT)
/datum/antagonist/nukeop/proc/equip_op()
if(!ishuman(owner.current))
@@ -42,7 +44,6 @@
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0)
to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent! ")
owner.announce_objectives()
- return
/datum/antagonist/nukeop/on_gain()
give_alias()
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index f27da5f667..c669ff7877 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -33,6 +33,7 @@
melee_damage_lower = 30
melee_damage_upper = 30
see_in_dark = 8
+ blood_volume = 0 //No bleeding on getting shot, for skeddadles
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
bloodcrawl = BLOODCRAWL_EAT
var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \
diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm
index e086485a49..8e385f6674 100644
--- a/code/modules/antagonists/swarmer/swarmer_event.dm
+++ b/code/modules/antagonists/swarmer/swarmer_event.dm
@@ -1,8 +1,8 @@
/datum/round_event_control/spawn_swarmer
name = "Spawn Swarmer Shell"
typepath = /datum/round_event/spawn_swarmer
- weight = 7
- max_occurrences = 1 //Only once okay fam
+ weight = 0
+ max_occurrences = 0
earliest_start = 30 MINUTES
min_players = 15
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index 56954f8718..3cc3b48e50 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -505,6 +505,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
if(!is_station_level(F.z))
continue
F.obj_flags |= EMAGGED
+ F.update_icon()
to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized. ")
owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0)
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index dcec31e5c2..dfde04836d 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -141,6 +141,10 @@
name = "Disintegrate"
spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate
+/datum/spellbook_entry/nuclearfist
+ name = "Nuclear Fist"
+ spell_type = /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist
+
/datum/spellbook_entry/disabletech
name = "Disable Tech"
spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index 9b2532c71b..a88eb1e42a 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -177,6 +177,10 @@
owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null))
to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
+ if(APPRENTICE_MARTIAL)
+ owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/nuclear_fist(null))
+ H.put_in_hands(new /obj/item/book/granter/martial/plasma_fist(H))
+ to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned mystical martial abilities. You are also able to use the Nuclear Fist at will.")
/datum/antagonist/wizard/apprentice/create_objectives()
var/datum/objective/protect/new_objective = new /datum/objective/protect
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index 6b87278e00..2ac3b34f60 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -39,7 +39,7 @@
if(flash)
add_overlay(flashing_overlay)
attached_overlays += flashing_overlay
- addtimer(CALLBACK(src, .proc/update_icon), 5)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 5)
if(holder)
holder.update_icon()
@@ -308,7 +308,7 @@
else if(flash)
icon_state = "flashshield_flash"
item_state = "flashshield_flash"
- addtimer(CALLBACK(src, .proc/update_icon), 5)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 5)
if(holder)
holder.update_icon()
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index 38178a4339..19f3f58708 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -154,6 +154,11 @@
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
var/target_temperature
var/target_heat_capacity
+ // first calculate heat from radiation. there's an implied "* 1 tick" here.
+ // 0.05 magic multiplicand is, first, 0.1 deciseconds; second, half of the radiation's going right back into the gas.
+ var/share_constant = STEFANBOLTZMANN*(share_volume**(2/3))*0.05
+ // Minimizing temp to 4 billion is mostly to prevent -infinity temperatures.
+ var/heat = share_constant*(min(air.temperature,4000000000)**4)
if(isopenturf(target))
@@ -165,8 +170,8 @@
if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
var/delta_temperature = air.temperature - target_temperature
-
- var/heat = thermal_conductivity*delta_temperature* \
+ heat -= share_constant*(min(target_temperature,4000000000)**4)
+ heat += thermal_conductivity*delta_temperature* \
(partial_heat_capacity*target_heat_capacity/(partial_heat_capacity+target_heat_capacity))
air.temperature -= heat/total_heat_capacity
@@ -183,7 +188,8 @@
var/sharer_temperature_delta = 0
if((sharer_heat_capacity>0) && (partial_heat_capacity>0))
- var/heat = thermal_conductivity*delta_temperature* \
+ heat -= share_constant*(min(target_temperature,4000000000)**4)
+ heat += thermal_conductivity*delta_temperature* \
(partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity))
self_temperature_delta = -heat/total_heat_capacity
@@ -199,10 +205,12 @@
if((target.heat_capacity>0) && (partial_heat_capacity>0))
var/delta_temperature = air.temperature - target.temperature
- var/heat = thermal_conductivity*delta_temperature* \
+ heat -= share_constant*(min(target.temperature,4000000000)**4)
+ heat += thermal_conductivity*delta_temperature* \
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
air.temperature -= heat/total_heat_capacity
+ air.temperature = CLAMP(air.temperature,TCMB,INFINITY) // i have no idea why TCMB needs to be the min but i ain't changing it
update = TRUE
/datum/pipeline/proc/return_air()
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index b087859a47..79aa957d97 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -26,9 +26,7 @@
var/turf/T = loc
if(istype(T))
- if(islava(T))
- environment_temperature = 5000
- else if(T.blocks_air)
+ if(T.blocks_air)
environment_temperature = T.temperature
else
var/turf/open/OT = T
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 0d5fa6bc8a..34886c5b27 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -29,6 +29,7 @@
var/show_flavour = TRUE
var/banType = "lavaland"
var/ghost_usable = TRUE
+ var/skip_reentry_check = FALSE //Skips the ghost role blacklist time for people who ghost/suicide/cryo
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling)
@@ -44,7 +45,7 @@
return
if(isobserver(user))
var/mob/dead/observer/O = user
- if(!O.can_reenter_round())
+ if(!O.can_reenter_round() && !skip_reentry_check)
return FALSE
var/ghost_role = alert(latejoinercalling ? "Latejoin as [mob_name]? (This is a ghost role, and as such, it's very likely to be off-station.)" : "Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
if(ghost_role == "No" || !loc)
diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm
index 7b78facf00..1b4ebd6c1a 100644
--- a/code/modules/cargo/gondolapod.dm
+++ b/code/modules/cargo/gondolapod.dm
@@ -29,7 +29,7 @@
name = linked_pod.name
. = ..()
-/mob/living/simple_animal/pet/gondola/gondolapod/proc/update_icon()
+/mob/living/simple_animal/pet/gondola/gondolapod/update_icon_state()
if(opened)
icon_state = "gondolapod_open"
else
diff --git a/code/modules/cargo/packs/engine.dm b/code/modules/cargo/packs/engine.dm
index a4438c7ef8..499881a110 100644
--- a/code/modules/cargo/packs/engine.dm
+++ b/code/modules/cargo/packs/engine.dm
@@ -27,7 +27,7 @@
/datum/supply_pack/engine/am_shielding
name = "Antimatter Shielding Crate"
- desc = "Contains ten Antimatter shields, somehow crammed into a crate."
+ desc = "Contains nine Antimatter shields, somehow crammed into a crate."
cost = 2500
contains = list(/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
@@ -37,8 +37,7 @@
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
/obj/item/am_shielding_container,
- /obj/item/am_shielding_container,
- /obj/item/am_shielding_container) //10 shields: 3x3 containment and a core
+ /obj/item/am_shielding_container) //9 shields: 3x3 containment and a core
crate_name = "antimatter shielding crate"
/datum/supply_pack/engine/emitter
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index 3ffe24ac1c..4a90af6fd0 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -47,6 +47,26 @@
/obj/item/storage/fancy/donut_box)
crate_name = "candy crate"
+/datum/supply_pack/organic/exoticseeds
+ name = "Exotic Seeds Crate"
+ desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
+ cost = 1500
+ contains = list(/obj/item/seeds/nettle,
+ /obj/item/seeds/replicapod,
+ /obj/item/seeds/replicapod,
+ /obj/item/seeds/replicapod,
+ /obj/item/seeds/plump,
+ /obj/item/seeds/liberty,
+ /obj/item/seeds/amanita,
+ /obj/item/seeds/reishi,
+ /obj/item/seeds/banana,
+ /obj/item/seeds/bamboo,
+ /obj/item/seeds/eggplant/eggy,
+ /obj/item/seeds/random,
+ /obj/item/seeds/random)
+ crate_name = "exotic seeds crate"
+ crate_type = /obj/structure/closet/crate/hydroponics
+
/datum/supply_pack/organic/food
name = "Food Crate"
desc = "Get things cooking with this crate full of useful ingredients! Contains a two dozen eggs, three bananas, and two bags of flour and rice, two cartons of milk, soymilk, as well as salt and pepper shakers, an enzyme and sugar bottle, and three slabs of monkeymeat."
@@ -156,6 +176,23 @@
/obj/item/storage/bag/tray)
crate_name = "fruit crate"
+/datum/supply_pack/organic/grill
+ name = "Grilling Starter Kit"
+ desc = "Hey dad I'm Hungry. Hi Hungry I'm THE NEW GRILLING STARTER KIT ONLY 5000 BUX GET NOW! Contains a cooking grill and five fuel coal sheets."
+ cost = 3000
+ crate_type = /obj/structure/closet/crate
+ contains = list(/obj/item/stack/sheet/mineral/coal/five,
+ /obj/machinery/grill/unwrenched)
+ crate_name = "grilling starter kit crate"
+
+/datum/supply_pack/organic/grillfuel
+ name = "Grilling Fuel Kit"
+ desc = "Contains coal and coal accessories. (Note: only ten coal sheets.)"
+ cost = 1000
+ crate_type = /obj/structure/closet/crate
+ contains = list(/obj/item/stack/sheet/mineral/coal/ten)
+ crate_name = "grilling fuel kit crate"
+
/datum/supply_pack/organic/cream_piee
name = "High-yield Clown-grade Cream Pie Crate"
desc = "Designed by Aussec's Advanced Warfare Research Division, these high-yield, Clown-grade cream pies are powered by a synergy of performance and efficiency. Guaranteed to provide maximum results."
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index c476e5a310..00cc01105d 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//doohickeys for savefiles
var/path
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
- var/max_save_slots = 8
+ var/max_save_slots = 16
//non-preference stuff
var/muted = 0
@@ -103,6 +103,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
"legs" = "Plantigrade",
"insect_wings" = "Plain",
"insect_fluff" = "None",
+ "insect_markings" = "None",
"mcolor2" = "FFF",
"mcolor3" = "FFF",
"mam_body_markings" = "Plain",
@@ -170,12 +171,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/prefered_security_department = SEC_DEPT_RANDOM
var/custom_species = null
- //Quirk list
- var/list/positive_quirks = list()
- var/list/negative_quirks = list()
- var/list/neutral_quirks = list()
+ //Quirk list
var/list/all_quirks = list()
- var/list/character_quirks = list()
//Job preferences 2.0 - indexed by job title , no key or value implies never
var/list/job_preferences = list()
@@ -221,7 +218,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
load_path(C.ckey)
unlock_content = C.IsByondMember()
if(unlock_content)
- max_save_slots = 16
+ max_save_slots = 24
var/loaded_preferences_successfully = load_preferences()
if(loaded_preferences_successfully)
if(load_character())
@@ -624,6 +621,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "[features["taur"]] "
+ if("insect_markings" in pref_species.default_features)
+ if(!mutant_category)
+ dat += APPEARANCE_CATEGORY_COLUMN
+
+ dat += "Insect markings "
+
+ dat += "[features["insect_markings"]] "
+
+ mutant_category++
+ if(mutant_category >= MAX_MUTANT_ROWS)
+ dat += ""
+ mutant_category = 0
+
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS)
dat += ""
@@ -1200,7 +1210,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += " Done "
dat += " "
dat += "Current quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"] "
- dat += "[positive_quirks.len] / [MAX_QUIRKS] max positive quirks \
+ dat += "[GetPositiveQuirkCount()] / [MAX_QUIRKS] max positive quirks \
Quirk balance remaining: [GetQuirkBalance()] "
for(var/V in SSquirks.quirks)
var/datum/quirk/T = SSquirks.quirks[V]
@@ -1231,12 +1241,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
LOCKED: [lock_reason] "
else
if(has_quirk)
- dat += "[quirk_name] - [initial(T.desc)] \
- [has_quirk ? "Lose" : "Take"] ([quirk_cost] pts.) "
+ dat += "[has_quirk ? "Remove" : "Take"] ([quirk_cost] pts.) \
+ [quirk_name] - [initial(T.desc)] "
else
- dat += "[quirk_name] - [initial(T.desc)] \
- [has_quirk ? "Lose" : "Take"] ([quirk_cost] pts.) "
- dat += "Reset Traits "
+ dat += "[has_quirk ? "Remove" : "Take"] ([quirk_cost] pts.) \
+ [quirk_name] - [initial(T.desc)] "
+ dat += "Reset Quirks "
var/datum/browser/popup = new(user, "mob_occupation", "Quirk Preferences
", 900, 600) //no reason not to reuse the occupation window, as it's cleaner that way
popup.set_window_options("can_close=0")
@@ -1250,6 +1260,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
bal -= initial(T.value)
return bal
+/datum/preferences/proc/GetPositiveQuirkCount()
+ . = 0
+ for(var/q in all_quirks)
+ if(SSquirks.quirk_points[q] > 0)
+ .++
+
/datum/preferences/Topic(href, href_list, hsrc) //yeah, gotta do this I guess..
. = ..()
if(href_list["close"])
@@ -1315,43 +1331,30 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/quirk = href_list["trait"]
if(!SSquirks.quirks[quirk])
return
+ for(var/V in SSquirks.quirk_blacklist) //V is a list
+ var/list/L = V
+ for(var/Q in all_quirks)
+ if((quirk in L) && (Q in L) && !(Q == quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details)
+ to_chat(user, "[quirk] is incompatible with [Q]. ")
+ return
var/value = SSquirks.quirk_points[quirk]
- if(value == 0)
- if(quirk in neutral_quirks)
- neutral_quirks -= quirk
- all_quirks -= quirk
- else
- neutral_quirks += quirk
- all_quirks += quirk
+ var/balance = GetQuirkBalance()
+ if(quirk in all_quirks)
+ if(balance + value < 0)
+ to_chat(user, "Refunding this would cause you to go below your balance! ")
+ return
+ all_quirks -= quirk
else
- var/balance = GetQuirkBalance()
- if(quirk in positive_quirks)
- positive_quirks -= quirk
- all_quirks -= quirk
- else if(quirk in negative_quirks)
- if(balance + value < 0)
- to_chat(user, "Refunding this would cause you to go below your balance! ")
- return
- negative_quirks -= quirk
- all_quirks -= quirk
- else if(value > 0)
- if(positive_quirks.len >= MAX_QUIRKS)
- to_chat(user, "You can't have more than [MAX_QUIRKS] positive quirks! ")
- return
- if(balance - value < 0)
- to_chat(user, "You don't have enough balance to gain this quirk! ")
- return
- positive_quirks += quirk
- all_quirks += quirk
- else
- negative_quirks += quirk
- all_quirks += quirk
+ if(GetPositiveQuirkCount() >= MAX_QUIRKS)
+ to_chat(user, "You can't have more than [MAX_QUIRKS] positive quirks! ")
+ return
+ if(balance - value < 0)
+ to_chat(user, "You don't have enough balance to gain this quirk! ")
+ return
+ all_quirks += quirk
SetQuirks(user)
if("reset")
all_quirks = list()
- positive_quirks = list()
- negative_quirks = list()
- neutral_quirks = list()
SetQuirks(user)
else
SetQuirks(user)
@@ -1754,6 +1757,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_insect_fluff)
features["insect_fluff"] = new_insect_fluff
+ if("insect_markings")
+ var/new_insect_markings
+ new_insect_markings = input(user, "Choose your character's markings:", "Character Preference") as null|anything in GLOB.insect_markings_list
+ if(new_insect_markings)
+ features["insect_markings"] = new_insect_markings
+
if("s_tone")
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones
if(new_s_tone)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 29ea8f5821..c88d246b96 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -112,7 +112,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(current_version < 24 && S["feature_exhibitionist"])
var/datum/quirk/exhibitionism/E
var/quirk_name = initial(E.name)
- neutral_quirks += quirk_name
all_quirks += quirk_name
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
@@ -367,9 +366,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_lizard_legs"] >> features["legs"]
S["feature_human_tail"] >> features["tail_human"]
S["feature_human_ears"] >> features["ears"]
+ S["feature_deco_wings"] >> features["deco_wings"]
S["feature_insect_wings"] >> features["insect_wings"]
- S["feature_deco_wings"] >> features["deco_wings"]
S["feature_insect_fluff"] >> features["insect_fluff"]
+ S["feature_insect_markings"] >> features["insect_markings"]
//Custom names
for(var/custom_name_id in GLOB.preferences_custom_names)
@@ -386,9 +386,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
S["all_quirks"] >> all_quirks
- S["positive_quirks"] >> positive_quirks
- S["negative_quirks"] >> negative_quirks
- S["neutral_quirks"] >> neutral_quirks
//Citadel code
S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"]
@@ -507,9 +504,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list)
- features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None")
features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
+ features["insect_markings"] = sanitize_inlist(features["insect_markings"], GLOB.insect_markings_list, "None")
+ features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
//Validate job prefs
@@ -519,10 +517,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
all_quirks = SANITIZE_LIST(all_quirks)
- positive_quirks = SANITIZE_LIST(positive_quirks)
- negative_quirks = SANITIZE_LIST(negative_quirks)
- neutral_quirks = SANITIZE_LIST(neutral_quirks)
-
cit_character_pref_load(S)
return 1
@@ -578,11 +572,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_lizard_spines"] , features["spines"])
WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"])
WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
- WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"])
WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"])
+ WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"])
WRITE_FILE(S["feature_insect_fluff"] , features["insect_fluff"])
+ WRITE_FILE(S["feature_insect_markings"] , features["insect_markings"])
WRITE_FILE(S["feature_meat"] , features["meat_type"])
+
//Custom names
for(var/custom_name_id in GLOB.preferences_custom_names)
var/savefile_slot_name = custom_name_id + "_name" //TODO remove this
@@ -598,9 +594,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
WRITE_FILE(S["all_quirks"] , all_quirks)
- WRITE_FILE(S["positive_quirks"] , positive_quirks)
- WRITE_FILE(S["negative_quirks"] , negative_quirks)
- WRITE_FILE(S["neutral_quirks"] , neutral_quirks)
cit_character_pref_save(S)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index dc9e46c4b4..60b8e1565e 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -22,7 +22,6 @@
var/cooldown = 0
var/obj/item/flashlight/F = null
var/can_flashlight = 0
- var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
var/blocks_shove_knockdown = FALSE //Whether wearing the clothing item blocks the ability for shove to knock down.
@@ -47,6 +46,17 @@
//Add a "exclude" string to do the opposite, making it only only species listed that can't wear it.
//You append this to clothing objects.
+ //Polychrome stuff:
+ var/hasprimary = FALSE //These vars allow you to choose which overlays a clothing has
+ var/hassecondary = FALSE
+ var/hastertiary = FALSE
+ var/primary_color = "#FFFFFF" //RGB in hexcode
+ var/secondary_color = "#FFFFFF"
+ var/tertiary_color = "#808080"
+
+ //No idea what this is but eh -tori
+ var/force_alternate_icon = FALSE
+
/obj/item/clothing/Initialize()
. = ..()
@@ -54,6 +64,8 @@
actions_types += /datum/action/item_action/toggle_voice_box
if(ispath(pocket_storage_component_path))
LoadComponent(pocket_storage_component_path)
+ if(hasprimary | hassecondary | hastertiary) //Checks if polychrome is enabled
+ update_icon() //Applies the overlays and default colors onto the clothes on spawn.
/obj/item/clothing/MouseDrop(atom/over_object)
. = ..()
@@ -138,6 +150,8 @@
how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n"
how_cool_are_your_threads += ""
. += how_cool_are_your_threads.Join()
+ if(hasprimary | hassecondary | hastertiary) //Checks if polychrome is enabled
+ . += "Alt-click to recolor it. "
/obj/item/clothing/obj_break(damage_flag)
if(!damaged_clothes)
@@ -260,8 +274,31 @@ BLIND // can't see anything
remove_accessory(user)
else
rolldown()
+ // Polychrome stuff:
+ 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
+ if("Primary Color")
+ var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it.
+ if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL.
+ primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly
+ update_icon() //updates the item icon
+ user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works.
+ if("Secondary Color")
+ var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null
+ if(secondary_color_input)
+ secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ user.regenerate_icons()
+ if("Tertiary Color")
+ var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null
+ if(tertiary_color_input)
+ tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ user.regenerate_icons()
return TRUE
+
/obj/item/clothing/under/verb/jumpsuit_adjust()
set name = "Adjust Jumpsuit Style"
set category = null
@@ -377,3 +414,18 @@ BLIND // can't see anything
return FALSE
return TRUE
+
+/obj/item/clothing/update_icon() // Polychrome stuff
+ ..()
+ if(hasprimary) //Checks if the overlay is enabled
+ var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary") //Automagically picks overlays
+ primary_overlay.color = primary_color //Colors the greyscaled overlay
+ add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite.
+ if(hassecondary)
+ var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary")
+ secondary_overlay.color = secondary_color
+ add_overlay(secondary_overlay)
+ if(hastertiary)
+ var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary")
+ tertiary_overlay.color = tertiary_color
+ add_overlay(tertiary_overlay)
\ No newline at end of file
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 206165a495..1a178158d8 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -99,7 +99,7 @@
desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents."
icon_state = "purple"
item_state = "glasses"
- scan_reagents = TRUE //You can see reagents while wearing science goggles
+ clothing_flags = SCAN_REAGENTS //You can see reagents while wearing science goggles
actions_types = list(/datum/action/item_action/toggle_research_scanner)
glass_colour_type = /datum/client_colour/glass_colour/purple
resistance_flags = ACID_PROOF
@@ -203,7 +203,7 @@
/obj/item/clothing/glasses/sunglasses/reagent
name = "beer goggles"
desc = "A pair of sunglasses outfitted with apparatus to scan reagents."
- scan_reagents = TRUE
+ clothing_flags = SCAN_REAGENTS
/obj/item/clothing/glasses/sunglasses/garb
name = "black gar glasses"
@@ -405,7 +405,7 @@
item_state = "godeye"
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
darkness_view = 8
- scan_reagents = TRUE
+ clothing_flags = SCAN_REAGENTS
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
resistance_flags = LAVA_PROOF | FIRE_PROOF
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index dabfaf06cd..3fa5d56d1e 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -370,13 +370,25 @@
/obj/item/clothing/head/hotel
name = "Telegram cap"
desc = "A bright red cap warn by hotel staff. Or people who want to be a singing telegram"
- icon_state = "telegramhat"
- item_color = "telegramhat"
- dog_fashion = null
+ icon_state = "telegram"
+ item_color = "telegram"
+ dog_fashion = /datum/dog_fashion/head/telegram
/obj/item/clothing/head/colour
name = "Singer cap"
desc = "A light white hat that has bands of color. Just makes you want to sing and dance!"
icon_state = "colour"
item_color = "colour"
- dog_fashion = /datum/dog_fashion/head/colour
\ No newline at end of file
+ dog_fashion = /datum/dog_fashion/head/colour
+
+/obj/item/clothing/head/christmashat
+ name = "red santa hat"
+ desc = "A red Christmas Hat! How festive!"
+ icon_state = "christmashat"
+ item_state = "christmashat"
+
+/obj/item/clothing/head/christmashatg
+ name = "green santa hat"
+ desc = "A green Christmas Hat! How festive!"
+ icon_state = "christmashatg"
+ item_state = "christmashatg"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index fc82d038ce..127bf4c773 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -309,4 +309,4 @@
//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
+ attack_hand_interact = TRUE //So you can actually see what you stuff in there
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 2356bb16eb..e863dc8860 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -66,7 +66,9 @@
var/obj/item/organ/heart/heart = M.getorganslot(ORGAN_SLOT_HEART)
var/obj/item/organ/lungs/lungs = M.getorganslot(ORGAN_SLOT_LUNGS)
- if(!(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH))))
+ if (!do_mob(user,M,60)) // Stethoscope should take a moment to listen
+ return // FAIL
+ if(!(M.stat == DEAD || (HAS_TRAIT(M, TRAIT_FAKEDEATH)) || (HAS_TRAIT(M, TRAIT_NOPULSE))))
if(heart && istype(heart))
heart_strength = "an unstable "
if(heart.beating)
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 080d9281cf..3d318db761 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -129,6 +129,21 @@
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
+/obj/item/clothing/shoes/winterboots/christmasbootsr
+ name = "red christmas boots"
+ desc = "A pair of fluffy red christmas boots!"
+ icon_state = "christmasbootsr"
+
+/obj/item/clothing/shoes/winterboots/christmasbootsg
+ name = "green christmas boots"
+ desc = "A pair of fluffy green christmas boots!"
+ icon_state = "christmasbootsg"
+
+/obj/item/clothing/shoes/winterboots/santaboots
+ name = "santa boots"
+ desc = "A pair of santa boots! How traditional!!"
+ icon_state = "santaboots"
+
/obj/item/clothing/shoes/workboots
name = "work boots"
desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar."
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index c6eac4ac56..9a5c919720 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -212,7 +212,7 @@
icon_state = "hardsuit0-white"
item_state = "ce_helm"
item_color = "white"
- armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 90, "fire" = 100, "acid" = 90)
+ armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -221,7 +221,7 @@
name = "advanced hardsuit"
desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish."
item_state = "ce_hardsuit"
- armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 90, "fire" = 100, "acid" = 90)
+ armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 95, "fire" = 100, "acid" = 90)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
@@ -445,7 +445,7 @@
flash_protect = 0
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- scan_reagents = TRUE
+ clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
/obj/item/clothing/suit/space/hardsuit/medical
icon_state = "hardsuit-medical"
@@ -467,7 +467,7 @@
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80)
var/obj/machinery/doppler_array/integrated/bomb_radar
- scan_reagents = TRUE
+ clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_research_scanner)
/obj/item/clothing/head/helmet/space/hardsuit/rd/Initialize()
@@ -638,7 +638,7 @@
armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
item_color = "ancient"
brightness_on = 16
- scan_reagents = TRUE
+ clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SCAN_REAGENTS
flash_protect = 5 //We will not be flash by bombs
tint = 1
var/obj/machinery/doppler_array/integrated/bomb_radar
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index b67fda421e..4e155cd341 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -742,6 +742,7 @@
name = "assistant's formal winter coat"
icon_state = "coataformal"
item_state = "coataformal"
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter,/obj/item/clothing/gloves/color/yellow)
hoodtype = /obj/item/clothing/head/hooded/winterhood/aformal
/obj/item/clothing/head/hooded/winterhood/aformal
@@ -762,7 +763,10 @@
name = "ratvarian winter coat"
icon_state = "coatratvar"
item_state = "coatratvar"
+ armor = list("melee" = 30, "bullet" = 45, "laser" = -10, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/clockwork/replica_fabricator, /obj/item/clockwork/integration_cog, /obj/item/clockwork/slab, /obj/item/clockwork/weapon/ratvarian_spear)
hoodtype = /obj/item/clothing/head/hooded/winterhood/ratvar
+ var/real = TRUE
/obj/item/clothing/head/hooded/winterhood/ratvar
icon_state = "winterhood_ratvar"
@@ -770,15 +774,59 @@
light_power = 1
light_color = "#B18B25" //clockwork slab background top color
+/obj/item/clothing/suit/hooded/wintercoat/ratvar/equipped(mob/living/user,slot)
+ ..()
+ if (slot != SLOT_WEAR_SUIT || !real)
+ return
+ if (is_servant_of_ratvar(user))
+ return
+ else
+ user.dropItemToGround(src)
+ to_chat(user,"\"Amusing that you think you are fit to wear this.\" ")
+ to_chat(user,"Your skin burns where the coat touched your skin! ")
+ user.adjustFireLoss(rand(10,16))
+
/obj/item/clothing/suit/hooded/wintercoat/narsie
name = "narsian winter coat"
icon_state = "coatnarsie"
item_state = "coatnarsie"
+ armor = list("melee" = 30, "bullet" = 20, "laser" = 30,"energy" = 10, "bomb" = 30, "bio" = 10, "rad" = 10, "fire" = 30, "acid" = 30)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/restraints/legcuffs/bola/cult,/obj/item/melee/cultblade,/obj/item/melee/cultblade/dagger,/obj/item/reagent_containers/glass/beaker/unholywater,/obj/item/cult_shift,/obj/item/flashlight/flare/culttorch,/obj/item/twohanded/cult_spear)
hoodtype = /obj/item/clothing/head/hooded/winterhood/narsie
+ var/real = TRUE
+
+/obj/item/clothing/suit/hooded/wintercoat/narsie/equipped(mob/living/user,slot)
+ ..()
+ if (slot != SLOT_WEAR_SUIT || !real)
+ return
+ if (iscultist(user))
+ return
+ else
+ user.dropItemToGround(src)
+ to_chat(user,"\"You are not fit to wear my follower's coat!\" ")
+ to_chat(user,"Sharp spines jab you from within the coat! ")
+ user.adjustBruteLoss(rand(10,16))
/obj/item/clothing/head/hooded/winterhood/narsie
icon_state = "winterhood_narsie"
+/obj/item/clothing/suit/hooded/wintercoat/ratvar/fake
+ name = "brass winter coat"
+ icon_state = "coatratvar"
+ item_state = "coatratvar"
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ real = FALSE
+
+/obj/item/clothing/suit/hooded/wintercoat/narsie/fake
+ name = "runed winter coat"
+ icon_state = "coatnarsie"
+ item_state = "coatnarsie"
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ real = FALSE
+
+
/obj/item/clothing/suit/spookyghost
name = "spooky ghost"
desc = "This is obviously just a bedsheet, but maybe try it on?"
@@ -828,3 +876,33 @@
body_parts_covered = CHEST|GROIN|ARMS|LEGS
flags_inv = HIDEJUMPSUIT
resistance_flags = NONE
+
+/obj/item/clothing/suit/hooded/wintercoat/christmascoatr
+ name = "red christmas coat"
+ desc = "A festive red Christmas coat! Smells like Candy Cane!"
+ icon_state = "christmascoatr"
+ item_state = "christmascoatr"
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/christmashoodr
+
+/obj/item/clothing/head/hooded/winterhood/christmashoodr
+ icon_state = "christmashoodr"
+
+/obj/item/clothing/suit/hooded/wintercoat/christmascoatg
+ name = "green christmas coat"
+ desc = "A festive green Christmas coat! Smells like Candy Cane!"
+ icon_state = "christmascoatg"
+ item_state = "christmascoatg"
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/christmashoodg
+
+/obj/item/clothing/head/hooded/winterhood/christmashoodg
+ icon_state = "christmashoodg"
+
+/obj/item/clothing/suit/hooded/wintercoat/christmascoatrg
+ name = "red and green christmas coat"
+ desc = "A festive red and green Christmas coat! Smells like Candy Cane!"
+ icon_state = "christmascoatrg"
+ item_state = "christmascoatrg"
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/christmashoodrg
+
+/obj/item/clothing/head/hooded/winterhood/christmashoodrg
+ icon_state = "christmashoodrg"
diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm
index 5b2291e59c..0d2f68f580 100644
--- a/code/modules/clothing/suits/reactive_armour.dm
+++ b/code/modules/clothing/suits/reactive_armour.dm
@@ -50,7 +50,8 @@
icon_state = "reactiveoff"
item_state = "reactiveoff"
add_fingerprint(user)
- return
+ if(user.get_item_by_slot(SLOT_WEAR_SUIT) == src)
+ user.update_inv_wear_suit()
/obj/item/clothing/suit/armor/reactive/emp_act(severity)
. = ..()
@@ -71,8 +72,9 @@
reactivearmor_cooldown_duration = 100
/obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+ . = FALSE
if(!active)
- return 0
+ return
if(prob(hit_reaction_chance))
var/mob/living/carbon/human/H = owner
if(world.time < reactivearmor_cooldown)
@@ -95,12 +97,11 @@
var/turf/picked = pick(turfs)
if(!isturf(picked))
return
- H.forceMove(picked)
+ do_teleport(H, picked, no_effects = TRUE, channel = TELEPORT_CHANNEL_WORMHOLE)
radiation_pulse(old, rad_amount_before)
radiation_pulse(src, rad_amount)
reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration
- return 1
- return 0
+ return TRUE
//Fire
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index e165297a3f..a4d2c17fd6 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -1,4 +1,4 @@
-/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals, pokadots, and armbands, this accessory system is being kept as-is
+/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals and armbands, this accessory system is being kept as-is
name = "Accessory"
desc = "Something has gone wrong!"
icon = 'icons/obj/clothing/accessories.dmi'
@@ -366,7 +366,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/////////////////////
-//Synda Accessories//
+//Syndie Accessories//
/////////////////////
/obj/item/clothing/accessory/padding
@@ -389,35 +389,3 @@
icon_state = "plastics"
item_color = "nothing"
armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = -40)
-
-/////////////////////
-//Pokadots On Pants//
-/////////////////////
-
-/obj/item/clothing/accessory/attrocious_pokadots
- name = "atrocious pokadots"
- desc = "They look like something out of a thrift store. Attaches to clothing not to be worn by itself."
- icon_state = "attrocious_pokadots"
- item_color = "attrocious_pokadots"
- attack_verb = list("horrifed", "eye bleeded")
-
-/obj/item/clothing/accessory/black_white_pokadots
- name = "checkered pokadots"
- desc = "You can play a game of chess on these! Attaches to clothing not to be worn by itself."
- icon_state = "black_white_pokadots"
- item_color = "black_white_pokadots"
- attack_verb = list("check", "mate")
-
-/obj/item/clothing/accessory/nt_pokadots
- name = "blue and white pokadots"
- desc = "To show your pride in your workplace, in the most annoying possable way. Attaches to clothing not to be worn by itself."
- icon_state = "nt_pokadots"
- item_color = "nt_pokadots"
- attack_verb = list("eye bleeded", "annoyed")
-
-/obj/item/clothing/accessory/syndi_pokadots
- name = "black and red pokadots"
- desc = "King me. Attaches to clothing not to be worn by itself." //checkers!
- icon_state = "syndi_pokadots"
- item_color = "syndi_pokadots"
- attack_verb = list("jumped", "taken")
\ No newline at end of file
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 51e34c7b3e..58df911412 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -820,4 +820,36 @@
item_color = "durathread"
can_adjust = FALSE
body_parts_covered = CHEST|GROIN|ARMS
- armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
\ No newline at end of file
+ armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
+
+/obj/item/clothing/under/christmas/christmasmaler
+ name = "red masculine christmas suit"
+ desc = "A simple red christmas suit that looks close to Santa's!"
+ icon_state = "christmasmaler"
+ item_state = "christmasmaler"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+
+/obj/item/clothing/under/christmas/christmasmaleg
+ name = "green masculine christmas suit"
+ desc = "A simple green christmas suit that smells minty!"
+ icon_state = "christmasmaleg"
+ item_state = "christmasmaleg"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+
+/obj/item/clothing/under/christmas/christmasfemaler
+ name = "red feminine christmas suit"
+ desc = "A simple red christmas suit that looks like Mrs Claus!"
+ icon_state = "christmasfemaler"
+ item_state = "christmasfemaler"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
+
+/obj/item/clothing/under/christmas/christmasfemaleg
+ name = "green feminine christmas suit"
+ desc = "A simple green christmas suit that smells minty!"
+ icon_state = "christmasfemaleg"
+ item_state = "christmasfemaleg"
+ body_parts_covered = CHEST|GROIN
+ can_adjust = FALSE
\ No newline at end of file
diff --git a/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm b/code/modules/clothing/under/polychromic_clothes.dm
similarity index 86%
rename from modular_citadel/code/modules/clothing/under/polychromic_clothes.dm
rename to code/modules/clothing/under/polychromic_clothes.dm
index c0f7a5d639..9649d93eed 100644
--- a/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm
+++ b/code/modules/clothing/under/polychromic_clothes.dm
@@ -4,7 +4,7 @@
// Polychromic clothes simply consist of 4 sprites: A base, unrecoloured sprite, and up to 3 greyscaled sprites. //
// In order to add more polychromic clothes, simply create a base sprite, and up to 3 recolourable overlays for it, //
// and then name them as follows: [name], [name]-primary, [name]-secondary, [name]-tertiary. The sprites should //
-// ideally be in 'modular_citadel/icons/polyclothes/item/uniform.dmi' and 'modular_citadel/icons/polyclothes/mob/uniform.dmi' for the //
+// ideally be in 'icons/obj/clothing/uniform.dmi' and 'icons/mob/uniform.dmi' for the //
// worn sprites. After that, copy paste the code from any of the example clothes and //
// change the names around. [name] should go in BOTH icon_state and item_color. You can preset colors and disable //
// any overlays using the self-explainatory vars. //
@@ -15,8 +15,6 @@
/obj/item/clothing/under/polychromic //enables all three overlays to reduce copypasta and defines basic stuff
name = "polychromic suit"
desc = "For when you want to show off your horrible colour coordination skills."
- icon = 'modular_citadel/icons/polyclothes/item/uniform.dmi'
- alternate_worn_icon = 'modular_citadel/icons/polyclothes/mob/uniform.dmi'
icon_state = "polysuit"
item_color = "polysuit"
item_state = "sl_suit"
@@ -27,23 +25,22 @@
secondary_color = "#FFFFFF"
tertiary_color = "#808080"
can_adjust = FALSE
- mutantrace_variation = NO_MUTANTRACE_VARIATION // because I'm too lazy to port these to digi-compatible and to prove a point from /tg/ whining - Pooj
- suit_style = NORMAL_SUIT_STYLE
+ mutantrace_variation = NO_MUTANTRACE_VARIATION //Not all clothes are currently digi-compatible (only the shorts are as of time of writing)
-/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
+/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens.
. = ..()
if(hasprimary | hassecondary | hastertiary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
+ var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[item_color]-primary") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
if(hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
+ var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[item_color]-secondary")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
- var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
+ var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[item_color]-tertiary")
tertiary_worn.color = tertiary_color
. += tertiary_worn
@@ -89,6 +86,7 @@
secondary_color = "#808080"
tertiary_color = "#808080"
body_parts_covered = CHEST|GROIN|ARMS
+ mutantrace_variation = MUTANTRACE_VARIATION //to enable digitigrade wearing
/obj/item/clothing/under/polychromic/jumpsuit
name = "polychromic tri-tone jumpsuit"
diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm
index 795515835e..0e14f9f5be 100644
--- a/code/modules/crafting/craft.dm
+++ b/code/modules/crafting/craft.dm
@@ -439,4 +439,4 @@
/datum/mind/proc/teach_crafting_recipe(R)
if(!learned_recipes)
learned_recipes = list()
- learned_recipes |= R
\ No newline at end of file
+ learned_recipes |= R
diff --git a/code/modules/crafting/recipes/recipes_clothing.dm b/code/modules/crafting/recipes/recipes_clothing.dm
index 4f06a44811..8cb35df9d1 100644
--- a/code/modules/crafting/recipes/recipes_clothing.dm
+++ b/code/modules/crafting/recipes/recipes_clothing.dm
@@ -163,26 +163,7 @@
name = "Cosmic Winter Coat"
result = /obj/item/clothing/suit/hooded/wintercoat/cosmic
reqs = list(/obj/item/clothing/suit/hooded/wintercoat = 1,
- /obj/item/clothing/suit/hooded/wintercoat/captain = 1,
- /obj/item/clothing/suit/hooded/wintercoat/hop = 1,
- /obj/item/clothing/suit/hooded/wintercoat/hos = 1,
- /obj/item/clothing/suit/hooded/wintercoat/rd = 1,
- /obj/item/clothing/suit/hooded/wintercoat/ce = 1,
- /obj/item/clothing/suit/hooded/wintercoat/cmo = 1,
- /obj/item/clothing/suit/hooded/wintercoat/qm = 1,
- /obj/item/clothing/suit/hooded/wintercoat/robotics = 1,
- /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 1,
- /obj/item/clothing/suit/hooded/wintercoat/engineering = 1,
- /obj/item/clothing/suit/hooded/wintercoat/science = 1,
- /obj/item/clothing/suit/hooded/wintercoat/genetics = 1,
- /obj/item/clothing/suit/hooded/wintercoat/chemistry = 1,
- /obj/item/clothing/suit/hooded/wintercoat/medical = 1,
- /obj/item/clothing/suit/hooded/wintercoat/viro = 1,
- /obj/item/clothing/suit/hooded/wintercoat/janitor = 1,
- /obj/item/clothing/suit/hooded/wintercoat/security = 1,
- /obj/item/clothing/suit/hooded/wintercoat/cargo = 1,
- /obj/item/clothing/suit/hooded/wintercoat/hydro = 1,
- /obj/item/clothing/suit/hooded/wintercoat/miner = 1)
+ /obj/item/bedsheet/cosmos = 1)
time = 60
always_availible = TRUE
category = CAT_CLOTHING
diff --git a/code/modules/crafting/recipes/recipes_misc.dm b/code/modules/crafting/recipes/recipes_misc.dm
index 00878d1c59..70dd4d1370 100644
--- a/code/modules/crafting/recipes/recipes_misc.dm
+++ b/code/modules/crafting/recipes/recipes_misc.dm
@@ -320,3 +320,41 @@
reqs = list(/obj/item/stack/rods = 2,
/obj/item/clothing/under/rank/security = 1)
category = CAT_MISC
+
+ /datum/crafting_recipe/bloodsucker/vassalrack
+ name = "Persuasion Rack"
+ //desc = "For converting crewmembers into loyal Vassals."
+ result = /obj/structure/bloodsucker/vassalrack
+ tools = list(/obj/item/weldingtool,
+ ///obj/item/screwdriver,
+ /obj/item/wrench
+ )
+ reqs = list(/obj/item/stack/sheet/mineral/wood = 3,
+ /obj/item/stack/sheet/metal = 2,
+ /obj/item/restraints/handcuffs/cable = 2,
+ ///obj/item/storage/belt = 1
+ ///obj/item/stack/sheet/animalhide = 1, // /obj/item/stack/sheet/leather = 1,
+ ///obj/item/stack/sheet/plasteel = 5
+ )
+ //parts = list(/obj/item/storage/belt = 1
+ // )
+
+ time = 150
+ category = CAT_MISC
+ always_availible = FALSE // Disabled til learned
+
+
+ /datum/crafting_recipe/bloodsucker/candelabrum
+ name = "Candelabrum"
+ //desc = "For converting crewmembers into loyal Vassals."
+ result = /obj/structure/bloodsucker/candelabrum
+ tools = list(/obj/item/weldingtool,
+ /obj/item/wrench
+ )
+ reqs = list(/obj/item/stack/sheet/metal = 3,
+ /obj/item/stack/rods = 1,
+ /obj/item/candle = 1
+ )
+ time = 100
+ category = CAT_MISC
+ always_availible = FALSE // Disabled til learned
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 5bf7e3dff3..92f412dd89 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -132,14 +132,10 @@
transfer_fingerprints_to(B)
qdel(src)
-
-
-
////////////////////////////////////////////////////////////////////////////////
/// Drinks. END
////////////////////////////////////////////////////////////////////////////////
-
/obj/item/reagent_containers/food/drinks/trophy
name = "pewter cup"
desc = "Everyone gets a trophy."
@@ -178,7 +174,6 @@
materials = list(MAT_SILVER=800)
volume = 100
-
/obj/item/reagent_containers/food/drinks/trophy/bronze_cup
name = "bronze cup"
desc = "At least you ranked!"
@@ -190,7 +185,7 @@
materials = list(MAT_METAL=400)
volume = 25
-///////////////////////////////////////////////Drinks
+///////////////////////////////////////////////Drinks/////////////////////////////////////////
//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
// Formatting is the same as food.
@@ -203,6 +198,7 @@
spillable = TRUE
resistance_flags = FREEZE_PROOF
isGlass = FALSE
+ foodtype = BREAKFAST
//Used by MREs
/obj/item/reagent_containers/food/drinks/coffee/type2
@@ -211,7 +207,6 @@
icon = 'icons/obj/food/containers.dmi'
icon_state = "condi_cornoil"
-
/obj/item/reagent_containers/food/drinks/ice
name = "ice cup"
desc = "Careful, cold ice, do not chew."
@@ -243,10 +238,8 @@
desc = "Made in Space South America."
list_reagents = list("hot_coco" = 30, "sugar" = 5)
foodtype = SUGAR
-
resistance_flags = FREEZE_PROOF
-
/obj/item/reagent_containers/food/drinks/dry_ramen
name = "cup ramen"
desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years."
@@ -325,27 +318,27 @@
icon_state = "orangebox"
name = "orange juice box"
desc = "A great source of vitamins. Stay healthy!"
- foodtype = FRUIT
+ foodtype = FRUIT | BREAKFAST
if("milk")
icon_state = "milkbox"
name = "carton of milk"
desc = "An excellent source of calcium for growing space explorers."
- foodtype = DAIRY
+ foodtype = DAIRY | BREAKFAST
if("applejuice")
icon_state = "juicebox"
name = "apple juice box"
desc = "Sweet apple juice. Don't be late for school!"
- foodtype = FRUIT
+ foodtype = FRUIT | BREAKFAST
if("grapejuice")
icon_state = "grapebox"
name = "grape juice box"
desc = "Tasty grape juice in a fun little container. Non-alcoholic!"
- foodtype = FRUIT
+ foodtype = FRUIT | BREAKFAST
if("chocolate_milk")
icon_state = "chocolatebox"
name = "carton of chocolate milk"
desc = "Milk for cool kids!"
- foodtype = SUGAR
+ foodtype = SUGAR | BREAKFAST
if("eggnog")
icon_state = "nog2"
name = "carton of eggnog"
@@ -357,8 +350,7 @@
desc = "A small carton, intended for holding drinks."
-
-//////////////////////////drinkingglass and shaker//
+//////////////////////////drinkingglass and shaker/////////////////////////////////////////////////////////////////////////////////////
//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
// icon states.
@@ -399,8 +391,8 @@
volume = 30
spillable = TRUE
-//////////////////////////soda_cans//
-//These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm
+//////////////////////////soda_cans////////////////////////////////////////////////////
+//These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm//
/obj/item/reagent_containers/food/drinks/soda_cans
name = "soda can"
@@ -426,7 +418,6 @@
qdel(src)
..()
-
/obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user)
if(!is_drainable())
to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh
@@ -515,6 +506,13 @@
list_reagents = list("shamblers" = 30)
foodtype = SUGAR | JUNKFOOD
+/obj/item/reagent_containers/food/drinks/soda_cans/buzz_fuzz
+ name = "Buzz Fuzz"
+ desc = "The sister drink of Shambler's Juice! Uses real honey, making it a sweet tooth's dream drink. The slogan reads ''A Hive of Flavour'', there's also a label about how it is adddicting."
+ icon_state = "honeysoda_can"
+ list_reagents = list("buzz_fuzz" = 25, "honey" = 5)
+ foodtype = SUGAR | JUNKFOOD
+
/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull
name = "Grey Bull"
desc = "Grey Bull, it gives you gloves!"
@@ -527,3 +525,10 @@
desc = "There is no air shortage. Do not drink."
icon_state = "air"
list_reagents = list("nitrogen" = 24, "oxygen" = 6)
+
+/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy
+ name = "Monkey Energy"
+ desc = "Unleash the ape!"
+ icon_state = "monkey_energy"
+ list_reagents = list("monkey_energy" = 50)
+ foodtype = SUGAR | JUNKFOOD
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 6a69721cef..271ff93b15 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -429,7 +429,7 @@
righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
isGlass = FALSE
list_reagents = list("orangejuice" = 100)
- foodtype = FRUIT
+ foodtype = FRUIT| BREAKFAST
/obj/item/reagent_containers/food/drinks/bottle/cream
name = "milk cream"
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index 132e000893..6d3f007fd9 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -5,6 +5,9 @@
/// the parent to the exclusion list in code/__HELPERS/unsorted.dm's
/// get_random_food proc.
////////////////////////////////////////////////////////////////////////////////
+
+#define STOP_SERVING_BREAKFAST (15 MINUTES)
+
/obj/item/reagent_containers/food
possible_transfer_amounts = list()
volume = 50 //Sets the default container amount for all food items.
@@ -40,4 +43,8 @@
if(foodtype & H.dna.species.toxic_food)
to_chat(H, "You don't feel so good... ")
H.adjust_disgust(25 + 30 * fraction)
+ if((foodtype & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST)
+ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast)
last_check_time = world.time
+
+#undef STOP_SERVING_BREAKFAST
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index 1d0b626d98..7288d91f2d 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -26,6 +26,7 @@
"cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"),
"sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"),
"mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks."),
+ "bbqsauce" = list("condi_bbq", "BBQ sauce", "Hand wipes not included."),
"peanut_butter" = list("peanutbutter", "peanut butter jar", "A deliciously and sticky spread made from peanuts."))
var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
@@ -299,3 +300,8 @@
name = "astrotame pack"
originalname = "astrotame"
list_reagents = list("astrotame" = 5)
+
+/obj/item/reagent_containers/food/condiment/pack/bbqsauce
+ name = "bbq sauce pack"
+ originalname = "bbq sauce"
+ list_reagents = list("bbqsauce" = 10)
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 8724841643..239273e421 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -55,7 +55,7 @@
mix_filling_color(S)
S.reagents.trans_to(src,min(S.reagents.total_volume, 15)) //limit of 15, we don't want our custom food to be completely filled by just one ingredient with large reagent volume.
foodtype |= S.foodtype
- update_overlays(S)
+ update_snack_overlays(S)
to_chat(user, "You add the [I.name] to the [name]. ")
update_name(S)
else
@@ -103,7 +103,7 @@
rgbcolor[4] = (customcolor[4]+ingcolor[4])/2
filling_color = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4])
-/obj/item/reagent_containers/food/snacks/customizable/update_overlays(obj/item/reagent_containers/food/snacks/S)
+/obj/item/reagent_containers/food/snacks/customizable/update_snack_overlays(obj/item/reagent_containers/food/snacks/S)
var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling")
if(S.filling_color == "#FFFFFF")
filling.color = pick("#FF0000","#0000FF","#008000","#FFFF00")
@@ -139,7 +139,7 @@
/obj/item/reagent_containers/food/snacks/customizable/initialize_slice(obj/item/reagent_containers/food/snacks/slice, reagents_per_slice)
..()
slice.filling_color = filling_color
- slice.update_overlays(src)
+ slice.update_snack_overlays(src)
/obj/item/reagent_containers/food/snacks/customizable/Destroy()
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index b8a63afb7f..97e8423e78 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -52,6 +52,8 @@ All foods are distributed among various categories. Use common sense.
var/list/bonus_reagents //the amount of reagents (usually nutriment and vitamin) added to crafted/cooked snacks, on top of the ingredients reagents.
var/customfoodfilling = 1 // whether it can be used as filling in custom food
var/list/tastes // for example list("crisps" = 2, "salt" = 1)
+ var/dunkable = FALSE // for dunkable food, make true
+ var/dunk_amount = 10 // how much reagent is transferred per dunk
//Placeholder for effect that trigger on eating that aren't tied to reagents.
@@ -267,7 +269,7 @@ All foods are distributed among various categories. Use common sense.
trash = null
return
-/obj/item/reagent_containers/food/snacks/proc/update_overlays(obj/item/reagent_containers/food/snacks/S)
+/obj/item/reagent_containers/food/snacks/proc/update_snack_overlays(obj/item/reagent_containers/food/snacks/S)
cut_overlays()
var/mutable_appearance/filling = mutable_appearance(icon, "[initial(icon_state)]_filling")
if(S.filling_color == "#FFFFFF")
@@ -328,6 +330,24 @@ All foods are distributed among various categories. Use common sense.
M.emote("me", EMOTE_VISIBLE, "[sattisfaction_text]")
qdel(src)
+//////////////////////////////////////////Dunking///////////////////////////////////////////
+
+/obj/item/reagent_containers/food/snacks/afterattack(obj/item/reagent_containers/M, mob/user, proximity)
+ . = ..()
+ if(!dunkable || !proximity)
+ return
+ if(istype(M, /obj/item/reagent_containers/glass) || istype(M, /obj/item/reagent_containers/food/drinks)) //you can dunk dunkable snacks into beakers or drinks
+ if(!M.is_drainable())
+ to_chat(user, "[M] is unable to be dunked in! ")
+ return
+ if(M.reagents.trans_to(src, dunk_amount)) //if reagents were transfered, show the message
+ to_chat(user, "You dunk the [M]. ")
+ return
+ if(!M.reagents.total_volume)
+ to_chat(user, "[M] is empty! ")
+ else
+ to_chat(user, "[src] is full! ")
+
// //////////////////////////////////////////////Store////////////////////////////////////////
/// All the food items that can store an item inside itself, like bread or cake.
/obj/item/reagent_containers/food/snacks/store
diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm
index ea573a2cf0..8f02cd81b4 100644
--- a/code/modules/food_and_drinks/food/snacks/meat.dm
+++ b/code/modules/food_and_drinks/food/snacks/meat.dm
@@ -57,6 +57,33 @@
else if(subjectjob)
S.name = "[subjectjob] meatsteak"
+/obj/item/reagent_containers/food/snacks/meat/rawcrab
+ name = "raw crab meat"
+ desc = "A pile of raw crab meat."
+ icon_state = "crabmeatraw"
+ cooked_type = /obj/item/reagent_containers/food/snacks/meat/crab
+ bitesize = 3
+ list_reagents = list("nutriment" = 1, "cooking_oil" = 3)
+ filling_color = "#EAD079"
+ tastes = list("raw crab" = 1)
+ foodtype = RAW | MEAT
+
+/obj/item/reagent_containers/food/snacks/meat/crab
+ name = "crab meat"
+ desc = "Some deliciously cooked crab meat."
+ icon_state = "crabmeat"
+ list_reagents = list("nutriment" = 2)
+ bonus_reagents = list("nutriment" = 3, "vitamin" = 2, "cooking_oil" = 2)
+ filling_color = "#DFB73A"
+ tastes = list("crab" = 1)
+ foodtype = MEAT
+
+/obj/item/reagent_containers/food/snacks/meat/slab/chicken
+ name = "chicken meat"
+ desc = "A slab of raw chicken. Remember to wash your hands!"
+ cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/chicken
+ slice_path = /obj/item/reagent_containers/food/snacks/meat/rawcutlet/chicken
+ tastes = list("chicken" = 1)
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime
icon_state = "slimemeat"
@@ -132,6 +159,28 @@
tastes = list("brains" = 1, "meat" = 1)
foodtype = RAW | MEAT | TOXIC
+/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_state = "ipcmeat"
+ desc = "Gross robot meat."
+ filling_color = "#000000"
+ tastes = list("metal" = 1)
+
+/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian
+ desc = "Tastes like chicken, that's because it is!"
+ 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)
+
+
////////////////////////////////////// OTHER MEATS ////////////////////////////////////////////////////////
@@ -183,7 +232,6 @@
tastes = list("meat" = 1, "salmon" = 1)
foodtype = RAW | MEAT
-
/obj/item/reagent_containers/food/snacks/meat/slab/xeno
name = "xeno meat"
desc = "A slab of meat."
@@ -207,7 +255,6 @@
tastes = list("cobwebs" = 1)
foodtype = RAW | MEAT | TOXIC
-
/obj/item/reagent_containers/food/snacks/meat/slab/goliath
name = "goliath meat"
desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava."
@@ -255,7 +302,7 @@
bonus_reagents = list("nutriment" = 1, "vitamin" = 1, "cooking_oil" = 2)
filling_color = "#854817"
tastes = list("bacon" = 1)
- foodtype = MEAT
+ foodtype = MEAT | BREAKFAST
/obj/item/reagent_containers/food/snacks/meat/slab/gondola
name = "gondola meat"
@@ -281,6 +328,10 @@
foodtype = MEAT
tastes = list("meat" = 1)
+/obj/item/reagent_containers/food/snacks/meat/steak/chicken
+ name = "chicken steak" //Can you have chicken steaks? Maybe this should be renamed once it gets new sprites.
+ tastes = list("chicken" = 1)
+
/obj/item/reagent_containers/food/snacks/meat/steak/plain
foodtype = MEAT
@@ -288,6 +339,10 @@
tastes = list("tender meat" = 1)
foodtype = MEAT | GROSS
+/obj/item/reagent_containers/food/snacks/meat/steak/penguin
+ name = "penguin steak"
+ tastes = list("beef" = 1, "cod fish" = 1)
+
/obj/item/reagent_containers/food/snacks/meat/steak/killertomato
name = "killer tomato steak"
tastes = list("tomato" = 1)
@@ -354,6 +409,11 @@
else if(subjectjob)
S.name = "[subjectjob] [initial(S.name)]"
+/obj/item/reagent_containers/food/snacks/meat/rawcutlet/chicken
+ name = "raw chicken cutlet"
+ cooked_type = /obj/item/reagent_containers/food/snacks/meat/cutlet/chicken
+ tastes = list("chicken" = 1)
+
/obj/item/reagent_containers/food/snacks/meat/rawcutlet/killertomato
name = "raw killer tomato cutlet"
cooked_type = /obj/item/reagent_containers/food/snacks/meat/cutlet/killertomato
@@ -419,3 +479,11 @@
/obj/item/reagent_containers/food/snacks/meat/cutlet/gondola
name = "gondola cutlet"
tastes = list("meat" = 1, "tranquility" = 1)
+
+/obj/item/reagent_containers/food/snacks/meat/cutlet/penguin
+ name = "penguin cutlet"
+ tastes = list("beef" = 1, "cod fish" = 1)
+
+/obj/item/reagent_containers/food/snacks/meat/cutlet/chicken
+ name = "chicken cutlet"
+ tastes = list("chicken" = 1)
diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm
index 0f11fc8ed2..628b883e73 100644
--- a/code/modules/food_and_drinks/food/snacks_bread.dm
+++ b/code/modules/food_and_drinks/food/snacks_bread.dm
@@ -5,7 +5,7 @@
slices_num = 5
tastes = list("bread" = 10)
foodtype = GRAIN
-
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/breadslice
icon = 'icons/obj/food/burgerbread.dmi'
@@ -16,6 +16,7 @@
slot_flags = ITEM_SLOT_HEAD
customfoodfilling = 0 //to avoid infinite bread-ception
foodtype = GRAIN
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/store/bread/plain
name = "bread"
@@ -270,6 +271,7 @@ GLOBAL_LIST_INIT(frying_bad_chems, list(
list_reagents = list("nutriment" = 4)
bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
tastes = list("butter" = 1, "toast" = 1)
+ foodtype = GRAIN | BREAKFAST
/obj/item/reagent_containers/food/snacks/butterbiscuit
name = "butter biscuit"
@@ -280,6 +282,7 @@ GLOBAL_LIST_INIT(frying_bad_chems, list(
list_reagents = list("nutriment" = 5)
bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
tastes = list("butter" = 1, "biscuit" = 1)
+ foodtype = GRAIN | BREAKFAST
/obj/item/reagent_containers/food/snacks/butterdog
name = "butterdog"
diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm
index 814875d2da..8b6d6212f1 100644
--- a/code/modules/food_and_drinks/food/snacks_burgers.dm
+++ b/code/modules/food_and_drinks/food/snacks_burgers.dm
@@ -134,13 +134,54 @@
tastes = list("bun" = 4, "brains" = 2)
foodtype = GRAIN | MEAT | GROSS
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/item/reagent_containers/food/snacks/burger/ghost
name = "ghost burger"
desc = "Too Spooky!"
- alpha = 125
+ icon_state = "ghostburger"
bonus_reagents = list("nutriment" = 5, "vitamin" = 12)
tastes = list("bun" = 4, "ectoplasm" = 2)
foodtype = GRAIN
+ alpha = 170
+ verb_say = "moans"
+ verb_yell = "wails"
+
+/obj/item/reagent_containers/food/snacks/burger/ghost/Initialize()
+ . = ..()
+ START_PROCESSING(SSobj, src)
+
+/obj/item/reagent_containers/food/snacks/burger/ghost/process()
+ if(!isturf(loc)) //no floating out of bags
+ return
+ var/paranormal_activity = rand(100)
+ switch(paranormal_activity)
+ if(97 to 100)
+ audible_message("[src] rattles a length of chain.")
+ playsound(loc,'sound/spookoween/chain_rattling.ogg', 300, TRUE)
+ if(91 to 96)
+ say(pick("OoOoOoo.", "OoooOOooOoo!!"))
+ if(84 to 90)
+ dir = pick(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
+ step(src, dir)
+ if(71 to 83)
+ step(src, dir)
+ if(65 to 70)
+ var/obj/machinery/light/L = locate(/obj/machinery/light) in view(4, src)
+ if(L)
+ L.flicker()
+ if(62 to 64)
+ playsound(loc,pick('sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE)
+ if(61)
+ visible_message("[src] spews out a glob of ectoplasm!")
+ new /obj/effect/decal/cleanable/greenglow/ecto(loc)
+ playsound(loc,'sound/effects/splat.ogg', 200, TRUE)
+
+ //If i was less lazy i would make the burger forcefeed itself to a nearby mob here.
+
+/obj/item/reagent_containers/food/snacks/burger/ghost/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ . = ..()
+//////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/item/reagent_containers/food/snacks/burger/red
name = "red burger"
@@ -281,3 +322,49 @@
bonus_reagents = list("nutriment" = 8, "vitamin" = 1)
tastes = list("bun" = 4, "bacon" = 2)
foodtype = GRAIN | MEAT
+
+/obj/item/reagent_containers/food/snacks/burger/soylent
+ name = "soylent burger"
+ desc = "A eco-friendly burger made using upcycled low value biomass."
+ icon_state = "soylentburger"
+ bonus_reagents = list("nutriment" = 5, "vitamin" = 3)
+ tastes = list("bun" = 2, "assistant" = 4)
+ foodtype = GRAIN | MEAT | DAIRY
+
+/obj/item/reagent_containers/food/snacks/burger/rib
+ name = "mcrib"
+ desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it."
+ icon_state = "mcrib"
+ bonus_reagents = list("bbqsauce" = 5, "vitamin" = 3)
+ tastes = list("bun" = 2, "pork patty" = 4)
+ foodtype = GRAIN | MEAT
+
+/obj/item/reagent_containers/food/snacks/burger/mcguffin
+ name = "mcguffin"
+ desc = "A cheap and greasy imitation of an eggs benedict."
+ icon_state = "mcguffin"
+ tastes = list("muffin" = 2, "bacon" = 3)
+ bonus_reagents = list("eggyolk" = 3, "nutriment" = 1)
+ foodtype = GRAIN | MEAT | BREAKFAST
+
+/obj/item/reagent_containers/food/snacks/burger/chicken
+ name = "chicken sandwich" //Apparently the proud people of Americlapstan object to this thing being called a burger. Apparently McDonald's just calls it a burger in Europe as to not scare and confuse us.
+ desc = "A delicious chicken sandwich, it is said the proceeds from this treat helps criminalize homosexuality on the space frontier."
+ icon_state = "chickenburger"
+ tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1)
+ bonus_reagents = list("mayonnaise" = 3, "cooking_oil" = 2, "nutriment" = 2)
+ foodtype = GRAIN | MEAT | FRIED
+
+/obj/item/reagent_containers/food/snacks/burger/cheese
+ name = "cheese burger"
+ desc = "This noble burger stands proudly clad in golden cheese."
+ icon_state = "cheeseburger"
+ tastes = list("bun" = 2, "beef patty" = 4, "cheese" = 3)
+ bonus_reagents = list("nutriment" = 1)
+ foodtype = GRAIN | MEAT | DAIRY
+
+/obj/item/reagent_containers/food/snacks/burger/cheese/Initialize()
+ . = ..()
+ if(prob(33))
+ icon_state = "cheeseburgeralt"
+
diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm
index 7dadd2b12e..dd4dad4d9b 100644
--- a/code/modules/food_and_drinks/food/snacks_cake.dm
+++ b/code/modules/food_and_drinks/food/snacks_cake.dm
@@ -379,3 +379,21 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
filling_color = "#00FFFF"
tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10)
foodtype = GRAIN | SUGAR | DAIRY
+
+/obj/item/reagent_containers/food/snacks/store/cake/trumpet
+ name = "spaceman's cake"
+ desc = "A spaceman's trumpet frosted cake."
+ icon_state = "trumpetcake"
+ slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/trumpet
+ bonus_reagents = list("polypyr" = 15, "cream" = 5, "vitamin" = 5, "berryjuice" = 5)
+ filling_color = "#7A3D80"
+ tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
+ foodtype = GRAIN | DAIRY | FRUIT | SUGAR
+
+/obj/item/reagent_containers/food/snacks/cakeslice/trumpet
+ name = "spaceman's cake"
+ desc = "A spaceman's trumpet frosted cake."
+ icon_state = "trumpetcakeslice"
+ filling_color = "#7A3D80"
+ tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
+ foodtype = GRAIN | DAIRY | FRUIT | SUGAR
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index 510783479e..0d51db04ce 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -94,7 +94,7 @@
filling_color = "#FFFFF0"
list_reagents = list("nutriment" = 3)
tastes = list("egg" = 4, "salt" = 1, "pepper" = 1)
- foodtype = MEAT | FRIED
+ foodtype = MEAT | FRIED | BREAKFAST
/obj/item/reagent_containers/food/snacks/boiledegg
name = "boiled egg"
@@ -104,7 +104,7 @@
filling_color = "#FFFFF0"
list_reagents = list("nutriment" = 2, "vitamin" = 1)
tastes = list("egg" = 1)
- foodtype = MEAT
+ foodtype = MEAT | BREAKFAST
/obj/item/reagent_containers/food/snacks/omelette //FUCK THIS
name = "omelette du fromage"
@@ -116,7 +116,7 @@
bitesize = 1
w_class = WEIGHT_CLASS_NORMAL
tastes = list("egg" = 1, "cheese" = 1)
- foodtype = MEAT
+ foodtype = MEAT | BREAKFAST
/obj/item/reagent_containers/food/snacks/omelette/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/kitchen/fork))
@@ -145,5 +145,4 @@
w_class = WEIGHT_CLASS_NORMAL
list_reagents = list("nutriment" = 6, "vitamin" = 4)
tastes = list("egg" = 1, "bacon" = 1, "bun" = 1)
-
- foodtype = MEAT
+ foodtype = MEAT | BREAKFAST
diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm
index 3988909b30..4a4c5ddb88 100644
--- a/code/modules/food_and_drinks/food/snacks_frozen.dm
+++ b/code/modules/food_and_drinks/food/snacks_frozen.dm
@@ -81,16 +81,15 @@
filling_color = "#87CEFA"
tastes = list("blue cherries" = 2, "ice cream" = 2)
foodtype = FRUIT | DAIRY
-
/////////////
//SNOWCONES//
/////////////
/obj/item/reagent_containers/food/snacks/snowcones //We use this as a base for all other snowcones
- name = "flaverless snowcone"
- desc = "Its just harden water slivers. Still fun to chew on."
+ name = "flavorless snowcone"
+ desc = "It's just shaved ice. Still fun to chew on."
icon = 'icons/obj/food/snowcones.dmi'
- icon_state = "flaverless_sc"
+ icon_state = "flavorless_sc"
trash = /obj/item/reagent_containers/food/drinks/sillycup //We dont eat paper cups
bonus_reagents = list("water" = 10) //Base line will allways give water
list_reagents = list("water" = 1) // We dont get food for water/juices
@@ -99,106 +98,106 @@
foodtype = SUGAR //We use SUGAR as a base line to act in as junkfood, other wise we use fruit
/obj/item/reagent_containers/food/snacks/snowcones/lime
- name = "lime flavored snowcone"
- desc = "A lime flavord snowball in a paper cup."
+ name = "lime snowcone"
+ desc = "Lime syrup drizzled over a snowball in a paper cup."
icon_state = "lime_sc"
list_reagents = list("nutriment" = 1, "limejuice" = 5)
tastes = list("ice" = 1, "water" = 1, "limes" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/lemon
- name = "lemon flavored snowcone"
- desc = "A lemon flavord snowball in a paper cup."
+ name = "lemon snowcone"
+ desc = "Lemon syrup drizzled over a snowball in a paper cup."
icon_state = "lemon_sc"
list_reagents = list("nutriment" = 1, "lemonjuice" = 5)
tastes = list("ice" = 1, "water" = 1, "lemons" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/apple
- name = "apple flavored snowcone"
- desc = "A apple flavord snowball in a paper cup."
- icon_state = "blue_sc"
+ name = "apple snowcone"
+ desc = "Apple syrup drizzled over a snowball in a paper cup."
+ icon_state = "amber_sc"
list_reagents = list("nutriment" = 1, "applejuice" = 5)
tastes = list("ice" = 1, "water" = 1, "apples" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/grape
- name = "grape flavored snowcone"
- desc = "A grape flavord snowball in a paper cup."
+ name = "grape snowcone"
+ desc = "Grape syrup drizzled over a snowball in a paper cup."
icon_state = "grape_sc"
- list_reagents = list("nutriment" = 1, "berryjuice" = 5)
+ list_reagents = list("nutriment" = 1, "grapejuice" = 5)
tastes = list("ice" = 1, "water" = 1, "grape" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/orange
- name = "orange flavored snowcone"
- desc = "A orange flavor dizzled on a snowball in a paper cup."
+ name = "orange snowcone"
+ desc = "Orange syrup drizzled over a snowball in a paper cup."
icon_state = "orange_sc"
- list_reagents = list("nutriment" = 1, "orangejuice" = 10)
- tastes = list("ice" = 1, "water" = 1, "berries" = 5)
+ list_reagents = list("nutriment" = 1, "orangejuice" = 5)
+ tastes = list("ice" = 1, "water" = 1, "orange" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/blue
- name = "bluecherry flavored snowcone"
- desc = "A bluecharry flavord snowball in a paper cup, how rare!"
- icon_state = "red_sc"
+ name = "bluecherry snowcone"
+ desc = "Bluecherry syrup drizzled over a snowball in a paper cup, how rare!"
+ icon_state = "blue_sc"
list_reagents = list("nutriment" = 1, "bluecherryjelly" = 5)
- tastes = list("ice" = 1, "water" = 1, "blue" = 5)
+ tastes = list("ice" = 1, "water" = 1, "blue" = 5, "cherries" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/red
- name = "cherry flavored snowcone"
- desc = "A cherry flavord snowball in a paper cup."
- icon_state = "blue_sc"
+ name = "cherry snowcone"
+ desc = "Cherry syrup drizzled over a snowball in a paper cup."
+ icon_state = "red_sc"
list_reagents = list("nutriment" = 1, "cherryjelly" = 5)
- tastes = list("ice" = 1, "water" = 1, "red" = 5)
+ tastes = list("ice" = 1, "water" = 1, "red" = 5, "cherries" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/kiwi
- name = "kiwi flavored snowcone"
- desc = "A kiwi flavord snowball in a paper cup."
+ name = "kiwi snowcone"
+ desc = "A kiwi snowball in a paper cup."
icon_state = "kiwi_sc"
list_reagents = list("nutriment" = 3, "vitamin" = 6)
tastes = list("ice" = 1, "space" = 3, "kiwi" = 5)
foodtype = FRUIT
-/obj/item/reagent_containers/food/snacks/snowcones/mix
- name = "mixed berry flavored snowcone"
- desc = "A mix of different flavors dizzled on a snowball in a paper cup."
- icon_state = "berry_sc"
- list_reagents = list("nutriment" = 1, "berryjuice" = 10)
- tastes = list("ice" = 1, "water" = 1, "berries" = 5)
- foodtype = FRUIT
-
/obj/item/reagent_containers/food/snacks/snowcones/peach
- name = "peach flavored snowcone"
- desc = "A peach flavord snowball in a paper cup."
+ name = "peach snowcone"
+ desc = "A peach snowball in a paper cup."
icon_state = "peach_sc"
list_reagents = list("nutriment" = 1, "peachjuice" = 10)
tastes = list("ice" = 1, "water" = 1, " peach" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/strawberry
- name = "strawberry flavored snowcone"
- desc = "A strawberry flavord snowball in a paper cup."
+ name = "strawberry snowcone"
+ desc = "A strawberry snowball in a paper cup."
icon_state = "blue_sc"
list_reagents = list("nutriment" = 1, "berryjuice" = 10)
tastes = list("ice" = 1, "water" = 1, " strawberry" = 5)
foodtype = FRUIT
+/obj/item/reagent_containers/food/snacks/snowcones/berry
+ name = "berry snowcone"
+ desc = "Berry syrup drizzled over a snowball in a paper cup."
+ icon_state = "berry_sc"
+ list_reagents = list("nutriment" = 1, "berryjuice" = 5)
+ tastes = list("ice" = 1, "water" = 1, "berries" = 5)
+ foodtype = FRUIT
+
/obj/item/reagent_containers/food/snacks/snowcones/fruitsalad
- name = "mixed fruit flavored snowcone"
- desc = "A mix of different flavors dizzled on a snowball in a paper cup."
+ name = "fruit salad snowcone"
+ desc = "A delightful mix of citrus syrups drizzled over a snowball in a paper cup."
icon_state = "fruitsalad_sc"
- list_reagents = list("nutriment" = 1, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5)
- tastes = list("ice" = 1, "water" = 1, "fruits" = 25)
+ list_reagents = list("nutriment" = 1, "lemonjuice" = 5, "limejuice" = 5, "orangejuice" = 5)
+ tastes = list("ice" = 1, "water" = 1, "oranges" = 5, "limes" = 5, "lemons" = 5, "citrus" = 5, "salad" = 5)
foodtype = FRUIT
/obj/item/reagent_containers/food/snacks/snowcones/pineapple
- name = "pineapple flavored snowcone"
- desc = "A pineapple flavord snowball in a paper cup."
+ name = "pineapple snowcone"
+ desc = "Pineapple syrup drizzled over a snowball in a paper cup."
icon_state = "pineapple_sc"
- list_reagents = list("nutriment" = 1, "water" = 1)
+ list_reagents = list("nutriment" = 1, "water" = 10)
tastes = list("ice" = 1, "water" = 1, "pineapples" = 5)
foodtype = PINEAPPLE //Pineapple to allow all that like pineapple to enjoy
@@ -207,41 +206,46 @@
desc = "..."
icon_state = "mime_sc"
list_reagents = list("nutriment" = 1, "nothing" = 5)
- tastes = list("nothing" = 5)
+ tastes = list("ice" = 1, "water" = 1, "nothing" = 5)
/obj/item/reagent_containers/food/snacks/snowcones/clown
- name = "joke flavored snowcone"
- desc = "A waterd down jokeful flavord snowball in a paper cup."
+ name = "clown snowcone"
+ desc = "Laughter drizzled over a snowball in a paper cup."
icon_state = "clown_sc"
list_reagents = list("nutriment" = 1, "laughter" = 5)
- tastes = list("jokes" = 5, "brainfreeze" = 5, "joy" = 5)
+ tastes = list("ice" = 1, "water" = 1, "jokes" = 5, "brainfreeze" = 5, "joy" = 5)
/obj/item/reagent_containers/food/snacks/snowcones/soda
- name = "sodawater flavored snowcone"
- desc = "A waterd down sodawater flavored snowcone snowball in a paper cup."
+ name = "space cola snowcone"
+ desc = "Space Cola drizzled over a snowball in a paper cup."
icon_state = "soda_sc"
- list_reagents = list("nutriment" = 1, "sodawater" = 5)
- tastes = list("surgar" = 1, "water" = 5, "soda" = 5)
- foodtype = JUNKFOOD | SUGAR
+ list_reagents = list("nutriment" = 1, "space_cola" = 5)
+ tastes = list("ice" = 1, "water" = 1, "cola" = 5)
-/obj/item/reagent_containers/food/snacks/snowcones/pwgrmer
- name = "pwergamer flavored snowcone"
- desc = "A waterd down pwergamer soda flavord snowball in a paper cup."
- icon_state = "pwergamer_sc"
- list_reagents = list("nutriment" = 1, "laughter" = 1)
- tastes = list("vaild" = 5, "salt" = 5, "wats" = 5)
- foodtype = JUNKFOOD | SUGAR
+/obj/item/reagent_containers/food/snacks/snowcones/spacemountainwind
+ name = "Space Mountain Wind snowcone"
+ desc = "Space Mountain Wind drizzled over a snowball in a paper cup."
+ icon_state = "kiwi_sc"
+ list_reagents = list("nutriment" = 1, "spacemountainwind" = 5)
+ tastes = list("ice" = 1, "water" = 1, "mountain wind" = 5)
+
+/obj/item/reagent_containers/food/snacks/snowcones/pwrgame
+ name = "pwrgame snowcone"
+ desc = "Pwrgame soda drizzled over a snowball in a paper cup."
+ icon_state = "pwrgame_sc"
+ list_reagents = list("nutriment" = 1, "pwr_game" = 5)
+ tastes = list("ice" = 1, "water" = 1, "valid" = 5, "salt" = 5, "wats" = 5)
/obj/item/reagent_containers/food/snacks/snowcones/honey
- name = "honey flavored snowcone"
- desc = "A honey flavord snowball in a paper cup."
- icon_state = "honey_sc"
+ name = "honey snowcone"
+ desc = "Honey drizzled over a snowball in a paper cup."
+ icon_state = "amber_sc"
list_reagents = list("nutriment" = 1, "honey" = 5)
- tastes = list("pollen" = 5, "sweetness" = 5, "wax" = 1)
+ tastes = list("ice" = 1, "water" = 1, "flowers" = 5, "sweetness" = 5, "wax" = 1)
/obj/item/reagent_containers/food/snacks/snowcones/rainbow
- name = "rainbow color snowcone"
- desc = "A rainbow color snowball in a paper cup."
+ name = "rainbow snowcone"
+ desc = "A very colorful snowball in a paper cup."
icon_state = "rainbow_sc"
list_reagents = list("nutriment" = 5, "laughter" = 25)
- tastes = list("sunlight" = 5, "light" = 5, "slime" = 5, "paint" = 3, "clouds" = 3)
+ tastes = list("ice" = 1, "water" = 1, "sunlight" = 5, "light" = 5, "slime" = 5, "paint" = 3, "clouds" = 3)
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index 0b53ec8822..cf499c9d15 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -149,7 +149,7 @@
bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
list_reagents = list("nutriment" = 6, "vitamin" = 1)
tastes = list("meat" = 1)
- foodtype = MEAT
+ foodtype = MEAT | BREAKFAST
var/roasted = FALSE
/obj/item/reagent_containers/food/snacks/sausage/Initialize()
@@ -344,3 +344,19 @@
icon_state = "doubleratkebab"
tastes = list("rat meat" = 2, "metal" = 1)
bonus_reagents = list("nutriment" = 6, "vitamin" = 2)
+
+/obj/item/reagent_containers/food/snacks/kebab/fiesta
+ name = "fiesta skewer"
+ icon_state = "fiestaskewer"
+ tastes = list("tex-mex" = 3, "cumin" = 2)
+ bonus_reagents = list("vitamin" = 5, "capsaicin" = 3)
+
+/obj/item/reagent_containers/food/snacks/bbqribs
+ name = "bbq ribs"
+ desc = "BBQ ribs, slathered in a healthy coating of BBQ sauce. The least vegan thing to ever exist."
+ icon_state = "ribs"
+ w_class = WEIGHT_CLASS_NORMAL
+ list_reagents = list("nutriment" = 8, "vitamin" = 2, "bbqsauce" = 5)
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
+ tastes = list("meat" = 3, "smokey sauce" = 1)
+ foodtype = MEAT
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index ad0824dd79..58a0ab4382 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -47,6 +47,7 @@
filling_color = "#A0522D"
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/hugemushroomslice
name = "huge mushroom slice"
@@ -90,6 +91,7 @@
filling_color = "#FFD700"
tastes = list("fries" = 3, "salt" = 1)
foodtype = VEGETABLES | GRAIN | FRIED
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/tatortot
name = "tator tot"
@@ -99,6 +101,7 @@
filling_color = "FFD700"
tastes = list("potato" = 3, "valids" = 1)
foodtype = FRIED | VEGETABLES
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/soydope
name = "soy dope"
@@ -109,6 +112,7 @@
filling_color = "#DEB887"
tastes = list("soy" = 1)
foodtype = VEGETABLES
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/cheesyfries
name = "cheesy fries"
@@ -128,6 +132,7 @@
list_reagents = list("bad_food" = 30)
filling_color = "#8B4513"
foodtype = GROSS
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/carrotfries
name = "carrot fries"
@@ -401,7 +406,6 @@
tastes = list("death" = 2, "rock" = 1, "meat" = 1, "hot peppers" = 1)
foodtype = MEAT
-
/obj/item/reagent_containers/food/snacks/powercrepe
name = "Powercrepe"
desc = "With great power, comes great crepes. It looks like a pancake filled with jelly but packs quite a punch."
@@ -583,6 +587,7 @@
filling_color = "#ffdf26"
tastes = list("strawberries" = 5, "chocolate" = 3)
foodtype = FRUIT | SUGAR
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/chocolatebanana
name = "Chocolate dipped banana"
@@ -591,4 +596,17 @@
list_reagents = list("sugar" = 5, "nutriment" = 3, "vitamin" = 1)
filling_color = "#ffdf26"
tastes = list("banana" = 5, "chocolate" = 3)
- foodtype = FRUIT | SUGAR
\ No newline at end of file
+ foodtype = FRUIT | SUGAR
+ dunkable = TRUE
+
+/obj/item/reagent_containers/food/snacks/cornchips
+ name = "boritos corn chips"
+ desc = "Triangular corn chips. They do seem a bit bland but would probably go well with some kind of dipping sauce."
+ icon_state = "boritos"
+ trash = /obj/item/trash/boritos
+ bitesize = 2
+ list_reagents = list("nutriment" = 3, "cooking_oil" = 2, "sodiumchloride" = 3)
+ filling_color = "#ECA735"
+ tastes = list("fried corn" = 1)
+ foodtype = JUNKFOOD | FRIED
+ dunkable = TRUE
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index baf8e150c5..de5d577193 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -5,28 +5,31 @@
/obj/item/reagent_containers/food/snacks/donut
name = "donut"
desc = "Goes great with robust coffee."
- icon_state = "donut1"
+ icon = 'icons/obj/food/donut.dmi'
+ icon_state = "donut"
bitesize = 5
bonus_reagents = list("sugar" = 1)
list_reagents = list("nutriment" = 3, "sprinkles" = 1, "sugar" = 2)
filling_color = "#D2691E"
tastes = list("donut" = 1)
- foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR
- var/frosted_icon = "donut2"
- var/is_frosted = FALSE
+ foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR | BREAKFAST
+ dunkable = TRUE
+ var/decorated_icon = "donut_homer"
+ var/is_decorated = FALSE
var/extra_reagent = null
+ var/decorated_adjective = "sprinkled"
/obj/item/reagent_containers/food/snacks/donut/Initialize()
. = ..()
if(prob(30))
- frost_donut()
+ decorate_donut()
-/obj/item/reagent_containers/food/snacks/donut/proc/frost_donut()
- if(is_frosted || !frosted_icon)
+/obj/item/reagent_containers/food/snacks/donut/proc/decorate_donut()
+ if(is_decorated || !decorated_icon)
return
- is_frosted = TRUE
- name = "frosted [name]"
- icon_state = frosted_icon //delish~!
+ is_decorated = TRUE
+ name = "[decorated_adjective] [name]"
+ icon_state = decorated_icon //delish~!
reagents.add_reagent("sprinkles", 1)
filling_color = "#FF69B4"
return TRUE
@@ -43,64 +46,283 @@
return
..()
+/obj/item/reagent_containers/food/snacks/donut/plain
+ //Use this donut ingame
+
/obj/item/reagent_containers/food/snacks/donut/chaos
name = "chaos donut"
desc = "Like life, it never quite tastes the same."
+ icon_state = "donut_chaos"
bitesize = 10
tastes = list("donut" = 3, "chaos" = 1)
/obj/item/reagent_containers/food/snacks/donut/chaos/Initialize()
. = ..()
extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "cocoa", "slimejelly", "banana", "berryjuice", "omnizine")
- reagents.add_reagent("[extra_reagent]", 3)
+ reagents.add_reagent(extra_reagent, 3)
+
+/obj/item/reagent_containers/food/snacks/donut/meat
+ name = "Meat Donut"
+ desc = "Tastes as gross as it looks."
+ icon_state = "donut_meat"
+ bonus_reagents = list("ketchup" = 1)
+ list_reagents = list("nutriment" = 3, "ketchup" = 2)
+ tastes = list("meat" = 1)
+ foodtype = JUNKFOOD | MEAT | GROSS | FRIED | BREAKFAST
+
+/obj/item/reagent_containers/food/snacks/donut/berry
+ name = "pink donut"
+ desc = "Goes great with a soy latte."
+ icon_state = "donut_pink"
+ bonus_reagents = list("berryjuice" = 3, "sprinkles" = 1) //Extra sprinkles to reward frosting
+ filling_color = "#E57d9A"
+ decorated_icon = "donut_homer"
+
+/obj/item/reagent_containers/food/snacks/donut/trumpet
+ name = "spaceman's donut"
+ desc = "Goes great with a cold beaker of malk."
+ icon_state = "donut_purple"
+ bonus_reagents = list("polypyr" = 3, "sprinkles" = 1)
+ tastes = list("donut" = 3, "violets" = 1)
+ is_decorated = TRUE
+ filling_color = "#8739BF"
+
+/obj/item/reagent_containers/food/snacks/donut/apple
+ name = "apple donut"
+ desc = "Goes great with a shot of cinnamon schnapps."
+ icon_state = "donut_green"
+ bonus_reagents = list("applejuice" = 3, "sprinkles" = 1)
+ tastes = list("donut" = 3, "green apples" = 1)
+ is_decorated = TRUE
+ filling_color = "#6ABE30"
+
+/obj/item/reagent_containers/food/snacks/donut/caramel
+ name = "caramel donut"
+ desc = "Goes great with a mug of hot coco."
+ icon_state = "donut_beige"
+ bonus_reagents = list("caramel" = 3, "sprinkles" = 1)
+ tastes = list("donut" = 3, "buttery sweetness" = 1)
+ is_decorated = TRUE
+ filling_color = "#D4AD5B"
+
+/obj/item/reagent_containers/food/snacks/donut/choco
+ name = "chocolate donut"
+ desc = "Goes great with a glass of warm milk."
+ icon_state = "donut_choc"
+ bonus_reagents = list("hot_coco" = 3, "sprinkles" = 1) //the coco reagent is just bitter.
+ tastes = list("donut" = 4, "bitterness" = 1)
+ decorated_icon = "donut_choc_sprinkles"
+ filling_color = "#4F230D"
+
+/obj/item/reagent_containers/food/snacks/donut/blumpkin
+ name = "blumpkin donut"
+ desc = "Goes great with a mug of soothing drunken blumpkin."
+ icon_state = "donut_blue"
+ bonus_reagents = list("blumpkinjuice" = 3, "sprinkles" = 1)
+ tastes = list("donut" = 2, "blumpkin" = 1)
+ is_decorated = TRUE
+ filling_color = "#2788C4"
+
+/obj/item/reagent_containers/food/snacks/donut/bungo
+ name = "bungo donut"
+ desc = "Goes great with a mason jar of hippie's delight."
+ icon_state = "donut_yellow"
+ bonus_reagents = list("bungojuice" = 3, "sprinkles" = 1)
+ tastes = list("donut" = 3, "tropical sweetness" = 1)
+ is_decorated = TRUE
+ filling_color = "#DEC128"
+
+/obj/item/reagent_containers/food/snacks/donut/matcha
+ name = "matcha donut"
+ desc = "Goes great with a cup of tea."
+ icon_state = "donut_olive"
+ bonus_reagents = list("teapowder = 3", "sprinkles" = 1)
+ tastes = list("donut" = 3, "matcha" = 1)
+ is_decorated = TRUE
+ filling_color = "#879630"
+
+//////////////////////JELLY DONUTS/////////////////////////
/obj/item/reagent_containers/food/snacks/donut/jelly
name = "jelly donut"
desc = "You jelly?"
- icon_state = "jdonut1"
- frosted_icon = "jdonut2"
+ icon_state = "jelly"
+ decorated_icon = "jelly_homer"
bonus_reagents = list("sugar" = 1, "vitamin" = 1)
extra_reagent = "berryjuice"
tastes = list("jelly" = 1, "donut" = 3)
- foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR
+ foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR | BREAKFAST
/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize()
. = ..()
if(extra_reagent)
reagents.add_reagent("[extra_reagent]", 3)
+/obj/item/reagent_containers/food/snacks/donut/jelly/plain //use this ingame to avoid inheritance related crafting issues.
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/berry
+ name = "pink jelly donut"
+ desc = "Goes great with a soy latte."
+ icon_state = "jelly_pink"
+ bonus_reagents = list("berryjuice" = 3, "sprinkles" = 1, "vitamin" = 1) //Extra sprinkles to reward frosting.
+ filling_color = "#E57d9A"
+ decorated_icon = "jelly_homer"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/trumpet
+ name = "spaceman's jelly donut"
+ desc = "Goes great with a cold beaker of malk."
+ icon_state = "jelly_purple"
+ bonus_reagents = list("polypyr" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "violets" = 1)
+ is_decorated = TRUE
+ filling_color = "#8739BF"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/apple
+ name = "apple jelly donut"
+ desc = "Goes great with a shot of cinnamon schnapps."
+ icon_state = "jelly_green"
+ bonus_reagents = list("applejuice" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "green apples" = 1)
+ is_decorated = TRUE
+ filling_color = "#6ABE30"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/caramel
+ name = "caramel jelly donut"
+ desc = "Goes great with a mug of hot coco."
+ icon_state = "jelly_beige"
+ bonus_reagents = list("caramel" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "buttery sweetness" = 1)
+ is_decorated = TRUE
+ filling_color = "#D4AD5B"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/choco
+ name = "chocolate jelly donut"
+ desc = "Goes great with a glass of warm milk."
+ icon_state = "jelly_choc"
+ bonus_reagents = list("hot_coco" = 3, "sprinkles" = 1, "vitamin" = 1) //the coco reagent is just bitter.
+ tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1)
+ decorated_icon = "jelly_choc_sprinkles"
+ filling_color = "#4F230D"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin
+ name = "blumpkin jelly donut"
+ desc = "Goes great with a mug of soothing drunken blumpkin."
+ icon_state = "jelly_blue"
+ bonus_reagents = list("blumpkinjuice" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 2, "blumpkin" = 1)
+ is_decorated = TRUE
+ filling_color = "#2788C4"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/bungo
+ name = "bungo jelly donut"
+ desc = "Goes great with a mason jar of hippie's delight."
+ icon_state = "jelly_yellow"
+ bonus_reagents = list("bungojuice" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "tropical sweetness" = 1)
+ is_decorated = TRUE
+ filling_color = "#DEC128"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/matcha
+ name = "matcha jelly donut"
+ desc = "Goes great with a cup of tea."
+ icon_state = "jelly_olive"
+ bonus_reagents = list("teapowder" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "matcha" = 1)
+ is_decorated = TRUE
+ filling_color = "#879630"
+
+//////////////////////////SLIME DONUTS/////////////////////////
+
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly
name = "jelly donut"
desc = "You jelly?"
- icon_state = "jdonut1"
+ icon_state = "jelly"
extra_reagent = "slimejelly"
- foodtype = JUNKFOOD | GRAIN | FRIED | TOXIC | SUGAR
+ foodtype = JUNKFOOD | GRAIN | FRIED | TOXIC | SUGAR | BREAKFAST
-/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly
- name = "jelly donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- extra_reagent = "cherryjelly"
- foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain
-/obj/item/reagent_containers/food/snacks/donut/meat
- bonus_reagents = list("ketchup" = 1)
- list_reagents = list("nutriment" = 3, "ketchup" = 2)
- tastes = list("meat" = 1)
- foodtype = JUNKFOOD | MEAT | GROSS | FRIED
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry
+ name = "pink jelly donut"
+ desc = "Goes great with a soy latte."
+ icon_state = "jelly_pink"
+ bonus_reagents = list("berryjuice" = 3, "sprinkles" = 1, "vitamin" = 1) //Extra sprinkles to reward frosting
+ filling_color = "#E57d9A"
-/obj/item/reagent_containers/food/snacks/donut/semen
- name = "\"cream\" donut"
- desc = "That cream looks a little runny..."
- icon_state = "donut3"
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet
+ name = "spaceman's jelly donut"
+ desc = "Goes great with a cold beaker of malk."
+ icon_state = "jelly_purple"
+ bonus_reagents = list("polypyr" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "violets" = 1)
+ is_decorated = TRUE
+ filling_color = "#8739BF"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple
+ name = "apple jelly donut"
+ desc = "Goes great with a shot of cinnamon schnapps."
+ icon_state = "jelly_green"
+ bonus_reagents = list("applejuice" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "green apples" = 1)
+ is_decorated = TRUE
+ filling_color = "#6ABE30"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel
+ name = "caramel jelly donut"
+ desc = "Goes great with a mug of hot coco."
+ icon_state = "jelly_beige"
+ bonus_reagents = list("caramel" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "buttery sweetness" = 1)
+ is_decorated = TRUE
+ filling_color = "#D4AD5B"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco
+ name = "chocolate jelly donut"
+ desc = "Goes great with a glass of warm milk."
+ icon_state = "jelly_choc"
+ bonus_reagents = list("hot_coco" = 3, "sprinkles" = 1, "vitamin" = 1) //the coco reagent is just bitter.
+ tastes = list("jelly" = 1, "donut" = 4, "bitterness" = 1)
+ decorated_icon = "jelly_choc_sprinkles"
+ filling_color = "#4F230D"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin
+ name = "blumpkin jelly donut"
+ desc = "Goes great with a mug of soothing drunken blumpkin."
+ icon_state = "jelly_blue"
+ bonus_reagents = list("blumpkinjuice" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 2, "blumpkin" = 1)
+ is_decorated = TRUE
+ filling_color = "#2788C4"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo
+ name = "bungo jelly donut"
+ desc = "Goes great with a mason jar of hippie's delight."
+ icon_state = "jelly_yellow"
+ bonus_reagents = list("bungojuice" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "tropical sweetness" = 1)
+ is_decorated = TRUE
+ filling_color = "#DEC128"
+
+/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha
+ name = "matcha jelly donut"
+ desc = "Goes great with a cup of tea."
+ icon_state = "jelly_olive"
+ bonus_reagents = list("teapowder" = 3, "sprinkles" = 1, "vitamin" = 1)
+ tastes = list("jelly" = 1, "donut" = 3, "matcha" = 1)
+ is_decorated = TRUE
+ filling_color = "#879630"
+
+/obj/item/reagent_containers/food/snacks/donut/glaze
+ name = "glazed donut"
+ desc = "A sugar glazed donut."
+ icon_state = "donut_glaze"
bitesize = 10
- bonus_reagents = list("semen" = 1)
- list_reagents = list("nutriment" = 3, "sugar" = 2, "semen" = 5)
+ bonus_reagents = list("sugar" = 3)
+ list_reagents = list("nutriment" = 3, "sugar" = 8)
filling_color = "#FFFFFF"
tastes = list("donut" = 1, "salt" = 3)
foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR
-
////////////////////////////////////////////MUFFINS////////////////////////////////////////////
/obj/item/reagent_containers/food/snacks/muffin
@@ -111,14 +333,14 @@
list_reagents = list("nutriment" = 6)
filling_color = "#F4A460"
tastes = list("muffin" = 1)
- foodtype = GRAIN | SUGAR
+ foodtype = GRAIN | SUGAR | BREAKFAST
/obj/item/reagent_containers/food/snacks/muffin/berry
name = "berry muffin"
icon_state = "berrymuffin"
desc = "A delicious and spongy little cake, with berries."
tastes = list("muffin" = 3, "berry" = 1)
- foodtype = GRAIN | FRUIT | SUGAR
+ foodtype = GRAIN | FRUIT | SUGAR | BREAKFAST
/obj/item/reagent_containers/food/snacks/muffin/booberry
name = "booberry muffin"
@@ -126,7 +348,7 @@
alpha = 125
desc = "My stomach is a graveyard! No living being can quench my bloodthirst!"
tastes = list("muffin" = 3, "spookiness" = 1)
- foodtype = GRAIN | FRUIT | SUGAR
+ foodtype = GRAIN | FRUIT | SUGAR | BREAKFAST
/obj/item/reagent_containers/food/snacks/chawanmushi
name = "chawanmushi"
@@ -149,7 +371,7 @@
list_reagents = list("nutriment" = 8, "vitamin" = 1)
filling_color = "#D2691E"
tastes = list("waffles" = 1)
- foodtype = GRAIN | SUGAR
+ foodtype = GRAIN | SUGAR | BREAKFAST
/obj/item/reagent_containers/food/snacks/soylentgreen
name = "\improper Soylent Green"
@@ -160,7 +382,7 @@
list_reagents = list("nutriment" = 10, "vitamin" = 1)
filling_color = "#9ACD32"
tastes = list("waffles" = 7, "people" = 1)
- foodtype = GRAIN | GROSS | MEAT
+ foodtype = GRAIN | MEAT
/obj/item/reagent_containers/food/snacks/soylenviridians
name = "\improper Soylent Virdians"
@@ -183,7 +405,7 @@
list_reagents = list("nutriment" = 8, "mushroomhallucinogen" = 2, "vitamin" = 2)
filling_color = "#00BFFF"
tastes = list("waffle" = 1, "mushrooms" = 1)
- foodtype = GRAIN | VEGETABLES | TOXIC | SUGAR
+ foodtype = GRAIN | VEGETABLES | SUGAR | BREAKFAST
////////////////////////////////////////////OTHER////////////////////////////////////////////
@@ -196,7 +418,8 @@
list_reagents = list("nutriment" = 1)
filling_color = "#F0E68C"
tastes = list("cookie" = 1)
- foodtype = SUGAR
+ foodtype = GRAIN | SUGAR
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/donkpocket
name = "\improper Donk-pocket"
@@ -213,6 +436,7 @@
desc = "The heated food of choice for the seasoned traitor."
bonus_reagents = list("omnizine" = 3)
list_reagents = list("nutriment" = 4, "omnizine" = 3)
+ cooked_type = null
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
foodtype = GRAIN
@@ -315,6 +539,7 @@
filling_color = "#CD853F"
tastes = list("sweetness" = 1)
foodtype = GRAIN | JUNKFOOD | SUGAR
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/chococornet
name = "chocolate cornet"
@@ -335,6 +560,7 @@
filling_color = "#D2691E"
tastes = list("cookie" = 2, "oat" = 1)
foodtype = GRAIN
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/raisincookie
name = "raisin cookie"
@@ -345,6 +571,7 @@
filling_color = "#F0E68C"
tastes = list("cookie" = 1, "raisins" = 1)
foodtype = GRAIN | FRUIT
+ dunkable = TRUE
/obj/item/reagent_containers/food/snacks/cherrycupcake
name = "cherry cupcake"
@@ -367,7 +594,7 @@
foodtype = GRAIN | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/strawberrycupcake
- name = "Strawberry cupcake"
+ name = "strawberry cupcake"
desc = "Strawberry inside a delicious cupcake."
icon_state = "strawberrycupcake"
bonus_reagents = list("nutriment" = 1, "vitamin" = 3)
@@ -384,9 +611,9 @@
list_reagents = list("nutriment" = 5, "honey" = 5)
filling_color = "#F2CE91"
tastes = list("pastry" = 1, "sweetness" = 1)
- foodtype = GRAIN
+ foodtype = GRAIN | SUGAR
-#define PANCAKE_MAX_STACK 30
+#define PANCAKE_MAX_STACK 10
/obj/item/reagent_containers/food/snacks/pancakes
name = "pancake"
@@ -397,7 +624,7 @@
list_reagents = list("nutriment" = 4, "vitamin" = 1)
filling_color = "#D2691E"
tastes = list("pancakes" = 1)
- foodtype = GRAIN | SUGAR
+ foodtype = GRAIN | SUGAR | BREAKFAST
/obj/item/reagent_containers/food/snacks/pancakes/blueberry
name = "blueberry pancake"
@@ -465,13 +692,13 @@
to_chat(user, "You add the [I] to the [name]. ")
P.name = initial(P.name)
contents += P
- update_overlays(P)
+ update_snack_overlays(P)
if (P.contents.len)
for(var/V in P.contents)
P = V
P.name = initial(P.name)
contents += P
- update_overlays(P)
+ update_snack_overlays(P)
P = I
clearlist(P.contents)
return
@@ -480,7 +707,7 @@
return O.attackby(I, user, params)
..()
-/obj/item/reagent_containers/food/snacks/pancakes/update_overlays(obj/item/reagent_containers/food/snacks/P)
+/obj/item/reagent_containers/food/snacks/pancakes/update_snack_overlays(obj/item/reagent_containers/food/snacks/P)
var/mutable_appearance/pancake = mutable_appearance(icon, "[P.item_state]_[rand(1,3)]")
pancake.pixel_x = rand(-1,1)
pancake.pixel_y = 3 * contents.len - 1
diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm
index 65ff4d2eb9..f5fcec0ac5 100644
--- a/code/modules/food_and_drinks/food/snacks_salad.dm
+++ b/code/modules/food_and_drinks/food/snacks_salad.dm
@@ -47,7 +47,7 @@
bonus_reagents = list("nutriment" = 4, "vitamin" = 4)
list_reagents = list("nutriment" = 7, "milk" = 10, "vitamin" = 2)
tastes = list("oats" = 1, "milk" = 1)
- foodtype = DAIRY | GRAIN
+ foodtype = DAIRY | GRAIN | BREAKFAST
/obj/item/reagent_containers/food/snacks/salad/fruit
name = "fruit salad"
@@ -55,7 +55,7 @@
icon_state = "fruitsalad"
bonus_reagents = list("nutriment" = 2, "vitamin" = 4)
tastes = list("fruit" = 1)
- foodtype = FRUIT
+ foodtype = FRUIT | BREAKFAST
/obj/item/reagent_containers/food/snacks/salad/jungle
name = "jungle salad"
@@ -64,7 +64,7 @@
bonus_reagents = list("nutriment" = 4, "vitamin" = 4)
list_reagents = list("nutriment" = 7, "banana" = 5, "vitamin" = 4)
tastes = list("fruit" = 1, "the jungle" = 1)
- foodtype = FRUIT
+ foodtype = FRUIT | BREAKFAST
/obj/item/reagent_containers/food/snacks/salad/citrusdelight
name = "citrus delight"
@@ -73,7 +73,7 @@
bonus_reagents = list("nutriment" = 4, "vitamin" = 4)
list_reagents = list("nutriment" = 7, "vitamin" = 5)
tastes = list("sourness" = 1, "leaves" = 1)
- foodtype = FRUIT
+ foodtype = FRUIT | BREAKFAST
/obj/item/reagent_containers/food/snacks/salad/ricebowl
name = "ricebowl"
@@ -91,7 +91,7 @@
bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
list_reagents = list("nutriment" = 5, "vitamin" = 1)
tastes = list("rice" = 1)
- foodtype = GRAIN
+ foodtype = GRAIN | BREAKFAST
/obj/item/reagent_containers/food/snacks/salad/ricepudding
name = "rice pudding"
diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm
index 5f01d3170e..47c9f02fb9 100644
--- a/code/modules/food_and_drinks/food/snacks_soup.dm
+++ b/code/modules/food_and_drinks/food/snacks_soup.dm
@@ -225,3 +225,22 @@
bonus_reagents = list("nutriment" = 4, "vitamin" = 6)
tastes = list("beet" = 1)
foodtype = VEGETABLES
+
+/obj/item/reagent_containers/food/snacks/soup/electron
+ name = "electron soup"
+ desc = "A gastronomic curiosity of ethereal origin. It is famed for the minature weather system formed over a properly prepared soup."
+ icon_state = "electronsoup"
+ list_reagents = list("nutriment" = 3, "liquidelectricity" = 5)
+ tastes = list("mushroom" = 1, "electrons" = 4, "shockingly good")
+ filling_color = "#CC2B52"
+ foodtype = VEGETABLES | TOXIC
+
+/obj/item/reagent_containers/food/snacks/soup/bungocurry
+ name = "bungo curry"
+ desc = "A spicy vegetable curry made with the humble bungo fruit, Exotic!"
+ icon_state = "bungocurry"
+ bonus_reagents = list("vitamin" = 11)
+ list_reagents = list("nutriment" = 6, "capsaicin" = 5)
+ tastes = list("bungo" = 2, "hot curry" = 4, "tropical sweetness" = 1)
+ filling_color = "#E6A625"
+ foodtype = VEGETABLES | FRUIT | DAIRY
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index 3183b3b2b4..1bc2e4bb89 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -80,6 +80,9 @@ God bless America.
I.reagents.trans_to(src, I.reagents.total_volume)
qdel(I)
return
+ if(istype(I,/obj/item/clothing/head/mob_holder))
+ to_chat(user, "This does not fit in the fryer. ") // TODO: Deepfrying instakills mobs, spawns a whole deep-fried mob.
+ return
if(!reagents.has_reagent("cooking_oil"))
to_chat(user, "[src] has no cooking oil to fry with! ")
return
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
new file mode 100644
index 0000000000..449da2afe3
--- /dev/null
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -0,0 +1,139 @@
+/obj/machinery/grill
+ name = "grill"
+ desc = "Just like the old days."
+ icon = 'icons/obj/kitchen.dmi'
+ icon_state = "grill_open"
+ density = TRUE
+ layer = BELOW_OBJ_LAYER
+ use_power = NO_POWER_USE
+ var/grill_fuel = 0
+ var/obj/item/reagent_containers/food/grilled_item
+ var/grill_time = 0
+ var/datum/looping_sound/grill/grill_loop
+
+/obj/machinery/grill/Initialize()
+ . = ..()
+ grill_loop = new(list(src), FALSE)
+
+/obj/machinery/grill/update_icon()
+ if(grilled_item)
+ icon_state = "grill"
+ else if(grill_fuel)
+ icon_state = "grill_on"
+ else
+ icon_state = "grill_open"
+
+/obj/machinery/grill/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/mineral/wood))
+ var/obj/item/stack/S = I
+ var/stackamount = S.get_amount()
+ to_chat(user, "You put [stackamount] [I]s in [src]. ")
+ if(istype(I, /obj/item/stack/sheet/mineral/coal))
+ grill_fuel += (500 * stackamount)
+ else
+ grill_fuel += (50 * stackamount)
+ S.use(stackamount)
+ update_icon()
+ return
+ if(I.resistance_flags & INDESTRUCTIBLE)
+ to_chat(user, "You don't feel it would be wise to grill [I]... ")
+ return ..()
+ if(istype(I, /obj/item/reagent_containers))
+ if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks))
+ if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL)))
+ return ..()
+ else if(!grill_fuel)
+ to_chat(user, "There is not enough fuel. ")
+ return
+ else if(!grilled_item && user.transferItemToLoc(I, src))
+ grilled_item = I
+ to_chat(user, "You put the [grilled_item] on [src]. ")
+ update_icon()
+ grill_loop.start()
+ return
+ else
+ if(I.reagents.has_reagent("monkey_energy"))
+ grill_fuel += (20 * (I.reagents.get_reagent_amount("monkey_energy")))
+ to_chat(user, "You pour the Monkey Energy in [src]. ")
+ I.reagents.remove_reagent("monkey_energy", I.reagents.get_reagent_amount("monkey_energy"))
+ update_icon()
+ return
+ ..()
+
+/obj/machinery/grill/process()
+ ..()
+ update_icon()
+ if(!grill_fuel)
+ return
+ else
+ grill_fuel -= 1
+ if(prob(1))
+ var/datum/effect_system/smoke_spread/bad/smoke = new
+ smoke.set_up(1, loc)
+ smoke.start()
+ if(grilled_item)
+ grill_time += 1
+ grilled_item.reagents.add_reagent("char", 1)
+ grill_fuel -= 10
+ grilled_item.AddComponent(/datum/component/sizzle)
+
+/obj/machinery/grill/Exited(atom/movable/AM)
+ if(AM == grilled_item)
+ finish_grill()
+ grilled_item = null
+ ..()
+
+/obj/machinery/grill/Destroy()
+ grilled_item = null
+ . = ..()
+
+/obj/machinery/grill/handle_atom_del(atom/A)
+ if(A == grilled_item)
+ grilled_item = null
+ . = ..()
+
+/obj/machinery/grill/wrench_act(mob/living/user, obj/item/I)
+ . = ..()
+ if(default_unfasten_wrench(user, I) != CANT_UNFASTEN)
+ return TRUE
+
+/obj/machinery/grill/deconstruct(disassembled = TRUE)
+ finish_grill()
+ if(!(flags_1 & NODECONSTRUCT_1))
+ new /obj/item/stack/sheet/metal(loc, 5)
+ new /obj/item/stack/rods(loc, 5)
+ ..()
+
+/obj/machinery/grill/attack_ai(mob/user)
+ return
+
+/obj/machinery/grill/attack_hand(mob/user)
+ if(grilled_item)
+ to_chat(user, "You take out [grilled_item] from [src]. ")
+ grilled_item.forceMove(drop_location())
+ update_icon()
+ return
+ return ..()
+
+/obj/machinery/grill/proc/finish_grill()
+ switch(grill_time) //no 0-9 to prevent spam
+ if(10 to 15)
+ grilled_item.name = "lightly-grilled [grilled_item.name]"
+ grilled_item.desc = "[grilled_item.desc] It's been lightly grilled."
+ if(16 to 39)
+ grilled_item.name = "grilled [grilled_item.name]"
+ grilled_item.desc = "[grilled_item.desc] It's been grilled."
+ grilled_item.foodtype |= FRIED
+ if(40 to 50)
+ grilled_item.name = "heavily grilled [grilled_item.name]"
+ grilled_item.desc = "[grilled_item.desc] It's been heavily grilled."
+ grilled_item.foodtype |= FRIED
+ if(51 to INFINITY) //grill marks reach max alpha
+ grilled_item.name = "Powerfully Grilled [grilled_item.name]"
+ grilled_item.desc = "A [grilled_item.name]. Reminds you of your deepfryer skills, wait, no, it's better!"
+ grilled_item.foodtype |= FRIED
+ grill_time = 0
+ grill_loop.stop()
+
+/obj/machinery/grill/unwrenched
+ anchored = FALSE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index a58435959c..8db6956da9 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -131,7 +131,6 @@
I.add_ice_cream(flavour_name, beaker.reagents)
else
I.add_ice_cream(flavour_name)
- I.add_ice_cream(flavour_name)
if(I.reagents.total_volume < 10)
I.reagents.add_reagent("sugar", 10 - I.reagents.total_volume)
updateDialog()
@@ -252,7 +251,7 @@
desc = "Delicious [cone_name] cone, but no ice cream."
-/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(flavour_name, datum/reagents/R = null)
+/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(flavour_name, datum/reagents/R)
name = "[flavour_name] icecream"
switch (flavour_name) // adding the actual reagents advertised in the ingredient list
if ("vanilla")
@@ -311,9 +310,11 @@
qdel(src)
/obj/machinery/icecream_vat/AltClick(mob/living/user)
+ . = ..()
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
replace_beaker(user)
+ return TRUE
/obj/machinery/icecream_vat/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
if(beaker)
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index d10286d21a..404f3a6061 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -76,6 +76,22 @@
required_reagents = list("corn_starch" = 1, "sacid" = 1)
required_temp = 374
+/datum/chemical_reaction/caramel
+ name = "Caramel"
+ id = "caramel"
+ results = list("caramel" = 1)
+ required_reagents = list("sugar" = 1)
+ required_temp = 413
+ mob_react = FALSE
+
+/datum/chemical_reaction/caramel_burned
+ name = "Caramel burned"
+ id = "caramel_burned"
+ results = list("carbon" = 1)
+ required_reagents = list("caramel" = 1)
+ required_temp = 483
+ mob_react = FALSE
+
/datum/chemical_reaction/cheesewheel
name = "Cheesewheel"
id = "cheesewheel"
@@ -161,3 +177,9 @@
new /obj/item/reagent_containers/food/snacks/salad/ricebowl(location)
if(holder && holder.my_atom)
qdel(holder.my_atom)
+
+/datum/chemical_reaction/bbqsauce
+ name = "BBQ Sauce"
+ id = "bbqsauce"
+ results = list("bbqsauce" = 5)
+ required_reagents = list("ash" = 1, "tomatojuice" = 1, "salglu_solution" = 3, "blackpepper" = 1)
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm
index 1da81b99ec..fbd3f57323 100644
--- a/code/modules/food_and_drinks/recipes/processor_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm
@@ -44,6 +44,10 @@
input = /obj/item/reagent_containers/food/snacks/grown/parsnip
output = /obj/item/reagent_containers/food/snacks/roastparsnip
+/datum/food_processor_process/tortilla
+ input = /obj/item/reagent_containers/food/snacks/tortilla
+ output = /obj/item/reagent_containers/food/snacks/cornchips
+
/datum/food_processor_process/mob/slime
input = /mob/living/simple_animal/slime
output = null
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
index d7beebf461..ffa8709245 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
@@ -76,6 +76,7 @@
name = "Fish burger"
reqs = list(
/obj/item/reagent_containers/food/snacks/carpmeat = 1,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1,
/obj/item/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/reagent_containers/food/snacks/burger/fish
@@ -94,6 +95,7 @@
name = "Ghost burger"
reqs = list(
/obj/item/ectoplasm = 1,
+ /datum/reagent/consumable/sodiumchloride = 2,
/obj/item/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/reagent_containers/food/snacks/burger/ghost
@@ -176,7 +178,7 @@
)
result = /obj/item/reagent_containers/food/snacks/burger/purple
subcategory = CAT_BURGER
-
+
/datum/crafting_recipe/food/blackburger
name = "Black burger"
reqs = list(
@@ -186,7 +188,7 @@
)
result = /obj/item/reagent_containers/food/snacks/burger/black
subcategory = CAT_BURGER
-
+
/datum/crafting_recipe/food/whiteburger
name = "White burger"
reqs = list(
@@ -218,6 +220,7 @@
name = "Big bite burger"
reqs = list(
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 3,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 2,
/obj/item/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/reagent_containers/food/snacks/burger/bigbite
@@ -231,7 +234,8 @@
/obj/item/reagent_containers/food/snacks/meat/steak/plain = 5,
/obj/item/reagent_containers/food/snacks/grown/tomato = 4,
/obj/item/reagent_containers/food/snacks/cheesewedge = 3,
- /obj/item/reagent_containers/food/snacks/boiledegg = 2,
+ /obj/item/reagent_containers/food/snacks/boiledegg = 1,
+ /obj/item/reagent_containers/food/snacks/meat/bacon = 1,
/obj/item/reagent_containers/food/snacks/bun = 1
)
@@ -260,6 +264,7 @@
name = "Five alarm burger"
reqs = list(
/obj/item/reagent_containers/food/snacks/grown/ghost_chili = 2,
+ /obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
/obj/item/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/reagent_containers/food/snacks/burger/fivealarm
@@ -293,3 +298,53 @@
result = /obj/item/reagent_containers/food/snacks/burger/baconburger
subcategory = CAT_BURGER
+
+/datum/crafting_recipe/food/cheeseburger
+ name = "Cheese Burger"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/meat/steak/plain = 1,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1,
+ /obj/item/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/burger/cheese
+ subcategory = CAT_BURGER
+
+/datum/crafting_recipe/food/soylentburger
+ name = "Soylent Burger"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/soylentgreen = 1, //two full meats worth.
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 2,
+ /obj/item/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/burger/soylent
+ subcategory = CAT_BURGER
+
+/datum/crafting_recipe/food/ribburger
+ name = "McRib"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/bbqribs = 1, //The sauce is already included in the ribs
+ /obj/item/reagent_containers/food/snacks/onion_slice = 1, //feel free to remove if too burdensome.
+ /obj/item/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/burger/rib
+ subcategory = CAT_BURGER
+
+/datum/crafting_recipe/food/mcguffin
+ name = "McGuffin"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/friedegg = 1,
+ /obj/item/reagent_containers/food/snacks/meat/bacon = 2,
+ /obj/item/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/burger/mcguffin
+ subcategory = CAT_BURGER
+
+/datum/crafting_recipe/food/chickenburger
+ name = "Chicken Sandwich"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/meat/steak/chicken = 1,
+ /datum/reagent/consumable/mayonnaise = 5,
+ /obj/item/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/burger/chicken
+ subcategory = CAT_BURGER
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index 9c14badb23..c25cd9bed6 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -180,6 +180,17 @@
result = /obj/item/reagent_containers/food/snacks/store/cake/peach_cake
subcategory = CAT_CAKE
+/datum/crafting_recipe/food/trumpetcake
+ name = "Spaceman's Cake"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/trumpet = 2,
+ /datum/reagent/consumable/cream = 5,
+ /datum/reagent/consumable/berryjuice = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/store/cake/trumpet
+ subcategory = CAT_CAKE
+
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
index 8f4c5d05f1..a42db0b2b5 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
@@ -1,4 +1,8 @@
+/////////////////
+//Misc. Frozen.//
+/////////////////
+
/datum/crafting_recipe/food/icecreamsandwich
name = "Icecream sandwich"
reqs = list(
@@ -90,11 +94,10 @@
//////////////////////////SNOW CONES///////////////////////
-/datum/crafting_recipe/food/flaverless_sc
- name = "Flaverless snowcone"
+/datum/crafting_recipe/food/flavorless_sc
+ name = "Flavorless snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15
)
result = /obj/item/reagent_containers/food/snacks/snowcones
@@ -104,7 +107,6 @@
name = "Pineapple snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/obj/item/reagent_containers/food/snacks/pineappleslice = 2
)
@@ -115,7 +117,6 @@
name = "Lime snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/limejuice = 5
)
@@ -126,7 +127,6 @@
name = "Lemon snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/lemonjuice = 5
)
@@ -137,7 +137,6 @@
name = "Apple snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/applejuice = 5
)
@@ -148,9 +147,8 @@
name = "Grape snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
- /datum/reagent/consumable/berryjuice = 5
+ /datum/reagent/consumable/grapejuice = 5
)
result = /obj/item/reagent_containers/food/snacks/snowcones/grape
subcategory = CAT_ICE
@@ -159,7 +157,6 @@
name = "Orange snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/orangejuice = 5
)
@@ -170,7 +167,6 @@
name = "Bluecherry snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/bluecherryjelly= 5
)
@@ -181,22 +177,20 @@
name = "Cherry snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/cherryjelly= 5
)
result = /obj/item/reagent_containers/food/snacks/snowcones/red
subcategory = CAT_ICE
-/datum/crafting_recipe/food/mix_sc
- name = "Mixed berrie snowcone"
+/datum/crafting_recipe/food/berry_sc
+ name = "Berry snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
- /datum/reagent/consumable/berryjuice = 15
+ /datum/reagent/consumable/berryjuice = 5
)
- result = /obj/item/reagent_containers/food/snacks/snowcones/mix
+ result = /obj/item/reagent_containers/food/snacks/snowcones/berry
subcategory = CAT_ICE
/datum/crafting_recipe/food/fruitsalad_sc
@@ -216,7 +210,6 @@
name = "Mime snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/nothing = 5
)
@@ -227,86 +220,57 @@
name = "Clown snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
- /datum/reagent/consumable/clownstears = 5
+ /datum/reagent/consumable/laughter = 5
)
result = /obj/item/reagent_containers/food/snacks/snowcones/clown
subcategory = CAT_ICE
/datum/crafting_recipe/food/soda_sc
- name = "Soda water snowcone"
+ name = "Space Cola snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
- /datum/reagent/consumable/sodawater = 15
+ /datum/reagent/consumable/space_cola = 5
)
result = /obj/item/reagent_containers/food/snacks/snowcones/soda
subcategory = CAT_ICE
-/datum/crafting_recipe/food/pwgrmer_sc
- name = "Pwergamer snowcone"
+/datum/crafting_recipe/food/spacemountainwind_sc
+ name = "Space Mountain Wind snowcone"
+ reqs = list(
+ /obj/item/reagent_containers/food/drinks/sillycup = 1,
+ /datum/reagent/consumable/ice = 15,
+ /datum/reagent/consumable/spacemountainwind = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/snowcones/spacemountainwind
+
+/datum/crafting_recipe/food/pwrgame_sc
+ name = "Pwrgame snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/pwr_game = 15
)
- result = /obj/item/reagent_containers/food/snacks/snowcones/pwgrmer
- subcategory = CAT_ICE
-
-/datum/crafting_recipe/food/kiwi_sc
- name = "Kiwi snowcone"
- reqs = list(
- /obj/item/reagent_containers/food/drinks/sillycup = 1,
- /obj/item/reagent_containers/food/snacks/egg/kiwiEgg = 1,
- /datum/reagent/water = 5,
- /datum/reagent/consumable/ice = 15
- )
- result = /obj/item/reagent_containers/food/snacks/snowcones/kiwi
+ result = /obj/item/reagent_containers/food/snacks/snowcones/pwrgame
subcategory = CAT_ICE
/datum/crafting_recipe/food/honey_sc
name = "Honey snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
/datum/reagent/consumable/honey = 5
)
result = /obj/item/reagent_containers/food/snacks/snowcones/honey
subcategory = CAT_ICE
-/datum/crafting_recipe/food/peach_sc
- name = "Peach snowcone"
- reqs = list(
- /obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
- /datum/reagent/consumable/ice = 15,
- /obj/item/reagent_containers/food/snacks/grown/peach = 1
- )
- result = /obj/item/reagent_containers/food/snacks/snowcones/peach
- subcategory = CAT_ICE
-
-/datum/crafting_recipe/food/strawberry_sc
- name = "Strawberry snowcone"
- reqs = list(
- /obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
- /datum/reagent/consumable/ice = 15,
- /obj/item/reagent_containers/food/snacks/grown/strawberry = 2
- )
- result = /obj/item/reagent_containers/food/snacks/snowcones/strawberry
- subcategory = CAT_ICE
-
-/datum/crafting_recipe/food/honey_sc
+/datum/crafting_recipe/food/rainbow_sc
name = "Rainbow snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
- /datum/reagent/water = 5,
/datum/reagent/consumable/ice = 15,
- /datum/reagent/colorful_reagent = 1 //Hard to make
+ /datum/reagent/colorful_reagent = 1 //Harder to make
)
result = /obj/item/reagent_containers/food/snacks/snowcones/rainbow
- subcategory = CAT_ICE
+ subcategory = CAT_ICE
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
index d17ccf585e..d8145410cd 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
@@ -166,3 +166,25 @@
)
result = /obj/item/reagent_containers/food/snacks/salad/ricepork
subcategory = CAT_MEAT
+
+/datum/crafting_recipe/food/fiestaskewer
+ name = "Fiesta Skewer"
+ reqs = list(
+ /obj/item/stack/rods = 1,
+ /obj/item/reagent_containers/food/snacks/grown/chili = 1,
+ /obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
+ /obj/item/reagent_containers/food/snacks/grown/corn = 1,
+ /obj/item/reagent_containers/food/snacks/grown/tomato = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/kebab/fiesta
+ subcategory = CAT_MEAT
+
+/datum/crafting_recipe/food/ribs
+ name = "BBQ Ribs"
+ reqs = list(
+ /datum/reagent/consumable/bbqsauce = 5,
+ /obj/item/reagent_containers/food/snacks/meat/steak/plain = 2,
+ /obj/item/stack/rods = 2
+ )
+ result = /obj/item/reagent_containers/food/snacks/bbqribs
+ subcategory = CAT_MEAT
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index 365cf499bb..7977a715d8 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -1,18 +1,7 @@
-
// see code/module/crafting/table.dm
////////////////////////////////////////////////DONUTS////////////////////////////////////////////////
-/datum/crafting_recipe/food/chaosdonut
- name = "Chaos donut"
- reqs = list(
- /datum/reagent/consumable/frostoil = 5,
- /datum/reagent/consumable/capsaicin = 5,
- /obj/item/reagent_containers/food/snacks/pastrybase = 1
- )
- result = /obj/item/reagent_containers/food/snacks/donut/chaos
- subcategory = CAT_PASTRY
-
/datum/crafting_recipe/food/donut
time = 15
name = "Donut"
@@ -20,18 +9,17 @@
/datum/reagent/consumable/sugar = 1,
/obj/item/reagent_containers/food/snacks/pastrybase = 1
)
- result = /obj/item/reagent_containers/food/snacks/donut
+ result = /obj/item/reagent_containers/food/snacks/donut/plain
subcategory = CAT_PASTRY
-/datum/crafting_recipe/food/donut/semen
- time = 15
- name = "Semen donut"
+/datum/crafting_recipe/food/donut/chaos
+ name = "Chaos donut"
reqs = list(
- /datum/reagent/consumable/semen = 10,
+ /datum/reagent/consumable/frostoil = 5,
+ /datum/reagent/consumable/capsaicin = 5,
/obj/item/reagent_containers/food/snacks/pastrybase = 1
)
- result = /obj/item/reagent_containers/food/snacks/donut/semen
- subcategory = CAT_PASTRY
+ result = /obj/item/reagent_containers/food/snacks/donut/chaos
datum/crafting_recipe/food/donut/meat
time = 15
@@ -41,35 +29,232 @@ datum/crafting_recipe/food/donut/meat
/obj/item/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/reagent_containers/food/snacks/donut/meat
- subcategory = CAT_PASTRY
-/datum/crafting_recipe/food/jellydonut
+/datum/crafting_recipe/food/donut/jelly
name = "Jelly donut"
reqs = list(
/datum/reagent/consumable/berryjuice = 5,
/obj/item/reagent_containers/food/snacks/pastrybase = 1
)
- result = /obj/item/reagent_containers/food/snacks/donut/jelly
- subcategory = CAT_PASTRY
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/plain
-/datum/crafting_recipe/food/cherryjellydonut
- name = "Cherry jelly donut"
- reqs = list(
- /datum/reagent/consumable/cherryjelly = 5,
- /obj/item/reagent_containers/food/snacks/pastrybase = 1
- )
- result = /obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly
- subcategory = CAT_PASTRY
-
-/datum/crafting_recipe/food/slimejellydonut
+/datum/crafting_recipe/food/donut/slimejelly
name = "Slime jelly donut"
reqs = list(
/datum/reagent/toxin/slimejelly = 5,
/obj/item/reagent_containers/food/snacks/pastrybase = 1
)
- result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain
+
+/datum/crafting_recipe/food/donut/glaze
+ time = 15
+ name = "glaze donut"
+ reqs = list(
+ /datum/reagent/consumable/sugar = 10,
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/glaze
subcategory = CAT_PASTRY
+/datum/crafting_recipe/food/donut/berry
+ name = "Berry Donut"
+ reqs = list(
+ /datum/reagent/consumable/berryjuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/berry
+
+/datum/crafting_recipe/food/donut/trumpet
+ name = "Spaceman's Donut"
+ reqs = list(
+ /datum/reagent/medicine/polypyr = 3,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+
+ result = /obj/item/reagent_containers/food/snacks/donut/trumpet
+
+/datum/crafting_recipe/food/donut/apple
+ name = "Apple Donut"
+ reqs = list(
+ /datum/reagent/consumable/applejuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/apple
+
+/datum/crafting_recipe/food/donut/caramel
+ name = "Caramel Donut"
+ reqs = list(
+ /datum/reagent/consumable/caramel = 3,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/caramel
+
+/datum/crafting_recipe/food/donut/choco
+ name = "Chocolate Donut"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 1,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/choco
+
+/datum/crafting_recipe/food/donut/blumpkin
+ name = "Blumpkin Donut"
+ reqs = list(
+ /datum/reagent/consumable/blumpkinjuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/blumpkin
+
+/datum/crafting_recipe/food/donut/bungo
+ name = "Bungo Donut"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/bungo
+
+/datum/crafting_recipe/food/donut/matcha
+ name = "Matcha Donut"
+ reqs = list(
+ /datum/reagent/toxin/teapowder = 3,
+ /obj/item/reagent_containers/food/snacks/donut/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/matcha
+
+////////////////////////////////////////////////////JELLY DONUTS///////////////////////////////////////////////////////
+
+/datum/crafting_recipe/food/donut/jelly/berry
+ name = "Berry Jelly Donut"
+ reqs = list(
+ /datum/reagent/consumable/berryjuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/berry
+
+/datum/crafting_recipe/food/donut/jelly/trumpet
+ name = "Spaceman's Jelly Donut"
+ reqs = list(
+ /datum/reagent/medicine/polypyr = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/trumpet
+
+/datum/crafting_recipe/food/donut/jelly/apple
+ name = "Apple Jelly Donut"
+ reqs = list(
+ /datum/reagent/consumable/applejuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/apple
+
+/datum/crafting_recipe/food/donut/jelly/caramel
+ name = "Caramel Jelly Donut"
+ reqs = list(
+ /datum/reagent/consumable/caramel = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/caramel
+
+/datum/crafting_recipe/food/donut/jelly/choco
+ name = "Chocolate Jelly Donut"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 1,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/choco
+
+/datum/crafting_recipe/food/donut/jelly/blumpkin
+ name = "Blumpkin Jelly Donut"
+ reqs = list(
+ /datum/reagent/consumable/blumpkinjuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/blumpkin
+
+/datum/crafting_recipe/food/donut/jelly/bungo
+ name = "Bungo Jelly Donut"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/bungo
+
+/datum/crafting_recipe/food/donut/jelly/matcha
+ name = "Matcha Jelly Donut"
+ reqs = list(
+ /datum/reagent/toxin/teapowder = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/matcha
+
+////////////////////////////////////////////////////SLIME DONUTS///////////////////////////////////////////////////////
+
+/datum/crafting_recipe/food/donut/slimejelly/berry
+ name = "Berry Slime Donut"
+ reqs = list(
+ /datum/reagent/consumable/berryjuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/berry
+
+/datum/crafting_recipe/food/donut/slimejelly/trumpet
+ name = "Spaceman's Slime Donut"
+ reqs = list(
+ /datum/reagent/medicine/polypyr = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/trumpet
+
+/datum/crafting_recipe/food/donut/slimejelly/apple
+ name = "Apple Slime Donut"
+ reqs = list(
+ /datum/reagent/consumable/applejuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/apple
+
+/datum/crafting_recipe/food/donut/slimejelly/caramel
+ name = "Caramel Slime Donut"
+ reqs = list(
+ /datum/reagent/consumable/caramel = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/caramel
+
+/datum/crafting_recipe/food/donut/slimejelly/choco
+ name = "Chocolate Slime Donut"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 1,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/choco
+
+/datum/crafting_recipe/food/donut/slimejelly/blumpkin
+ name = "Blumpkin Slime Donut"
+ reqs = list(
+ /datum/reagent/consumable/blumpkinjuice = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/blumpkin
+
+/datum/crafting_recipe/food/donut/slimejelly/bungo
+ name = "Bungo Slime Donut"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/grown/bungofruit = 1,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/bungo
+
+/datum/crafting_recipe/food/donut/slimejelly/matcha
+ name = "Matcha Slime Donut"
+ reqs = list(
+ /datum/reagent/toxin/teapowder = 3,
+ /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/plain = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly/matcha
+
////////////////////////////////////////////////WAFFLES AND PANCAKES////////////////////////////////////////////////
/datum/crafting_recipe/food/waffles
@@ -341,4 +526,4 @@ datum/crafting_recipe/food/donut/meat
/datum/reagent/consumable/honey = 5
)
result = /obj/item/reagent_containers/food/snacks/honeybun
- subcategory = CAT_PASTRY
+ subcategory = CAT_PASTRY
\ No newline at end of file
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index 3574f8a9c1..7b5b0586d1 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -111,11 +111,10 @@
/turf/open/floor/holofloor/carpet/Initialize()
. = ..()
- addtimer(CALLBACK(src, .proc/update_icon), 1)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 1)
/turf/open/floor/holofloor/carpet/update_icon()
- if(!..())
- return 0
+ . = ..()
if(intact)
queue_smooth(src)
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index beecb258a7..b7c9550bb9 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -148,7 +148,7 @@
icon_grow = "sunflower-grow"
icon_dead = "sunflower-dead"
mutatelist = list(/obj/item/seeds/sunflower/moonflower, /obj/item/seeds/sunflower/novaflower)
- reagents_add = list("cornoil" = 0.08, "nutriment" = 0.04)
+ reagents_add = list("cooking_oil" = 0.08, "nutriment" = 0.04)
/obj/item/grown/sunflower // FLOWER POWER!
seed = /obj/item/seeds/sunflower
@@ -316,4 +316,4 @@
filling_color = "#FF6347"
bitesize_mod = 8
tastes = list("wax" = 1)
- foodtype = SUGAR
\ No newline at end of file
+ foodtype = SUGAR
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 16992b3e96..b37e494233 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -141,8 +141,9 @@
endurance = 50
maturation = 3
yield = 4
- growthstages = 3
+ growthstages = 2
reagents_add = list("sugar" = 0.25)
+ mutatelist = list(/obj/item/seeds/bamboo)
/obj/item/reagent_containers/food/snacks/grown/sugarcane
seed = /obj/item/seeds/sugarcane
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index ce0ca0220b..bac480bee6 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -41,7 +41,7 @@
blood_type = B.data["blood_type"]
features = B.data["features"]
factions = B.data["factions"]
- factions = B.data["quirks"]
+ quirks = B.data["quirks"]
contains_sample = TRUE
visible_message("The [src] is injected with a fresh blood sample. ")
else
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 9d7081ad65..982122e314 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -98,6 +98,49 @@
/obj/item/grown/log/steel/CheckAccepted(obj/item/I)
return FALSE
+/obj/item/seeds/bamboo
+ name = "pack of bamboo seeds"
+ desc = "A plant known for its flexible and resistant logs."
+ icon_state = "seed-bamboo"
+ species = "bamboo"
+ plantname = "Bamboo"
+ product = /obj/item/grown/log/bamboo
+ lifespan = 80
+ endurance = 70
+ maturation = 15
+ production = 2
+ yield = 5
+ potency = 50
+ growthstages = 2
+ growing_icon = 'icons/obj/hydroponics/growing.dmi'
+ icon_dead = "bamboo-dead"
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+
+/obj/item/grown/log/bamboo
+ seed = /obj/item/seeds/bamboo
+ name = "bamboo log"
+ desc = "A long and resistant bamboo log."
+ icon_state = "bamboo"
+ plank_type = /obj/item/stack/sheet/mineral/bamboo
+ plank_name = "bamboo sticks"
+
+/obj/item/grown/log/bamboo/CheckAccepted(obj/item/I)
+ return FALSE
+
+/obj/structure/punji_sticks
+ name = "punji sticks"
+ desc = "Don't step on this."
+ icon = 'icons/obj/hydroponics/equipment.dmi'
+ icon_state = "punji"
+ resistance_flags = FLAMMABLE
+ max_integrity = 30
+ density = FALSE
+ anchored = TRUE
+
+/obj/structure/punji_sticks/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/caltrop, 20, 30, 100, CALTROP_BYPASS_SHOES)
+
/////////BONFIRES//////////
/obj/structure/bonfire
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index f45b6bc517..59a9725383 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -380,7 +380,11 @@
pestlevel = 0 // Reset
update_icon()
visible_message("The [oldPlantName] is overtaken by some [myseed.plantname]! ")
-
+ name = "hydroponics tray ([myseed.plantname])"
+ if(myseed.product)
+ desc = initial(myseed.product.desc)
+ else
+ desc = initial(desc)
/obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) // Mutates the current seed
if(!myseed)
@@ -414,7 +418,11 @@
sleep(5) // Wait a while
update_icon()
visible_message("[oldPlantName] suddenly mutates into [myseed.plantname]! ")
-
+ name = "hydroponics tray ([myseed.plantname])"
+ if(myseed.product)
+ desc = initial(myseed.product.desc)
+ else
+ desc = initial(desc)
/obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant
if( weedlevel > 5 )
@@ -524,7 +532,7 @@
if(S.has_reagent("charcoal", 1))
adjustToxic(-round(S.get_reagent_amount("charcoal") * 2))
- // NIGGA, YOU JUST WENT ON FULL RETARD.
+ // Toxins, not good for anything
if(S.has_reagent("toxin", 1))
adjustToxic(round(S.get_reagent_amount("toxin") * 2))
@@ -539,14 +547,14 @@
adjustNutri(round(S.get_reagent_amount("beer") * 0.25))
adjustWater(round(S.get_reagent_amount("beer") * 0.7))
- // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial
+ // Fluorine one of the most corrosive and deadly gasses
if(S.has_reagent("fluorine", 1))
adjustHealth(-round(S.get_reagent_amount("fluorine") * 2))
adjustToxic(round(S.get_reagent_amount("fluorine") * 2.5))
adjustWater(-round(S.get_reagent_amount("fluorine") * 0.5))
adjustWeeds(-rand(1,4))
- // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial
+ // Chlorine one of the most corrosive and deadly gasses
if(S.has_reagent("chlorine", 1))
adjustHealth(-round(S.get_reagent_amount("chlorine") * 1))
adjustToxic(round(S.get_reagent_amount("chlorine") * 1.5))
@@ -561,7 +569,7 @@
adjustWater(-round(S.get_reagent_amount("phosphorus") * 0.5))
adjustWeeds(-rand(1,2))
- // Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though...
+ // Plants should not have sugar, they can't use it and it prevents them getting water/nutients, it is good for mold though...
if(S.has_reagent("sugar", 1))
adjustWeeds(rand(1,2))
adjustPests(rand(1,2))
@@ -583,13 +591,13 @@
adjustHealth(round(S.get_reagent_amount("sodawater") * 0.1))
adjustNutri(round(S.get_reagent_amount("sodawater") * 0.1))
- // Man, you guys are retards
+ // Sulphuric Acid
if(S.has_reagent("sacid", 1))
adjustHealth(-round(S.get_reagent_amount("sacid") * 1))
adjustToxic(round(S.get_reagent_amount("sacid") * 1.5))
adjustWeeds(-rand(1,2))
- // SERIOUSLY
+ // Acid
if(S.has_reagent("facid", 1))
adjustHealth(-round(S.get_reagent_amount("facid") * 2))
adjustToxic(round(S.get_reagent_amount("facid") * 3))
@@ -601,7 +609,7 @@
adjustToxic(round(S.get_reagent_amount("plantbgone") * 6))
adjustWeeds(-rand(4,8))
- // why, just why
+ // Napalm, not known for being good for anything organic
if(S.has_reagent("napalm", 1))
if(!(myseed.resistance_flags & FIRE_PROOF))
adjustHealth(-round(S.get_reagent_amount("napalm") * 6))
@@ -638,13 +646,14 @@
if (myseed)
myseed.adjust_production(-round(salt/100)-prob(salt%100))
myseed.adjust_potency(round(salt*0.5))
+
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
if(S.has_reagent("ash", 1))
adjustHealth(round(S.get_reagent_amount("ash") * 0.25))
adjustNutri(round(S.get_reagent_amount("ash") * 0.5))
adjustWeeds(-1)
- // This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant.
+ // Diethylamine is more bad ass, and pests get hurt by the corrosive nature of it, not the plant.
if(S.has_reagent("diethylamine", 1))
adjustHealth(round(S.get_reagent_amount("diethylamine") * 1))
adjustNutri(round(S.get_reagent_amount("diethylamine") * 2))
@@ -652,26 +661,37 @@
myseed.adjust_yield(round(S.get_reagent_amount("diethylamine") * 0.02))
adjustPests(-rand(1,2))
- // Compost, effectively
+ // Nutriment Compost, effectively
if(S.has_reagent("nutriment", 1))
adjustHealth(round(S.get_reagent_amount("nutriment") * 0.5))
adjustNutri(round(S.get_reagent_amount("nutriment") * 1))
- // Compost for EVERYTHING
+ // Virusfood Compost for EVERYTHING
if(S.has_reagent("virusfood", 1))
adjustNutri(round(S.get_reagent_amount("virusfood") * 0.5))
adjustHealth(-round(S.get_reagent_amount("virusfood") * 0.5))
- // FEED ME
+ // Blood
if(S.has_reagent("blood", 1))
adjustNutri(round(S.get_reagent_amount("blood") * 1))
adjustPests(rand(2,4))
- // FEED ME SEYMOUR
+ // Strange reagent
if(S.has_reagent("strangereagent", 1))
spawnplant()
- // The best stuff there is. For testing/debugging.
+ // Honey, Pests are dieing of sugar, so is the plant
+ if(S.has_reagent("honey", 1))
+ adjustPests(-rand(2,5))
+ adjustHealth(-round(S.get_reagent_amount("honey") * 1))
+
+ // Buzz Fuzz, a drink seemingly made for plants...
+ if(S.has_reagent("buzz_fuzz", 1))
+ adjustPests(-rand(2,5))
+ adjustHealth(round(S.get_reagent_amount("buzz_fuzz") * 0.1))
+ adjustNutri(round(S.get_reagent_amount("buzz_fuzz") * 0.5))
+
+ // Adminordrazine the best stuff there is. For testing/debugging.
if(S.has_reagent("adminordrazine", 1))
adjustWater(round(S.get_reagent_amount("adminordrazine") * 1))
adjustHealth(round(S.get_reagent_amount("adminordrazine") * 1))
@@ -769,6 +789,15 @@
to_chat(user, "You plant [O]. ")
dead = 0
myseed = O
+ name = "hydroponics tray ([myseed.plantname])"
+ if(!myseed.productdesc) //we haven't changed our produce's description
+ if(myseed.product)
+ myseed.productdesc = initial(myseed.product.desc)
+ else if(myseed.desc)
+ myseed.productdesc = myseed.desc
+ else
+ myseed.productdesc = "A fascinating specimen."
+ desc = myseed.productdesc
age = 1
plant_health = myseed.endurance
lastcycle = world.time
@@ -834,6 +863,8 @@
harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it
qdel(myseed)
myseed = null
+ name = initial(name)
+ desc = initial(desc)
weedlevel = 0 //Has a side effect of cleaning up those nasty weeds
update_icon()
@@ -866,6 +897,8 @@
qdel(myseed)
myseed = null
update_icon()
+ name = initial(name)
+ desc = initial(desc)
else
if(user)
examine(user)
@@ -883,6 +916,8 @@
qdel(myseed)
myseed = null
dead = 0
+ name = initial(name)
+ desc = initial(desc)
update_icon()
/// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds.///
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 16863b0aa4..4132719389 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -8,7 +8,8 @@
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
var/plantname = "Plants" // Name of plant when planted.
- var/product // A type path. The thing that is created when the plant is harvested.
+ var/obj/item/product // A type path. The thing that is created when the plant is harvested.
+ var/productdesc
var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden.
var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed.
@@ -69,6 +70,10 @@
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
reagents_from_genes() //quality coding
+/obj/item/seeds/examine(mob/user)
+ . = ..()
+ . += "Use a pen on it to rename it or change its description. "
+
/obj/item/seeds/proc/Copy()
var/obj/item/seeds/S = new type(null, 1)
// Copy all the stats
@@ -80,6 +85,10 @@
S.potency = potency
S.weed_rate = weed_rate
S.weed_chance = weed_chance
+ S.name = name
+ S.plantname = plantname
+ S.desc = desc
+ S.productdesc = productdesc
S.genes = list()
for(var/g in genes)
var/datum/plant_gene/G = g
@@ -157,11 +166,18 @@
var/product_name
while(t_amount < getYield())
var/obj/item/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src)
+ if(parent.myseed.plantname != initial(parent.myseed.plantname))
+ t_prod.name = lowertext(parent.myseed.plantname)
+ if(productdesc)
+ t_prod.desc = productdesc
+ t_prod.seed.name = parent.myseed.name
+ t_prod.seed.desc = parent.myseed.desc
+ t_prod.seed.plantname = parent.myseed.plantname
result.Add(t_prod) // User gets a consumable
if(!t_prod)
return
t_amount++
- product_name = t_prod.name
+ product_name = parent.myseed.plantname
if(getYield() >= 1)
SSblackbox.record_feedback("tally", "food_harvested", getYield(), product_name)
parent.update_tray(user)
@@ -331,14 +347,56 @@
to_chat(user, "[text] ")
return
+
+ if(istype(O, /obj/item/pen))
+ var/choice = input("What would you like to change?") in list("Plant Name", "Seed Description", "Product Description", "Cancel")
+ if(!user.canUseTopic(src, BE_CLOSE))
+ return
+ switch(choice)
+ if("Plant Name")
+ var/newplantname = reject_bad_text(stripped_input(user, "Write a new plant name:", name, plantname))
+ if(!user.canUseTopic(src, BE_CLOSE))
+ return
+ if (length(newplantname) > 20)
+ to_chat(user, "That name is too long!")
+ return
+ if(!newplantname)
+ to_chat(user, "That name is invalid.")
+ return
+ else
+ name = "[lowertext(newplantname)]"
+ plantname = newplantname
+ if("Seed Description")
+ var/newdesc = stripped_input(user, "Write a new description:", name, desc)
+ if(!user.canUseTopic(src, BE_CLOSE))
+ return
+ if (length(newdesc) > 180)
+ to_chat(user, "That description is too long!")
+ return
+ if(!newdesc)
+ to_chat(user, "That description is invalid.")
+ return
+ else
+ desc = newdesc
+ if("Product Description")
+ if(product && !productdesc)
+ productdesc = initial(product.desc)
+ var/newproductdesc = stripped_input(user, "Write a new description:", name, productdesc)
+ if(!user.canUseTopic(src, BE_CLOSE))
+ return
+ if (length(newproductdesc) > 180)
+ to_chat(user, "That description is too long!")
+ return
+ if(!newproductdesc)
+ to_chat(user, "That description is invalid.")
+ return
+ else
+ productdesc = newproductdesc
+ else
+ return
+
..() // Fallthrough to item/attackby() so that bags can pick seeds up
-
-
-
-
-
-
// Checks plants for broken tray icons. Use Advanced Proc Call to activate.
// Maybe some day it would be used as unit test.
/proc/check_plants_growth_stages_icons()
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index c6342e2154..40bfa0bbfa 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -20,8 +20,7 @@
access = list() //See get_access()
minimal_access = list() //See get_access()
- mind_traits = list(TRAIT_CAPTAIN_METABOLISM)
-// mind_traits = list(TRAIT_DISK_VERIFIER)
+ mind_traits = list(TRAIT_CAPTAIN_METABOLISM, TRAIT_DISK_VERIFIER)
display_order = JOB_DISPLAY_ORDER_CAPTAIN
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index 23d20cd27a..ca4280a2a1 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(exp_jobsmap, list(
GLOBAL_LIST_INIT(exp_specialmap, list(
EXP_TYPE_LIVING = list(), // all living mobs
EXP_TYPE_ANTAG = list(),
- EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role"), // Ghost roles
+ EXP_TYPE_SPECIAL = list("Lifebringer","Ash Walker","Exile","Servant Golem","Free Golem","Hermit","Translocated Vet","Escaped Prisoner","Hotel Staff","SuperFriend","Space Syndicate","Ancient Crew","Space Doctor","Space Bartender","Beach Bum","Skeleton","Zombie","Space Bar Patron","Lavaland Syndicate","Ghost Role", "Ghost Cafe Visitor"), // Ghost roles
EXP_TYPE_GHOST = list() // dead people, observers
))
GLOBAL_PROTECT(exp_jobsmap)
diff --git a/code/modules/keybindings/bindings_carbon.dm b/code/modules/keybindings/bindings_carbon.dm
index a982273c86..eef170cea9 100644
--- a/code/modules/keybindings/bindings_carbon.dm
+++ b/code/modules/keybindings/bindings_carbon.dm
@@ -3,18 +3,6 @@
if("R", "Southwest") // Southwest is End
toggle_throw_mode()
return
- if("1")
- a_intent_change("help")
- return
- if("2")
- a_intent_change("disarm")
- return
- if("3")
- a_intent_change("grab")
- return
- if("4")
- a_intent_change("harm")
- return
if("C")
toggle_combat_mode()
return
diff --git a/code/modules/keybindings/bindings_living.dm b/code/modules/keybindings/bindings_living.dm
index 241bc15b60..8e9c787b6b 100644
--- a/code/modules/keybindings/bindings_living.dm
+++ b/code/modules/keybindings/bindings_living.dm
@@ -3,5 +3,22 @@
if("B")
resist()
return
+ if("1")
+ if(possible_a_intents)
+ a_intent_change(INTENT_HELP)
+ return
+ if("2")
+ if(possible_a_intents)
+ a_intent_change(INTENT_DISARM)
+ return
+ if("3")
+ if(possible_a_intents)
+ a_intent_change(INTENT_GRAB)
+ return
+ if("4")
+ if(possible_a_intents)
+ a_intent_change(INTENT_HARM)
+ return
+
return ..()
\ No newline at end of file
diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm
index c1a336eb69..00f63510b6 100644
--- a/code/modules/language/language_holder.dm
+++ b/code/modules/language/language_holder.dm
@@ -134,7 +134,7 @@
/datum/language_holder/synthetic
languages = list(/datum/language/common)
- shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic)
+ shadow_languages = list(/datum/language/common, /datum/language/machine, /datum/language/draconic, /datum/language/slime)
/datum/language_holder/empty
languages = list()
diff --git a/code/modules/language/vampiric.dm b/code/modules/language/vampiric.dm
new file mode 100644
index 0000000000..6da54ce844
--- /dev/null
+++ b/code/modules/language/vampiric.dm
@@ -0,0 +1,25 @@
+// VAMPIRE LANGUAGE //
+
+/datum/language/vampiric
+ name = "Blah-Sucker"
+ desc = "The native language of the Bloodsucker elders, learned intuitively by Fledglings and as they pass from death into immortality. Thralls are also given the ability to speak this as apart of their conversion ritual."
+ speech_verb = "growls"
+ ask_verb = "growls"
+ exclaim_verb = "snarls"
+ whisper_verb = "hisses"
+ key = "b"
+ space_chance = 40
+ default_priority = 90
+ icon_state = "bloodsucker"
+
+ flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD // Hide the icon next to your text if someone doesn't know this language.
+ syllables = list(
+ "luk","cha","no","kra","pru","chi","busi","tam","pol","spu","och", // Start: Vampiric
+ "umf","ora","stu","si","ri","li","ka","red","ani","lup","ala","pro",
+ "to","siz","nu","pra","ga","ump","ort","a","ya","yach","tu","lit",
+ "wa","mabo","mati","anta","tat","tana","prol",
+ "tsa","si","tra","te","ele","fa","inz", // Start: Romanian
+ "nza","est","sti","ra","pral","tsu","ago","esch","chi","kys","praz", // Start: Custom
+ "froz","etz","tzil",
+ "t'","k'","t'","k'","th'","tz'"
+ )
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 356c4913b9..10b33cd473 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -67,11 +67,18 @@
new /obj/effect/particle_effect/smoke(get_turf(src))
qdel(src)
+//Non-default pods
+
/obj/item/survivalcapsule/luxury
name = "luxury bluespace shelter capsule"
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
template_id = "shelter_beta"
+/obj/item/survivalcapsule/luxuryelite
+ name = "luxury elite bar capsule"
+ desc = "A luxury bar in a capsule. Bartender required and not included."
+ template_id = "shelter_charlie"
+
//Pod objects
//Window
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index a8e867cef0..e5cab4438a 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -54,6 +54,7 @@
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
+ new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxuryelite, 10000),
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm
index a8b4eab8d2..3e0968eebb 100644
--- a/code/modules/mining/shelters.dm
+++ b/code/modules/mining/shelters.dm
@@ -58,3 +58,18 @@
. = ..()
whitelisted_turfs = typecacheof(/turf/closed/mineral)
banned_objects = typecacheof(/obj/structure/stone_tile)
+
+/datum/map_template/shelter/charlie
+ name = "Shelter Charlie"
+ shelter_id = "shelter_charlie"
+ description = "A luxury elite bar which holds an entire bar \
+ along with two vending machines, tables, and a restroom that \
+ also has a sink. This isn't a survival capsule and so you can \
+ expect that this won't save you if you're bleeding out to \
+ death."
+ mappath = "_maps/templates/shelter_3.dmm"
+
+/datum/map_template/shelter/charlie/New()
+ . = ..()
+ whitelisted_turfs = typecacheof(/turf/closed/mineral)
+ banned_objects = typecacheof(/obj/structure/stone_tile)
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
index 156cc304a6..a5437aaf39 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm
@@ -275,6 +275,18 @@
name = "Snow"
icon_state = "snow"
+/datum/sprite_accessory/insect_fluff/oakworm
+ name = "Oak Worm"
+ icon_state = "oakworm"
+
+/datum/sprite_accessory/insect_fluff/jungle
+ name = "Jungle"
+ icon_state = "jungle"
+
+/datum/sprite_accessory/insect_fluff/witchwing
+ name = "Witch Wing"
+ icon_state = "witchwing"
+
/datum/sprite_accessory/insect_fluff/colored
name = "Colored (Hair)"
icon_state = "snow"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/socks.dm b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm
index 524c1f0f13..0a35f0cd26 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/socks.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm
@@ -43,6 +43,18 @@
name = "Knee-High - UK"
icon_state = "uk_knee"
+/datum/sprite_accessory/underwear/socks/christmas_knee
+ name = "Knee-High - Christmas"
+ icon_state = "christmas_knee"
+
+/datum/sprite_accessory/underwear/socks/candycaner_knee
+ name = "Knee-High - Red Candy Cane"
+ icon_state = "candycaner_knee"
+
+/datum/sprite_accessory/underwear/socks/candycaneg_knee
+ name = "Knee-High - Green Candy Cane"
+ icon_state = "candycaneg_knee"
+
/datum/sprite_accessory/underwear/socks/socks_norm
name = "Normal"
icon_state = "socks_norm"
@@ -52,6 +64,18 @@
name = "Normal - Bee"
icon_state = "bee_norm"
+/datum/sprite_accessory/underwear/socks/christmas_norm
+ name = "Normal - Christmas"
+ icon_state = "christmas_norm"
+
+/datum/sprite_accessory/underwear/socks/candycaner_norm
+ name = "Normal - Red Candy Cane"
+ icon_state = "candycaner_norm"
+
+/datum/sprite_accessory/underwear/socks/candycaneg_norm
+ name = "Normal - Green Candy Cane"
+ icon_state = "candycaneg_norm"
+
/datum/sprite_accessory/underwear/socks/pantyhose
name = "Pantyhose"
icon_state = "pantyhose"
@@ -131,3 +155,15 @@
/datum/sprite_accessory/underwear/socks/uk_thigh
name = "Thigh-high - UK"
icon_state = "uk_thigh"
+
+/datum/sprite_accessory/underwear/socks/christmas_thigh
+ name = "Thigh-high - Christmas"
+ icon_state = "christmas_thigh"
+
+/datum/sprite_accessory/underwear/socks/candycaner_thigh
+ name = "Thigh-high - Red Candy Cane"
+ icon_state = "candycaner_thigh"
+
+/datum/sprite_accessory/underwear/socks/candycaneg_thigh
+ name = "Thigh-high - Green Candy Cane"
+ icon_state = "candycaneg_thigh"
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
index 46a123c6bb..9c1eb6a3fa 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -213,4 +213,81 @@
/datum/sprite_accessory/insect_wings/whitefly
name = "White Fly"
- icon_state = "whitefly"
\ No newline at end of file
+ icon_state = "whitefly"
+
+/datum/sprite_accessory/insect_wings/oakworm
+ name = "Oak Worm"
+ icon_state = "oakworm"
+
+/datum/sprite_accessory/insect_wings/jungle
+ name = "Jungle"
+ icon_state = "jungle"
+
+/datum/sprite_accessory/insect_wings/witchwing
+ name = "Witch Wing"
+ icon_state = "witchwing"
+
+//insect markings
+/datum/sprite_accessory/insect_markings // Extra markings for insects ported from tg.
+ icon = 'icons/mob/insect_markings.dmi'
+ color_src = null
+
+/datum/sprite_accessory/insect_markings/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/insect_markings/reddish
+ name = "Reddish"
+ icon_state = "reddish"
+
+/datum/sprite_accessory/insect_markings/royal
+ name = "Royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/insect_markings/gothic
+ name = "Gothic"
+ icon_state = "gothic"
+
+/datum/sprite_accessory/insect_markings/whitefly
+ name = "White Fly"
+ icon_state = "whitefly"
+
+/datum/sprite_accessory/insect_markings/lovers
+ name = "Lovers"
+ icon_state = "lovers"
+
+/datum/sprite_accessory/insect_markings/punished
+ name = "Punished"
+ icon_state = "punished"
+
+/datum/sprite_accessory/insect_markings/firewatch
+ name = "Firewatch"
+ icon_state = "firewatch"
+
+/datum/sprite_accessory/insect_markings/deathhead
+ name = "Deathshead"
+ icon_state = "deathhead"
+
+/datum/sprite_accessory/insect_markings/poison
+ name = "Poison"
+ icon_state = "poison"
+
+/datum/sprite_accessory/insect_markings/ragged
+ name = "Ragged"
+ icon_state = "ragged"
+
+/datum/sprite_accessory/insect_markings/moonfly
+ name = "Moon Fly"
+ icon_state = "moonfly"
+
+/datum/sprite_accessory/insect_markings/oakworm
+ name = "Oak Worm"
+ icon_state = "oakworm"
+
+/datum/sprite_accessory/insect_markings/jungle
+ name = "Jungle"
+ icon_state = "jungle"
+
+/datum/sprite_accessory/insect_markings/witchwing
+ name = "Witch Wing"
+ icon_state = "witchwing"
\ No newline at end of file
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index fbbd43bbe1..2b9b01dc18 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -178,7 +178,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
* Hair will always update its dir, so if your sprite has no dirs the haircut will go all over the place.
* |- Ricotez
*/
-/mob/dead/observer/proc/update_icon(new_form)
+/mob/dead/observer/update_icon(new_form)
+ . = ..()
if(client) //We update our preferences in case they changed right before update_icon was called.
ghost_accs = client.prefs.ghost_accs
ghost_others = client.prefs.ghost_others
@@ -265,7 +266,7 @@ Works together with spawning an observer, noted above.
/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
penalize = suiciding || penalize // suicide squad.
- if(!key || cmptext(copytext(key,1,2),"@") || (!special && SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse) & COMPONENT_BLOCK_GHOSTING))
+ if(!key || cmptext(copytext(key,1,2),"@") || (SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse, special, penalize) & COMPONENT_BLOCK_GHOSTING))
return //mob has no key, is an aghost or some component hijacked.
stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now
var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc.
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index 757aadaea1..8195b3d84b 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -36,6 +36,9 @@
if(bleed_rate <= 0)
bleed_rate = 0
+ if(HAS_TRAIT(src, TRAIT_NOMARROW)) //Bloodsuckers don't need to be here.
+ return
+
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_NOCLONE))) //cryosleep or husked people do not pump the blood.
//Blood regeneration if there is some space
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index aa3c209016..2a57506df6 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -125,6 +125,7 @@
else if(!brain)
brain = new(src)
brain.name = "[L.real_name]'s brain"
+ brain.organ_flags |= ORGAN_FROZEN
name = "Man-Machine Interface: [brainmob.real_name]"
update_icon()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 3a9495a5cb..52cf82a06a 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -159,23 +159,34 @@
return
//END OF CIT CHANGES
- var/atom/movable/thrown_thing
var/obj/item/I = src.get_active_held_item()
- if(!I)
- if(pulling && isliving(pulling) && grab_state >= GRAB_AGGRESSIVE)
- var/mob/living/throwable_mob = pulling
- if(!throwable_mob.buckled)
- thrown_thing = throwable_mob
+ var/atom/movable/thrown_thing
+ var/mob/living/throwable_mob
+
+ if(istype(I, /obj/item/clothing/head/mob_holder))
+ var/obj/item/clothing/head/mob_holder/holder = I
+ if(holder.held_mob)
+ throwable_mob = holder.held_mob
+ holder.release()
+
+ if(!I || throwable_mob)
+ if(!throwable_mob && pulling && isliving(pulling) && grab_state >= GRAB_AGGRESSIVE)
+ throwable_mob = pulling
+
+ if(throwable_mob && !throwable_mob.buckled)
+ thrown_thing = throwable_mob
+ if(pulling)
stop_pulling()
- if(HAS_TRAIT(src, TRAIT_PACIFISM))
- to_chat(src, "You gently let go of [throwable_mob]. ")
- return
- adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring
- var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
- var/turf/end_T = get_turf(target)
- if(start_T && end_T)
- log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
+ if(HAS_TRAIT(src, TRAIT_PACIFISM))
+ to_chat(src, "You gently let go of [throwable_mob]. ")
+ return
+
+ adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring
+ var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
+ var/turf/end_T = get_turf(target)
+ if(start_T && end_T)
+ log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
else if(!CHECK_BITFIELD(I.item_flags, ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP))
thrown_thing = I
@@ -195,6 +206,8 @@
newtonian_move(get_dir(target, src))
thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src)
+
+
/mob/living/carbon/restrained(ignore_grab)
. = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE))
@@ -585,6 +598,9 @@
sight |= E.sight_flags
if(!isnull(E.lighting_alpha))
lighting_alpha = E.lighting_alpha
+ if(HAS_TRAIT(src, TRAIT_NIGHT_VISION))
+ lighting_alpha = min(LIGHTING_PLANE_ALPHA_NV_TRAIT, lighting_alpha)
+ see_in_dark = max(NIGHT_VISION_DARKSIGHT_RANGE, see_in_dark)
if(client.eye && client.eye != src)
var/atom/A = client.eye
@@ -960,4 +976,15 @@
/mob/living/carbon/transfer_ckey(mob/new_mob, send_signal = TRUE)
if(combatmode)
toggle_combat_mode(TRUE, TRUE)
- return ..()
\ No newline at end of file
+ return ..()
+
+/mob/living/carbon/can_see_reagents()
+ . = ..()
+ if(.) //No need to run through all of this if it's already true.
+ return
+ if(isclothing(head))
+ var/obj/item/clothing/H = head
+ if(H.clothing_flags & SCAN_REAGENTS)
+ return TRUE
+ if(isclothing(wear_mask) && (wear_mask.clothing_flags & SCAN_REAGENTS))
+ return TRUE
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index c5aeb2c1c7..06575aa802 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -50,6 +50,9 @@
/mob/living/carbon/proc/can_catch_item(skip_throw_mode_check)
. = FALSE
+ if(mind)
+ if(mind.martial_art && mind.martial_art.dodge_chance == 100)
+ return TRUE
if(!skip_throw_mode_check && !in_throw_mode)
return
if(get_active_held_item())
@@ -63,6 +66,13 @@
if(can_catch_item())
if(istype(AM, /obj/item))
var/obj/item/I = AM
+ if (mind)
+ if (mind.martial_art && mind.martial_art.dodge_chance == 100) //autocatch for rising bass
+ if (get_active_held_item())
+ visible_message("[I] falls to the ground as [src] chops it out of the air! ")
+ return 1
+ if(!in_throw_mode)
+ throw_mode_on()
if(isturf(I.loc))
I.attack_hand(src)
if(get_active_held_item() == I) //if our attack_hand() picks up the item...
@@ -279,6 +289,12 @@
M.visible_message("[M] shakes [src] trying to get [p_them()] up! ", \
"You shake [src] trying to get [p_them()] up! ")
+ else if(check_zone(M.zone_selected) == "mouth") // I ADDED BOOP-EH-DEH-NOSEH - Jon
+ M.visible_message( \
+ "[M] boops [src]'s nose. ", \
+ "You boop [src] on the nose. ", )
+ playsound(src, 'sound/items/Nose_boop.ogg', 50, 0)
+
else if(check_zone(M.zone_selected) == "head")
var/mob/living/carbon/human/H = src
var/datum/species/pref_species = H.dna.species
@@ -316,7 +332,12 @@
else
return
-
+
+ else if(check_zone(M.zone_selected) == "r_arm" || check_zone(M.zone_selected) == "l_arm")
+ M.visible_message( \
+ "[M] shakes [src]'s hand. ", \
+ "You shake [src]'s hand. ", )
+
else
M.visible_message("[M] hugs [src] to make [p_them()] feel better! ", \
"You hug [src] to make [p_them()] feel better! ")
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 21541e8c28..d893108bcd 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -65,6 +65,8 @@
/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
+ if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL))
+ return FALSE
if(!forced && (status_flags & GODMODE))
return FALSE
if(amount > 0)
@@ -74,6 +76,8 @@
return amount
/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
+ if (!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) //Vamps don't heal naturally.
+ return FALSE
if(!forced && (status_flags & GODMODE))
return FALSE
if(amount > 0)
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index 9e87e7626d..34c268578c 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -15,7 +15,11 @@
if (wear_mask)
. += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face."
if (wear_neck)
- . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
+ . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n"
+ if(can_be_held)
+ . += "[t_He] looks small enough to be picked up with Alt+Click !\n"
+
+
for(var/obj/item/I in held_items)
if(!(I.item_flags & ABSTRACT))
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 04ec0454f8..310ab6beeb 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -15,6 +15,13 @@
. = list("*---------*\nThis is [!obscure_name ? name : "Unknown"] !")
+ var/vampDesc = ReturnVampExamine(user) // Vamps recognize the names of other vamps.
+ var/vassDesc = ReturnVassalExamine(user) // Vassals recognize each other's marks.
+ if (vampDesc != "") // If we don't do it this way, we add a blank space to the string...something to do with this --> . += ""
+ . += vampDesc
+ if (vassDesc != "")
+ . += vassDesc
+
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
@@ -237,13 +244,13 @@
if(DISGUST_LEVEL_DISGUSTED to INFINITY)
msg += "[t_He] look[p_s()] extremely disgusted.\n"
- if(blood_volume < (BLOOD_VOLUME_SAFE*blood_ratio))
+ if(ShowAsPaleExamine())
msg += "[t_He] [t_has] pale skin.\n"
if(bleedsuppress)
msg += "[t_He] [t_is] bandaged with something.\n"
else if(bleed_rate)
- if(reagents.has_reagent("heparin"))
+ if(bleed_rate >= 8) //8 is the rate at which heparin causes you to bleed
msg += "[t_He] [t_is] bleeding uncontrollably! \n"
else
msg += "[t_He] [t_is] bleeding! \n"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 3ae2e3bdbd..0007233975 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -803,10 +803,8 @@
else
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
- if(hud_used.staminas)
- hud_used.staminas.icon_state = staminahudamount()
- if(hud_used.staminabuffer)
- hud_used.staminabuffer.icon_state = staminabufferhudamount()
+ hud_used.staminas?.update_icon_state()
+ hud_used.staminabuffer?.update_icon_state()
/mob/living/carbon/human/fully_heal(admin_revive = 0)
if(admin_revive)
@@ -858,6 +856,7 @@
.["Make slime"] = "?_src_=vars;[HrefToken()];makeslime=[REF(src)]"
.["Toggle Purrbation"] = "?_src_=vars;[HrefToken()];purrbation=[REF(src)]"
.["Copy outfit"] = "?_src_=vars;[HrefToken()];copyoutfit=[REF(src)]"
+ .["Add/Remove Quirks"] = "?_src_=vars;[HrefToken()];modquirks=[REF(src)]"
/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)
if(pulling == target && grab_state >= GRAB_AGGRESSIVE && stat == CONSCIOUS)
@@ -867,8 +866,9 @@
return
//If you dragged them to you and you're aggressively grabbing try to fireman carry them
else if(user != target)
- fireman_carry(target)
- return
+ if(user.a_intent == INTENT_GRAB)
+ fireman_carry(target)
+ return
. = ..()
//src is the user that will be carrying, target is the mob to be carried
@@ -890,7 +890,10 @@
return
visible_message("[src] fails to fireman carry [target]!")
else
- to_chat(src, "You can't fireman carry [target] while they're standing! ")
+ if (ishuman(target))
+ to_chat(src, "You can't fireman carry [target] while they're standing! ")
+ else
+ to_chat(src, "You can't seem to fireman carry that kind of species. ")
/mob/living/carbon/human/proc/piggyback(mob/living/carbon/target)
if(can_piggyback(target))
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 362a4aaa9d..93f33c3a3d 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -23,7 +23,7 @@
if(!d_type)
return 0
var/protection = 0
- var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor)
+ var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, ears, wear_id, wear_neck) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor)
for(var/bp in body_parts)
if(!bp)
continue
@@ -46,6 +46,12 @@
return spec_return
if(mind)
+ if (mind.martial_art && mind.martial_art.dodge_chance)
+ if(!lying && dna && !dna.check_mutation(HULK))
+ if(prob(mind.martial_art.dodge_chance))
+ var/dodgemessage = pick("dodges under the projectile!","dodges to the right of the projectile!","jumps over the projectile!")
+ visible_message("[src] [dodgemessage] ", "You dodge the projectile! ")
+ return -1
if(mind.martial_art && !incapacitated(FALSE, TRUE) && mind.martial_art.can_use(src) && mind.martial_art.deflection_chance) //Some martial arts users can deflect projectiles!
if(prob(mind.martial_art.deflection_chance))
if(!lying && dna && !dna.check_mutation(HULK)) //But only if they're not lying down, and hulks can't do it
@@ -116,6 +122,10 @@
var/final_block_chance = w_uniform.block_chance - (CLAMP((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier
if(w_uniform.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
return 1
+ if(wear_neck)
+ var/final_block_chance = wear_neck.block_chance - (CLAMP((armour_penetration-wear_neck.armour_penetration)/2,0,100)) + block_chance_modifier
+ if(wear_neck.hit_reaction(src, AM, attack_text, final_block_chance, damage, attack_type))
+ return 1
return 0
/mob/living/carbon/human/proc/check_block()
@@ -141,7 +151,7 @@
skipcatch = TRUE
blocked = TRUE
else if(I)
- if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD)
+ if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD && !(mind.martial_art && mind.martial_art.dodge_chance == 100))
if(can_embed(I))
if(prob(I.embedding.embed_chance) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE))
throw_alert("embeddedobject", /obj/screen/alert/embeddedobject)
@@ -154,7 +164,9 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded)
hitpush = FALSE
skipcatch = TRUE //can't catch the now embedded item
-
+ if (mind)
+ if (mind.martial_art && mind.martial_art.dodge_chance == 100)
+ skipcatch = FALSE
return ..()
/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0)
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 8071d632ea..e5e546fdf8 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -117,20 +117,23 @@
/mob/living/carbon/human/can_use_guns(obj/item/G)
. = ..()
-
+ if(!.)
+ return
if(G.trigger_guard == TRIGGER_GUARD_NORMAL)
- if(src.dna.check_mutation(HULK))
+ if(HAS_TRAIT(src, TRAIT_CHUNKYFINGERS))
to_chat(src, "Your meaty finger is much too large for the trigger guard! ")
return FALSE
if(HAS_TRAIT(src, TRAIT_NOGUNS))
to_chat(src, "Your fingers don't fit in the trigger guard! ")
return FALSE
- if(mind)
- if(mind.martial_art && mind.martial_art.no_guns) //great dishonor to famiry
- to_chat(src, "Use of ranged weaponry would bring dishonor to the clan. ")
- return FALSE
- return .
+/mob/living/carbon/human/can_see_reagents()
+ . = ..()
+ if(.) //No need to run through all of this if it's already true.
+ return
+ if(isclothing(glasses) && (glasses.clothing_flags & SCAN_REAGENTS))
+ return TRUE
+
/*
/mob/living/carbon/human/transfer_blood_dna(list/blood_dna)
..()
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 96bd62b1f6..8bf6b4ad3a 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -781,6 +781,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
S = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
if("insect_fluff")
S = GLOB.insect_fluffs_list[H.dna.features["insect_fluff"]]
+ if("insect_markings")
+ S = GLOB.insect_markings_list[H.dna.features["insect_markings"]]
if("caps")
S = GLOB.caps_list[H.dna.features["caps"]]
if("ipc_screen")
@@ -1279,6 +1281,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
////////
/datum/species/proc/handle_digestion(mob/living/carbon/human/H)
+ if(HAS_TRAIT(src, TRAIT_NOHUNGER))
+ return //hunger is for BABIES
//The fucking TRAIT_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with
if(HAS_TRAIT(H, TRAIT_FAT))//I share your pain, past coder.
diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm
index ffd129ebf7..6e54e320ff 100644
--- a/code/modules/mob/living/carbon/human/species_types/abductors.dm
+++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm
@@ -4,7 +4,7 @@
say_mod = "gibbers"
sexes = FALSE
species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL)
- inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
+ inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
mutanttongue = /obj/item/organ/tongue/abductor
/datum/species/abductor/on_species_gain(mob/living/carbon/C, datum/species/old_species)
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
index 02163eaaed..718599c550 100644
--- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -4,9 +4,9 @@
default_color = "00FF00"
species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
- mutant_bodyparts = list("mam_ears", "mam_snout", "mam_tail", "taur", "insect_wings", "mam_snouts", "insect_fluff","horns")
+ mutant_bodyparts = list("mam_ears","mam_tail", "taur", "insect_wings","mam_snout", "mam_snouts", "insect_fluff","insect_markings")
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None",
- "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None","horns" = "None")
+ "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 48ce55a052..3d6c5092e1 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -3,7 +3,7 @@
name = "Golem"
id = "iron golem"
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
- inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
+ inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
mutant_organs = list(/obj/item/organ/adamantine_resonator)
speedmod = 2
@@ -88,7 +88,7 @@
fixed_mut_color = "a3d"
meat = /obj/item/stack/ore/plasma
//Can burn and takes damage from heat
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) //no RESISTHEAT, NOFIRE
+ inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) //no RESISTHEAT, NOFIRE
info_text = "As a Plasma Golem , you burn easily. Be careful, if you get hot enough while burning, you'll blow up!"
heatmod = 0 //fine until they blow up
prefix = "Plasma"
@@ -266,7 +266,7 @@
fixed_mut_color = "9E704B"
meat = /obj/item/stack/sheet/mineral/wood
//Can burn and take damage from heat
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
+ inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
armor = 30
burnmod = 1.25
heatmod = 1.5
@@ -693,7 +693,7 @@
info_text = "As a Cloth Golem , you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \
Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient."
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOGENITALS,NOAROUSAL) //no mutcolors, and can burn
- inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOGUNS)
+ inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
armor = 15 //feels no pain, but not too resistant
burnmod = 2 // don't get burned
@@ -893,7 +893,7 @@
special_names = list("Box")
info_text = "As a Cardboard Golem , you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on yourself."
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOGENITALS,NOAROUSAL,MUTCOLORS)
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
+ inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
fixed_mut_color = "ffffff"
limbs_id = "c_golem" //special sprites
attack_verb = "bash"
@@ -936,7 +936,7 @@
name = "Leather Golem"
id = "leather golem"
special_names = list("Face", "Man", "Belt") //Ah dude 4 strength 4 stam leather belt AHHH
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER)
+ inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER)
prefix = "Leather"
fixed_mut_color = "624a2e"
info_text = "As a Leather Golem , you are flammable, but you can grab things with incredible ease, allowing all your grabs to start at a strong level."
@@ -952,7 +952,7 @@
special_names = list("Boll","Weave")
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES)
fixed_mut_color = null
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
+ inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
info_text = "As a Durathread Golem , your strikes will cause those your targets to start choking, but your woven body won't withstand fire as well."
/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target)
@@ -974,7 +974,7 @@
fixed_mut_color = "ffffff"
attack_verb = "rattl"
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOGENITALS,NOAROUSAL,MUTCOLORS)
- inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH,TRAIT_CALCIUM_HEALER)
+ inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH,TRAIT_CALCIUM_HEALER)
info_text = "As a Bone Golem , You have a powerful spell that lets you chill your enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice."
var/datum/action/innate/bonechill/bonechill
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 7d568ed510..5f91e3ae66 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -44,7 +44,7 @@
C.faction |= "slime"
/datum/species/jelly/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely
+ if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for vampires
return
if(!H.blood_volume)
H.blood_volume += 5
@@ -116,6 +116,33 @@
return
to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal! ")
+/datum/species/jelly/spec_death(gibbed, mob/living/carbon/human/H)
+ if(H)
+ stop_wagging_tail(H)
+
+/datum/species/jelly/spec_stun(mob/living/carbon/human/H,amount)
+ if(H)
+ stop_wagging_tail(H)
+ . = ..()
+
+/datum/species/jelly/can_wag_tail(mob/living/carbon/human/H)
+ return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/jelly/is_wagging_tail(mob/living/carbon/human/H)
+ return ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/jelly/start_wagging_tail(mob/living/carbon/human/H)
+ if("mam_tail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_tail"
+ mutant_bodyparts |= "mam_waggingtail"
+ H.update_body()
+
+/datum/species/jelly/stop_wagging_tail(mob/living/carbon/human/H)
+ if("mam_waggingtail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_waggingtail"
+ mutant_bodyparts |= "mam_tail"
+ H.update_body()
+
////////////////////////////////////////////////////////SLIMEPEOPLE///////////////////////////////////////////////////////////////////
//Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death.
@@ -177,6 +204,8 @@
bodies = old_species.bodies
/datum/species/jelly/slime/spec_life(mob/living/carbon/human/H)
+ if((HAS_TRAIT(H, TRAIT_NOMARROW)))
+ return
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
if(prob(5))
to_chat(H, "You feel very bloated! ")
@@ -410,34 +439,6 @@
heatmod = 1
burnmod = 1
-/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H)
- return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H)
- return ("mam_waggingtail" in mutant_bodyparts)
-
-/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H)
- if("mam_tail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_tail"
- mutant_bodyparts |= "mam_waggingtail"
- H.update_body()
-
-/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H)
- if("mam_waggingtail" in mutant_bodyparts)
- mutant_bodyparts -= "mam_waggingtail"
- mutant_bodyparts |= "mam_tail"
- H.update_body()
-
-
/datum/action/innate/slime_change
name = "Alter Form"
check_flags = AB_CHECK_CONSCIOUS
@@ -838,19 +839,16 @@
link_minds = new(src)
link_minds.Grant(C)
slimelink_owner = C
- link_mob(C)
+ link_mob(C, TRUE)
-/datum/species/jelly/stargazer/proc/link_mob(mob/living/M)
- if(QDELETED(M) || M.stat == DEAD)
+/datum/species/jelly/stargazer/proc/link_mob(mob/living/M, selflink = FALSE)
+ if(QDELETED(M) || (M in linked_mobs))
return FALSE
- if(HAS_TRAIT(M, TRAIT_MINDSHIELD)) //mindshield implant, no dice
- return FALSE
- if(M.anti_magic_check(FALSE, FALSE, TRUE, 0))
- return FALSE
- if(M in linked_mobs)
+ if(!selflink && (M.stat == DEAD || HAS_TRAIT(M, TRAIT_MINDSHIELD) || M.anti_magic_check(FALSE, FALSE, TRUE, 0)))
return FALSE
linked_mobs.Add(M)
- to_chat(M, "You are now connected to [slimelink_owner.real_name]'s Slime Link. ")
+ if(!selflink)
+ to_chat(M, "You are now connected to [slimelink_owner.real_name]'s Slime Link. ")
var/datum/action/innate/linked_speech/action = new(src)
linked_actions.Add(action)
action.Grant(M)
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index c0973102d6..9317a51050 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -94,7 +94,7 @@
id = "ashlizard"
limbs_id = "lizard"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
- inherent_traits = list(TRAIT_NOGUNS)
+ inherent_traits = list(TRAIT_CHUNKYFINGERS)
mutantlungs = /obj/item/organ/lungs/ashwalker
burnmod = 0.9
brutemod = 0.9
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 90f63467a0..3247c96632 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -39,7 +39,7 @@
blacklisted = TRUE
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
- inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
+ inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
mutant_organs = list(/obj/item/organ/heart/nightmare)
mutant_brain = /obj/item/organ/brain/nightmare
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 16a9f07ceb..0061c7ed70 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -659,6 +659,9 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
//used in human and monkey handle_environment()
/mob/living/carbon/proc/natural_bodytemperature_stabilization()
+ if (HAS_TRAIT(src, TRAIT_COLDBLOODED))
+ return 0 //Return 0 as your natural temperature. Species proc handle_environment() will adjust your temperature based on this.
+
var/body_temperature_difference = BODYTEMP_NORMAL - bodytemperature
switch(bodytemperature)
if(-INFINITY to BODYTEMP_COLD_DAMAGE_LIMIT) //Cold damage limit is 50 below the default, the temperature where you start to feel effects.
diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm
index 25bc243f07..92ad87f6b5 100644
--- a/code/modules/mob/living/carbon/monkey/combat.dm
+++ b/code/modules/mob/living/carbon/monkey/combat.dm
@@ -132,6 +132,10 @@
pickupTarget = null
pickupTimer = 0
else if(ismob(pickupTarget.loc)) // in someones hand
+ if(istype(pickupTarget, /obj/item/clothing/head/mob_holder/))
+ var/obj/item/clothing/head/mob_holder/h = pickupTarget
+ if(h && h.held_mob==src)
+ return//dont let them pickpocket themselves
var/mob/M = pickupTarget.loc
if(!pickpocketing)
pickpocketing = TRUE
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 025c1a2f75..fe041dd0a6 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -15,6 +15,7 @@
bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey,
/obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey)
hud_type = /datum/hud/monkey
+ can_be_held = "monkey"
/mob/living/carbon/monkey/Initialize(mapload, cubespawned=FALSE, mob/spawner)
verbs += /mob/living/proc/mob_sleep
@@ -45,6 +46,10 @@
SSmobs.cubemonkeys -= src
return ..()
+/mob/living/carbon/monkey/generate_mob_holder()
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "monkey", 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi', TRUE)
+ return holder
+
/mob/living/carbon/monkey/create_internal_organs()
internal_organs += new /obj/item/organ/appendix
internal_organs += new /obj/item/organ/lungs
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 0ff418d628..8345ef916d 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -62,12 +62,8 @@
unset_machine()
timeofdeath = world.time
tod = STATION_TIME_TIMESTAMP("hh:mm:ss")
- var/turf/T = get_turf(src)
for(var/obj/item/I in contents)
I.on_mob_death(src, gibbed)
- if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf))
- var/rendered = "[mind.name] has died at [get_area_name(T)] . "
- deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
if(mind)
mind.store_memory("Time of death: [tod]", 0)
GLOB.alive_mob_list -= src
@@ -89,7 +85,12 @@
addtimer(CALLBACK(src, .proc/med_hud_set_status), (DEFIB_TIME_LIMIT * 10) + 1)
stop_pulling()
- SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed)
+ var/signal = SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed)
+
+ var/turf/T = get_turf(src)
+ if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf) && !(signal & COMPONENT_BLOCK_DEATH_BROADCAST))
+ var/rendered = "[mind.name] has died at [get_area_name(T)] . "
+ deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
if (client)
client.move_delay = initial(client.move_delay)
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 6c1a2cfec9..041b367ebf 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -87,6 +87,12 @@
message_simple = S.deathmessage
. = ..()
message_simple = initial(message_simple)
+ if(. && user.deathsound)
+ if(isliving(user))
+ var/mob/living/L = user
+ if(!L.can_speak_vocal() || L.oxyloss >= 50)
+ return //stop the sound if oxyloss too high/cant speak
+ playsound(user, user.deathsound, 200, TRUE, TRUE)
if(. && isalienadult(user))
playsound(user.loc, 'sound/voice/hiss6.ogg', 80, 1, 1)
diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm
index 420c59b22d..e57e5e2936 100644
--- a/code/modules/mob/living/inhand_holder.dm
+++ b/code/modules/mob/living/inhand_holder.dm
@@ -5,80 +5,126 @@
desc = "Yell at coderbrush."
icon = null
icon_state = ""
- item_flags = DROPDEL
var/mob/living/held_mob
- var/can_head = TRUE
- var/destroying = FALSE
+ var/can_head = FALSE
+ w_class = WEIGHT_CLASS_BULKY
-/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, head_icon, lh_icon, rh_icon, _can_head = TRUE)
+/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, alt_worn, lh_icon, rh_icon, _can_head_override = FALSE)
. = ..()
- can_head = _can_head
- if(head_icon)
- alternate_worn_icon = head_icon
+
+ if(M)
+ M.setDir(SOUTH)
+ held_mob = M
+ M.forceMove(src)
+ appearance = M.appearance
+ name = M.name
+ desc = M.desc
+
+ if(_can_head_override)
+ can_head = _can_head_override
+ if(alt_worn)
+ alternate_worn_icon = alt_worn
if(_worn_state)
item_state = _worn_state
+ icon_state = _worn_state
if(lh_icon)
lefthand_file = lh_icon
if(rh_icon)
righthand_file = rh_icon
if(!can_head)
slot_flags = NONE
- deposit(M)
/obj/item/clothing/head/mob_holder/Destroy()
- destroying = TRUE
if(held_mob)
- release(FALSE)
+ release()
return ..()
-/obj/item/clothing/head/mob_holder/proc/deposit(mob/living/L)
- if(!istype(L))
- return FALSE
- L.setDir(SOUTH)
- update_visuals(L)
- held_mob = L
- L.forceMove(src)
- name = L.name
- desc = L.desc
- return TRUE
+/obj/item/clothing/head/mob_holder/dropped()
+ ..()
+ if(isturf(loc))//don't release on soft-drops
+ release()
-/obj/item/clothing/head/mob_holder/proc/update_visuals(mob/living/L)
- appearance = L.appearance
-
-/obj/item/clothing/head/mob_holder/proc/release(del_on_release = TRUE)
- if(!held_mob)
- if(del_on_release && !destroying)
- qdel(src)
- return FALSE
+/obj/item/clothing/head/mob_holder/proc/release()
if(isliving(loc))
var/mob/living/L = loc
- to_chat(L, "[held_mob] wriggles free! ")
L.dropItemToGround(src)
- held_mob.forceMove(get_turf(held_mob))
- held_mob.reset_perspective()
- held_mob.setDir(SOUTH)
- held_mob.visible_message("[held_mob] uncurls! ")
- held_mob = null
- if(del_on_release && !destroying)
- qdel(src)
- return TRUE
+ if(held_mob)
+ var/mob/living/m = held_mob
+ m.forceMove(get_turf(m))
+ m.reset_perspective()
+ m.setDir(SOUTH)
+ held_mob = null
+ qdel(src)
/obj/item/clothing/head/mob_holder/relaymove(mob/user)
- release()
+ return
/obj/item/clothing/head/mob_holder/container_resist()
+ if(isliving(loc))
+ var/mob/living/L = loc
+ visible_message("[src] escapes [L]! ")
release()
-/obj/item/clothing/head/mob_holder/drone/deposit(mob/living/L)
- . = ..()
- if(!isdrone(L))
- qdel(src)
- name = "drone (hiding)"
- desc = "This drone is scared and has curled up into a ball!"
+/mob/living/proc/mob_pickup(mob/living/L)
+ var/obj/item/clothing/head/mob_holder/holder = generate_mob_holder()
+ if(!holder)
+ return
+ drop_all_held_items()
+ L.put_in_hands(holder)
+ return
-/obj/item/clothing/head/mob_holder/drone/update_visuals(mob/living/L)
- var/mob/living/simple_animal/drone/D = L
- if(!D)
- return ..()
- icon = 'icons/mob/drone.dmi'
- icon_state = "[D.visualAppearence]_hat"
+/mob/living/proc/mob_try_pickup(mob/living/user)
+ if(!ishuman(user) || !src.Adjacent(user) || user.incapacitated() || !can_be_held)
+ return FALSE
+ if(user.get_active_held_item())
+ to_chat(user, "Your hands are full! ")
+ return FALSE
+ if(buckled)
+ to_chat(user, "[src] is buckled to something! ")
+ return FALSE
+ if(src == user)
+ to_chat(user, "You can't pick yourself up. ")
+ return FALSE
+ visible_message("[user] starts picking up [src]. ", \
+ "[user] starts picking you up! ")
+ if(!do_after(user, 20, target = src))
+ return FALSE
+
+ if(user.get_active_held_item()||buckled)
+ return FALSE
+
+ visible_message("[user] picks up [src]! ", \
+ "[user] picks you up! ")
+ to_chat(user, "You pick [src] up. ")
+ mob_pickup(user)
+ return TRUE
+
+/mob/living/AltClick(mob/user)
+ . = ..()
+ if(mob_try_pickup(user))
+ return TRUE
+
+
+// I didn't define these for mobs, because you shouldn't be able to breathe out of mobs and using their loc isn't always the logical thing to do.
+
+/obj/item/clothing/head/mob_holder/assume_air(datum/gas_mixture/env)
+ var/atom/location = loc
+ if(!loc)
+ return //null
+ var/turf/T = get_turf(loc)
+ while(location != T)
+ location = location.loc
+ if(ismob(location))
+ return location.loc.assume_air(env)
+ return loc.assume_air(env)
+
+/obj/item/clothing/head/mob_holder/remove_air(amount)
+ var/atom/location = loc
+ if(!loc)
+ return //null
+ var/turf/T = get_turf(loc)
+ while(location != T)
+ location = location.loc
+ if(ismob(location))
+ return location.loc.remove_air(amount)
+ return loc.remove_air(amount)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 5299618177..78542ab052 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -40,6 +40,11 @@
QDEL_LIST(diseases)
return ..()
+
+/mob/living/proc/generate_mob_holder()
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, (istext(can_be_held) ? can_be_held : ""), 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi')
+ return holder
+
/mob/living/onZImpact(turf/T, levels)
if(!isgroundlessturf(T))
ZImpactDamage(T, levels)
@@ -50,6 +55,7 @@
adjustBruteLoss((levels * 5) ** 1.5)
Knockdown(levels * 50)
+
/mob/living/proc/OpenCraftingMenu()
return
@@ -1153,24 +1159,6 @@
if(can_be_held)
mob_try_pickup(over)
-/mob/living/proc/mob_pickup(mob/living/L)
- return
-
-/mob/living/proc/mob_try_pickup(mob/living/user)
- if(!ishuman(user))
- return
- if(user.get_active_held_item())
- to_chat(user, "Your hands are full! ")
- return FALSE
- if(buckled)
- to_chat(user, "[src] is buckled to something! ")
- return FALSE
- user.visible_message("[user] starts trying to scoop up [src]! ")
- if(!do_after(user, 20, target = src))
- return FALSE
- mob_pickup(user)
- return TRUE
-
/mob/living/proc/get_static_viruses() //used when creating blood and other infective objects
if(!LAZYLEN(diseases))
return
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 4c670129c1..2cab7d4c8a 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -216,6 +216,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
return 1
+/mob/living/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE, atom/movable/source)
+ . = ..()
+ if(isliving(speaker))
+ var/turf/sourceturf = get_turf(source)
+ var/turf/T = get_turf(src)
+ if(sourceturf && T && !(sourceturf in get_hear(5, T)))
+ . = "[.] "
+
/mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, atom/movable/source)
. = ..()
if(!client)
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 112add367f..f757203237 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -49,7 +49,7 @@
else
padloc = "(UNKNOWN)"
src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]")
- send_speech(message, 7, T, "robot", language)
+ send_speech(message, 7, T, "robot", message_language = language)
to_chat(src, "Holopad transmitted, [real_name] \"[message]\" ")
else
to_chat(src, "No holopad connected.")
diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm
index 82c1435344..81f8fcbef1 100644
--- a/code/modules/mob/living/silicon/login.dm
+++ b/code/modules/mob/living/silicon/login.dm
@@ -4,4 +4,7 @@
var/datum/antagonist/rev/rev = mind.has_antag_datum(/datum/antagonist/rev)
if(rev)
rev.remove_revolutionary(TRUE)
+ var/datum/antagonist/bloodsucker/V = mind.has_antag_datum(/datum/antagonist/bloodsucker)
+ if(V)
+ mind.remove_antag_datum(V)
..()
diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm
index dda8ddfebd..dfc718f1ab 100644
--- a/code/modules/mob/living/silicon/pai/pai_defense.dm
+++ b/code/modules/mob/living/silicon/pai/pai_defense.dm
@@ -63,7 +63,8 @@
emitterhealth = CLAMP((emitterhealth - amount), -50, emittermaxhealth)
if(emitterhealth < 0)
fold_in(force = TRUE)
- to_chat(src, "The impact degrades your holochassis! ")
+ if(amount > 0)
+ to_chat(src, "The impact degrades your holochassis! ")
return amount
/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index daa0cddbf0..5df24406c5 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -112,6 +112,8 @@
var/bellyup = 0
var/dogborg = FALSE
+ var/cansprint = 1
+
/mob/living/silicon/robot/get_cell()
return cell
@@ -159,6 +161,7 @@
else if(!mmi || !mmi.brainmob)
mmi = new (src)
mmi.brain = new /obj/item/organ/brain(mmi)
+ mmi.brain.organ_flags |= ORGAN_FROZEN
mmi.brain.name = "[real_name]'s brain"
mmi.icon_state = "mmi_full"
mmi.name = "Man-Machine Interface: [real_name]"
@@ -830,7 +833,7 @@
robot_suit.head.flash2.burn_out()
robot_suit.head.flash2 = null
robot_suit.head = null
- robot_suit.updateicon()
+ robot_suit.update_icon()
else
new /obj/item/robot_suit(T)
new /obj/item/bodypart/l_leg/robot(T)
diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm
index 2aafedb149..3d0c335989 100644
--- a/code/modules/mob/living/simple_animal/astral.dm
+++ b/code/modules/mob/living/simple_animal/astral.dm
@@ -27,6 +27,7 @@
unsuitable_atmos_damage = 0
minbodytemp = 0
maxbodytemp = 100000
+ blood_volume = 0
/mob/living/simple_animal/astral/death()
icon_state = "shade_dead"
diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
index f2ab3e56ed..03afecc66f 100644
--- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
@@ -51,7 +51,7 @@
weapon.attack(C, src)
playsound(src, 'sound/weapons/blade1.ogg', 50, TRUE, -1)
if(C.stat == DEAD)
- addtimer(CALLBACK(src, .proc/update_icon), 2)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 2)
back_to_idle()
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index e61cfad068..3397d9f4b6 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -14,6 +14,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
maxbodytemp = INFINITY
minbodytemp = 0
+ blood_volume = 0
has_unlimited_silicon_privilege = 1
sentience_type = SENTIENCE_ARTIFICIAL
status_flags = NONE //no default canpush
@@ -839,7 +840,7 @@ Pass a positive integer as an argument to override a bot's default speed.
ejectpai(usr)
update_controls()
-/mob/living/simple_animal/bot/proc/update_icon()
+/mob/living/simple_animal/bot/update_icon_state()
icon_state = "[initial(icon_state)][on]"
// Machinery to simplify topic and access calls
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index 724abea214..2de4ca39fd 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -50,7 +50,7 @@
/mob/living/simple_animal/bot/honkbot/proc/sensor_blink()
icon_state = "honkbot-c"
- addtimer(CALLBACK(src, .proc/update_icon), 5, TIMER_OVERRIDE|TIMER_UNIQUE)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 5, TIMER_OVERRIDE|TIMER_UNIQUE)
//honkbots react with sounds.
/mob/living/simple_animal/bot/honkbot/proc/react_ping()
@@ -177,7 +177,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"},
playsound(src, "honkbot_e", 50, 0)
spam_flag = TRUE // prevent spam
icon_state = "honkbot-e"
- addtimer(CALLBACK(src, .proc/update_icon), 30, TIMER_OVERRIDE|TIMER_UNIQUE)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 30, TIMER_OVERRIDE|TIMER_UNIQUE)
addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn)
/mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index c0a9a2082f..ee770fc2ca 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -250,7 +250,7 @@ Auto Patrol: []"},
var/judgement_criteria = judgement_criteria()
playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
icon_state = "secbot-c"
- addtimer(CALLBACK(src, .proc/update_icon), 2)
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 2)
var/threat = 5
if(ishuman(C))
C.stuttering = 5
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index b7067f8904..be900aa4ef 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -33,6 +33,7 @@
initial_language_holder = /datum/language_holder/construct
deathmessage = "collapses in a shattered heap."
hud_type = /datum/hud/constructs
+ blood_volume = 0
var/list/construct_spells = list()
var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this. "
var/master = null
@@ -459,4 +460,3 @@
hud_used.healths.icon_state = "[icon_state]_health5"
else
hud_used.healths.icon_state = "[icon_state]_health6"
-
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 73fd2b5569..02e171e4c4 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -31,7 +31,7 @@
var/mob/living/simple_animal/mouse/movement_target
gold_core_spawnable = FRIENDLY_SPAWN
collar_type = "cat"
-
+ can_be_held = "cat2"
do_footstep = TRUE
/mob/living/simple_animal/pet/cat/Initialize()
@@ -80,6 +80,7 @@
pass_flags = PASSMOB
mob_size = MOB_SIZE_SMALL
collar_type = "kitten"
+ can_be_held = "cat"
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/pet/cat/Runtime
@@ -262,6 +263,7 @@
attacked_sound = 'sound/items/eatfood.ogg'
deathmessage = "loses its false life and collapses!"
death_sound = "bodyfall"
+ can_be_held = "cak"
/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts)
..()
@@ -284,8 +286,8 @@
if(health < maxHealth)
adjustBruteLoss(-8) //Fast life regen
for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts!
- if(!D.is_frosted)
- D.frost_donut()
+ if(!D.is_decorated)
+ D.decorate_donut()
/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L)
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
index c85890df88..26d4691d83 100644
--- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm
@@ -3,6 +3,7 @@
desc = "This station is just crawling with bugs."
icon_state = "cockroach"
icon_dead = "cockroach"
+ blood_volume = 50
health = 1
maxHealth = 1
turns_per_move = 5
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index d7d673ff8b..9c3e5b5def 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -8,6 +8,7 @@
speak_emote = list("clicks")
emote_hear = list("clicks.")
emote_see = list("clacks.")
+ blood_volume = 350
speak_chance = 1
turns_per_move = 5
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index eb7129181d..0d933d171b 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -15,7 +15,7 @@
turns_per_move = 10
do_footstep = TRUE
-
+ can_be_held = TRUE
//Corgis and pugs are now under one dog subtype
/mob/living/simple_animal/pet/dog/corgi
@@ -35,6 +35,7 @@
var/obj/item/inventory_back
var/shaved = FALSE
var/nofur = FALSE //Corgis that have risen past the material plane of existence.
+ can_be_held = "corgi"
/mob/living/simple_animal/pet/dog/corgi/Destroy()
QDEL_NULL(inventory_head)
@@ -63,6 +64,7 @@
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/pug = 3)
gold_core_spawnable = FRIENDLY_SPAWN
collar_type = "pug"
+ can_be_held = "pug"
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi
name = "Exotic Corgi"
@@ -360,6 +362,7 @@
icon_dead = "old_corgi_dead"
desc = "At a ripe old age of [record_age] Ian's not as spry as he used to be, but he'll always be the HoP's beloved corgi." //RIP
turns_per_move = 20
+ can_be_held = "old_corgi"
/mob/living/simple_animal/pet/dog/corgi/Ian/Life()
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
@@ -582,6 +585,7 @@
unsuitable_atmos_damage = 0
minbodytemp = TCMB
maxbodytemp = T0C + 40
+ can_be_held = "void_puppy"
/mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0)
return 1 //Void puppies can navigate space.
@@ -603,6 +607,7 @@
response_harm = "kicks"
var/turns_since_scan = 0
var/puppies = 0
+ can_be_held = "lisa"
//Lisa already has a cute bow!
/mob/living/simple_animal/pet/dog/corgi/Lisa/Topic(href, href_list)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 387973b979..28fb1f5a42 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -50,6 +50,7 @@
dextrous_hud_type = /datum/hud/dextrous/drone
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
see_in_dark = 7
+ blood_volume = 0
can_be_held = TRUE
held_items = list(null, null)
var/staticChoice = "static"
@@ -273,3 +274,16 @@
/mob/living/simple_animal/drone/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
return 0 //So they don't die trying to fix wiring
+
+/mob/living/simple_animal/drone/can_see_reagents()
+ . = ..()
+ if(.)
+ return
+ if(isclothing(head))
+ var/obj/item/clothing/H = head
+ if(H.clothing_flags & SCAN_REAGENTS)
+ return TRUE
+
+/mob/living/simple_animal/drone/generate_mob_holder()
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "[visualAppearence]_hat", null, null, null, TRUE)
+ return holder
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
index 33031fd80c..e40eb585e8 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm
@@ -29,28 +29,11 @@
if("Nothing")
return
-//ATTACK HAND IGNORING PARENT RETURN VALUE
+//picky up the drone c:
/mob/living/simple_animal/drone/attack_hand(mob/user)
- if(ishuman(user))
- if(stat == DEAD || status_flags & GODMODE || !can_be_held)
- ..()
- return
- if(user.get_active_held_item())
- to_chat(user, "Your hands are full! ")
- return
- visible_message("[user] starts picking up [src]. ", \
- "[user] starts picking you up! ")
- if(!do_after(user, 20, target = src))
- return
- visible_message("[user] picks up [src]! ", \
- "[user] picks you up! ")
- if(buckled)
- to_chat(user, "[src] is buckled to [buckled] and cannot be picked up! ")
- return
- to_chat(user, "You pick [src] up. ")
- drop_all_held_items()
- var/obj/item/clothing/head/mob_holder/drone/DH = new(get_turf(src), src)
- user.put_in_hands(DH)
+ ..()
+ if(user.a_intent == INTENT_HELP)
+ mob_try_pickup(user)
/mob/living/simple_animal/drone/proc/try_reactivate(mob/living/user)
var/mob/dead/observer/G = get_ghost()
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index b2971e8d01..2679c68b52 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -197,7 +197,7 @@
density = FALSE
speak_chance = 2
turns_per_move = 2
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/chicken = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -246,7 +246,7 @@
density = FALSE
speak_chance = 2
turns_per_move = 3
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/chicken = 2)
var/egg_type = /obj/item/reagent_containers/food/snacks/egg
var/food_type = /obj/item/reagent_containers/food/snacks/grown/wheat
response_help = "pets"
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index 28b66c26ee..3f58ca593e 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -18,7 +18,7 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
gold_core_spawnable = FRIENDLY_SPAWN
-
+ can_be_held = "fox"
do_footstep = TRUE
//Captain fox
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 6b179ba857..1a9a4ff4d7 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -23,6 +23,7 @@
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption.
+ can_be_held = "lizard" //you can hold lizards now.
/mob/living/simple_animal/hostile/lizard/CanAttack(atom/the_target)//Can we actually attack a possible target?
if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it
@@ -39,3 +40,7 @@
return TRUE
else
return ..()
+
+/mob/living/simple_animal/hostile/lizard/generate_mob_holder()
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "lizard", 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi', TRUE)
+ return holder
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index bf45c9cc73..fec75e4a36 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -10,6 +10,7 @@
emote_see = list("runs in a circle.", "shakes.")
speak_chance = 1
turns_per_move = 5
+ blood_volume = 250
see_in_dark = 6
maxHealth = 5
health = 5
@@ -25,6 +26,7 @@
var/body_color //brown, gray and white, leave blank for random
gold_core_spawnable = FRIENDLY_SPAWN
var/chew_probability = 1
+ can_be_held = TRUE
/mob/living/simple_animal/mouse/Initialize()
. = ..()
@@ -34,7 +36,7 @@
icon_state = "mouse_[body_color]"
icon_living = "mouse_[body_color]"
icon_dead = "mouse_[body_color]_dead"
-
+ can_be_held = "mouse_[body_color]"
/mob/living/simple_animal/mouse/proc/splat()
src.health = 0
@@ -87,14 +89,17 @@
/mob/living/simple_animal/mouse/white
body_color = "white"
icon_state = "mouse_white"
+ can_be_held = "mouse_white"
/mob/living/simple_animal/mouse/gray
body_color = "gray"
icon_state = "mouse_gray"
+ can_be_held = "mouse_gray"
/mob/living/simple_animal/mouse/brown
body_color = "brown"
icon_state = "mouse_brown"
+ can_be_held = "mouse_brown"
//TOM IS ALIVE! SQUEEEEEEEE~K :)
/mob/living/simple_animal/mouse/brown/Tom
@@ -118,3 +123,8 @@
/obj/item/reagent_containers/food/snacks/deadmouse/on_grind()
reagents.clear_reagents()
+
+/mob/living/simple_animal/mouse/generate_mob_holder()
+ var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, (istext(can_be_held) ? can_be_held : ""), 'icons/mob/animals_held.dmi', 'icons/mob/animals_held_lh.dmi', 'icons/mob/animals_held_rh.dmi')
+ holder.w_class = WEIGHT_CLASS_TINY
+ return holder
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
index 324fa107fa..175cb8e838 100644
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm
@@ -22,7 +22,7 @@
maxHealth = 50
speed = 10
glide_size = 2
-
+ can_be_held = "sloth" //finally oranges can be held
do_footstep = TRUE
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index e3ef14c784..1bd434b233 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -20,6 +20,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
icon_living = "magicOrange"
icon_dead = "magicOrange"
speed = 0
+ blood_volume = 0
a_intent = INTENT_HARM
stop_automated_movement = 1
movement_type = FLYING // Immunity to chasms and landmines, etc.
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 4e7cb0ac70..bc766f7409 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -19,6 +19,7 @@
spacewalk = TRUE
stat_attack = UNCONSCIOUS
robust_searching = 1
+ blood_volume = 0
harm_intent_damage = 10
obj_damage = 50
@@ -42,4 +43,4 @@
var/mob/living/carbon/C = target
C.Knockdown(60)
C.visible_message("\The [src] knocks down \the [C]! ", \
- "\The [src] knocks you down! ")
\ No newline at end of file
+ "\The [src] knocks you down! ")
diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm
index b67770fb4b..3bc8715c5c 100644
--- a/code/modules/mob/living/simple_animal/hostile/goose.dm
+++ b/code/modules/mob/living/simple_animal/hostile/goose.dm
@@ -9,7 +9,7 @@
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
speak_chance = 0
turns_per_move = 5
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index ece5d7e24c..a9576a467b 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -28,6 +28,7 @@
gold_core_spawnable = HOSTILE_SPAWN
del_on_death = 1
loot = list(/obj/effect/decal/cleanable/robot_debris)
+ blood_volume = 0
do_footstep = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 0377efd16e..bd4f334476 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -427,7 +427,7 @@
if(casingtype)
var/obj/item/ammo_casing/casing = new casingtype(startloc)
playsound(src, projectilesound, 100, 1)
- casing.fire_casing(targeted_atom, src, null, null, null, ran_zone(), src)
+ casing.fire_casing(targeted_atom, src, null, null, null, ran_zone(), 0, src)
else if(projectiletype)
var/obj/item/projectile/P = new projectiletype(startloc)
playsound(src, projectilesound, 100, 1)
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm
index 1a894734d8..38dd17a09b 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm
@@ -30,6 +30,7 @@
robust_searching = TRUE
stat_attack = UNCONSCIOUS
anchored = TRUE
+ blood_volume = 0
var/combatant_state = SEEDLING_STATE_NEUTRAL
var/obj/seedling_weakpoint/weak_point
var/mob/living/beam_debuff_target
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index 6279821170..397d40925b 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -50,6 +50,7 @@ Difficulty: Normal
armour_penetration = 75
melee_damage_lower = 15
melee_damage_upper = 20
+ blood_volume = 0
speed = 1
move_to_delay = 11
ranged = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 5bfabe376e..49b56d0950 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -137,7 +137,7 @@ Difficulty: Medium
if(last_legion)
loot = list(/obj/item/staff/storm)
elimination = 0
- else if(prob(5))
+ else if(prob(20))
loot = list(/obj/structure/closet/crate/necropolis/tendril)
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
index 20916c9311..51919dad24 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
@@ -22,6 +22,7 @@
environment_smash = ENVIRONMENT_SMASH_NONE
sentience_type = SENTIENCE_BOSS
layer = LARGE_MOB_LAYER
+ blood_volume = 0
var/doing_move_loop = FALSE
var/mob/living/set_target
var/timerid
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
new file mode 100644
index 0000000000..04a1b4a468
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -0,0 +1,366 @@
+#define TUMOR_INACTIVE 0
+#define TUMOR_ACTIVE 1
+#define TUMOR_PASSIVE 2
+
+//Elite mining mobs
+/mob/living/simple_animal/hostile/asteroid/elite
+ name = "elite"
+ desc = "An elite monster, found in one of the strange tumors on lavaland."
+ icon = 'icons/mob/lavaland/lavaland_elites.dmi'
+ faction = list("boss")
+ robust_searching = TRUE
+ ranged_ignores_vision = TRUE
+ ranged = TRUE
+ obj_damage = 5
+ vision_range = 6
+ aggro_vision_range = 18
+ environment_smash = ENVIRONMENT_SMASH_NONE //This is to prevent elites smashing up the mining station, we'll make sure they can smash minerals fine below.
+ harm_intent_damage = 0 //Punching elites gets you nowhere
+ stat_attack = UNCONSCIOUS
+ layer = LARGE_MOB_LAYER
+ sentience_type = SENTIENCE_BOSS
+ hud_type = /datum/hud/lavaland_elite
+ var/chosen_attack = 1
+ var/list/attack_action_types = list()
+ var/can_talk = FALSE
+ var/obj/loot_drop = null
+
+//Gives player-controlled variants the ability to swap attacks
+/mob/living/simple_animal/hostile/asteroid/elite/Initialize(mapload)
+ . = ..()
+ for(var/action_type in attack_action_types)
+ var/datum/action/innate/elite_attack/attack_action = new action_type()
+ attack_action.Grant(src)
+
+//Prevents elites from attacking members of their faction (can't hurt themselves either) and lets them mine rock with an attack despite not being able to smash walls.
+/mob/living/simple_animal/hostile/asteroid/elite/AttackingTarget()
+ if(istype(target, /mob/living/simple_animal/hostile))
+ var/mob/living/simple_animal/hostile/M = target
+ if(faction_check_mob(M))
+ return FALSE
+ if(istype(target, /obj/structure/elite_tumor))
+ var/obj/structure/elite_tumor/T = target
+ if(T.mychild == src && T.activity == TUMOR_PASSIVE)
+ var/elite_remove = alert("Re-enter the tumor?", "Despawn yourself?", "Yes", "No")
+ if(elite_remove == "No" || !src || QDELETED(src))
+ return
+ T.mychild = null
+ T.activity = TUMOR_INACTIVE
+ T.icon_state = "advanced_tumor"
+ qdel(src)
+ return FALSE
+ . = ..()
+ if(ismineralturf(target))
+ var/turf/closed/mineral/M = target
+ M.gets_drilled()
+
+//Elites can't talk (normally)!
+/mob/living/simple_animal/hostile/asteroid/elite/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
+ if(can_talk)
+ . = ..()
+ return TRUE
+ return FALSE
+
+/*Basic setup for elite attacks, based on Whoneedspace's megafauna attack setup.
+While using this makes the system rely on OnFire, it still gives options for timers not tied to OnFire, and it makes using attacks consistent accross the board for player-controlled elites.*/
+
+/datum/action/innate/elite_attack
+ name = "Elite Attack"
+ icon_icon = 'icons/mob/actions/actions_elites.dmi'
+ button_icon_state = ""
+ background_icon_state = "bg_default"
+ var/mob/living/simple_animal/hostile/asteroid/elite/M
+ var/chosen_message
+ var/chosen_attack_num = 0
+
+/datum/action/innate/elite_attack/Grant(mob/living/L)
+ if(istype(L, /mob/living/simple_animal/hostile/asteroid/elite))
+ M = L
+ return ..()
+ return FALSE
+
+/datum/action/innate/elite_attack/Activate()
+ M.chosen_attack = chosen_attack_num
+ to_chat(M, chosen_message)
+
+/mob/living/simple_animal/hostile/asteroid/elite/updatehealth()
+ . = ..()
+ update_health_hud()
+
+/mob/living/simple_animal/hostile/asteroid/elite/update_health_hud()
+ if(hud_used)
+ var/severity = 0
+ var/healthpercent = (health/maxHealth) * 100
+ switch(healthpercent)
+ if(100 to INFINITY)
+ hud_used.healths.icon_state = "elite_health0"
+ if(80 to 100)
+ severity = 1
+ if(60 to 80)
+ severity = 2
+ if(40 to 60)
+ severity = 3
+ if(20 to 40)
+ severity = 4
+ if(10 to 20)
+ severity = 5
+ if(1 to 20)
+ severity = 6
+ else
+ severity = 7
+ hud_used.healths.icon_state = "elite_health[severity]"
+ if(severity > 0)
+ overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
+ else
+ clear_fullscreen("brute")
+
+//The Pulsing Tumor, the actual "spawn-point" of elites, handles the spawning, arena, and procs for dealing with basic scenarios.
+
+/obj/structure/elite_tumor
+ name = "pulsing tumor"
+ desc = "An odd, pulsing tumor sticking out of the ground. You feel compelled to reach out and touch it..."
+ armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ resistance_flags = INDESTRUCTIBLE
+ var/activity = TUMOR_INACTIVE
+ var/boosted = FALSE
+ var/times_won = 0
+ var/mob/living/carbon/human/activator = null
+ var/mob/living/simple_animal/hostile/asteroid/elite/mychild = null
+ var/potentialspawns = list(/mob/living/simple_animal/hostile/asteroid/elite/broodmother,
+ /mob/living/simple_animal/hostile/asteroid/elite/pandora,
+ /mob/living/simple_animal/hostile/asteroid/elite/legionnaire,
+ /mob/living/simple_animal/hostile/asteroid/elite/herald)
+ icon = 'icons/obj/lavaland/tumor.dmi'
+ icon_state = "tumor"
+ pixel_x = -16
+ light_color = LIGHT_COLOR_RED
+ light_range = 3
+ anchored = TRUE
+ density = FALSE
+ var/obj/item/gps/internal = null
+
+/obj/item/gps/internal/elite
+ icon_state = null
+ gpstag = "Menacing Signal"
+ desc = "You're not quite sure how a signal can be menacing."
+ invisibility = 100
+
+/obj/structure/elite_tumor/attack_hand(mob/user)
+ . = ..()
+ if(ishuman(user))
+ switch(activity)
+ if(TUMOR_PASSIVE)
+ activity = TUMOR_ACTIVE
+ visible_message("[src] convulses as your arm enters its radius. Your instincts tell you to step back. ")
+ activator = user
+ if(boosted)
+ mychild.playsound_local(get_turf(mychild), 'sound/effects/magic.ogg', 40, 0)
+ to_chat(mychild, "Someone has activated your tumor. You will be returned to fight shortly, get ready! ")
+ addtimer(CALLBACK(src, .proc/return_elite), 30)
+ INVOKE_ASYNC(src, .proc/arena_checks)
+ if(TUMOR_INACTIVE)
+ activity = TUMOR_ACTIVE
+ var/mob/dead/observer/elitemind = null
+ visible_message("[src] begins to convulse. Your instincts tell you to step back. ")
+ activator = user
+ if(!boosted)
+ addtimer(CALLBACK(src, .proc/spawn_elite), 30)
+ return
+ visible_message("Something within [src] stirs... ")
+ var/list/candidates = pollCandidatesForMob("Do you want to play as a lavaland elite?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, src, POLL_IGNORE_SENTIENCE_POTION)
+ if(candidates.len)
+ audible_message("The stirring sounds increase in volume! ")
+ elitemind = pick(candidates)
+ elitemind.playsound_local(get_turf(elitemind), 'sound/effects/magic.ogg', 40, 0)
+ to_chat(elitemind, "You have been chosen to play as a Lavaland Elite.\nIn a few seconds, you will be summoned on Lavaland as a monster to fight your activator, in a fight to the death.\nYour attacks can be switched using the buttons on the top left of the HUD, and used by clicking on targets or tiles similar to a gun.\nWhile the opponent might have an upper hand with powerful mining equipment and tools, you have great power normally limited by AI mobs.\nIf you want to win, you'll have to use your powers in creative ways to ensure the kill. It's suggested you try using them all as soon as possible.\nShould you win, you'll receive extra information regarding what to do after. Good luck! ")
+ addtimer(CALLBACK(src, .proc/spawn_elite, elitemind), 100)
+ else
+ visible_message("The stirring stops, and nothing emerges. Perhaps try again later. ")
+ activity = TUMOR_INACTIVE
+ activator = null
+
+
+obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind)
+ var/selectedspawn = pick(potentialspawns)
+ mychild = new selectedspawn(loc)
+ visible_message("[mychild] emerges from [src]! ")
+ playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE)
+ if(boosted)
+ mychild.key = elitemind.key
+ mychild.sentience_act()
+ icon_state = "tumor_popped"
+ INVOKE_ASYNC(src, .proc/arena_checks)
+
+obj/structure/elite_tumor/proc/return_elite()
+ mychild.forceMove(loc)
+ visible_message("[mychild] emerges from [src]! ")
+ playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE)
+ mychild.revive(full_heal = TRUE, admin_revive = TRUE)
+ if(boosted)
+ mychild.maxHealth = mychild.maxHealth * 2
+ mychild.health = mychild.maxHealth
+
+/obj/structure/elite_tumor/Initialize(mapload)
+ . = ..()
+ internal = new/obj/item/gps/internal/elite(src)
+ START_PROCESSING(SSobj, src)
+
+/obj/structure/elite_tumor/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ mychild = null
+ activator = null
+ return ..()
+
+/obj/structure/elite_tumor/process()
+ if(isturf(loc))
+ for(var/mob/living/simple_animal/hostile/asteroid/elite/elitehere in loc)
+ if(elitehere == mychild && activity == TUMOR_PASSIVE)
+ mychild.adjustHealth(-mychild.maxHealth*0.05)
+ var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(mychild))
+ H.color = "#FF0000"
+
+/obj/structure/elite_tumor/attackby(obj/item/I, mob/user, params)
+ . = ..()
+ if(istype(I, /obj/item/organ/regenerative_core) && activity == TUMOR_INACTIVE && !boosted)
+ var/obj/item/organ/regenerative_core/core = I
+ if(!core.preserved)
+ return
+ visible_message("As [user] drops the core into [src], [src] appears to swell. ")
+ icon_state = "advanced_tumor"
+ boosted = TRUE
+ light_range = 6
+ desc = "[desc] This one seems to glow with a strong intensity."
+ qdel(core)
+ return TRUE
+
+/obj/structure/elite_tumor/proc/arena_checks()
+ if(activity != TUMOR_ACTIVE || QDELETED(src))
+ return
+ INVOKE_ASYNC(src, .proc/fighters_check) //Checks to see if our fighters died.
+ INVOKE_ASYNC(src, .proc/arena_trap) //Gets another arena trap queued up for when this one runs out.
+ INVOKE_ASYNC(src, .proc/border_check) //Checks to see if our fighters got out of the arena somehow.
+ addtimer(CALLBACK(src, .proc/arena_checks), 50)
+
+/obj/structure/elite_tumor/proc/fighters_check()
+ if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator))
+ onEliteWon()
+ if(mychild != null && mychild.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(mychild))
+ onEliteLoss()
+
+/obj/structure/elite_tumor/proc/arena_trap()
+ var/turf/T = get_turf(src)
+ if(loc == null)
+ return
+ for(var/t in RANGE_TURFS(12, T))
+ if(get_dist(t, T) == 12)
+ var/obj/effect/temp_visual/elite_tumor_wall/newwall
+ newwall = new /obj/effect/temp_visual/elite_tumor_wall(t, src)
+ newwall.activator = src.activator
+ newwall.ourelite = src.mychild
+
+/obj/structure/elite_tumor/proc/border_check()
+ if(activator != null && get_dist(src, activator) >= 12)
+ activator.forceMove(loc)
+ visible_message("[activator] suddenly reappears above [src]! ")
+ playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE)
+ if(mychild != null && get_dist(src, mychild) >= 12)
+ mychild.forceMove(loc)
+ visible_message("[mychild] suddenly reappears above [src]! ")
+ playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE)
+
+obj/structure/elite_tumor/proc/onEliteLoss()
+ playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, TRUE, TRUE)
+ visible_message("[src] begins to convulse violently before beginning to dissipate. ")
+ visible_message("As [src] closes, something is forced up from down below. ")
+ var/obj/structure/closet/crate/necropolis/tendril/lootbox = new /obj/structure/closet/crate/necropolis/tendril(loc)
+ if(!boosted)
+ mychild = null
+ activator = null
+ qdel(src)
+ return
+ var/lootpick = rand(1, 2)
+ if(lootpick == 1 && mychild.loot_drop != null)
+ new mychild.loot_drop(lootbox)
+ else
+ new /obj/item/tumor_shard(lootbox)
+ mychild = null
+ activator = null
+ qdel(src)
+
+obj/structure/elite_tumor/proc/onEliteWon()
+ activity = TUMOR_PASSIVE
+ activator = null
+ mychild.revive(full_heal = TRUE, admin_revive = TRUE)
+ if(boosted)
+ times_won++
+ mychild.maxHealth = mychild.maxHealth * 0.5
+ mychild.health = mychild.maxHealth
+ if(times_won == 1)
+ mychild.playsound_local(get_turf(mychild), 'sound/effects/magic.ogg', 40, 0)
+ to_chat(mychild, "As the life in the activator's eyes fade, the forcefield around you dies out and you feel your power subside.\nDespite this inferno being your home, you feel as if you aren't welcome here anymore.\nWithout any guidance, your purpose is now for you to decide. ")
+ to_chat(mychild, "Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\nBear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\nAlso, be weary of your fellow inhabitants, they likely won't be happy to see you! ")
+ to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances! ")
+
+/obj/item/tumor_shard
+ name = "tumor shard"
+ desc = "A strange, sharp, crystal shard from an odd tumor on Lavaland. Stabbing the corpse of a lavaland elite with this will revive them, assuming their soul still lingers. Revived lavaland elites only have half their max health, but are completely loyal to their reviver."
+ icon = 'icons/obj/lavaland/artefacts.dmi'
+ icon_state = "crevice_shard"
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ item_state = "screwdriver_head"
+ throwforce = 5
+ w_class = WEIGHT_CLASS_SMALL
+ throw_speed = 3
+ throw_range = 5
+
+/obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag)
+ . = ..()
+ if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag)
+ var/mob/living/simple_animal/hostile/asteroid/elite/E = target
+ if(E.stat != DEAD || E.sentience_type != SENTIENCE_BOSS || !E.key)
+ user.visible_message("It appears [E] is unable to be revived right now. Perhaps try again later. ")
+ return
+ E.faction = list("neutral")
+ E.revive(full_heal = TRUE, admin_revive = TRUE)
+ user.visible_message("[user] stabs [E] with [src], reviving it. ")
+ E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0)
+ to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk. Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to! ")
+ E.maxHealth = E.maxHealth * 0.5
+ E.health = E.maxHealth
+ E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people."
+ E.sentience_type = SENTIENCE_ORGANIC
+ qdel(src)
+ else
+ to_chat(user, "[src] only works on the corpse of a sentient lavaland elite. ")
+
+/obj/effect/temp_visual/elite_tumor_wall
+ name = "magic wall"
+ icon = 'icons/turf/walls/hierophant_wall_temp.dmi'
+ icon_state = "wall"
+ duration = 50
+ smooth = SMOOTH_TRUE
+ layer = BELOW_MOB_LAYER
+ var/mob/living/carbon/human/activator = null
+ var/mob/living/simple_animal/hostile/asteroid/elite/ourelite = null
+ color = rgb(255,0,0)
+ light_range = MINIMUM_USEFUL_LIGHT_RANGE
+ light_color = LIGHT_COLOR_RED
+
+/obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster)
+ . = ..()
+ queue_smooth_neighbors(src)
+ queue_smooth(src)
+
+/obj/effect/temp_visual/elite_tumor_wall/Destroy()
+ queue_smooth_neighbors(src)
+ activator = null
+ ourelite = null
+ return ..()
+
+/obj/effect/temp_visual/elite_tumor_wall/CanPass(atom/movable/mover, turf/target)
+ if(mover == ourelite || mover == activator)
+ return FALSE
+ else
+ return TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
new file mode 100644
index 0000000000..116e2b8e45
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
@@ -0,0 +1,247 @@
+#define TENTACLE_PATCH 1
+#define SPAWN_CHILDREN 2
+#define RAGE 3
+#define CALL_CHILDREN 4
+
+/**
+ * # Goliath Broodmother
+ *
+ * A stronger, faster variation of the goliath. Has the ability to spawn baby goliaths, which it can later detonate at will.
+ * When it's health is below half, tendrils will spawn randomly around it. When it is below a quarter of health, this effect is doubled.
+ * It's attacks are as follows:
+ * - Spawns a 3x3/plus shape of tentacles on the target location
+ * - Spawns 2 baby goliaths on its tile, up to a max of 8. Children blow up when they die.
+ * - The broodmother lets out a noise, and is able to move faster for 6.5 seconds.
+ * - Summons your children around you.
+ * The broodmother is a fight revolving around stage control, as the activator has to manage the baby goliaths and the broodmother herself, along with all the tendrils.
+ */
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother
+ name = "goliath broodmother"
+ desc = "An example of sexual dimorphism, this female goliath looks much different than the males of her species. She is, however, just as dangerous, if not more."
+ gender = FEMALE
+ icon_state = "broodmother"
+ icon_living = "broodmother"
+ icon_aggro = "broodmother"
+ icon_dead = "egg_sac"
+ icon_gib = "syndicate_gib"
+ maxHealth = 800
+ health = 800
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ armour_penetration = 30
+ attacktext = "beats down on"
+ /*attack_verb_continuous = "beats down on"
+ attack_verb_simple = "beat down on"*/
+ attack_sound = 'sound/weapons/punch1.ogg'
+ throw_message = "does nothing to the rocky hide of the"
+ speed = 2
+ move_to_delay = 5
+ mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mouse_opacity = MOUSE_OPACITY_ICON
+ deathmessage = "explodes into gore!"
+ loot_drop = /obj/item/crusher_trophy/broodmother_tongue
+
+ attack_action_types = list(/datum/action/innate/elite_attack/tentacle_patch,
+ /datum/action/innate/elite_attack/spawn_children,
+ /datum/action/innate/elite_attack/rage,
+ /datum/action/innate/elite_attack/call_children)
+
+ var/rand_tent = 0
+ var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list()
+
+/datum/action/innate/elite_attack/tentacle_patch
+ name = "Tentacle Patch"
+ button_icon_state = "tentacle_patch"
+ chosen_message = "You are now attacking with a patch of tentacles. "
+ chosen_attack_num = TENTACLE_PATCH
+
+/datum/action/innate/elite_attack/spawn_children
+ name = "Spawn Children"
+ button_icon_state = "spawn_children"
+ chosen_message = "You will spawn two children at your location to assist you in combat. You can have up to 8. "
+ chosen_attack_num = SPAWN_CHILDREN
+
+/datum/action/innate/elite_attack/rage
+ name = "Rage"
+ button_icon_state = "rage"
+ chosen_message = "You will temporarily increase your movement speed. "
+ chosen_attack_num = RAGE
+
+/datum/action/innate/elite_attack/call_children
+ name = "Call Children"
+ button_icon_state = "call_children"
+ chosen_message = "You will summon your children to your location. "
+ chosen_attack_num = CALL_CHILDREN
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/OpenFire()
+ if(client)
+ switch(chosen_attack)
+ if(TENTACLE_PATCH)
+ tentacle_patch(target)
+ if(SPAWN_CHILDREN)
+ spawn_children()
+ if(RAGE)
+ rage()
+ if(CALL_CHILDREN)
+ call_children()
+ return
+ var/aiattack = rand(1,4)
+ switch(aiattack)
+ if(TENTACLE_PATCH)
+ tentacle_patch(target)
+ if(SPAWN_CHILDREN)
+ spawn_children()
+ if(RAGE)
+ rage()
+ if(CALL_CHILDREN)
+ call_children()
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/Life()
+ . = ..()
+ if(!.) //Checks if they are dead as a rock.
+ return
+ if(health < maxHealth * 0.5 && rand_tent < world.time)
+ rand_tent = world.time + 30
+ var/tentacle_amount = 5
+ if(health < maxHealth * 0.25)
+ tentacle_amount = 10
+ var/tentacle_loc = spiral_range_turfs(5, get_turf(src))
+ for(var/i in 1 to tentacle_amount)
+ var/turf/t = pick_n_take(tentacle_loc)
+ new /obj/effect/temp_visual/goliath_tentacle/broodmother(t, src)
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(var/target)
+ ranged_cooldown = world.time + 15
+ var/tturf = get_turf(target)
+ if(!isturf(tturf))
+ return
+ visible_message("[src] digs its tentacles under [target]! ")
+ new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(tturf, src)
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/spawn_children(var/target)
+ ranged_cooldown = world.time + 40
+ visible_message("The ground churns behind [src]! ")
+ for(var/i in 1 to 2)
+ if(children_list.len >= 8)
+ return
+ var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/newchild = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc)
+ newchild.GiveTarget(target)
+ newchild.faction = faction.Copy()
+ visible_message("[newchild] appears below [src]! ")
+ newchild.mother = src
+ children_list += newchild
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage()
+ ranged_cooldown = world.time + 70
+ playsound(src,'sound/spookoween/insane_low_laugh.ogg', 200, 1)
+ visible_message("[src] starts picking up speed! ")
+ color = "#FF0000"
+ set_varspeed(0)
+ move_to_delay = 3
+ addtimer(CALLBACK(src, .proc/reset_rage), 65)
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/reset_rage()
+ color = "#FFFFFF"
+ set_varspeed(2)
+ move_to_delay = 5
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/call_children()
+ ranged_cooldown = world.time + 60
+ visible_message("The ground shakes near [src]! ")
+ var/list/directions = GLOB.cardinals.Copy() + GLOB.diagonals.Copy()
+ for(var/mob/child in children_list)
+ var/spawndir = pick_n_take(directions)
+ var/turf/T = get_step(src, spawndir)
+ if(T)
+ child.forceMove(T)
+ playsound(src, 'sound/effects/bamf.ogg', 100, 1)
+
+//The goliath's children. Pretty weak, simple mobs which are able to put a single tentacle under their target when at range.
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child
+ name = "baby goliath"
+ desc = "A young goliath recently born from it's mother. While they hatch from eggs, said eggs are incubated in the mother until they are ready to be born."
+ icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
+ icon_state = "goliath_baby"
+ icon_living = "goliath_baby"
+ icon_aggro = "goliath_baby"
+ icon_dead = "goliath_baby_dead"
+ icon_gib = "syndicate_gib"
+ maxHealth = 30
+ health = 30
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ attacktext = "bashes against"
+ /*attack_verb_continuous = "bashes against"
+ attack_verb_simple = "bash against"*/
+ attack_sound = 'sound/weapons/punch1.ogg'
+ throw_message = "does nothing to the rocky hide of the"
+ speed = 2
+ move_to_delay = 5
+ mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ mouse_opacity = MOUSE_OPACITY_ICON
+ butcher_results = list()
+ guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1)
+ deathmessage = "falls to the ground."
+ status_flags = CANPUSH
+ var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = null
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/OpenFire(target)
+ ranged_cooldown = world.time + 40
+ var/tturf = get_turf(target)
+ if(!isturf(tturf))
+ return
+ if(get_dist(src, target) <= 7)//Screen range check, so it can't attack people off-screen
+ visible_message("[src] digs one of its tentacles under [target]! ")
+ new /obj/effect/temp_visual/goliath_tentacle/broodmother(tturf, src)
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/death()
+ . = ..()
+ if(mother != null)
+ mother.children_list -= src
+ visible_message("[src] explodes! ")
+ explosion(get_turf(loc),0,0,0,flame_range = 3, adminlog = FALSE)
+ qdel()
+
+//Tentacles have less stun time compared to regular variant, to balance being able to use them much more often. Also, 10 more damage.
+/obj/effect/temp_visual/goliath_tentacle/broodmother/trip()
+ var/latched = FALSE
+ for(var/mob/living/L in loc)
+ if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD)
+ continue
+ visible_message("[src] grabs hold of [L]! ")
+ L.Stun(10)
+ L.adjustBruteLoss(rand(30,35))
+ latched = TRUE
+ if(!latched)
+ retract()
+ else
+ deltimer(timerid)
+ timerid = addtimer(CALLBACK(src, .proc/retract), 10, TIMER_STOPPABLE)
+
+/obj/effect/temp_visual/goliath_tentacle/broodmother/patch/Initialize(mapload, new_spawner)
+ . = ..()
+ var/tentacle_locs = spiral_range_turfs(1, get_turf(src))
+ for(var/T in tentacle_locs)
+ new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner)
+ var/list/directions = GLOB.cardinals.Copy()
+ for(var/i in directions)
+ var/turf/T = get_step(get_turf(src), i)
+ T = get_step(T, i)
+ new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner)
+
+// Broodmother's loot: Broodmother Tongue
+/obj/item/crusher_trophy/broodmother_tongue
+ name = "broodmother tongue"
+ desc = "The tongue of a broodmother. If attached a certain way, makes for a suitable crusher trophy."
+ icon = 'icons/obj/lavaland/elite_trophies.dmi'
+ icon_state = "broodmother_tongue"
+ denied_type = /obj/item/crusher_trophy/broodmother_tongue
+ bonus_value = 10
+
+/obj/item/crusher_trophy/broodmother_tongue/effect_desc()
+ return "mark detonation to have a [bonus_value]% chance to summon a patch of goliath tentacles at the target's location"
+
+/obj/item/crusher_trophy/broodmother_tongue/on_mark_detonation(mob/living/target, mob/living/user)
+ if(rand(1, 100) <= bonus_value && target.stat != DEAD)
+ new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(get_turf(target), user)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
new file mode 100644
index 0000000000..f1e7494beb
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
@@ -0,0 +1,275 @@
+#define HERALD_TRISHOT 1
+#define HERALD_DIRECTIONALSHOT 2
+#define HERALD_TELESHOT 3
+#define HERALD_MIRROR 4
+
+/**
+ * # Herald
+ *
+ * A slow-moving projectile user with a few tricks up it's sleeve. Less unga-bunga than Colossus, with more cleverness in it's fighting style.
+ * As it's health gets lower, the amount of projectiles fired per-attack increases.
+ * It's attacks are as follows:
+ * - Fires three projectiles in a a given direction.
+ * - Fires a spread in every cardinal and diagonal direction at once, then does it again after a bit.
+ * - Shoots a single, golden bolt. Wherever it lands, the herald will be teleported to the location.
+ * - Spawns a mirror which reflects projectiles directly at the target.
+ * Herald is a more concentrated variation of the Colossus fight, having less projectiles overall, but more focused attacks.
+ */
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald
+ name = "herald"
+ desc = "A monstrous beast which fires deadly projectiles at threats and prey."
+ icon_state = "herald"
+ icon_living = "herald"
+ icon_aggro = "herald"
+ icon_dead = "herald_dying"
+ icon_gib = "syndicate_gib"
+ maxHealth = 800
+ health = 800
+ melee_damage_lower = 20
+ melee_damage_upper = 20
+ attacktext = "preaches to"
+ /*attack_verb_continuous = "preaches to"
+ attack_verb_simple = "preach to"*/
+ attack_sound = 'sound/magic/clockwork/ratvar_attack.ogg'
+ throw_message = "doesn't affect the purity of"
+ speed = 4
+ move_to_delay = 10
+ mouse_opacity = MOUSE_OPACITY_ICON
+ deathsound = 'sound/magic/demon_dies.ogg'
+ deathmessage = "begins to shudder as it becomes transparent..."
+ loot_drop = /obj/item/clothing/neck/cloak/herald_cloak
+
+ can_talk = 1
+
+ attack_action_types = list(/datum/action/innate/elite_attack/herald_trishot,
+ /datum/action/innate/elite_attack/herald_directionalshot,
+ /datum/action/innate/elite_attack/herald_teleshot,
+ /datum/action/innate/elite_attack/herald_mirror)
+
+ var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/my_mirror = null
+ var/is_mirror = FALSE
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/death()
+ . = ..()
+ if(!is_mirror)
+ addtimer(CALLBACK(src, .proc/become_ghost), 8)
+ if(my_mirror != null)
+ qdel(my_mirror)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/become_ghost()
+ icon_state = "herald_ghost"
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
+ . = ..()
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+
+/datum/action/innate/elite_attack/herald_trishot
+ name = "Triple Shot"
+ button_icon_state = "herald_trishot"
+ chosen_message = "You are now firing three shots in your chosen direction. "
+ chosen_attack_num = HERALD_TRISHOT
+
+/datum/action/innate/elite_attack/herald_directionalshot
+ name = "Circular Shot"
+ button_icon_state = "herald_directionalshot"
+ chosen_message = "You are firing projectiles in all directions. "
+ chosen_attack_num = HERALD_DIRECTIONALSHOT
+
+/datum/action/innate/elite_attack/herald_teleshot
+ name = "Teleport Shot"
+ button_icon_state = "herald_teleshot"
+ chosen_message = "You will now fire a shot which teleports you where it lands. "
+ chosen_attack_num = HERALD_TELESHOT
+
+/datum/action/innate/elite_attack/herald_mirror
+ name = "Summon Mirror"
+ button_icon_state = "herald_mirror"
+ chosen_message = "You will spawn a mirror which duplicates your attacks. "
+ chosen_attack_num = HERALD_MIRROR
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/OpenFire()
+ if(client)
+ switch(chosen_attack)
+ if(HERALD_TRISHOT)
+ herald_trishot(target)
+ if(my_mirror != null)
+ my_mirror.herald_trishot(target)
+ if(HERALD_DIRECTIONALSHOT)
+ herald_directionalshot()
+ if(my_mirror != null)
+ my_mirror.herald_directionalshot()
+ if(HERALD_TELESHOT)
+ herald_teleshot(target)
+ if(my_mirror != null)
+ my_mirror.herald_teleshot(target)
+ if(HERALD_MIRROR)
+ herald_mirror()
+ return
+ var/aiattack = rand(1,4)
+ switch(aiattack)
+ if(HERALD_TRISHOT)
+ herald_trishot(target)
+ if(my_mirror != null)
+ my_mirror.herald_trishot(target)
+ if(HERALD_DIRECTIONALSHOT)
+ herald_directionalshot()
+ if(my_mirror != null)
+ my_mirror.herald_directionalshot()
+ if(HERALD_TELESHOT)
+ herald_teleshot(target)
+ if(my_mirror != null)
+ my_mirror.herald_teleshot(target)
+ if(HERALD_MIRROR)
+ herald_mirror()
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/shoot_projectile(turf/marker, set_angle, var/is_teleshot)
+ var/turf/startloc = get_turf(src)
+ var/obj/item/projectile/herald/H = null
+ if(!is_teleshot)
+ H = new /obj/item/projectile/herald(startloc)
+ else
+ H = new /obj/item/projectile/herald/teleshot(startloc)
+ H.preparePixelProjectile(marker, startloc)
+ H.firer = src
+ if(target)
+ H.original = target
+ H.fire(set_angle)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_trishot(target)
+ ranged_cooldown = world.time + 30
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ var/target_turf = get_turf(target)
+ var/angle_to_target = Get_Angle(src, target_turf)
+ shoot_projectile(target_turf, angle_to_target, FALSE)
+ addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 2)
+ addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 4)
+ if(health < maxHealth * 0.5)
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 10)
+ addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 12)
+ addtimer(CALLBACK(src, .proc/shoot_projectile, target_turf, angle_to_target, FALSE), 14)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_circleshot()
+ var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315)
+ for(var/i in directional_shot_angles)
+ shoot_projectile(get_turf(src), i, FALSE)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/unenrage()
+ if(stat == DEAD || is_mirror)
+ return
+ icon_state = "herald"
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_directionalshot()
+ ranged_cooldown = world.time + 50
+ if(!is_mirror)
+ icon_state = "herald_enraged"
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ addtimer(CALLBACK(src, .proc/herald_circleshot), 5)
+ if(health < maxHealth * 0.5)
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ addtimer(CALLBACK(src, .proc/herald_circleshot), 15)
+ addtimer(CALLBACK(src, .proc/unenrage), 20)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_teleshot(target)
+ ranged_cooldown = world.time + 30
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ var/target_turf = get_turf(target)
+ var/angle_to_target = Get_Angle(src, target_turf)
+ shoot_projectile(target_turf, angle_to_target, TRUE)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_mirror()
+ ranged_cooldown = world.time + 40
+ playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ if(my_mirror != null)
+ qdel(my_mirror)
+ my_mirror = null
+ var/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/new_mirror = new /mob/living/simple_animal/hostile/asteroid/elite/herald/mirror(loc)
+ my_mirror = new_mirror
+ my_mirror.my_master = src
+ my_mirror.faction = faction.Copy()
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror
+ name = "herald's mirror"
+ desc = "This fiendish work of magic copies the herald's attacks. Seems logical to smash it."
+ health = 60
+ maxHealth = 60
+ icon_state = "herald_mirror"
+ deathmessage = "shatters violently!"
+ deathsound = 'sound/effects/glassbr1.ogg'
+ movement_type = FLYING
+ del_on_death = TRUE
+ is_mirror = TRUE
+ var/mob/living/simple_animal/hostile/asteroid/elite/herald/my_master = null
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Initialize()
+ ..()
+ toggle_ai(AI_OFF)
+
+/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror/Destroy()
+ if(my_master != null)
+ my_master.my_mirror = null
+ . = ..()
+
+/obj/item/projectile/herald
+ name ="death bolt"
+ icon_state= "chronobolt"
+ damage = 15
+ armour_penetration = 60
+ speed = 2
+ eyeblur = 0
+ damage_type = BRUTE
+ pass_flags = PASSTABLE
+
+/obj/item/projectile/herald/teleshot
+ name ="golden bolt"
+ damage = 0
+ color = rgb(255,255,102)
+
+/obj/item/projectile/herald/on_hit(atom/target, blocked = FALSE)
+ . = ..()
+ if(ismineralturf(target))
+ var/turf/closed/mineral/M = target
+ M.gets_drilled()
+ return
+ else if(isliving(target))
+ var/mob/living/L = target
+ var/mob/living/F = firer
+ if(F != null && istype(F, /mob/living/simple_animal/hostile/asteroid/elite) && F.faction_check_mob(L))
+ L.heal_overall_damage(damage)
+
+/obj/item/projectile/herald/teleshot/on_hit(atom/target, blocked = FALSE)
+ . = ..()
+ firer.forceMove(get_turf(src))
+
+//Herald's loot: Cloak of the Prophet
+
+/obj/item/clothing/neck/cloak/herald_cloak
+ name = "cloak of the prophet"
+ desc = "A cloak which protects you from the heresy of the world."
+ icon = 'icons/obj/lavaland/elite_trophies.dmi'
+ icon_state = "herald_cloak"
+ body_parts_covered = CHEST|GROIN|ARMS
+ hit_reaction_chance = 10
+
+/obj/item/clothing/neck/cloak/herald_cloak/proc/reactionshot(mob/living/carbon/owner)
+ var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315)
+ for(var/i in directional_shot_angles)
+ shoot_projectile(get_turf(owner), i, owner)
+
+/obj/item/clothing/neck/cloak/herald_cloak/proc/shoot_projectile(turf/marker, set_angle, mob/living/carbon/owner)
+ var/turf/startloc = get_turf(owner)
+ var/obj/item/projectile/herald/H = null
+ H = new /obj/item/projectile/herald(startloc)
+ H.preparePixelProjectile(marker, startloc)
+ H.firer = owner
+ H.fire(set_angle)
+
+/obj/item/clothing/neck/cloak/herald_cloak/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(rand(1,100) > hit_reaction_chance)
+ return
+ owner.visible_message("[owner]'s [src] emits a loud noise as [owner] is struck! ")
+ var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315)
+ playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
+ addtimer(CALLBACK(src, .proc/reactionshot, owner), 10)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
new file mode 100644
index 0000000000..1bc9ea1e4e
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
@@ -0,0 +1,303 @@
+#define LEGIONNAIRE_CHARGE 1
+#define HEAD_DETACH 2
+#define BONFIRE_TELEPORT 3
+#define SPEW_SMOKE 4
+
+/**
+ * # Legionnaire
+ *
+ * A towering skeleton, embodying the power of Legion.
+ * As it's health gets lower, the head does more damage.
+ * It's attacks are as follows:
+ * - Charges at the target after a telegraph, throwing them across the arena should it connect.
+ * - Legionnaire's head detaches, attacking as it's own entity. Has abilities of it's own later into the fight. Once dead, regenerates after a brief period. If the skill is used while the head is off, it will be killed.
+ * - Leaves a pile of bones at your location. Upon using this skill again, you'll swap locations with the bone pile.
+ * - Spews a cloud of smoke from it's maw, wherever said maw is.
+ * A unique fight incorporating the head mechanic of legion into a whole new beast. Combatants will need to make sure the tag-team of head and body don't lure them into a deadly trap.
+ */
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire
+ name = "legionnaire"
+ desc = "A towering skeleton, embodying the terrifying power of Legion."
+ icon_state = "legionnaire"
+ icon_living = "legionnaire"
+ icon_aggro = "legionnaire"
+ icon_dead = "legionnaire_dead"
+ icon_gib = "syndicate_gib"
+ maxHealth = 800
+ health = 800
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ attacktext = "slashes its arms at"
+ /*attack_verb_continuous = "slashes its arms at"
+ attack_verb_simple = "slash your arms at"*/
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+ throw_message = "doesn't affect the sturdiness of"
+ speed = 1
+ move_to_delay = 3
+ mouse_opacity = MOUSE_OPACITY_ICON
+ deathsound = 'sound/magic/curse.ogg'
+ deathmessage = "'s arms reach out before it falls apart onto the floor, lifeless."
+ loot_drop = /obj/item/crusher_trophy/legionnaire_spine
+
+ attack_action_types = list(/datum/action/innate/elite_attack/legionnaire_charge,
+ /datum/action/innate/elite_attack/head_detach,
+ /datum/action/innate/elite_attack/bonfire_teleport,
+ /datum/action/innate/elite_attack/spew_smoke)
+
+ var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/myhead = null
+ var/obj/structure/legionnaire_bonfire/mypile = null
+ var/has_head = TRUE
+
+/datum/action/innate/elite_attack/legionnaire_charge
+ name = "Legionnaire Charge"
+ button_icon_state = "legionnaire_charge"
+ chosen_message = "You will attempt to grab your opponent and throw them. "
+ chosen_attack_num = LEGIONNAIRE_CHARGE
+
+/datum/action/innate/elite_attack/head_detach
+ name = "Release Head"
+ button_icon_state = "head_detach"
+ chosen_message = "You will now detach your head or kill it if it is already released. "
+ chosen_attack_num = HEAD_DETACH
+
+/datum/action/innate/elite_attack/bonfire_teleport
+ name = "Bonfire Teleport"
+ button_icon_state = "bonfire_teleport"
+ chosen_message = "You will leave a bonfire. Second use will let you swap positions with it indefintiely. Using this move on the same tile as your active bonfire removes it. "
+ chosen_attack_num = BONFIRE_TELEPORT
+
+/datum/action/innate/elite_attack/spew_smoke
+ name = "Spew Smoke"
+ button_icon_state = "spew_smoke"
+ chosen_message = "Your head will spew smoke in an area, wherever it may be. "
+ chosen_attack_num = SPEW_SMOKE
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/OpenFire()
+ if(client)
+ switch(chosen_attack)
+ if(LEGIONNAIRE_CHARGE)
+ legionnaire_charge(target)
+ if(HEAD_DETACH)
+ head_detach(target)
+ if(BONFIRE_TELEPORT)
+ bonfire_teleport()
+ if(SPEW_SMOKE)
+ spew_smoke()
+ return
+ var/aiattack = rand(1,4)
+ switch(aiattack)
+ if(LEGIONNAIRE_CHARGE)
+ legionnaire_charge(target)
+ if(HEAD_DETACH)
+ head_detach(target)
+ if(BONFIRE_TELEPORT)
+ bonfire_teleport()
+ if(SPEW_SMOKE)
+ spew_smoke()
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge(target)
+ ranged_cooldown = world.time + 50
+ var/dir_to_target = get_dir(get_turf(src), get_turf(target))
+ var/turf/T = get_step(get_turf(src), dir_to_target)
+ for(var/i in 1 to 4)
+ new /obj/effect/temp_visual/dragon_swoop/legionnaire(T)
+ T = get_step(T, dir_to_target)
+ playsound(src,'sound/magic/demon_attack1.ogg', 200, 1)
+ visible_message("[src] prepares to charge! ")
+ addtimer(CALLBACK(src, .proc/legionnaire_charge_2, dir_to_target, 0), 5)
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/legionnaire_charge_2(var/move_dir, var/times_ran)
+ if(times_ran >= 4)
+ return
+ var/turf/T = get_step(get_turf(src), move_dir)
+ if(ismineralturf(T))
+ var/turf/closed/mineral/M = T
+ M.gets_drilled()
+ if(T.density)
+ return
+ for(var/obj/structure/window/W in T.contents)
+ return
+ for(var/obj/machinery/door/D in T.contents)
+ return
+ forceMove(T)
+ playsound(src,'sound/effects/bang.ogg', 200, 1)
+ var/list/hit_things = list()
+ var/throwtarget = get_edge_target_turf(src, move_dir)
+ for(var/mob/living/L in T.contents - hit_things - src)
+ if(faction_check_mob(L))
+ return
+ hit_things += L
+ visible_message("[src] attacks [L] with much force! ")
+ to_chat(L, "[src] grabs you and throws you with much force! ")
+ L.safe_throw_at(throwtarget, 10, 1, src)
+ //L.Paralyze(20)
+ L.Stun(20) //substituting this for the Paralyze from the line above, because we don't have tg paralysis stuff
+ L.adjustBruteLoss(50)
+ addtimer(CALLBACK(src, .proc/legionnaire_charge_2, move_dir, (times_ran + 1)), 2)
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/head_detach(target)
+ ranged_cooldown = world.time + 10
+ if(myhead != null)
+ myhead.adjustBruteLoss(600)
+ return
+ if(has_head)
+ has_head = FALSE
+ icon_state = "legionnaire_headless"
+ icon_living = "legionnaire_headless"
+ icon_aggro = "legionnaire_headless"
+ visible_message("[src]'s head flies off! ")
+ var/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/newhead = new /mob/living/simple_animal/hostile/asteroid/elite/legionnairehead(loc)
+ newhead.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
+ newhead.GiveTarget(target)
+ newhead.faction = faction.Copy()
+ myhead = newhead
+ myhead.body = src
+ if(health < maxHealth * 0.25)
+ myhead.melee_damage_lower = 30
+ myhead.melee_damage_upper = 30
+ else if(health < maxHealth * 0.5)
+ myhead.melee_damage_lower = 20
+ myhead.melee_damage_upper = 20
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/onHeadDeath()
+ myhead = null
+ addtimer(CALLBACK(src, .proc/regain_head), 50)
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/regain_head()
+ has_head = TRUE
+ if(stat == DEAD)
+ return
+ icon_state = "legionnaire"
+ icon_living = "legionnaire"
+ icon_aggro = "legionnaire"
+ visible_message("The top of [src]'s spine leaks a black liquid, forming into a skull! ")
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/bonfire_teleport()
+ ranged_cooldown = world.time + 5
+ if(mypile == null)
+ var/obj/structure/legionnaire_bonfire/newpile = new /obj/structure/legionnaire_bonfire(loc)
+ mypile = newpile
+ mypile.myowner = src
+ playsound(get_turf(src),'sound/items/fulext_deploy.wav', 200, 1)
+ visible_message("[src] summons a bonfire on [get_turf(src)]! ")
+ return
+ else
+ var/turf/legionturf = get_turf(src)
+ var/turf/pileturf = get_turf(mypile)
+ if(legionturf == pileturf)
+ mypile.take_damage(100)
+ mypile = null
+ return
+ playsound(pileturf,'sound/items/fulext_deploy.wav', 200, 1)
+ playsound(legionturf,'sound/items/fulext_deploy.wav', 200, 1)
+ visible_message("[src] melts down into a burning pile of bones! ")
+ forceMove(pileturf)
+ visible_message("[src] forms from the bonfire! ")
+ mypile.forceMove(legionturf)
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/proc/spew_smoke()
+ ranged_cooldown = world.time + 60
+ var/turf/T = null
+ if(myhead != null)
+ T = get_turf(myhead)
+ else
+ T = get_turf(src)
+ if(myhead != null)
+ myhead.visible_message("[myhead] spews smoke from its maw! ")
+ else if(!has_head)
+ visible_message("[src] spews smoke from the tip of their spine! ")
+ else
+ visible_message("[src] spews smoke from its maw! ")
+ var/datum/effect_system/smoke_spread/smoke = new
+ smoke.set_up(2, T)
+ smoke.start()
+
+//The legionnaire's head. Basically the same as any legion head, but we have to tell our creator when we die so they can generate another head.
+/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead
+ name = "legionnaire head"
+ desc = "The legionnaire's head floating by itself. One shouldn't get too close, though once it sees you, you really don't have a choice."
+ icon_state = "legionnaire_head"
+ icon_living = "legionnaire_head"
+ icon_aggro = "legionnaire_head"
+ icon_dead = "legionnaire_dead"
+ icon_gib = "syndicate_gib"
+ maxHealth = 80
+ health = 80
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ attacktext = "bites at"
+ /*attack_verb_continuous = "bites at"
+ attack_verb_simple = "bite at"*/
+ attack_sound = 'sound/effects/curse1.ogg'
+ throw_message = "simply misses"
+ speed = 0
+ move_to_delay = 2
+ del_on_death = 1
+ deathmessage = "crumbles away!"
+ faction = list()
+ ranged = FALSE
+ var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/body = null
+
+/mob/living/simple_animal/hostile/asteroid/elite/legionnairehead/death()
+ . = ..()
+ if(body)
+ body.onHeadDeath()
+
+//The legionnaire's bonfire, which can be swapped positions with. Also sets flammable living beings on fire when they walk over it.
+/obj/structure/legionnaire_bonfire
+ name = "bone pile"
+ desc = "A pile of bones which seems to occasionally move a little. It's probably a good idea to smash them."
+ icon = 'icons/obj/lavaland/legionnaire_bonfire.dmi'
+ icon_state = "bonfire"
+ max_integrity = 100
+ //move_resist = MOVE_FORCE_EXTREMELY_STRONG
+ anchored = TRUE
+ density = FALSE
+ light_range = 4
+ light_color = LIGHT_COLOR_RED
+ var/mob/living/simple_animal/hostile/asteroid/elite/legionnaire/myowner = null
+
+
+/obj/structure/legionnaire_bonfire/Entered(atom/movable/mover, turf/target)
+ if(isliving(mover))
+ var/mob/living/L = mover
+ L.adjust_fire_stacks(3)
+ L.IgniteMob()
+ . = ..()
+
+/obj/structure/legionnaire_bonfire/Destroy()
+ if(myowner != null)
+ myowner.mypile = null
+ . = ..()
+
+//The visual effect which appears in front of legionnaire when he goes to charge.
+/obj/effect/temp_visual/dragon_swoop/legionnaire
+ duration = 10
+ color = rgb(0,0,0)
+
+/obj/effect/temp_visual/dragon_swoop/legionnaire/Initialize()
+ . = ..()
+ transform *= 0.33
+
+// Legionnaire's loot: Legionnaire Spine
+
+/obj/item/crusher_trophy/legionnaire_spine
+ name = "legionnaire spine"
+ desc = "The spine of a legionnaire. It almost feels like it's moving..."
+ icon = 'icons/obj/lavaland/elite_trophies.dmi'
+ icon_state = "legionnaire_spine"
+ denied_type = /obj/item/crusher_trophy/legionnaire_spine
+ bonus_value = 20
+
+/obj/item/crusher_trophy/legionnaire_spine/effect_desc()
+ return "mark detonation to have a [bonus_value]% chance to summon a loyal legion skull"
+
+/obj/item/crusher_trophy/legionnaire_spine/on_mark_detonation(mob/living/target, mob/living/user)
+ if(!rand(1, 100) <= bonus_value || target.stat == DEAD)
+ return
+ var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion(user.loc)
+ A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
+ A.GiveTarget(target)
+ A.friends = user
+ A.faction = user.faction.Copy()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm
new file mode 100644
index 0000000000..540470d505
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm
@@ -0,0 +1,193 @@
+#define SINGULAR_SHOT 1
+#define MAGIC_BOX 2
+#define PANDORA_TELEPORT 3
+#define AOE_SQUARES 4
+
+/**
+ * # Pandora
+ *
+ * A box with a similar design to the Hierophant which trades large, single attacks for more frequent smaller ones.
+ * As it's health gets lower, the time between it's attacks decrease.
+ * It's attacks are as follows:
+ * - Fires hierophant blasts in a straight line. Can only fire in a straight line in 8 directions, being the diagonals and cardinals.
+ * - Creates a box of hierophant blasts around the target. If they try to run away to avoid it, they'll very likely get hit.
+ * - Teleports the pandora from one location to another, almost identical to Hierophant.
+ * - Spawns a 5x5 AOE at the location of choice, spreading out from the center.
+ * Pandora's fight mirrors Hierophant's closely, but has stark differences in attack effects. Instead of long-winded dodge times and long cooldowns, Pandora constantly attacks the opponent, but leaves itself open for attack.
+ */
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora
+ name = "pandora"
+ desc = "A large magic box with similar power and design to the Hierophant. Once it opens, it's not easy to close it."
+ icon_state = "pandora"
+ icon_living = "pandora"
+ icon_aggro = "pandora"
+ icon_dead = "pandora_dead"
+ icon_gib = "syndicate_gib"
+ maxHealth = 800
+ health = 800
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ attacktext = "smashes into the side of"
+ /*attack_verb_continuous = "smashes into the side of"
+ attack_verb_simple = "smash into the side of"*/
+ attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
+ throw_message = "merely dinks off of the"
+ speed = 4
+ move_to_delay = 10
+ mouse_opacity = MOUSE_OPACITY_ICON
+ deathsound = 'sound/magic/repulse.ogg'
+ deathmessage = "'s lights flicker, before its top part falls down."
+ loot_drop = /obj/item/clothing/accessory/pandora_hope
+
+ attack_action_types = list(/datum/action/innate/elite_attack/singular_shot,
+ /datum/action/innate/elite_attack/magic_box,
+ /datum/action/innate/elite_attack/pandora_teleport,
+ /datum/action/innate/elite_attack/aoe_squares)
+
+ var/sing_shot_length = 8
+ var/cooldown_time = 20
+
+/datum/action/innate/elite_attack/singular_shot
+ name = "Singular Shot"
+ button_icon_state = "singular_shot"
+ chosen_message = "You are now creating a single linear magic square. "
+ chosen_attack_num = SINGULAR_SHOT
+
+/datum/action/innate/elite_attack/magic_box
+ name = "Magic Box"
+ button_icon_state = "magic_box"
+ chosen_message = "You are now attacking with a box of magic squares. "
+ chosen_attack_num = MAGIC_BOX
+
+/datum/action/innate/elite_attack/pandora_teleport
+ name = "Line Teleport"
+ button_icon_state = "pandora_teleport"
+ chosen_message = "You will now teleport to your target. "
+ chosen_attack_num = PANDORA_TELEPORT
+
+/datum/action/innate/elite_attack/aoe_squares
+ name = "AOE Blast"
+ button_icon_state = "aoe_squares"
+ chosen_message = "Your attacks will spawn an AOE blast at your target location. "
+ chosen_attack_num = AOE_SQUARES
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire()
+ if(client)
+ switch(chosen_attack)
+ if(SINGULAR_SHOT)
+ singular_shot(target)
+ if(MAGIC_BOX)
+ magic_box(target)
+ if(PANDORA_TELEPORT)
+ pandora_teleport(target)
+ if(AOE_SQUARES)
+ aoe_squares(target)
+ return
+ var/aiattack = rand(1,4)
+ switch(aiattack)
+ if(SINGULAR_SHOT)
+ singular_shot(target)
+ if(MAGIC_BOX)
+ magic_box(target)
+ if(PANDORA_TELEPORT)
+ pandora_teleport(target)
+ if(AOE_SQUARES)
+ aoe_squares(target)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/Life()
+ . = ..()
+ if(health >= maxHealth * 0.5)
+ cooldown_time = 20
+ return
+ if(health < maxHealth * 0.5 && health > maxHealth * 0.25)
+ cooldown_time = 15
+ return
+ else
+ cooldown_time = 10
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot(target)
+ ranged_cooldown = world.time + (cooldown_time * 0.5)
+ var/dir_to_target = get_dir(get_turf(src), get_turf(target))
+ var/turf/T = get_step(get_turf(src), dir_to_target)
+ singular_shot_line(sing_shot_length, dir_to_target, T)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/singular_shot_line(var/procsleft, var/angleused, var/turf/T)
+ if(procsleft <= 0)
+ return
+ new /obj/effect/temp_visual/hierophant/blast/pandora(T, src)
+ T = get_step(T, angleused)
+ procsleft = procsleft - 1
+ addtimer(CALLBACK(src, .proc/singular_shot_line, procsleft, angleused, T), 2)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/magic_box(target)
+ ranged_cooldown = world.time + cooldown_time
+ var/turf/T = get_turf(target)
+ for(var/t in spiral_range_turfs(3, T))
+ if(get_dist(t, T) > 1)
+ new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport(target)
+ ranged_cooldown = world.time + cooldown_time
+ var/turf/T = get_turf(target)
+ var/turf/source = get_turf(src)
+ new /obj/effect/temp_visual/hierophant/telegraph(T, src)
+ new /obj/effect/temp_visual/hierophant/telegraph(source, src)
+ playsound(source,'sound/machines/airlockopen.ogg', 200, 1)
+ addtimer(CALLBACK(src, .proc/pandora_teleport_2, T, source), 2)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(var/turf/T, var/turf/source)
+ new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src)
+ new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src)
+ for(var/t in RANGE_TURFS(1, T))
+ new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
+ for(var/t in RANGE_TURFS(1, source))
+ new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
+ animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out
+ visible_message("[src] fades out! ")
+ density = FALSE
+ addtimer(CALLBACK(src, .proc/pandora_teleport_3, T), 2)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_3(var/turf/T)
+ forceMove(T)
+ animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN
+ density = TRUE
+ visible_message("[src] fades in! ")
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares(target)
+ ranged_cooldown = world.time + cooldown_time
+ var/turf/T = get_turf(target)
+ new /obj/effect/temp_visual/hierophant/blast/pandora(T, src)
+ var/max_size = 2
+ addtimer(CALLBACK(src, .proc/aoe_squares_2, T, 0, max_size), 2)
+
+/mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/aoe_squares_2(var/turf/T, var/ring, var/max_size)
+ if(ring > max_size)
+ return
+ for(var/t in spiral_range_turfs(ring, T))
+ if(get_dist(t, T) == ring)
+ new /obj/effect/temp_visual/hierophant/blast/pandora(t, src)
+ addtimer(CALLBACK(src, .proc/aoe_squares_2, T, (ring + 1), max_size), 2)
+
+//The specific version of hiero's squares pandora uses
+/obj/effect/temp_visual/hierophant/blast/pandora
+ damage = 20
+ monster_damage_boost = FALSE
+
+//Pandora's loot: Hope
+/obj/item/clothing/accessory/pandora_hope
+ name = "Hope"
+ desc = "Found at the bottom of Pandora. After all the evil was released, this was the only thing left inside."
+ icon = 'icons/obj/lavaland/elite_trophies.dmi'
+ icon_state = "hope"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/clothing/accessory/pandora_hope/on_uniform_equip(obj/item/clothing/under/U, user)
+ var/mob/living/L = user
+ if(L && L.mind)
+ SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "hope_lavaland", /datum/mood_event/hope_lavaland)
+
+/obj/item/clothing/accessory/pandora_hope/on_uniform_dropped(obj/item/clothing/under/U, user)
+ var/mob/living/L = user
+ if(L && L.mind)
+ SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland")
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
index cc54ad3bef..4856ba2176 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
@@ -6,6 +6,7 @@
icon_dead = "bat_dead"
icon_gib = "bat_dead"
turns_per_move = 1
+ blood_volume = 250
response_help = "brushes aside"
response_disarm = "flails at"
response_harm = "hits"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
index 32e1c4d047..bfe8349192 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
@@ -31,6 +31,7 @@
movement_type = FLYING
pressure_resistance = 300
gold_core_spawnable = NO_SPAWN //too spooky for science
+ blood_volume = 0
var/ghost_hair_style
var/ghost_hair_color
var/mutable_appearance/ghost_hair
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index d0ae01f443..48b69a1f5c 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -12,6 +12,7 @@
emote_see = list("rattles")
a_intent = INTENT_HARM
maxHealth = 40
+ blood_volume = 0
health = 40
speed = 1
harm_intent_damage = 5
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 804989e71e..da423f3788 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -18,6 +18,7 @@
maxHealth = 50000
health = 50000
healable = 0
+ blood_volume = 0
harm_intent_damage = 10
obj_damage = 100
diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm
index 7a86870aa1..fa5cb151ed 100644
--- a/code/modules/mob/living/simple_animal/hostile/stickman.dm
+++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm
@@ -13,6 +13,7 @@
response_disarm = "shoves"
response_harm = "hits"
speed = 0
+ blood_volume = 0
stat_attack = UNCONSCIOUS
robust_searching = 1
environment_smash = ENVIRONMENT_SMASH_NONE
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index 3bd24c4df7..32ef52a6ae 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -31,6 +31,7 @@
loot = list(/obj/item/ectoplasm)
del_on_death = TRUE
initial_language_holder = /datum/language_holder/construct
+ blood_volume = 0
/mob/living/simple_animal/shade/death()
deathmessage = "lets out a contented sigh as [p_their()] form unwinds."
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 52e58aea4e..990fa008fe 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -4,6 +4,7 @@
health = 20
maxHealth = 20
gender = PLURAL //placeholder
+ blood_volume = 550 //How much blud it has for bloodsucking
status_flags = CANPUSH
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 185d717a00..d1e10ea693 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -26,6 +26,7 @@
health = 150
healable = 0
gender = NEUTER
+ blood_volume = 0 //Until someome reworks for them to have slime jelly
see_in_dark = 8
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 0880f7f432..facc86da46 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -140,24 +140,28 @@
/////////////////////////////////// DISABILITIES ////////////////////////////////////
-/mob/living/proc/add_quirk(quirk, spawn_effects) //separate proc due to the way these ones are handled
- if(HAS_TRAIT(src, quirk))
+/mob/living/proc/add_quirk(quirktype, spawn_effects) //separate proc due to the way these ones are handled
+ if(has_quirk(quirktype))
return
- if(!SSquirks || !SSquirks.quirks[quirk])
+ var/datum/quirk/T = quirktype
+ var/qname = initial(T.name)
+ if(!SSquirks || !SSquirks.quirks[qname])
return
- var/datum/quirk/T = SSquirks.quirks[quirk]
- new T (src, spawn_effects)
+ new quirktype (src, spawn_effects)
return TRUE
-/mob/living/proc/remove_quirk(quirk)
- var/datum/quirk/T = roundstart_quirks[quirk]
- if(T)
- qdel(T)
- return TRUE
-
-/mob/living/proc/has_quirk(quirk)
- return roundstart_quirks[quirk]
+/mob/living/proc/remove_quirk(quirktype)
+ for(var/datum/quirk/Q in roundstart_quirks)
+ if(Q.type == quirktype)
+ qdel(Q)
+ return TRUE
+ return FALSE
+/mob/living/proc/has_quirk(quirktype)
+ for(var/datum/quirk/Q in roundstart_quirks)
+ if(Q.type == quirktype)
+ return TRUE
+ return FALSE
/////////////////////////////////// TRAIT PROCS ////////////////////////////////////
/mob/living/proc/cure_blind(list/sources)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d4528fb91f..1a3f2fca3b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -380,14 +380,10 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
spintime -= speed
/mob/proc/update_pull_hud_icon()
- if(hud_used)
- if(hud_used.pull_icon)
- hud_used.pull_icon.update_icon(src)
+ hud_used?.pull_icon?.update_icon()
/mob/proc/update_rest_hud_icon()
- if(hud_used)
- if(hud_used.rest_icon)
- hud_used.rest_icon.update_icon(src)
+ hud_used?.rest_icon?.update_icon()
/mob/verb/mode()
set name = "Activate Held Object"
@@ -404,9 +400,6 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
if(I)
I.attack_self(src)
update_inv_hands()
- if(!I)//CIT CHANGE - allows "using" empty hands
- use_that_empty_hand() //CIT CHANGE - ditto
- update_inv_hands() // CIT CHANGE - ditto.
/mob/verb/memory()
set name = "Notes"
@@ -465,9 +458,10 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
/mob/proc/transfer_ckey(mob/new_mob, send_signal = TRUE)
if(!ckey || !new_mob)
CRASH("transfer_ckey() called [ckey ? "" : "on a ckey-less mob[new_mob ? "" : " and "]"][new_mob ? "" : "without a valid mob target"]!")
+ SEND_SIGNAL(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, new_mob, src)
+ new_mob.ckey = ckey
if(send_signal)
SEND_SIGNAL(src, COMSIG_MOB_KEY_CHANGE, new_mob, src)
- new_mob.ckey = ckey
return TRUE
/mob/verb/cancel_camera()
@@ -568,9 +562,9 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
/mob/proc/is_muzzled()
return 0
-/mob/Stat()
- ..()
-
+/mob/Stat(delayoverride)
+ . = ..()
+ var/statdelay = delayoverride || 10
if(statpanel("Status"))
if (client)
stat(null, "Ping: [round(client.lastping, 1)]ms (Average: [round(client.avgping, 1)]ms)")
@@ -578,7 +572,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
var/datum/map_config/cached = SSmapping.next_map_config
if(cached)
stat(null, "Next Map: [cached.map_name]")
- stat(null, "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]")
+ stat(null, "Round ID: [GLOB.round_id || "NULL"]")
stat(null, "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]")
stat(null, "Round Time: [WORLDTIME2TEXT("hh:mm:ss")]")
stat(null, "Station Time: [STATION_TIME_TIMESTAMP("hh:mm:ss")]")
@@ -588,8 +582,9 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
if(ETA)
stat(null, "[ETA] [SSshuttle.emergency.getTimerStr()]")
- if(client && client.holder)
+ if(client?.holder)
if(statpanel("MC"))
+ statdelay = 0 //It's assumed that if you're doing this you are doing debug stuff, don't do ioditic things.
var/turf/T = get_turf(client.eye)
stat("Location:", COORD(T))
stat("CPU:", "[world.cpu]")
@@ -615,6 +610,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
GLOB.ahelp_tickets.stat_entry()
if(length(GLOB.sdql2_queries))
if(statpanel("SDQL2"))
+ statdelay = 0 //It's assumed that if you're doing this you are doing debug stuff, don't do ioditic things.
stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj)
for(var/i in GLOB.sdql2_queries)
var/datum/SDQL2_query/Q = i
@@ -638,14 +634,13 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
if(A.IsObscured())
continue
statpanel(listed_turf.name, null, A)
-
-
if(mind)
add_spells_to_statpanel(mind.spell_list)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
add_stings_to_statpanel(changeling.purchasedpowers)
add_spells_to_statpanel(mob_spell_list)
+ sleep(statdelay)
/mob/proc/add_spells_to_statpanel(list/spells)
for(var/obj/effect/proc_holder/spell/S in spells)
@@ -812,26 +807,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
/mob/proc/can_interact_with(atom/A)
return IsAdminGhost(src) || Adjacent(A)
-//Can the mob see reagents inside of containers?
-/mob/proc/can_see_reagents()
- if(stat == DEAD) //Ghosts and such can always see reagents
- return 1
- if(has_unlimited_silicon_privilege) //Silicons can automatically view reagents
- return 1
- if(ishuman(src))
- var/mob/living/carbon/human/H = src
- if(H.head && istype(H.head, /obj/item/clothing))
- var/obj/item/clothing/CL = H.head
- if(CL.scan_reagents)
- return 1
- if(H.wear_mask && H.wear_mask.scan_reagents)
- return 1
- if(H.glasses && istype(H.glasses, /obj/item/clothing))
- var/obj/item/clothing/CL = H.glasses
- if(CL.scan_reagents)
- return 1
- return 0
-
//Can the mob use Topic to interact with machines
/mob/proc/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
return
@@ -978,4 +953,4 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
/mob/setMovetype(newval)
. = ..()
- update_movespeed(FALSE)
\ No newline at end of file
+ update_movespeed(FALSE)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 0cb886f11b..c7365210ab 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -22,7 +22,7 @@
I'll make some notes on where certain variable defines should probably go.
Changing this around would probably require a good look-over the pre-existing code.
*/
- var/zone_selected = null
+ var/zone_selected = BODY_ZONE_CHEST
var/computer_id = null
var/list/logging = list()
@@ -99,6 +99,12 @@
var/obj/control_object //Used by admins to possess objects. All mobs should have this var
var/atom/movable/remote_control //Calls relaymove() to whatever it is
+ /**
+ * The sound made on death
+ *
+ * leave null for no sound. used for *deathgasp
+ */
+ var/deathsound = null
var/turf/listed_turf = null //the current turf being examined in the stat panel
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index c18fc36e9a..18fc2bfb42 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -532,3 +532,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(!held_item)
return
return held_item.GetID()
+
+//Can the mob see reagents inside of containers?
+/mob/proc/can_see_reagents()
+ return stat == DEAD || has_unlimited_silicon_privilege //Dead guys and silicons can always see reagents
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 2c8935c786..04d47da56e 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -366,10 +366,13 @@
if(m_intent == MOVE_INTENT_RUN)
m_intent = MOVE_INTENT_WALK
else
+ if (HAS_TRAIT(src,TRAIT_NORUNNING)) // FULPSTATION 7/10/19 So you can't run during fortitude.
+ to_chat(src, "You find yourself unable to run.")
+ return FALSE
m_intent = MOVE_INTENT_RUN
if(hud_used && hud_used.static_inventory)
for(var/obj/screen/mov_intent/selector in hud_used.static_inventory)
- selector.update_icon(src)
+ selector.update_icon()
/mob/verb/up()
set name = "Move Upwards"
@@ -401,4 +404,4 @@
return TRUE
/mob/proc/canZMove(direction, turf/target)
- return FALSE
\ No newline at end of file
+ return FALSE
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index ecb869790c..9b8f100907 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -8,6 +8,13 @@
if(message)
say(message)
+/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 ..()
/mob/verb/whisper_verb(message as text)
set name = "Whisper"
diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm
index 47cbbff418..8428467a87 100644
--- a/code/modules/modular_computers/hardware/ai_slot.dm
+++ b/code/modules/modular_computers/hardware/ai_slot.dm
@@ -41,6 +41,13 @@
/obj/item/computer_hardware/ai_slot/try_eject(slot=0,mob/living/user = null,forced = 0)
+ if (get_dist(src,user) > 1)
+ if (iscarbon(user))
+ var/mob/living/carbon/H = user
+ if (!(H.dna && H.dna.check_mutation(TK) && tkMaxRangeCheck(src,H)))
+ return FALSE
+ else
+ return FALSE
if(!stored_card)
to_chat(user, "There is no card in \the [src]. ")
return FALSE
diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm
index c68e1ad119..e4bc45dbc5 100644
--- a/code/modules/modular_computers/hardware/card_slot.dm
+++ b/code/modules/modular_computers/hardware/card_slot.dm
@@ -73,6 +73,13 @@
/obj/item/computer_hardware/card_slot/try_eject(slot=0, mob/living/user = null, forced = 0)
+ if (get_dist(src,user) > 1)
+ if (iscarbon(user))
+ var/mob/living/carbon/H = user
+ if (!(H.dna && H.dna.check_mutation(TK) && tkMaxRangeCheck(src,H)))
+ return FALSE
+ else
+ return FALSE
if(!stored_card && !stored_card2)
to_chat(user, "There are no cards in \the [src]. ")
return FALSE
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 5da29bf5ac..2652026a11 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1113,9 +1113,9 @@
if(terminal && terminal.powernet)
terminal.add_load(amount)
-/obj/machinery/power/apc/avail()
+/obj/machinery/power/apc/avail(amount)
if(terminal)
- return terminal.avail()
+ return terminal.avail(amount)
else
return 0
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index a3dc6e7394..cc03976f79 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -217,9 +217,9 @@ By design, d1 is the smallest direction and d2 is the highest
else
return 0
-/obj/structure/cable/proc/avail()
+/obj/structure/cable/proc/avail(amount)
if(powernet)
- return powernet.avail
+ return amount ? powernet.avail >= amount : powernet.avail
else
return 0
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 58a259de3a..d2d3d60066 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -46,9 +46,9 @@
else
return 0
-/obj/machinery/power/proc/avail()
+/obj/machinery/power/proc/avail(amount)
if(powernet)
- return powernet.avail
+ return amount ? powernet.avail >= amount : powernet.avail
else
return 0
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index b1b0d2d718..054b91f273 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -110,7 +110,7 @@
if(!user.transferItemToLoc(W, src))
return
loaded_tank = W
- update_icons()
+ update_icon()
else if(W.GetID())
if(allowed(user))
if(active)
@@ -197,14 +197,14 @@
if(active)
toggle_power()
else
- update_icons()
+ update_icon()
/obj/machinery/power/rad_collector/rad_act(pulse_strength)
. = ..()
if(loaded_tank && active && pulse_strength > RAD_COLLECTOR_EFFICIENCY)
stored_power += (pulse_strength-RAD_COLLECTOR_EFFICIENCY)*RAD_COLLECTOR_COEFFICIENT
-/obj/machinery/power/rad_collector/proc/update_icons()
+/obj/machinery/power/rad_collector/update_icon()
cut_overlays()
if(loaded_tank)
add_overlay("ptank")
@@ -222,7 +222,7 @@
else
icon_state = "ca"
flick("ca_deactive", src)
- update_icons()
+ update_icon()
return
#undef RAD_COLLECTOR_EFFICIENCY
diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm
index 7b4e0bfa97..2f87872710 100644
--- a/code/modules/projectiles/ammunition/energy/special.dm
+++ b/code/modules/projectiles/ammunition/energy/special.dm
@@ -67,3 +67,8 @@
fire_sound = 'sound/weapons/emitter.ogg'
e_cost = 2000 //20,000 is in the cell making this 10 shots before reload
projectile_type = /obj/item/projectile/beam/emitter
+
+/obj/item/ammo_casing/energy/shrink
+ projectile_type = /obj/item/projectile/beam/shrink
+ select_name = "shrink ray"
+ e_cost = 200
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm
index 8a9d1c5b6b..d947e3155d 100644
--- a/code/modules/projectiles/guns/misc/syringe_gun.dm
+++ b/code/modules/projectiles/guns/misc/syringe_gun.dm
@@ -151,3 +151,17 @@
max_syringes = 1
desc = "[initial(desc)] It has a [B] strapped to it, but it doesn't seem to be doing anything."
..()
+
+/obj/item/gun/syringe/blowgun
+ name = "blowgun"
+ desc = "Fire syringes at a short distance."
+ icon_state = "blowgun"
+ item_state = "blowgun"
+ fire_sound = 'sound/items/syringeproj.ogg'
+
+/obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
+ visible_message("[user] starts aiming with a blowgun! ")
+ if(do_after(user, 25, target = src))
+ user.adjustStaminaLoss(20)
+ user.adjustOxyLoss(20)
+ ..()
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 88e766edfc..9141a6d299 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -180,7 +180,7 @@
else
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color())
- if(iscarbon(L))
+ if(iscarbon(L) && !HAS_TRAIT(L, TRAIT_NOMARROW))
var/mob/living/carbon/C = L
C.bleed(damage)
else
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index ceb9b7a0fc..be73e22e6d 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -190,3 +190,21 @@
var/mob/living/carbon/M = target
M.visible_message("[M] explodes into a shower of gibs! ")
M.gib()
+
+//a shrink ray that shrinks stuff, which grows back after a short while.
+/obj/item/projectile/beam/shrink
+ name = "shrink ray"
+ icon_state = "blue_laser"
+ hitsound = 'sound/weapons/shrink_hit.ogg'
+ damage = 0
+ damage_type = STAMINA
+ flag = "energy"
+ impact_effect_type = /obj/effect/temp_visual/impact_effect/shrink
+ light_color = LIGHT_COLOR_BLUE
+ var/shrink_time = 90
+
+/obj/item/projectile/beam/shrink/on_hit(atom/target, blocked = FALSE)
+ . = ..()
+ if(isopenturf(target) || istype(target, /turf/closed/indestructible))//shrunk floors wouldnt do anything except look weird, i-walls shouldnt be bypassable
+ return
+ target.AddComponent(/datum/component/shrink, shrink_time)
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
index d7c8b8b082..a3c139bcff 100644
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ b/code/modules/projectiles/projectile/energy/stun.dm
@@ -23,6 +23,7 @@
var/mob/living/carbon/C = target
SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased)
SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK)
+ C.IgniteMob()
if(C.dna && C.dna.check_mutation(HULK))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index d91c60367d..173d9721a9 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -507,4 +507,32 @@
return
var/turf/T = get_turf(target)
for(var/i=0, i<50, i+=10)
- addtimer(CALLBACK(GLOBAL_PROC, .proc/explosion, T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i)
\ No newline at end of file
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/explosion, T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i)
+
+/obj/item/projectile/magic/nuclear
+ name = "\proper blazing manliness"
+ icon_state = "nuclear"
+ nodamage = TRUE
+ var/mob/living/victim = null
+ var/used = 0
+
+/obj/item/projectile/magic/nuclear/on_hit(target)
+ if(used)
+ return
+ new/obj/effect/temp_visual/slugboom(get_turf(src))
+ if(ismob(target))
+ if(target == victim)
+ return
+ used = 1
+ visible_message("[victim] slams into [target] with explosive force! ")
+ explosion(src, 2, 3, 4, -1, TRUE, FALSE, 5)
+ else
+ used = 1
+ victim.take_overall_damage(30,30)
+ victim.Knockdown(60)
+ explosion(src, -1, -1, -1, -1, FALSE, FALSE, 5)
+
+/obj/item/projectile/magic/nuclear/Destroy()
+ for(var/atom/movable/AM in contents)
+ AM.forceMove(get_turf(src))
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index f2c6dd2fb5..d540cd02fe 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -1112,7 +1112,7 @@
if(percent < minimum_percent)
continue
var/intensity_desc = "a hint of"
- if(percent > minimum_percent * 2 || percent == 100)
+ if(ISINRANGE(percent, minimum_percent * 2, minimum_percent * 3)|| percent == 100)
intensity_desc = ""
else if(percent > minimum_percent * 3)
intensity_desc = "the strong flavor of"
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index a3dd3c8049..2c5d7aa3e2 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -161,7 +161,7 @@
. = ..()
if(A == beaker)
beaker = null
- cut_overlays()
+ update_icon()
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
@@ -656,3 +656,67 @@
component_parts += new /obj/item/stack/sheet/glass(null)
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
RefreshParts()
+
+/obj/machinery/chem_dispenser/abductor
+ name = "reagent synthesizer"
+ desc = "Synthesizes a variety of reagents using proto-matter."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "chem_dispenser"
+ has_panel_overlay = FALSE
+ circuit = /obj/item/circuitboard/machine/chem_dispenser/abductor
+ working_state = null
+ nopower_state = null
+ dispensable_reagents = list(
+ "hydrogen",
+ "lithium",
+ "carbon",
+ "nitrogen",
+ "oxygen",
+ "fluorine",
+ "sodium",
+ "aluminium",
+ "silicon",
+ "phosphorus",
+ "sulfur",
+ "chlorine",
+ "potassium",
+ "iron",
+ "copper",
+ "mercury",
+ "radium",
+ "water",
+ "ethanol",
+ "sugar",
+ "sacid",
+ "welding_fuel",
+ "silver",
+ "iodine",
+ "bromine",
+ "stable_plasma",
+ "oil",
+ "ammonia",
+ "ash",
+ "acetone",
+ "phenol",
+ "diethylamine",
+ "mine_salve",
+ "toxin",
+ "space_drugs",
+ "plasma",
+ "frostoil",
+ "uranium",
+ "histamine",
+ "morphine"
+ )
+
+/obj/machinery/chem_dispenser/abductor/Initialize()
+ . = ..()
+ component_parts = list()
+ component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
+ component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
+ component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
+ component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
+ component_parts += new /obj/item/stock_parts/manipulator/femto(null)
+ component_parts += new /obj/item/stack/sheet/glass(null)
+ component_parts += new /obj/item/stock_parts/cell/bluespace(null)
+ RefreshParts()
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 06e33ddf9f..1ac62ba651 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -58,14 +58,14 @@
if(bottle)
bottle.ex_act(severity, target)
-/obj/machinery/chem_master/handle_atom_del(atom/A)
- ..()
+/obj/machinery/chem_master/Exited(atom/movable/A, atom/newloc)
+ . = ..()
if(A == beaker)
beaker = null
- reagents.clear_reagents()
update_icon()
- else if(A == bottle)
+ if(A == bottle)
bottle = null
+ update_icon()
/obj/machinery/chem_master/update_icon()
cut_overlays()
@@ -103,6 +103,10 @@
updateUsrDialog()
update_icon()
else if(!condi && istype(I, /obj/item/storage/pill_bottle))
+ . = TRUE // no afterattack
+ if(panel_open)
+ to_chat(user, "You can't use the [src.name] while its panel is opened! ")
+ return
if(!user.transferItemToLoc(I, src))
return
replace_pillbottle(user, I)
@@ -115,38 +119,37 @@
. = ..()
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
- replace_beaker(user)
+ if(beaker)
+ replace_beaker(user)
+ else if(bottle)
+ replace_pillbottle(user)
return TRUE
/obj/machinery/chem_master/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
if(beaker)
- beaker.forceMove(drop_location())
+ var/obj/item/reagent_containers/B = beaker
+ B.forceMove(drop_location())
if(user && Adjacent(user) && !issiliconoradminghost(user))
- user.put_in_hands(beaker)
+ user.put_in_hands(B)
if(new_beaker)
beaker = new_beaker
- else
- beaker = null
update_icon()
- return TRUE
/obj/machinery/chem_master/proc/replace_pillbottle(mob/living/user, obj/item/storage/pill_bottle/new_bottle)
if(bottle)
- bottle.forceMove(drop_location())
+ var/obj/item/storage/pill_bottle/B = bottle
+ B.forceMove(drop_location())
if(user && Adjacent(user) && !issiliconoradminghost(user))
- user.put_in_hands(beaker)
+ user.put_in_hands(B)
else
- adjust_item_drop_location(bottle)
+ adjust_item_drop_location(B)
if(new_bottle)
bottle = new_bottle
- else
- bottle = null
- update_icon()
- return TRUE
/obj/machinery/chem_master/on_deconstruction()
- replace_beaker(usr)
- replace_pillbottle(usr)
+ var/atom/A = drop_location()
+ beaker.forceMove(A)
+ bottle.forceMove(A)
return ..()
/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
@@ -261,15 +264,16 @@
if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr)))
return
var/obj/item/reagent_containers/pill/P
- var/target_loc = bottle ? bottle : drop_location()
+ var/target_loc = drop_location()
var/drop_threshold = INFINITY
if(bottle)
var/datum/component/storage/STRB = bottle.GetComponent(/datum/component/storage)
if(STRB)
drop_threshold = STRB.max_items - bottle.contents.len
+ target_loc = bottle
for(var/i in 1 to amount)
- if(i < drop_threshold)
+ if(i <= drop_threshold)
P = new(target_loc)
else
P = new(drop_location())
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index f96acf2d71..fd28ff9c47 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -610,6 +610,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
value = 1.3
/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C)
+ if((HAS_TRAIT(C, TRAIT_NOMARROW)))
+ return
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
C.blood_volume = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss.
..()
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index 08594dee5b..5d31bfae9b 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -479,7 +479,6 @@
glass_name = "glass of lemon-lime"
glass_desc = "You're pretty certain a real fruit has never actually touched this."
-
/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
@@ -512,6 +511,51 @@
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
+/datum/reagent/consumable/buzz_fuzz
+ name = "Buzz Fuzz"
+ description = "~A Hive of Flavour!~ NOTICE: Addicting."
+ id = "buzz_fuzz"
+ addiction_threshold = 26 //A can and a sip
+ color = "#8CFF00" // rgb: 135, 255, 0
+ taste_description = "carbonated honey and pollen"
+ glass_icon_state = "buzz_fuzz"
+ glass_name = "honeycomb of Buzz Fuzz"
+ glass_desc = "Stinging with flavour."
+
+/datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M)
+ M.reagents.add_reagent("sugar",1)
+ if(prob(5))
+ M.reagents.add_reagent("honey",1)
+ ..()
+
+/datum/reagent/consumable/buzz_fuzz/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH)))
+ var/mob/living/carbon/C = M
+ for(var/s in C.surgeries)
+ var/datum/surgery/S = s
+ S.success_multiplier = max(0.1, S.success_multiplier) // +10% success probability on each step, compared to bacchus' blessing's ~46%
+ ..()
+
+/datum/reagent/consumable/buzz_fuzz/addiction_act_stage1(mob/living/M)
+ if(prob(5))
+ to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "A Hive of Flavour")] ")
+ ..()
+
+/datum/reagent/consumable/buzz_fuzz/addiction_act_stage2(mob/living/M)
+ if(prob(10))
+ to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "A Hive of Flavour", "The Queen approved it!")] ")
+ ..()
+
+/datum/reagent/consumable/buzz_fuzz/addiction_act_stage3(mob/living/M)
+ if(prob(15))
+ to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "Ideal of the worker drone", "A Hive of Flavour", "The Queen approved it!")] ")
+ ..()
+
+/datum/reagent/consumable/buzz_fuzz/addiction_act_stage4(mob/living/M)
+ if(prob(25))
+ to_chat(M, "[pick("Buzz Buzz.", "Stinging with flavour.", "Ideal of the worker drone", "A Hive of Flavour", "Sap back that missing energy!", "Got Honey?", "The Queen approved it!")] ")
+ ..()
+
/datum/reagent/consumable/grey_bull
name = "Grey Bull"
id = "grey_bull"
@@ -764,7 +808,6 @@
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
..()
-
/datum/reagent/consumable/milk/chocolate_milk
name = "Chocolate Milk"
id = "chocolate_milk"
@@ -908,3 +951,21 @@
to_chat(M, "[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")] ")
M.adjustArousalLoss(5)
..()
+
+/datum/reagent/consumable/monkey_energy
+ name = "Monkey Energy"
+ id = "monkey_energy"
+ description = "The only drink that will make you unleash the ape."
+ color = "#f39b03" // rgb: 243, 155, 3
+ taste_description = "barbecue and nostalgia"
+ glass_icon_state = "monkey_energy_glass"
+ glass_name = "glass of Monkey Energy"
+ glass_desc = "You can unleash the ape, but without the pop of the can?"
+
+/datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M)
+ M.Jitter(20)
+ M.dizziness +=1
+ M.drowsyness = 0
+ M.AdjustSleeping(-40, FALSE)
+ M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
+ ..()
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 4446b5c561..e956fcac36 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -13,6 +13,7 @@
/datum/reagent/drug/space_drugs
name = "Space drugs"
id = "space_drugs"
+ value = 6
description = "An illegal chemical compound used as drug."
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 30
@@ -40,6 +41,7 @@
/datum/reagent/drug/nicotine
name = "Nicotine"
id = "nicotine"
+ value = 0
description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 4d02706a3c..23eb24ed15 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -767,7 +767,7 @@
/* //We don't have ethereals here, so I'll just comment it out.
/datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works.
if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M))
-
+
var/mob/living/carbon/C = M
var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
@@ -799,6 +799,16 @@
..()
. = TRUE
+/datum/reagent/consumable/caramel
+ name = "Caramel"
+ id = "caramel"
+ description = "Who would have guessed that heated sugar could be so delicious?"
+ nutriment_factor = 10 * REAGENTS_METABOLISM
+ color = "#D98736"
+ taste_mult = 2
+ taste_description = "caramel"
+ reagent_state = SOLID
+
/datum/reagent/consumable/secretsauce
name = "secret sauce"
id = "secret_sauce"
@@ -810,3 +820,27 @@
taste_mult = 100
can_synth = FALSE
pH = 6.1
+
+/datum/reagent/consumable/char
+ name = "Char"
+ id = "char"
+ description = "Essence of the grill. Has strange properties when overdosed."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#C8C8C8"
+ taste_mult = 6
+ taste_description = "smoke"
+ overdose_threshold = 25
+
+/datum/reagent/consumable/char/overdose_process(mob/living/carbon/M)
+ if(prob(10))
+ M.say(pick("I hate my grill.", "I just want to grill something right for once...", "I wish I could just go on my lawnmower and cut the grass.", "Yep, Tetris. That was a good game..."))
+
+/datum/reagent/consumable/bbqsauce
+ name = "BBQ Sauce"
+ id = "bbqsauce"
+ description = "Sweet, Smokey, Savory, and gets everywhere. Perfect for Grilling."
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#78280A" // rgb: 120 40, 10
+ taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground.
+ taste_description = "smokey sweetness"
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 2a8ad86646..d8ff084227 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -355,6 +355,8 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
value = 1
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M)
+ if((HAS_TRAIT(M, TRAIT_NOMARROW)))
+ return
if(last_added)
M.blood_volume -= last_added
last_added = 0
@@ -1209,7 +1211,30 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
M.adjustToxLoss(-5*REM, 0)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM)
M.adjustCloneLoss(-3*REM, 0)
+ M.adjustStaminaLoss(-25*REM,0)
+ if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
+ M.blood_volume += 40 // blood fall out man bad
+ ..()
+ . = 1
+
+/datum/reagent/medicine/lesser_syndicate_nanites // the one in the injector
+ name = "Regenerative Nanites"
+ id = "lesser_syndicate_nanites"
+ description = "Miniature medical robots that restore damage and get operatives back in the fight."
+ reagent_state = SOLID
+ color = "#555555"
+ pH = 11
+
+/datum/reagent/medicine/lesser_syndicate_nanites/on_mob_life(mob/living/carbon/M)
+ M.adjustBruteLoss(-3*REM, 0) // hidden gold shh
+ M.adjustFireLoss(-3*REM, 0)
+ M.adjustOxyLoss(-15, 0)
+ M.adjustToxLoss(-3*REM, 0)
+ M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM)
+ M.adjustCloneLoss(-3*REM, 0)
M.adjustStaminaLoss(-20*REM,0)
+ if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
+ M.blood_volume += 20 // blood fall out man bad
..()
. = 1
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index bb65392057..512b8a21a1 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1,5 +1,5 @@
/datum/reagent/blood
- data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
+ data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null)
name = "Blood"
id = "blood"
value = 1
@@ -30,7 +30,7 @@
if(iscarbon(L))
var/mob/living/carbon/C = L
var/blood_id = C.get_blood_id()
- if((blood_id == "blood" || blood_id == "jellyblood") && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits))))
+ if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == "blood" || blood_id == "jellyblood") && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits))))
C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio)
// we don't care about bloodtype here, we're just refilling the mob
@@ -38,6 +38,8 @@
L.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
/datum/reagent/blood/on_mob_life(mob/living/carbon/C) //Because lethals are preferred over stamina. damnifino.
+ if((HAS_TRAIT(C, TRAIT_NOMARROW)))
+ return //We dont want vampires getting toxed from blood
var/blood_id = C.get_blood_id()
if((blood_id == "blood" || blood_id == "jellyblood"))
if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) //we only care about bloodtype here because this is where the poisoning should be
@@ -1116,6 +1118,8 @@
color = "#c2391d"
/datum/reagent/iron/on_mob_life(mob/living/carbon/C)
+ if((HAS_TRAIT(C, TRAIT_NOMARROW)))
+ return
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
C.blood_volume += 0.01 //we'll have synthetics from medbay.
..()
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index d475b118b2..618b74fffb 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -156,6 +156,10 @@
if(beaker_weakness_bitflag & PH_WEAK)
if((reagents.pH < 1.5) || (reagents.pH > 12.5))
START_PROCESSING(SSobj, src)
+ else if((reagents.pH < -3) || (reagents.pH > 17))
+ visible_message("[icon2html(src, viewers(src))] \The [src] is damaged by the super pH and begins to deform! ")
+ reagents.pH = CLAMP(reagents.pH, -3, 17)
+ container_HP -= 1
/obj/item/reagent_containers/process()
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index fe35981bfe..61449fc153 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -107,8 +107,29 @@
else
return ..()
+/obj/item/reagent_containers/blood/attack(mob/M, mob/user, def_zone)
+ if(user.a_intent == INTENT_HELP && reagents.total_volume > 0)
+ if (user != M)
+ to_chat(user, "You force [M] to drink from the [src] ")
+ user.visible_message("[user] forces [M] to drink from the [src]. ")
+ if(!do_mob(user, M, 50))
+ return
+ else
+ if(!do_mob(user, M, 10))
+ return
+ to_chat(user, "You take a sip from the [src]. ")
+ user.visible_message("[user] puts the [src] up to their mouth. ")
+ if(reagents.total_volume <= 0) // Safety: In case you spam clicked the blood bag on yourself, and it is now empty (below will divide by zero)
+ return
+ var/gulp_size = 5
+ var/fraction = min(gulp_size / reagents.total_volume, 1)
+ reagents.reaction(M, INGEST, fraction) //checkLiked(fraction, M) // Blood isn't food, sorry.
+ reagents.trans_to(M, gulp_size)
+ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
+ ..()
+
/obj/item/reagent_containers/blood/bluespace
name = "bluespace blood pack"
desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip."
icon_state = "bsbloodpack"
- volume = 600 //its a blood bath!
\ No newline at end of file
+ volume = 600 //its a blood bath!
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index f1a4d1554e..9232bb69b3 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -56,11 +56,16 @@
/obj/item/reagent_containers/hypospray/combat
name = "combat stimulant injector"
- desc = "A modified air-needle autoinjector, used by support operatives to quickly heal injuries in combat."
+ desc = "A modified air-needle autoinjector, used by support operatives to quickly heal injuries in combat and get people back in the fight."
amount_per_transfer_from_this = 10
icon_state = "combat_hypo"
- volume = 90
+ volume = 100
ignore_flags = 1 // So they can heal their comrades.
+ list_reagents = list("epinephrine" = 30, "lesser_syndicate_nanites" = 40, "leporazine" = 15, "atropine" = 15)
+
+/obj/item/reagent_containers/hypospray/combat/omnizine // owned idiot
+ desc = "A modified air-needle autoinjector, used by underfunded support operatives to slowly heal injuries in combat and limp away from a fight."
+ volume = 90
list_reagents = list("epinephrine" = 30, "omnizine" = 30, "leporazine" = 15, "atropine" = 15)
/obj/item/reagent_containers/hypospray/combat/nanites
@@ -135,7 +140,7 @@
list_reagents = list("stimulants" = 50)
/obj/item/reagent_containers/hypospray/medipen/stimulants/baseball
- name = "the reason the syndicate major league team wins."
+ name = "the reason the syndicate major league team wins"
desc = "They say drugs never win, but look where you are now, then where they are."
icon_state = "baseballstim"
volume = 50
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 5875e821a3..7701e58616 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -135,6 +135,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
addtimer(CALLBACK(src, .proc/convey, affecting), 1)
/obj/machinery/conveyor/proc/convey(list/affecting)
+ var/turf/T = get_step(src, movedir)
+ if(length(T.contents) > 150)
+ return
for(var/atom/movable/A in affecting)
if((A.loc == loc) && A.has_gravity())
A.ConveyorMove(movedir)
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 88c03ee7d5..7025a649e6 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -102,9 +102,17 @@
return ..()
/obj/machinery/disposal/proc/place_item_in_disposal(obj/item/I, mob/user)
- I.forceMove(src)
- user.visible_message("[user.name] places \the [I] into \the [src].", "You place \the [I] into \the [src]. ")
-
+ if(istype(I, /obj/item/clothing/head/mob_holder))
+ var/obj/item/clothing/head/mob_holder/H = I
+ var/mob/living/m = H.held_mob
+ H.release()
+ if(m)
+ user.start_pulling(m, 1)
+ stuff_mob_in(m,user)
+ return//you don't want this going into disposals ever
+ if(user.temporarilyRemoveItemFromInventory(I)) //double-checks never hurt
+ I.forceMove(src)
+ user.visible_message("[user.name] places \the [I] into \the [src].", "You place \the [I] into \the [src]. ")
//mouse drop another mob or self
/obj/machinery/disposal/MouseDrop_T(mob/living/target, mob/living/user)
if(istype(target))
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
index e5e3a6bb4f..94599e9c32 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
@@ -130,11 +130,19 @@
category = list("hacked", "Security")
/datum/design/a357
- name = "Speed Loader (.357)"
+ name = "Revolver Bullet (.357)"
id = "a357"
build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/a357
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/a357
+ category = list("hacked", "Security")
+
+/datum/design/a762
+ name = "Rifle Bullet (7.62mm)"
+ id = "a762"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 5000) //need seclathe for clips
+ build_path = /obj/item/ammo_casing/a762
category = list("hacked", "Security")
/datum/design/c10mm
@@ -183,4 +191,4 @@
build_type = AUTOLATHE
materials = list(MAT_METAL = 5500)
build_path = /obj/item/clothing/head/foilhat
- category = list("hacked", "Misc")
\ No newline at end of file
+ category = list("hacked", "Misc")
diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm
index 50fb5efcb0..e2e1661ab7 100644
--- a/code/modules/research/nanites/nanite_programs/healing.dm
+++ b/code/modules/research/nanites/nanite_programs/healing.dm
@@ -98,7 +98,7 @@
/datum/nanite_program/blood_restoring/check_conditions()
if(iscarbon(host_mob))
var/mob/living/carbon/C = host_mob
- if(C.blood_volume >= (BLOOD_VOLUME_SAFE*C.blood_ratio))
+ if(C.blood_volume >= (BLOOD_VOLUME_SAFE*C.blood_ratio) || (HAS_TRAIT(C, TRAIT_NOMARROW)))
return FALSE
else
return FALSE
diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm
index 44b85e4210..a269d01ac0 100644
--- a/code/modules/research/nanites/nanite_programs/utility.dm
+++ b/code/modules/research/nanites/nanite_programs/utility.dm
@@ -236,10 +236,14 @@
/datum/nanite_program/spreading/active_effect()
if(prob(10))
var/list/mob/living/target_hosts = list()
- for(var/mob/living/L in oview(5, host_mob))
+ var/turf/T = get_turf(host_mob)
+ for(var/mob/living/L in range(5, host_mob))
if(!(MOB_ORGANIC in L.mob_biotypes) && !(MOB_UNDEAD in L.mob_biotypes))
continue
+ if(!disease_air_spread_walk(T, get_turf(L)))
+ continue
target_hosts += L
+ target_hosts -= host_mob
if(!target_hosts.len)
return
var/mob/living/infectee = pick(target_hosts)
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 4b014372e7..d08a486ad5 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -1043,14 +1043,21 @@
display_name = "Alien Technology"
description = "Things used by the greys."
prereq_ids = list("biotech","engineering")
- boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien,
- /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
- /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 20000
hidden = TRUE
design_ids = list("alienalloy")
+/datum/techweb_node/alientech/New()
+ . = ..()
+ boost_item_paths = typesof(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
+ /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/cautery/alien,
+ /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor,
+ /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ /obj/item/stock_parts/cell/infinite/abductor, /obj/item/weldingtool/abductor,
+ /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor,
+ /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor)
+
/datum/techweb_node/alien_bio
id = "alien_bio"
display_name = "Alien Biological Tools"
@@ -1088,13 +1095,13 @@
continue
boost_item_paths |= UI.item //allows deconning to unlock.
-/datum/techweb_node/advanced_illegl_ballistics
+/datum/techweb_node/advanced_illegal_ballistics
id = "advanced_illegal_ballistics"
- display_name = "Advanced Illegal Ballistics"
- description = "Advanced Ballistic for Illegal weaponds."
- design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip")
+ display_name = "Advanced Non-Standard Ballistics"
+ description = "Ballistic ammunition for non-standard firearms. Usually the ones you don't have nor want to be involved with."
+ design_ids = list("10mm","10mmap","10mminc","10mmhp","sl357","pistolm9mm","m45","bolt_clip")
prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns from traitors, space, or anything in between.
export_price = 7000
//Helpers for debugging/balancing the techweb in its entirety!
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index 70b06e6438..13d1543c92 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -49,7 +49,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
else
SSshuttle.emergency.modTimer(1.5)
GLOB.security_level = SEC_LEVEL_BLUE
- sound_to_playing_players('sound/misc/voybluealert.ogg') // Citadel change - Makes alerts play a sound
+ sound_to_playing_players('sound/misc/voybluealert.ogg', volume = 50) // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
@@ -66,7 +66,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
SSshuttle.emergency.modTimer(1.6)
GLOB.security_level = SEC_LEVEL_AMBER
- sound_to_playing_players('sound/effects/alert.ogg') // Citadel change - Makes alerts play a sound
+ sound_to_playing_players('sound/effects/alert.ogg', volume = 50) // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
@@ -83,7 +83,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
else
minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!")
GLOB.security_level = SEC_LEVEL_RED
- sound_to_playing_players('sound/misc/voyalert.ogg') // Citadel change - Makes alerts play a sound
+ sound_to_playing_players('sound/misc/voyalert.ogg', volume = 50) // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index c38cef5ea8..2ac6df7668 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -28,6 +28,11 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
/obj/item/hilbertshotel
)))
+GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list(
+ /mob/living/simple_animal/revenant,
+ /mob/living/simple_animal/slaughter
+ )))
+
/obj/docking_port/mobile/supply
name = "supply shuttle"
id = "supply"
@@ -50,16 +55,27 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
/obj/docking_port/mobile/supply/canMove()
if(is_station_level(z))
- return check_blacklist(shuttle_areas)
+ return check_blacklist(shuttle_areas, GLOB.blacklisted_cargo_types - GLOB.cargo_shuttle_leave_behind_typecache)
return ..()
-/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances)
+/obj/docking_port/mobile/supply/enterTransit()
+ var/list/leave_behind = list()
+ for(var/i in check_blacklist(shuttle_areas, GLOB.cargo_shuttle_leave_behind_typecache))
+ var/atom/movable/AM = i
+ leave_behind[AM] = AM.loc
+ . = ..()
+ for(var/kicked in leave_behind)
+ var/atom/movable/victim = kicked
+ var/atom/oldloc = leave_behind[victim]
+ victim.forceMove(oldloc)
+
+/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances, list/typecache)
for(var/place in areaInstances)
var/area/shuttle/shuttle_area = place
for(var/trf in shuttle_area)
var/turf/T = trf
for(var/a in T.GetAllContents())
- if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types))
+ if(is_type_in_typecache(a, typecache))
return FALSE
if(istype(a, /obj/structure/closet))//Prevents eigenlockers from ending up at CC
var/obj/structure/closet/c = a
diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm
index a5f371ffc2..8108b121ae 100644
--- a/code/modules/spells/spell_types/godhand.dm
+++ b/code/modules/spells/spell_types/godhand.dm
@@ -182,3 +182,38 @@
if(charges <= 0)
qdel(src)
+
+/obj/item/melee/touch_attack/nuclearfist
+ name = "\improper PURE MANLINESS"
+ desc = "SHOW THEM RAW POWER"
+ catchphrase = "I CAST FIST!"
+ on_use_sound = 'sound/weapons/nuclear_fist.ogg'
+ icon_state = "disintegrate"
+ item_state = "disintegrate"
+
+/obj/item/melee/touch_attack/nuclearfist/afterattack(atom/movable/target, mob/living/carbon/user, proximity)
+ if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad
+ return
+ if(!user.can_speak_vocal())
+ to_chat(user, "You can't get the words out! ")
+ return
+ var/mob/M = target
+ var/atom/A = M.anti_magic_check()
+ if(A)
+ if(isitem(A))
+ target.visible_message("[target]'s [A] glows brightly as it wards off the spell! ")
+ user.visible_message("The feedback blows [user]'s arm off! ","The spell bounces from [M]'s skin back into your arm! ")
+ user.flash_act()
+ var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src)
+ if(part)
+ part.dismember()
+ return ..()
+ var/angle = dir2angle(get_dir(src, get_step_away(target, src)))
+ var/obj/item/projectile/magic/nuclear/P = new(get_turf(src))
+ P.victim = target
+ target.forceMove(P)
+ P.setAngle(angle)
+ P.original = user
+ P.firer = user
+ P.fire()
+ return ..()
\ No newline at end of file
diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm
index 0ffe02cec2..794ed797ad 100644
--- a/code/modules/spells/spell_types/touch_attacks.dm
+++ b/code/modules/spells/spell_types/touch_attacks.dm
@@ -23,7 +23,7 @@
remove_hand(TRUE)
to_chat(user, "You draw the power out of your hand. ")
return
-
+
for(var/mob/living/carbon/C in targets)
if(!attached_hand)
if(ChargeHand(C))
@@ -71,3 +71,15 @@
action_icon_state = "statue"
sound = 'sound/magic/fleshtostone.ogg'
+
+/obj/effect/proc_holder/spell/targeted/touch/nuclear_fist
+ name = "Nuclear Fist"
+ desc = "This spell channels raw manliness, allowing you punch your enemies across the galaxy, causing them to detonate violently if hitting any other living being midflight. Does not work while laying down."
+ hand_path = /obj/item/melee/touch_attack/nuclearfist
+
+ school = "evocation"
+ charge_max = 200
+ clothes_req = 0
+ cooldown_min = 40
+
+ action_icon_state = "nuclearfist"
\ No newline at end of file
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index c61f1a8122..2ddbd672c5 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -44,13 +44,9 @@
eye_color = H.eye_color
if(!special)
H.dna?.species?.handle_body() //regenerate eyeballs overlays.
- if(HAS_TRAIT(H, TRAIT_NIGHT_VISION) && !lighting_alpha)
- lighting_alpha = LIGHTING_PLANE_ALPHA_NV_TRAIT
- see_in_dark = 8
M.update_tint()
owner.update_sight()
-
/obj/item/organ/eyes/Remove(mob/living/carbon/M, special = 0)
clear_eye_trauma()
. = ..()
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 212605669d..5b74b58cd0 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -55,6 +55,11 @@
update_icon()
return 1
+/obj/item/organ/heart/proc/HeartStrengthMessage()
+ if(beating)
+ return "a healthy"
+ return "an unstable "
+
/obj/item/organ/heart/prepare_eat()
var/obj/S = ..()
S.icon_state = "[icon_base]-off"
diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm
index 6b435f282f..760cd97f08 100644
--- a/code/modules/surgery/organs/tongue.dm
+++ b/code/modules/surgery/organs/tongue.dm
@@ -22,6 +22,7 @@
/datum/language/ratvar,
/datum/language/aphasia,
/datum/language/slime,
+ /datum/language/vampiric,
))
healing_factor = STANDARD_ORGAN_HEALING*5 //Fast!!
decay_factor = STANDARD_ORGAN_DECAY/2
@@ -124,6 +125,32 @@
taste_sensitivity = 101 // ayys cannot taste anything.
maxHealth = 120 //Ayys probe a lot
modifies_speech = TRUE
+ var/mothership
+
+/obj/item/organ/tongue/abductor/attack_self(mob/living/carbon/human/H)
+ if(!istype(H))
+ return
+
+ var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE)
+ if(!istype(T))
+ return
+
+ if(T.mothership == mothership)
+ to_chat(H, "[src] is already attuned to the same channel as your own. ")
+ return
+
+ H.visible_message("[H] holds [src] in their hands, and concentrates for a moment. ", "You attempt to modify the attunation of [src]. ")
+ if(do_after(H, delay=15, target=src))
+ to_chat(H, "You attune [src] to your own channel. ")
+ mothership = T.mothership
+
+/obj/item/organ/tongue/abductor/examine(mob/M)
+ . = ..()
+ if(HAS_TRAIT(M, TRAIT_ABDUCTOR_TRAINING) || HAS_TRAIT(M.mind, TRAIT_ABDUCTOR_TRAINING) || isobserver(M))
+ if(!mothership)
+ . += "It is not attuned to a specific mothership. "
+ else
+ . += "It is attuned to [mothership]. "
/obj/item/organ/tongue/abductor/handle_speech(datum/source, list/speech_args)
//Hacks
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index cf663e353f..97fa6041a9 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -357,9 +357,9 @@
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/dangerous/revolver
- name = "Syndicate Revolver"
- desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
- item = /obj/item/gun/ballistic/revolver
+ name = "Syndicate Revolver Kit"
+ desc = "A sleek box containing a brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers, and an extra speedloader."
+ item = /obj/item/storage/box/syndie_kit/revolver
cost = 13
surplus = 50
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -641,7 +641,7 @@
cost = 2
/datum/uplink_item/stealthy_weapons/martialarts
- name = "Martial Arts Scroll"
+ name = "Sleeping Carp Scroll"
desc = "This scroll contains the secrets of an ancient martial arts technique. You will master unarmed combat, \
deflecting all ranged weapon fire, but you also refuse to use dishonorable ranged weaponry."
item = /obj/item/book/granter/martial/carp
@@ -649,6 +649,15 @@
surplus = 0
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+/datum/uplink_item/stealthy_weapons/martialartstwo
+ name = "Rising Bass Scroll"
+ desc = "This scroll contains the secrets of an ancient martial arts technique. You will become proficient in fleeing situations, \
+ and dodging all ranged weapon fire, but you will refuse to use dishonorable ranged weaponry."
+ item = /obj/item/book/granter/martial/bass
+ cost = 18
+ surplus = 0
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+
/datum/uplink_item/stealthy_weapons/crossbow
name = "Miniature Energy Crossbow"
desc = "A short bow mounted across a tiller in miniature. Small enough to \
@@ -811,12 +820,11 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/ammo/revolver
name = ".357 Speed Loader"
- desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \
+ desc = "A speed loader that contains seven additional .357 Magnum rounds, and can be further reloaded with individual bullets; usable with the Syndicate revolver. \
For when you really need a lot of things dead."
item = /obj/item/ammo_box/a357
cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
- illegal_tech = FALSE
/datum/uplink_item/ammo/revolver/ap
name = ".357 Armor Piercing Speed Loader"
@@ -1572,7 +1580,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
desc = "This first aid kit is a suspicious brown and red. Included is a combat stimulant injector \
for rapid healing, a medical night vision HUD for quick identification of injured personnel, \
and other supplies helpful for a field medic."
- item = /obj/item/storage/firstaid/tactical
+ item = /obj/item/storage/firstaid/tactical/nukeop
cost = 4
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
@@ -1586,10 +1594,17 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools/surgerybag_adv
name = "Advanced Syndicate Surgery Duffel Bag"
desc = "The Syndicate surgery duffel bag is a toolkit containing all advanced surgery tools, surgical drapes, \
- a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit."
+ a Syndicate brand MMI, a straitjacket, a muzzle, and an outdated, yet still useful Combat Medic Kit."
item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv
cost = 10
+/datum/uplink_item/device_tools/brainwash_disk
+ name = "Brainwashing Surgery Program"
+ desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \
+ Insert into an Operating Console to enable the procedure."
+ item = /obj/item/disk/surgery/brainwashing
+ cost = 3
+
/datum/uplink_item/device_tools/encryptionkey
name = "Syndicate Encryption Key"
desc = "A key that, when inserted into a radio headset, allows you to listen to all station department channels \
@@ -1757,14 +1772,6 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
cost = 12
restricted_roles = list("Research Director", "Scientist", "Roboticist")
-/datum/uplink_item/role_restricted/brainwash_disk
- name = "Brainwashing Surgery Program"
- desc = "A disk containing the procedure to perform a brainwashing surgery, allowing you to implant an objective onto a target. \
- Insert into an Operating Console to enable the procedure."
- item = /obj/item/disk/surgery/brainwashing
- restricted_roles = list("Medical Doctor", "Roboticist")
- cost = 3
-
/datum/uplink_item/role_restricted/clown_bomb
name = "Clown Bomb"
desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 2b86d9e415..626abd51ef 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -115,8 +115,18 @@
/obj/item/clothing/ears/headphones = 10,
/obj/item/clothing/suit/apron/purple_bartender = 4,
/obj/item/clothing/under/rank/bartender/purple = 4,
- /obj/item/clothing/accessory/attrocious_pokadots = 8,
- /obj/item/clothing/accessory/black_white_pokadots = 8)
+ /obj/item/clothing/under/christmas/christmasmaler = 3,
+ /obj/item/clothing/under/christmas/christmasmaleg = 3,
+ /obj/item/clothing/under/christmas/christmasfemaler = 3,
+ /obj/item/clothing/under/christmas/christmasfemaleg = 3,
+ /obj/item/clothing/suit/hooded/wintercoat/christmascoatr = 3,
+ /obj/item/clothing/suit/hooded/wintercoat/christmascoatg = 3,
+ /obj/item/clothing/suit/hooded/wintercoat/christmascoatrg = 3,
+ /obj/item/clothing/head/christmashat = 3,
+ /obj/item/clothing/head/christmashatg = 3,
+ /obj/item/clothing/shoes/winterboots/christmasbootsr = 3,
+ /obj/item/clothing/shoes/winterboots/christmasbootsg = 3,
+ /obj/item/clothing/shoes/winterboots/santaboots = 3)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
/obj/item/clothing/mask/balaclava = 3,
@@ -126,8 +136,7 @@
/obj/item/clothing/suit/jacket/letterman_syndie = 5,
/obj/item/clothing/under/jabroni = 2,
/obj/item/clothing/suit/vapeshirt = 2,
- /obj/item/clothing/under/geisha = 4,
- /obj/item/clothing/accessory/syndi_pokadots = 4,
+ /obj/item/clothing/under/geisha = 4,,
/obj/item/clothing/under/keyholesweater = 3)
premium = list(/obj/item/clothing/under/suit_jacket/checkered = 4,
/obj/item/clothing/head/mailman = 2,
@@ -136,8 +145,7 @@
/obj/item/clothing/suit/jacket/leather/overcoat = 4,
/obj/item/clothing/under/pants/mustangjeans = 3,
/obj/item/clothing/neck/necklace/dope = 5,
- /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5,
- /obj/item/clothing/accessory/nt_pokadots = 5)
+ /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5)
refill_canister = /obj/item/vending_refill/clothing
/obj/item/vending_refill/clothing
diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm
index a242d88be4..502a25ba4e 100644
--- a/code/modules/vending/cola.dm
+++ b/code/modules/vending/cola.dm
@@ -17,7 +17,8 @@
/obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6)
premium = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1,
/obj/item/reagent_containers/food/drinks/soda_cans/air = 1,
- /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1)
+ /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1,
+ /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy = 1)
refill_canister = /obj/item/vending_refill/cola
/obj/item/vending_refill/cola
@@ -82,3 +83,22 @@
/obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 10)
product_slogans = "~Shake me up some of that Shambler's Juice!~"
product_ads = "Refreshing!;Jyrbv dv lg jfdv fw kyrk Jyrdscvi'j Alztv!;Over 1 trillion souls drank!;Thirsty? Nyp efk uizeb kyv uribevjj?;Kyv Jyrdscvi uizebj kyv ezxyk!;Drink up!;Krjkp."
+
+/obj/machinery/vending/cola/buzz_fuzz
+ name = "\improper Buzz Fuzz Vendor"
+ desc = "~A hive of Flavour!~"
+ icon_state = "honey_vender"
+ products = list(/obj/item/reagent_containers/food/drinks/soda_cans/cola = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/starkist = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/space_up = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,
+ /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 5,
+ /obj/item/reagent_containers/food/drinks/soda_cans/buzz_fuzz = 5,)
+ contraband = list(/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6)
+ premium = list(/obj/item/reagent_containers/food/drinks/beer/light = 1,
+ /obj/item/reagent_containers/food/drinks/soda_cans/grey_bull = 1)
+ product_slogans = "~A hive of Flavour!~"
+ product_ads = "Stinging flavour!;Ideal of the worker drone!;Buzz Buzz!;Got Honey?;The Queen approves of this drink!;Sap back that missing energy!;Bee the consumer unit!"
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index d65a507f96..894aecc600 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -135,7 +135,6 @@
/obj/item/clothing/gloves/fingerless = 3,
/obj/item/clothing/head/soft/black = 3,
/obj/item/clothing/mask/bandana/skull = 2)
- premium = list(/obj/item/radio/headset/headset_rob = 2) //Cit change
contraband = list(/obj/item/clothing/suit/hooded/techpriest = 2)
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
diff --git a/config/dynamic_config.txt b/config/dynamic_config.txt
index 18c0d7827d..2ddebdf37a 100644
--- a/config/dynamic_config.txt
+++ b/config/dynamic_config.txt
@@ -40,6 +40,7 @@ DYNAMIC_WEIGHT WIZARD 1
DYNAMIC_WEIGHT CULT 3
DYNAMIC_WEIGHT NUCLEAR 3
DYNAMIC_WEIGHT REVOLUTION 2
+DYNAMIC_WEIGHT BLOODSUCKER 4
# All below are impossible-by-default
DYNAMIC_WEIGHT EXTENDED 3
DYNAMIC_WEIGHT CLOCKWORK_CULT 3
@@ -49,18 +50,20 @@ DYNAMIC_WEIGHT MONKEY 3
DYNAMIC_WEIGHT METEOR 3
## Midround antags
-DYNAMIC_WEIGHT MIDROUND_TRAITOR 7
-DYNAMIC_WEIGHT MIDROUND_MALF_AI 8
-DYNAMIC_WEIGHT MIDROUND_WIZARD 9
-DYNAMIC_WEIGHT MIDROUND_NUCLEAR 9
-DYNAMIC_WEIGHT BLOB 8
-DYNAMIC_WEIGHT XENOS 8
-DYNAMIC_WEIGHT NIGHTMARE 8
-DYNAMIC_WEIGHT SENTIENT_DISEASE 6
-DYNAMIC_WEIGHT REVENANT 6
-DYNAMIC_WEIGHT SLAUGHTER_DEMON 4
-DYNAMIC_WEIGHT ABDUCTORS 8
-DYNAMIC_WEIGHT SPACE_NINJA 8
+DYNAMIC_WEIGHT MIDROUND_TRAITOR 9
+DYNAMIC_WEIGHT MIDROUND_MALF_AI 5
+DYNAMIC_WEIGHT MIDROUND_WIZARD 4
+DYNAMIC_WEIGHT MIDROUND_NUCLEAR 2
+DYNAMIC_WEIGHT BLOB 2
+DYNAMIC_WEIGHT XENOS 2
+DYNAMIC_WEIGHT NIGHTMARE 3
+DYNAMIC_WEIGHT SENTIENT_DISEASE 4
+DYNAMIC_WEIGHT REVENANT 2
+DYNAMIC_WEIGHT SLAUGHTER_DEMON 1
+DYNAMIC_WEIGHT ABDUCTORS 3
+DYNAMIC_WEIGHT SPACE_NINJA 3
+
+## Events
DYNAMIC_WEIGHT SPIDERS 5
DYNAMIC_WEIGHT VENTCLOG_NORMAL 3
DYNAMIC_WEIGHT VENTCLOG_THREATENING 3
@@ -88,6 +91,7 @@ DYNAMIC_WEIGHT RADIATION_STORM 1
## Latejoin antags
DYNAMIC_WEIGHT LATEJOIN_TRAITOR 7
DYNAMIC_WEIGHT LATEJOIN_REVOLUTION 2
+DYNAMIC_WEIGHT LATEJOIN_BLOODSUCKER 4
## Threat cost. This is decreased from the mode's threat when the rule is executed.
DYNAMIC_COST TRAITOR 10
@@ -98,7 +102,7 @@ DYNAMIC_COST WIZARD 30
DYNAMIC_COST CULT 35
DYNAMIC_COST NUCLEAR 45
DYNAMIC_COST REVOLUTION 40
-# All below are impossible-by-default
+DYNAMIC_cOST BLOODSUCKER 15
DYNAMIC_COST EXTENDED 0
DYNAMIC_COST CLOCKWORK_CULT 35
DYNAMIC_COST CLOWNOPS 40
@@ -112,13 +116,15 @@ DYNAMIC_COST MIDROUND_MALF_AI 35
DYNAMIC_COST MIDROUND_WIZARD 20
DYNAMIC_COST MIDROUND_NUCLEAR 35
DYNAMIC_COST BLOB 10
-DYNAMIC_COST XENOS 10
+DYNAMIC_COST XENOS 20
DYNAMIC_COST NIGHTMARE 10
DYNAMIC_COST SENTIENT_DISEASE 5
DYNAMIC_COST REVENANT 5
DYNAMIC_COST SLAUGHTER_DEMON 15
DYNAMIC_COST ABDUCTORS 10
DYNAMIC_COST SPACE_NINJA 15
+
+## Events
DYNAMIC_COST SPIDERS 10
DYNAMIC_COST VENTCLOG_NORMAL 2
DYNAMIC_COST VENTCLOG_THREATENING 5
@@ -146,6 +152,7 @@ DYNAMIC_COST RADIATION_STORM 3
## Latejoin antags
DYNAMIC_COST LATEJOIN_TRAITOR 5
DYNAMIC_COST LATEJOIN_REVOLUTION 20
+DYNAMIC_COST LATEJOIN_BLOODSUCKER 10
## Rule will not be generated with threat levels below requirement at a pop value. Pop values are determined by dynamic's pop-per-requirement.
## By default it's 0-8, 9-17, 18-26, 27-35, 36-44, 45-53, 54-60, 61-69, 70-78, 79+.
@@ -153,13 +160,12 @@ DYNAMIC_COST LATEJOIN_REVOLUTION 20
DYNAMIC_REQUIREMENTS TRAITOR 50 50 50 50 50 50 50 50 50 50
DYNAMIC_REQUIREMENTS TRAITORBRO 101 101 101 101 101 101 101 101 101 101
DYNAMIC_REQUIREMENTS CHANGELING 101 101 101 101 101 101 101 101 101 101
-DYNAMIC_REQUIREMENTS WIZARD 101 101 101 60 50 50 50 50 50 50
+DYNAMIC_REQUIREMENTS WIZARD 101 101 60 60 50 50 50 50 50 50
DYNAMIC_REQUIREMENTS CULT 101 101 101 60 50 50 50 50 50 50
DYNAMIC_REQUIREMENTS NUCLEAR 101 101 101 60 50 50 50 50 50 50
DYNAMIC_REQUIREMENTS REVOLUTION 101 101 101 60 50 50 50 50 50 50
-# All below are impossible-by-default
DYNAMIC_REQUIREMENTS EXTENDED 101 101 101 101 101 101 101 101 101 101
-DYNAMIC_REQUIREMENTS CLOCKWORK_CULT 101 101 101 80 70 60 50 50 50 50
+DYNAMIC_REQUIREMENTS CLOCKWORK_CULT 101 101 101 70 60 60 50 50 50 50
DYNAMIC_REQUIREMENTS CLOWNOPS 101 101 101 101 101 101 101 101 101 101
DYNAMIC_REQUIREMENTS DEVIL 101 101 101 101 101 101 101 101 101 101
DYNAMIC_REQUIREMENTS MONKEY 101 101 101 101 101 101 101 101 101 101
@@ -168,24 +174,22 @@ DYNAMIC_REQUIREMENTS METEOR 101 101 101 101 101 101 101 101 101 101
## Midround antags
DYNAMIC_REQUIREMENTS MIDROUND_TRAITOR 30 25 20 15 15 15 15 15 15 15
DYNAMIC_REQUIREMENTS MIDROUND_MALF_AI 101 101 70 50 50 50 40 30 30 30
-DYNAMIC_REQUIREMENTS MIDROUND_WIZARD 90 90 70 50 50 50 50 40 30 30
+DYNAMIC_REQUIREMENTS MIDROUND_WIZARD 90 90 60 40 30 30 30 30 30 30
DYNAMIC_REQUIREMENTS MIDROUND_NUCLEAR 90 90 90 80 70 60 50 40 40 40
DYNAMIC_REQUIREMENTS BLOB 101 101 101 80 60 50 50 50 50 50
DYNAMIC_REQUIREMENTS XENOS 101 101 101 70 50 50 50 50 50 50
DYNAMIC_REQUIREMENTS NIGHTMARE 101 101 101 70 50 40 20 15 15 15
DYNAMIC_REQUIREMENTS SENTIENT_DISEASE 30 30 20 20 15 10 10 10 10 5
DYNAMIC_REQUIREMENTS REVENANT 30 30 30 30 20 15 15 15 15 15
-DYNAMIC_REQUIREMENTS SLAUGHTER_DEMON 101 101 101 90 80 70 60 50 40 30
+DYNAMIC_REQUIREMENTS SLAUGHTER_DEMON 101 101 101 90 80 70 60 50 50 50
DYNAMIC_REQUIREMENTS ABDUCTORS 80 80 70 50 40 30 30 20 15 15
DYNAMIC_REQUIREMENTS SPACE_NINJA 101 101 101 90 80 70 60 50 40 30
+
+## Events
DYNAMIC_REQUIREMENTS SPIDERS 70 60 50 50 40 40 40 30 20 15
-DYNAMIC_REQUIREMENTS VENTCLOG_NORMAL 5 5 5 5 5 5 5 5 5 5
-DYNAMIC_REQUIREMENTS VENTCLOG_THREATENING 15 15 15 15 15 15 15 15 15 15
-DYNAMIC_REQUIREMENTS VENTCLOG_CATASTROPHIC 30 30 30 30 30 30 30 30 30 30
+DYNAMIC_REQUIREMENTS VENTCLOG 5 5 5 5 5 5 5 5 5 5
DYNAMIC_REQUIREMENTS ION_STORM 5 5 5 5 5 5 5 5 5 5
-DYNAMIC_REQUIREMENTS METEOR_WAVE_NORMAL 60 50 40 30 30 30 30 30 30 30
-DYNAMIC_REQUIREMENTS METEOR_WAVE_THREATENING 80 70 60 50 40 40 40 40 40 40
-DYNAMIC_REQUIREMENTS METEOR_WAVE_CATASTROPHIC 101 100 90 80 70 60 50 50 50 50
+DYNAMIC_REQUIREMENTS METEOR_WAVE 60 50 40 30 30 30 30 30 30 30
DYNAMIC_REQUIREMENTS PIRATES 70 60 50 50 40 40 40 30 20 15
DYNAMIC_REQUIREMENTS ANOMALY_BLUESPACE 5 5 5 5 5 5 5 5 5 5
DYNAMIC_REQUIREMENTS ANOMALY_FLUX 5 5 5 5 5 5 5 5 5 5
@@ -205,6 +209,7 @@ DYNAMIC_REQUIREMENTS RADIATION_STORM 5 5 5 5 5 5 5 5 5 5
## Latejoin antags
DYNAMIC_REQUIREMENTS LATEJOIN_TRAITOR 40 30 20 15 15 15 15 15 15 15
DYNAMIC_REQUIREMENTS LATEJOIN_REVOLUTION 101 101 70 40 40 40 40 40 40 40
+DYNAMIC_REQUIREMENTS LATEJOIN_BLOODSUCKER 40 30 20 15 15 15 15 15 15 15
## An alternative, static requirement used instead when pop is over mode's high_pop_limit.
DYNAMIC_HIGH_POPULATION_REQUIREMENT TRAITOR 50
@@ -236,14 +241,12 @@ DYNAMIC_HIGH_POPULATION_REQUIREMENT REVENANT 15
DYNAMIC_HIGH_POPULATION_REQUIREMENT SLAUGHTER_DEMON 30
DYNAMIC_HIGH_POPULATION_REQUIREMENT ABDUCTORS 15
DYNAMIC_HIGH_POPULATION_REQUIREMENT SPACE_NINJA 30
+
+## Events
DYNAMIC_HIGH_POPULATION_REQUIREMENT SPIDERS 15
-DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG_NORMAL 5
-DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG_THREATENING 15
-DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG_CATASTROPHIC 30
+DYNAMIC_HIGH_POPULATION_REQUIREMENT VENTCLOG 5
DYNAMIC_HIGH_POPULATION_REQUIREMENT ION_STORM 5
-DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE_NORMAL 30
-DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE_THREATENING 40
-DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE_CATASTROPHIC 50
+DYNAMIC_HIGH_POPULATION_REQUIREMENT METEOR_WAVE 30
DYNAMIC_HIGH_POPULATION_REQUIREMENT PIRATES 15
DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_BLUESPACE 5
DYNAMIC_HIGH_POPULATION_REQUIREMENT ANOMALY_FLUX 5
@@ -263,6 +266,7 @@ DYNAMIC_HIGH_POPULATION_REQUIREMENT RADIATION_STORM 5
## Latejoin antags
DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_TRAITOR 15
DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_REVOLUTION 50
+DYNAMIC_HIGH_POPULATION_REQUIREMENT LATEJOIN_BLOODSUCKER 15
## Dynamic traitor stuff
diff --git a/config/game_options.txt b/config/game_options.txt
index a44c68226e..34c8ca48fd 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -92,6 +92,7 @@ PROBABILITY SECRET_EXTENDED 0
PROBABILITY DEVIL 0
PROBABILITY DEVIL_AGENTS 0
PROBABILITY CLOWNOPS 0
+PROBABILITY BLOODSUCKER 0
## You probably want to keep sandbox off by default for secret and random.
PROBABILITY SANDBOX 0
@@ -114,6 +115,7 @@ CONTINUOUS CLOCKWORK_CULT
CONTINUOUS CHANGELING
CONTINUOUS WIZARD
#CONTINUOUS MONKEY
+CONTINUOUS BLOODSUCKER
##Note: do not toggle continuous off for these modes, as they have no antagonists and would thus end immediately!
@@ -572,3 +574,8 @@ MONKEYCAP 64
#Replaces standard extended/secret dichotomy with extended and calm/chaotic votes for dynamic.
DYNAMIC_VOTING
+
+## Choose which Engine to start the round with, comment to remove an Engine from the rotation
+BOX_RANDOM_ENGINE Engine SM
+BOX_RANDOM_ENGINE Engine Tesla
+BOX_RANDOM_ENGINE Engine Singulo
\ No newline at end of file
diff --git a/dependencies.sh b/dependencies.sh
index a75940088f..0f66dcab1a 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -18,3 +18,9 @@ export BSQL_VERSION=v1.4.0.0
#node version
export NODE_VERSION=8
+
+# PHP version
+export PHP_VERSION=5.6
+
+# SpacemanDMM git tag
+export SPACEMAN_DMM_VERSION=suite-1.0
diff --git a/html/changelogs/AutoChangeLog-pr-10011.yml b/html/changelogs/AutoChangeLog-pr-10011.yml
new file mode 100644
index 0000000000..70d569699f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10011.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - rscadd: "Adds Bloodsuckers, beware."
diff --git a/html/changelogs/AutoChangeLog-pr-10026.yml b/html/changelogs/AutoChangeLog-pr-10026.yml
new file mode 100644
index 0000000000..6e8062874b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10026.yml
@@ -0,0 +1,4 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - rscadd: "neck slice. harm intent someone's head while they are unconscious or in a neck grab to make them bleed uncontrollably."
diff --git a/html/changelogs/AutoChangeLog-pr-10050.yml b/html/changelogs/AutoChangeLog-pr-10050.yml
new file mode 100644
index 0000000000..c736ded339
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10050.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "You shouldn't be able to target objects you can't see (excluding darkness) with the ARCD and RLD"
+ - tweak: "The admin RCD is ranged too, just like the ARCD."
diff --git a/html/changelogs/AutoChangeLog-pr-10051.yml b/html/changelogs/AutoChangeLog-pr-10051.yml
new file mode 100644
index 0000000000..0d7d274891
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10051.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - balance: "legion drops more crates now"
diff --git a/html/changelogs/AutoChangeLog-pr-10054.yml b/html/changelogs/AutoChangeLog-pr-10054.yml
new file mode 100644
index 0000000000..0dc3b36618
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10054.yml
@@ -0,0 +1,5 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - balance: ".357 speedloaders in autolathes are now individual bullets instead, speedloaders are now illegal tech, costs less total metal to make 7 bullets than a previous speedloader. 7.62mm bullets in autolathe when hacked and costs more metal to make 5 7.62mm bullets than getting a clip from the seclathe."
+ - tweak: "mentions that you can refill speedloaders on .357 uplink description"
diff --git a/html/changelogs/AutoChangeLog-pr-10058.yml b/html/changelogs/AutoChangeLog-pr-10058.yml
new file mode 100644
index 0000000000..6f9a985765
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10058.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - balance: "Spinfusor nerf: Upped the casing and ammo box size by one step, removed the projectile's dismemberment value (explosions can still rip a limb or two off), halved the ammo box capacity, reduced the spinfusor ammo supply pack contents from 32 to 8, removed the casing's ability to explode when thrown."
diff --git a/html/changelogs/AutoChangeLog-pr-10059.yml b/html/changelogs/AutoChangeLog-pr-10059.yml
new file mode 100644
index 0000000000..e9f89c18a2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10059.yml
@@ -0,0 +1,4 @@
+author: "lolman360"
+delete-after: True
+changes:
+ - rscadd: "Added ability to pick up certain simplemobs."
diff --git a/html/changelogs/AutoChangeLog-pr-10067.yml b/html/changelogs/AutoChangeLog-pr-10067.yml
new file mode 100644
index 0000000000..ac65487761
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10067.yml
@@ -0,0 +1,5 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - rscadd: "Clicking a pack of seeds with a pen allows you to set the plant's name, description and the pack of seeds' description. Useful for differentiating genetically modified plants. These changes will persist through different generations of the plant."
+ - rscadd: "Hydroponics trays update their name and description to reflect the plant inside them. They revert to default when emptied."
diff --git a/html/changelogs/AutoChangeLog-pr-10072.yml b/html/changelogs/AutoChangeLog-pr-10072.yml
new file mode 100644
index 0000000000..9a6f45e61e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10072.yml
@@ -0,0 +1,5 @@
+author: "Useroth"
+delete-after: True
+changes:
+ - rscadd: "bamboo which can be used to build punji sticks/ blowguns available as a sugarcane mutation or in exotic seed crate"
+ - tweak: "changed the sugar cane growth stages because fuck if I know why, but it was in the PR"
diff --git a/html/changelogs/AutoChangeLog-pr-10076.yml b/html/changelogs/AutoChangeLog-pr-10076.yml
new file mode 100644
index 0000000000..0e04ceddbc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10076.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed alien tech node not being unlockable with subtypes of the accepted items."
diff --git a/html/changelogs/AutoChangeLog-pr-10079.yml b/html/changelogs/AutoChangeLog-pr-10079.yml
new file mode 100644
index 0000000000..a729b1bc56
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10079.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed reactive armor onmob overlays not updating when toggled and reactive teleport armor still using forceMove() instead of do_teleport()"
diff --git a/html/changelogs/AutoChangeLog-pr-10090.yml b/html/changelogs/AutoChangeLog-pr-10090.yml
new file mode 100644
index 0000000000..924d83b65e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10090.yml
@@ -0,0 +1,6 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscadd: "Regenerative nanites, a \"chemical\" used in the combat stimulant injector. Actually quite stimulating, and not bad in a pinch for a nuclear operative. Check the Combat Medic Kit!"
+ - tweak: "The Combat Medic Kit now has an advanced health analyzer and medisprays instead of patches and a chloral syringe."
+ - balance: "The Advanced Syndicate Surgery Duffelbag or whatever it was doesn't get the better injector, because nobody uses it and so nobody's bothered to update it."
diff --git a/html/changelogs/AutoChangeLog-pr-10091.yml b/html/changelogs/AutoChangeLog-pr-10091.yml
new file mode 100644
index 0000000000..8787d9bdba
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10091.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - soundadd: "Blue, Amber and Red security alert sounds should be half as loud now."
diff --git a/html/changelogs/AutoChangeLog-pr-10093.yml b/html/changelogs/AutoChangeLog-pr-10093.yml
new file mode 100644
index 0000000000..e692ed5d2a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10093.yml
@@ -0,0 +1,15 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "ports all the new donuts, burgars, and chicken stuff from RG"
+ - rscadd: "ports new snowcone"
+ - rscadd: "ports grill"
+ - rscadd: "ports beakfeast tag/mood lit as TG has it"
+ - rscadd: "ports all the amazing new sprites"
+ - tweak: "ports crafting for many things like snowcones needing water"
+ - balance: "ports of many craftings"
+ - soundadd: "lowers fryers sound"
+ - imageadd: "ported icons for new food/grill"
+ - imagedel: "ports the deletion of some icons and images"
+ - spellcheck: "ports a spell check for the snowcones"
+ - code_imp: "ports fixes for stuff I didnt know were even broken with snowcones"
diff --git a/html/changelogs/AutoChangeLog-pr-10096.yml b/html/changelogs/AutoChangeLog-pr-10096.yml
new file mode 100644
index 0000000000..0089c11a9d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10096.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "nanites no longer spread through air blocking objects"
diff --git a/html/changelogs/AutoChangeLog-pr-10111.yml b/html/changelogs/AutoChangeLog-pr-10111.yml
new file mode 100644
index 0000000000..0a80f01eef
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10111.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - bugfix: "you can now strip people while aggrograbbing or higher"
diff --git a/html/changelogs/AutoChangeLog-pr-10115.yml b/html/changelogs/AutoChangeLog-pr-10115.yml
new file mode 100644
index 0000000000..f7a60e4911
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10115.yml
@@ -0,0 +1,5 @@
+author: "Useroth"
+delete-after: True
+changes:
+ - rscadd: "New lavaland ruin: Pulsating tumor"
+ - rscadd: "New class of lavaland mobs, a bit weaker than megafauna but still stronger than most of what you normally see"
diff --git a/html/changelogs/AutoChangeLog-pr-10120.yml b/html/changelogs/AutoChangeLog-pr-10120.yml
new file mode 100644
index 0000000000..5777519d83
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10120.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "Night vision readded as a darkness dampening effect rather than darksight."
diff --git a/html/changelogs/AutoChangeLog-pr-10122.yml b/html/changelogs/AutoChangeLog-pr-10122.yml
new file mode 100644
index 0000000000..4d503dc2be
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10122.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscdel: "conveyors can only stack items on tiles to 150 now."
diff --git a/html/changelogs/AutoChangeLog-pr-10126.yml b/html/changelogs/AutoChangeLog-pr-10126.yml
new file mode 100644
index 0000000000..6cf568ca70
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10126.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - balance: "Buffed HE pipes by making them realistically radiate away heat."
diff --git a/html/changelogs/AutoChangeLog-pr-10128.yml b/html/changelogs/AutoChangeLog-pr-10128.yml
new file mode 100644
index 0000000000..89bca26a76
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10128.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "the clowns headset"
diff --git a/html/changelogs/AutoChangeLog-pr-10141.yml b/html/changelogs/AutoChangeLog-pr-10141.yml
new file mode 100644
index 0000000000..5f0bfe2267
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10141.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - admin: "A whole bunch of dynamic data is now available for statbus"
diff --git a/html/changelogs/AutoChangeLog-pr-10142.yml b/html/changelogs/AutoChangeLog-pr-10142.yml
new file mode 100644
index 0000000000..aba2675550
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10142.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "CE hardsuit is now more rad-proof"
diff --git a/html/changelogs/AutoChangeLog-pr-10144.yml b/html/changelogs/AutoChangeLog-pr-10144.yml
new file mode 100644
index 0000000000..6b175b149b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10144.yml
@@ -0,0 +1,4 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - bugfix: "officer's sabre now properly makes the unsheating and resheating noise"
diff --git a/html/changelogs/AutoChangeLog-pr-10150.yml b/html/changelogs/AutoChangeLog-pr-10150.yml
new file mode 100644
index 0000000000..d2a2b79ff0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10150.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "Wrong icon names, missing dog fashion with telegram hat"
diff --git a/html/changelogs/AutoChangeLog-pr-10153.yml b/html/changelogs/AutoChangeLog-pr-10153.yml
new file mode 100644
index 0000000000..7196583de9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10153.yml
@@ -0,0 +1,4 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - bugfix: "fireman failure has a different message depending on the circumstance"
diff --git a/html/changelogs/AutoChangeLog-pr-10155.yml b/html/changelogs/AutoChangeLog-pr-10155.yml
new file mode 100644
index 0000000000..d82ea5ed43
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10155.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - bugfix: "distance checks"
diff --git a/html/changelogs/AutoChangeLog-pr-10157.yml b/html/changelogs/AutoChangeLog-pr-10157.yml
new file mode 100644
index 0000000000..6ec495b7fc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10157.yml
@@ -0,0 +1,5 @@
+author: "ShizCalev"
+delete-after: True
+changes:
+ - bugfix: "Fixed floodlights not turning off properly when they're underpowered."
+ - bugfix: "Fixed emitters not changing icons properly when they're underpowered."
diff --git a/html/changelogs/AutoChangeLog-pr-10160.yml b/html/changelogs/AutoChangeLog-pr-10160.yml
new file mode 100644
index 0000000000..2046324dc8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10160.yml
@@ -0,0 +1,6 @@
+author: "nicbn, Kevinz000, ShizCalev"
+delete-after: True
+changes:
+ - tweak: "Fire alarm is now simpler. Touch it to activate, touch it to deactivate. When activated, it will blink inconsistently if it is emagged."
+ - bugfix: "You can no longer spam fire alarms. Also, they're logged again."
+ - bugfix: "Fixed fire alarms not updating icons properly after being emagged and hacked by Malf AI's."
diff --git a/html/changelogs/AutoChangeLog-pr-10163.yml b/html/changelogs/AutoChangeLog-pr-10163.yml
new file mode 100644
index 0000000000..2818019ad7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10163.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - tweak: "Blood bank generators can now be anchored and unanchored now."
diff --git a/html/changelogs/AutoChangeLog-pr-10164.yml b/html/changelogs/AutoChangeLog-pr-10164.yml
new file mode 100644
index 0000000000..464edda73b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10164.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - rscadd: "martial apprentices for the local Chinese wizard"
diff --git a/html/changelogs/AutoChangeLog-pr-10166.yml b/html/changelogs/AutoChangeLog-pr-10166.yml
new file mode 100644
index 0000000000..ba919010af
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10166.yml
@@ -0,0 +1,4 @@
+author: "nemvar"
+delete-after: True
+changes:
+ - bugfix: "The brains of roundstart borgs no longer decay."
diff --git a/html/changelogs/AutoChangeLog-pr-10171.yml b/html/changelogs/AutoChangeLog-pr-10171.yml
new file mode 100644
index 0000000000..0138d7a381
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10171.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - rscdel: "Removed a AM Shielding from the crate"
diff --git a/html/changelogs/AutoChangeLog-pr-10172.yml b/html/changelogs/AutoChangeLog-pr-10172.yml
new file mode 100644
index 0000000000..ce76e04d13
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10172.yml
@@ -0,0 +1,11 @@
+author: "Mickyan, nemvar, RaveRadbury, AnturK, SpaceManiac"
+delete-after: True
+changes:
+ - bugfix: "Certain incompatible quirks can no longer be taken together."
+ - bugfix: "If an admin sends a ghost back to the lobby, they can now choose a different set of quirks."
+ - spellcheck: "the quirk menu went through some minor formatting changes."
+ - bugfix: "Podcloning now lets you keep your quirks."
+ - rscadd: "Quirks have flavor text in medical records."
+ - spellcheck: "All quirk medical records refer to \"Patient\", removing a few instances of \"Subject\"."
+ - tweak: "Quirks no longer apply to off-station roundstart antagonists."
+ - code_imp: "Mood quirks are now only processed by the quirk holders"
diff --git a/html/changelogs/AutoChangeLog-pr-10180.yml b/html/changelogs/AutoChangeLog-pr-10180.yml
new file mode 100644
index 0000000000..0a22910940
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10180.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes a ghostchat eavesdropping exploit concerning VR."
+ - bugfix: "Fixes VR deaths being broadcasted in deadchat."
diff --git a/html/changelogs/AutoChangeLog-pr-10181.yml b/html/changelogs/AutoChangeLog-pr-10181.yml
new file mode 100644
index 0000000000..bb00ab1012
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10181.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed a few pill bottle issues with the ChemMaster."
diff --git a/html/changelogs/AutoChangeLog-pr-10190.yml b/html/changelogs/AutoChangeLog-pr-10190.yml
new file mode 100644
index 0000000000..d05ad85db3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10190.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "New softdrink that comes in its own vender!"
+ - rscadd: "Honey now has a reaction with plants"
diff --git a/html/changelogs/AutoChangeLog-pr-10193.yml b/html/changelogs/AutoChangeLog-pr-10193.yml
new file mode 100644
index 0000000000..b432eb74a3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10193.yml
@@ -0,0 +1,4 @@
+author: "Commandersand"
+delete-after: True
+changes:
+ - tweak: "added two words to clown filter"
diff --git a/html/changelogs/AutoChangeLog-pr-10195.yml b/html/changelogs/AutoChangeLog-pr-10195.yml
new file mode 100644
index 0000000000..be8ed0ce76
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10195.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes a few negative quirks not being properly removed when deleted."
+ - tweak: "Phobia and mute quirks are no longer cheesed by brain surgery grade healing or medicines."
diff --git a/html/changelogs/AutoChangeLog-pr-10197.yml b/html/changelogs/AutoChangeLog-pr-10197.yml
new file mode 100644
index 0000000000..05545c066c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10197.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed double-flavour (and bland custom) ice creams."
diff --git a/html/changelogs/AutoChangeLog-pr-10198.yml b/html/changelogs/AutoChangeLog-pr-10198.yml
new file mode 100644
index 0000000000..3414258d84
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10198.yml
@@ -0,0 +1,4 @@
+author: "AnturK"
+delete-after: True
+changes:
+ - bugfix: "Fixed ranged syndicate mobs stormtrooper training."
diff --git a/html/changelogs/AutoChangeLog-pr-10200.yml b/html/changelogs/AutoChangeLog-pr-10200.yml
new file mode 100644
index 0000000000..8d4782ee98
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10200.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "added 8 character save slots"
diff --git a/html/changelogs/AutoChangeLog-pr-10203.yml b/html/changelogs/AutoChangeLog-pr-10203.yml
new file mode 100644
index 0000000000..7cb4df817b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10203.yml
@@ -0,0 +1,5 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - tweak: "changed mecha internals access for some special mechs."
+ - tweak: "no more mech maintenance access for engineers."
diff --git a/html/changelogs/AutoChangeLog-pr-10204.yml b/html/changelogs/AutoChangeLog-pr-10204.yml
new file mode 100644
index 0000000000..ad5a872bc0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10204.yml
@@ -0,0 +1,5 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - rscadd: "Added Handshakes"
+ - rscadd: "Added Nose booping"
diff --git a/html/changelogs/AutoChangeLog-pr-10207.yml b/html/changelogs/AutoChangeLog-pr-10207.yml
new file mode 100644
index 0000000000..c451475dfa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10207.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed Pubbystation's wall Nanomeds being inconsistent with other stations'."
diff --git a/html/changelogs/AutoChangeLog-pr-10210.yml b/html/changelogs/AutoChangeLog-pr-10210.yml
new file mode 100644
index 0000000000..39167dee25
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10210.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "Cargo shuttle now silently ignores slaughter demons/revenants instead of being blocked even while they are jaunted. A drawback is that manifested ones can't block it either, any more."
diff --git a/html/changelogs/AutoChangeLog-pr-10214.yml b/html/changelogs/AutoChangeLog-pr-10214.yml
new file mode 100644
index 0000000000..fe5df9f22c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10214.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "dextrous simplemobs can now swap action intent with 1, 2, 3, 4 now. Just like humies, ayys and monkys."
diff --git a/html/changelogs/AutoChangeLog-pr-10216.yml b/html/changelogs/AutoChangeLog-pr-10216.yml
new file mode 100644
index 0000000000..69daa62448
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10216.yml
@@ -0,0 +1,8 @@
+author: "Nervere and subject217, Militaires, py01, nemvar"
+delete-after: True
+changes:
+ - balance: "The cook's CQC now only works when in the kitchen or the kitchen backroom."
+ - spellcheck: "corrected CQC help instructions"
+ - bugfix: "CQC and Sleeping Carp are properly logged."
+ - tweak: "CQC can passively grab targets when not on grab intent. Passive grabs do not count towards combos for CQC or Sleeping carp."
+ - code_imp: "Martial Art and NOGUN cleanup."
diff --git a/html/changelogs/AutoChangeLog-pr-10217.yml b/html/changelogs/AutoChangeLog-pr-10217.yml
new file mode 100644
index 0000000000..19ddaf33ce
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10217.yml
@@ -0,0 +1,4 @@
+author: "Putnam"
+delete-after: True
+changes:
+ - balance: "Contamination is no longer an infinitely spreading deadly contagion causing mass panic"
diff --git a/html/changelogs/AutoChangeLog-pr-10218.yml b/html/changelogs/AutoChangeLog-pr-10218.yml
new file mode 100644
index 0000000000..fb05465cbe
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10218.yml
@@ -0,0 +1,4 @@
+author: "GrayRachnid"
+delete-after: True
+changes:
+ - bugfix: "fixes consistency"
diff --git a/html/changelogs/AutoChangeLog-pr-10225.yml b/html/changelogs/AutoChangeLog-pr-10225.yml
new file mode 100644
index 0000000000..964cc68223
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10225.yml
@@ -0,0 +1,5 @@
+author: "BlueWildrose"
+delete-after: True
+changes:
+ - bugfix: "Fixed stargazers being unable to link to themselves if mindshielded or if holding psionic shielding devices (tinfoil hats) when the species is set."
+ - bugfix: "Fixes non-roundstart slimes being unable to wag their tail."
diff --git a/html/changelogs/AutoChangeLog-pr-10227.yml b/html/changelogs/AutoChangeLog-pr-10227.yml
new file mode 100644
index 0000000000..5d9446d045
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10227.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "whoops broke quirks"
diff --git a/html/changelogs/AutoChangeLog-pr-10228.yml b/html/changelogs/AutoChangeLog-pr-10228.yml
new file mode 100644
index 0000000000..ccc386bbcb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10228.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "quirks work"
diff --git a/html/changelogs/AutoChangeLog-pr-10231.yml b/html/changelogs/AutoChangeLog-pr-10231.yml
new file mode 100644
index 0000000000..7caf65b09f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10231.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - bugfix: "the sprites"
diff --git a/html/changelogs/AutoChangeLog-pr-10232.yml b/html/changelogs/AutoChangeLog-pr-10232.yml
new file mode 100644
index 0000000000..479012a868
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10232.yml
@@ -0,0 +1,4 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - tweak: "All heads of staff can now message CC"
diff --git a/html/changelogs/AutoChangeLog-pr-10235.yml b/html/changelogs/AutoChangeLog-pr-10235.yml
new file mode 100644
index 0000000000..ca8e4da164
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10235.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "flashbangs process light/sound separately and uses viewers(), so xray users beware."
diff --git a/html/changelogs/AutoChangeLog-pr-10237.yml b/html/changelogs/AutoChangeLog-pr-10237.yml
new file mode 100644
index 0000000000..0a3b481d8c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10237.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Stops humanoids whose skin_tone variable is set to \"albino\" from showing up as pale when examined should their species not use skintones anyway."
diff --git a/html/changelogs/AutoChangeLog-pr-10242.yml b/html/changelogs/AutoChangeLog-pr-10242.yml
new file mode 100644
index 0000000000..017c3f99bd
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10242.yml
@@ -0,0 +1,4 @@
+author: "nemvar"
+delete-after: True
+changes:
+ - code_imp: "Refactored the visibility of reagents for mobs."
diff --git a/html/changelogs/AutoChangeLog-pr-10245.yml b/html/changelogs/AutoChangeLog-pr-10245.yml
new file mode 100644
index 0000000000..a618bfc76b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10245.yml
@@ -0,0 +1,5 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - rscadd: "Added submaps for the SM, Tesla and Singulo"
+ - rscadd: "Added a placeholder on Boxstation for the Engines"
diff --git a/html/changelogs/AutoChangeLog-pr-10246.yml b/html/changelogs/AutoChangeLog-pr-10246.yml
new file mode 100644
index 0000000000..73b2b24ee8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10246.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - tweak: "Stat() slowed down for anti-lag measures."
diff --git a/html/changelogs/AutoChangeLog-pr-10250.yml b/html/changelogs/AutoChangeLog-pr-10250.yml
new file mode 100644
index 0000000000..8e32083f09
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10250.yml
@@ -0,0 +1,4 @@
+author: "Toriate"
+delete-after: True
+changes:
+ - rscadd: "Polychromic shorts now have a digitigrade state"
diff --git a/html/changelogs/AutoChangeLog-pr-10254.yml b/html/changelogs/AutoChangeLog-pr-10254.yml
new file mode 100644
index 0000000000..59fefc5703
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10254.yml
@@ -0,0 +1,4 @@
+author: "r4d6"
+delete-after: True
+changes:
+ - bugfix: "fixed Nose boops not triggering"
diff --git a/html/changelogs/AutoChangeLog-pr-10257.yml b/html/changelogs/AutoChangeLog-pr-10257.yml
new file mode 100644
index 0000000000..d18807c1eb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10257.yml
@@ -0,0 +1,4 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - code_imp: "Removes a magicnumber"
diff --git a/html/changelogs/AutoChangeLog-pr-10263.yml b/html/changelogs/AutoChangeLog-pr-10263.yml
new file mode 100644
index 0000000000..a8fa2b9e26
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10263.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "Buzz fuzz now only has a 5% to give honey and will now give 1u of sugar not 2"
diff --git a/html/changelogs/AutoChangeLog-pr-10264.yml b/html/changelogs/AutoChangeLog-pr-10264.yml
new file mode 100644
index 0000000000..71497e423b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10264.yml
@@ -0,0 +1,5 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "added the runed and brass winter coats (cosmetic ratvarian/narsian)"
+ - tweak: "how the narsian/ratvarian coats can be made"
diff --git a/html/changelogs/AutoChangeLog-pr-10265.yml b/html/changelogs/AutoChangeLog-pr-10265.yml
new file mode 100644
index 0000000000..f42e97388d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10265.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Blaster shotguns back into armory"
diff --git a/html/changelogs/AutoChangeLog-pr-10266.yml b/html/changelogs/AutoChangeLog-pr-10266.yml
new file mode 100644
index 0000000000..7fc7f11682
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10266.yml
@@ -0,0 +1,5 @@
+author: "shellspeed1"
+delete-after: True
+changes:
+ - rscadd: "Adds Insect markings"
+ - rscadd: "Adds three new moth wings."
diff --git a/html/changelogs/AutoChangeLog-pr-10268.yml b/html/changelogs/AutoChangeLog-pr-10268.yml
new file mode 100644
index 0000000000..f4f4991202
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10268.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - rscdel: "Removed the old (almost) unused roboticist encryption key and headset."
diff --git a/html/changelogs/AutoChangeLog-pr-10269.yml b/html/changelogs/AutoChangeLog-pr-10269.yml
new file mode 100644
index 0000000000..f38bb346e3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10269.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed goose meat."
diff --git a/html/changelogs/AutoChangeLog-pr-10274.yml b/html/changelogs/AutoChangeLog-pr-10274.yml
new file mode 100644
index 0000000000..a1b448344f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10274.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - bugfix: "broodmother baby lag"
diff --git a/html/changelogs/AutoChangeLog-pr-10281.yml b/html/changelogs/AutoChangeLog-pr-10281.yml
new file mode 100644
index 0000000000..0d6c353703
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10281.yml
@@ -0,0 +1,5 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscadd: ".357 speedloaders can now be printed with the Advanced Illegal Ballistics node on the tech tree!"
+ - balance: "okay so i may have given the .357 an extra speedloader at the same cost but it comes in a box now"
diff --git a/html/changelogs/AutoChangeLog-pr-10282.yml b/html/changelogs/AutoChangeLog-pr-10282.yml
new file mode 100644
index 0000000000..bf4f74c84a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10282.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - config: "Buncha dynamic config tweaks"
diff --git a/html/changelogs/AutoChangeLog-pr-10283.yml b/html/changelogs/AutoChangeLog-pr-10283.yml
new file mode 100644
index 0000000000..435a0c7ca9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10283.yml
@@ -0,0 +1,4 @@
+author: "Detective-Google"
+delete-after: True
+changes:
+ - bugfix: "short hair 80's is no longer jank"
diff --git a/html/changelogs/AutoChangeLog-pr-10289.yml b/html/changelogs/AutoChangeLog-pr-10289.yml
new file mode 100644
index 0000000000..4907620fdc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10289.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed a little door assembly glass dupe exploit"
diff --git a/html/changelogs/AutoChangeLog-pr-10296.yml b/html/changelogs/AutoChangeLog-pr-10296.yml
new file mode 100644
index 0000000000..22aa8cca14
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10296.yml
@@ -0,0 +1,5 @@
+author: "Useroth"
+delete-after: True
+changes:
+ - rscadd: "Ghost cafe spawner. For letting people spawn as their own character in the ninja holding facility. It bypasses the usual check, so people who have suicided/ghosted/cryod may use it."
+ - rscadd: "Dorms in the ninja holding facility."
diff --git a/html/changelogs/AutoChangeLog-pr-10297.yml b/html/changelogs/AutoChangeLog-pr-10297.yml
new file mode 100644
index 0000000000..6eccde6be7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10297.yml
@@ -0,0 +1,4 @@
+author: "Narcissisko (ported by Hatterhat)"
+delete-after: True
+changes:
+ - rscadd: "Luxury Bar Capsule, at 10,000 points. Comes with no medical supplies, a bar, and a bunch of cigars. Ported from tgstation/tgstation#45547."
diff --git a/html/changelogs/AutoChangeLog-pr-10298.yml b/html/changelogs/AutoChangeLog-pr-10298.yml
new file mode 100644
index 0000000000..981e1f5314
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10298.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - balance: "you can no longer get 100k credits by spending 4k roundstart"
diff --git a/html/changelogs/AutoChangeLog-pr-10299.yml b/html/changelogs/AutoChangeLog-pr-10299.yml
new file mode 100644
index 0000000000..ee3f0bf96b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10299.yml
@@ -0,0 +1,4 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - balance: "cooking oil in sunflowers instead of corn oil"
diff --git a/html/changelogs/AutoChangeLog-pr-10315.yml b/html/changelogs/AutoChangeLog-pr-10315.yml
new file mode 100644
index 0000000000..8db0d90e90
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10315.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscdel: "Removed Lighters in thunderdomes"
diff --git a/html/changelogs/AutoChangeLog-pr-10318.yml b/html/changelogs/AutoChangeLog-pr-10318.yml
new file mode 100644
index 0000000000..8dc58b9922
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10318.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Silicons now know what a slime is saying!"
diff --git a/html/changelogs/AutoChangeLog-pr-10322.yml b/html/changelogs/AutoChangeLog-pr-10322.yml
new file mode 100644
index 0000000000..c03fd96a5e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10322.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "sprint/stamina huds now work again"
diff --git a/html/changelogs/AutoChangeLog-pr-10328.yml b/html/changelogs/AutoChangeLog-pr-10328.yml
new file mode 100644
index 0000000000..740a07ddce
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10328.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "Ghost cafe spawns are actual ghost roles by the game's reckoning now"
diff --git a/html/changelogs/AutoChangeLog-pr-9563.yml b/html/changelogs/AutoChangeLog-pr-9563.yml
new file mode 100644
index 0000000000..47fab1530d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9563.yml
@@ -0,0 +1,4 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - tweak: "tweaked how super bases/acids work but limiting them"
diff --git a/html/changelogs/AutoChangeLog-pr-9596.yml b/html/changelogs/AutoChangeLog-pr-9596.yml
new file mode 100644
index 0000000000..3f924b85ab
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9596.yml
@@ -0,0 +1,11 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - rscadd: "Abductor chem dispenser, and added it to the abductor console."
+ - rscadd: "\"Superlingual matrix\" to the abductor console. It's the abductor's tongue. Can be used to link it to your abductor communication channel and then implanted into a test subject."
+ - rscadd: "Shrink ray and added it to the abductor console."
+ - soundadd: "Shrink ray sound effect (its the fucking mega man death sound)"
+ - rscadd: "special jumpsuit for abductors"
+ - imageadd: "abductor jumpsuit, including digi version if a digitigrade person somehow manages to get their hands on it. sprites for the shrink ray and chem dispenser."
+ - rscadd: "new glands to play with, including the all-access gland, the quantum gland, and the blood type randomiser."
+ - code_imp: "split every gland into its own file instead of all being in one file"
diff --git a/html/changelogs/AutoChangeLog-pr-9736.yml b/html/changelogs/AutoChangeLog-pr-9736.yml
new file mode 100644
index 0000000000..768474b8ef
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9736.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - code_imp: "Antag rep proc is now easier to read and supports returning a list."
diff --git a/html/changelogs/AutoChangeLog-pr-9751.yml b/html/changelogs/AutoChangeLog-pr-9751.yml
new file mode 100644
index 0000000000..a2c22468c3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9751.yml
@@ -0,0 +1,5 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "Added Rising Bass and the shifting scroll."
+ - tweak: "Changes the martial arts scroll in the uplink to \"Sleeping Carp Scroll\""
diff --git a/html/changelogs/AutoChangeLog-pr-9830.yml b/html/changelogs/AutoChangeLog-pr-9830.yml
new file mode 100644
index 0000000000..86fb9c439a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9830.yml
@@ -0,0 +1,4 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - balance: "Rebalanced cult vs cult stun effects to debuff instead of stun"
diff --git a/html/changelogs/AutoChangeLog-pr-9925.yml b/html/changelogs/AutoChangeLog-pr-9925.yml
new file mode 100644
index 0000000000..6e2f44fc7b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9925.yml
@@ -0,0 +1,4 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - tweak: "cosmic coat crafting recipe changed to coat + cosmic bedsheet"
diff --git a/html/changelogs/AutoChangeLog-pr-9940.yml b/html/changelogs/AutoChangeLog-pr-9940.yml
new file mode 100644
index 0000000000..75563c69b4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9940.yml
@@ -0,0 +1,4 @@
+author: "Putnam"
+delete-after: True
+changes:
+ - tweak: "Dynamic rulesets have lower weight if a round recently featured them (except traitor)."
diff --git a/html/changelogs/AutoChangeLog-pr-9950.yml b/html/changelogs/AutoChangeLog-pr-9950.yml
new file mode 100644
index 0000000000..6d328aa131
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9950.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - balance: "Clockwork marauders are now on a configured summon cooldown if being summoned on station. They also rapidly bleed health while in or next to space. And they glow brighter."
diff --git a/html/changelogs/AutoChangeLog-pr-9970.yml b/html/changelogs/AutoChangeLog-pr-9970.yml
new file mode 100644
index 0000000000..ebeaa326e7
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9970.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - rscdel: "Removed literally atrocious polka dotted accessories. They were even more atrocious than the yellow horrible tie."
diff --git a/html/changelogs/AutoChangeLog-pr-9971.yml b/html/changelogs/AutoChangeLog-pr-9971.yml
new file mode 100644
index 0000000000..951b9dfc81
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9971.yml
@@ -0,0 +1,8 @@
+author: "Xantholne"
+delete-after: True
+changes:
+ - rscadd: "Santa Hats to Loadout and Clothesmate"
+ - rscadd: "Christmas Wintercoats to Loadout and Clothesmate"
+ - rscadd: "Christmas male and female uniforms to loadout and Clothesmate"
+ - rscadd: "Red, Green, and Traditional Santa boots to loadout and Clothesmate"
+ - rscadd: "Christmas Socks, Red candycane socks, Green candycane socks to sock selection"
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/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_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/custom_w.dmi b/icons/mob/custom_w.dmi
index b572338fc6..a73da3aa0c 100644
Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.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/icons/mob/feet_digi.dmi b/icons/mob/feet_digi.dmi
index a8e6c49423..e0a9cd462d 100644
Binary files a/icons/mob/feet_digi.dmi and b/icons/mob/feet_digi.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index d27e02a4f2..365ed5afd9 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index d2b67f4314..8ea155256c 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 9540599364..772a263358 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.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/insect_markings.dmi b/icons/mob/insect_markings.dmi
new file mode 100644
index 0000000000..6aea140271
Binary files /dev/null and b/icons/mob/insect_markings.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/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/screen_alert.dmi b/icons/mob/screen_alert.dmi
index 30b8eb8f9a..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 61168860d8..5b84dad999 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
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 1141c4b8c9..c5981b06a3 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/mob/uniform_digi.dmi b/icons/mob/uniform_digi.dmi
index 3f1335153e..b4f3e6130b 100644
Binary files a/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 7d95805dc5..ace37b1f17 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/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 c6b261d9a2..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/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index a980fd4177..60753839d2 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi
index bbb813d7c9..d0be1113ee 100644
Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index ac898c55b2..b03a1cdeae 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi
index cd7fc1742b..b1d78fa078 100644
Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ
diff --git a/icons/obj/food/donut.dmi b/icons/obj/food/donut.dmi
new file mode 100644
index 0000000000..fb13ab5dfa
Binary files /dev/null and b/icons/obj/food/donut.dmi differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index 2ea48828d2..6b29d599cc 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/food/piecake.dmi b/icons/obj/food/piecake.dmi
index a74acb4e29..5638235217 100644
Binary files a/icons/obj/food/piecake.dmi and b/icons/obj/food/piecake.dmi differ
diff --git a/icons/obj/food/snowcones.dmi b/icons/obj/food/snowcones.dmi
index 8a06cf4e82..8f5b4f8992 100644
Binary files a/icons/obj/food/snowcones.dmi and b/icons/obj/food/snowcones.dmi differ
diff --git a/icons/obj/food/soupsalad.dmi b/icons/obj/food/soupsalad.dmi
index c6df0a2603..a6e492608f 100644
Binary files a/icons/obj/food/soupsalad.dmi and b/icons/obj/food/soupsalad.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index d23af6c9b4..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 45e73c9281..469b1e1aff 100644
Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 9d4eefc3bb..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 d8fcaa6258..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/janitor.dmi b/icons/obj/janitor.dmi
index 1e1033e38e..4886cb8441 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index e41d1fb4a1..cb67f0d6f9 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/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/projectiles.dmi b/icons/obj/projectiles.dmi
index d1c625c18e..a434994846 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.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/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/obj/vending.dmi b/icons/obj/vending.dmi
index 553336115b..143171f414 100644
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/rooms/box/engine.dmi b/icons/rooms/box/engine.dmi
new file mode 100644
index 0000000000..c7b0546db2
Binary files /dev/null and b/icons/rooms/box/engine.dmi differ
diff --git a/modular_citadel/code/_onclick/hud/screen_objects.dm b/modular_citadel/code/_onclick/hud/screen_objects.dm
index 3a0eb364cb..6ad0603c49 100644
--- a/modular_citadel/code/_onclick/hud/screen_objects.dm
+++ b/modular_citadel/code/_onclick/hud/screen_objects.dm
@@ -18,10 +18,11 @@
var/mob/living/carbon/C = usr
C.toggle_combat_mode()
-/obj/screen/combattoggle/proc/rebasetointerbay(mob/living/carbon/C)
- if(!C)
+/obj/screen/combattoggle/update_icon_state()
+ var/mob/living/carbon/user = hud?.mymob
+ if(!istype(user))
return
- if(C.combatmode)
+ if(user.combatmode)
icon_state = "combat"
else
icon_state = "combat_off"
@@ -36,10 +37,11 @@
var/mob/living/carbon/C = usr
C.toggle_vore_mode()
-/obj/screen/voretoggle/proc/rebaseintomygut(mob/living/carbon/C)
- if(!C)
+/obj/screen/voretoggle/update_icon_state()
+ var/mob/living/carbon/user = hud?.mymob
+ if(!istype(user))
return
- if(C.voremode && !C.combatmode)
+ if(user.voremode && !user.combatmode)
icon_state = "nom"
else
icon_state = "nom_off"
diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/modular_citadel/code/_onclick/hud/sprint.dm
index 290fcd368e..c1c81b6d5b 100644
--- a/modular_citadel/code/_onclick/hud/sprint.dm
+++ b/modular_citadel/code/_onclick/hud/sprint.dm
@@ -12,10 +12,11 @@
var/mob/living/carbon/human/H = usr
H.togglesprint()
-/obj/screen/sprintbutton/proc/insert_witty_toggle_joke_here(mob/living/carbon/human/H)
- if(!H)
+/obj/screen/sprintbutton/update_icon_state()
+ var/mob/living/user = hud?.mymob
+ if(!istype(user))
return
- if(H.sprinting)
+ if(user.sprinting)
icon_state = "act_sprint_on"
else
icon_state = "act_sprint"
diff --git a/modular_citadel/code/_onclick/hud/stamina.dm b/modular_citadel/code/_onclick/hud/stamina.dm
index 781b7cb25f..184e3add24 100644
--- a/modular_citadel/code/_onclick/hud/stamina.dm
+++ b/modular_citadel/code/_onclick/hud/stamina.dm
@@ -13,31 +13,16 @@
var/mob/living/L = usr
to_chat(L, "You have [L.getStaminaLoss()] stamina loss. Your stamina buffer can take [L.stambuffer] stamina loss, and will use 50% of that stamina loss when recharging. Your stamina buffer is [(L.stambuffer*(100/L.stambuffer))-(L.bufferedstam*(100/L.stambuffer))]% full. ")
-/mob/living/carbon/human/proc/staminahudamount()
- if(stat == DEAD || recoveringstam)
- return "staminacrit"
+/obj/screen/staminas/update_icon_state()
+ var/mob/living/carbon/user = hud?.mymob
+ if(!user)
+ return
+ if(user.stat == DEAD || user.recoveringstam || (user.hal_screwyhud in 1 to 2))
+ icon_state = "staminacrit"
+ else if(user.hal_screwyhud == 5)
+ icon_state = "stamina0"
else
- switch(hal_screwyhud)
- if(1 to 2)
- return "staminacrit"
- if(5)
- return "stamina0"
- else
- switch(100 - getStaminaLoss())
- if(100 to INFINITY)
- return "stamina0"
- if(80 to 100)
- return "stamina1"
- if(60 to 80)
- return "stamina2"
- if(40 to 60)
- return "stamina3"
- if(20 to 40)
- return "stamina4"
- if(0 to 20)
- return "stamina5"
- else
- return "stamina6"
+ icon_state = "stamina[CLAMP(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]"
//stam buffer
/obj/screen/staminabuffer
@@ -48,31 +33,29 @@
layer = ABOVE_HUD_LAYER + 0.1
mouse_opacity = 0
-/mob/living/carbon/human/proc/staminabufferhudamount()
- if(stat == DEAD || recoveringstam)
- return "stambuffer7"
+/obj/screen/staminabuffer/update_icon_state()
+ var/mob/living/carbon/user = hud?.mymob
+ if(!user)
+ return
+ if(user.stat == DEAD || user.recoveringstam || (user.hal_screwyhud in 1 to 2))
+ icon_state = "stambuffer7"
+ else if(user.hal_screwyhud == 5)
+ icon_state = "stambuffer0"
else
- switch(hal_screwyhud)
- if(1 to 2)
- return "stambuffer7"
- if(5)
- return "stambuffer0"
+ switch(user.bufferedstam / user.stambuffer)
+ if(0.95 to INFINITY)
+ icon_state = "stambuffer7"
+ if(0.9 to 0.95)
+ icon_state = "stambuffer6"
+ if(0.8 to 0.9)
+ icon_state = "stambuffer5"
+ if(0.6 to 0.8)
+ icon_state = "stambuffer4"
+ if(0.4 to 0.6)
+ icon_state = "stambuffer3"
+ if(0.2 to 0.4)
+ icon_state = "stambuffer2"
+ if(0.05 to 0.2)
+ icon_state = "stambuffer1"
else
- var/percentmult = 100/stambuffer
- switch(stambuffer*percentmult - bufferedstam*percentmult)
- if(95 to INFINITY)
- return "stambuffer0"
- if(90 to 95)
- return "stambuffer1"
- if(80 to 90)
- return "stambuffer2"
- if(60 to 80)
- return "stambuffer3"
- if(40 to 60)
- return "stambuffer4"
- if(20 to 40)
- return "stambuffer5"
- if(5 to 20)
- return "stambuffer6"
- else
- return "stambuffer7"
+ icon_state = "stambuffer0"
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/firealarm.dm b/modular_citadel/code/game/machinery/firealarm.dm
deleted file mode 100644
index 7c136f4e4d..0000000000
--- a/modular_citadel/code/game/machinery/firealarm.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/obj/machinery/firealarm/alt_attack_hand(mob/user)
- if(can_interact(usr))
- var/area/A = get_area(src)
- if(istype(A))
- if(A.fire)
- reset()
- else
- alarm()
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm
index 9fa6d66d98..8d70464a2d 100644
--- a/modular_citadel/code/modules/arousal/genitals.dm
+++ b/modular_citadel/code/modules/arousal/genitals.dm
@@ -132,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
diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm
index a82d02703d..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)
@@ -119,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/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index d75ffc2347..cf68666532 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -458,3 +458,33 @@ datum/gear/darksabresheath
category = SLOT_NECK
path = /obj/item/clothing/neck/necklace/onion
ckeywhitelist = list("cdrcross")
+
+/datum/gear/mikubikini
+ name = "starlight singer bikini"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/mikubikini
+ ckeywhitelist = list("grandvegeta")
+
+/datum/gear/mikujacket
+ name = "starlight singer jacket"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/mikujacket
+ ckeywhitelist = list("grandvegeta")
+
+/datum/gear/mikuhair
+ name = "starlight singer hair"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/head/mikuhair
+ ckeywhitelist = list("grandvegeta")
+
+/datum/gear/mikugloves
+ name = "starlight singer gloves"
+ category = SLOT_GLOVES
+ path = /obj/item/clothing/gloves/mikugloves
+ ckeywhitelist = list("grandvegeta")
+
+/datum/gear/mikuleggings
+ name = "starlight singer leggings"
+ category = SLOT_SHOES
+ path = /obj/item/clothing/shoes/sneakers/mikuleggings
+ ckeywhitelist = list("grandvegeta")
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/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 72387b622a..d5f2e3cbd1 100644
--- a/modular_citadel/code/modules/client/loadout/suit.dm
+++ b/modular_citadel/code/modules/client/loadout/suit.dm
@@ -69,6 +69,16 @@
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/hooded/wintercoat/aformal
+/datum/gear/coat/runed
+ name = "Runed winter coat"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/hooded/wintercoat/narsie/fake
+
+/datum/gear/coat/brass
+ name = "Brass winter coat"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake
+
/* Commented out until it is "balanced"
/datum/gear/coat/sec
name = "Security winter coat"
@@ -204,3 +214,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 232e37d921..72709069eb 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -330,6 +330,27 @@
category = SLOT_W_UNIFORM
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
diff --git a/modular_citadel/code/modules/clothing/clothing.dm b/modular_citadel/code/modules/clothing/clothing.dm
deleted file mode 100644
index 843b7a84c9..0000000000
--- a/modular_citadel/code/modules/clothing/clothing.dm
+++ /dev/null
@@ -1,91 +0,0 @@
-/* //
-// GLOBALIZED POLYCHROME FOR ALL CLOTHING //
-// //
-// NOTICE: POLYCHROME STUFF MUST USE ALTERNATE_WORN_ICON AND PLACE THEIR OVERLAYS IN BOTH THE ICON AND ALTERNATE_WORN_ICON //
-// //
-*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// COPYPASTE THE FOLLOWING PROC TO WHATEVER CATERGORY OF CLOTHING YOU WANT TO POLYCHROME
-
-// THIS IS REQUIRED DUE TO EACH CLOTHING CATEGORY HAVING A SNOWFLAKE WORN_OVERLAYS() THING
-
-// Don't forget to append the appropriate typepath! Also, refer to polychromic_clothes.dm for example implementations
-
-/*
-/obj/item/clothing/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
- . = ..()
- if(hasprimary | hassecondary | hastertiary)
- if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
- if(hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
- primary_worn.color = primary_color //colors the overlay
- . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
- if(hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
- secondary_worn.color = secondary_color
- . += secondary_worn
- if(hastertiary)
- var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
- tertiary_worn.color = tertiary_color
- . += tertiary_worn
-*/
-
-/obj/item/clothing/
- var/hasprimary = FALSE //These vars allow you to choose which overlays a clothing has
- var/hassecondary = FALSE
- var/hastertiary = FALSE
- var/primary_color = "#FFFFFF" //RGB in hexcode
- var/secondary_color = "#FFFFFF"
- var/tertiary_color = "#808080"
-
- var/force_alternate_icon = FALSE
-
-/obj/item/clothing/update_icon() // picks the colored overlays from the ICON file
- ..()
- if(hasprimary) //Checks if the overlay is enabled
- var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary") //Automagically picks overlays
- primary_overlay.color = primary_color //Colors the greyscaled overlay
- add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite.
- if(hassecondary)
- var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary")
- secondary_overlay.color = secondary_color
- add_overlay(secondary_overlay)
- if(hastertiary)
- var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary")
- tertiary_overlay.color = tertiary_color
- 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
- if("Primary Color")
- var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it.
- if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL.
- primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly
- update_icon() //updates the item icon
- user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works.
- if("Secondary Color")
- var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null
- if(secondary_color_input)
- secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1)
- update_icon()
- user.regenerate_icons()
- if("Tertiary Color")
- var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null
- if(tertiary_color_input)
- 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)
- . += "Alt-click to recolor it. "
-
-/obj/item/clothing/Initialize()
- ..()
- if(hasprimary | hassecondary | hastertiary)
- update_icon() //Applies the overlays and default colors onto the clothes on spawn.
\ 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 274a345369..3d88dae26c 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -510,3 +510,49 @@
icon_state = "onion"
item_state = "onion"
alternate_worn_icon = 'icons/mob/custom_w.dmi'
+
+/obj/item/clothing/under/mikubikini
+ name = "starlight singer bikini"
+ desc = " "
+ icon_state = "mikubikini"
+ item_state = "mikubikini"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+
+/obj/item/clothing/suit/mikujacket
+ name = "starlight singer jacket"
+ desc = " "
+ icon_state = "mikujacket"
+ item_state = "mikujacket"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+
+/obj/item/clothing/head/mikuhair
+ name = "starlight singer hair"
+ desc = " "
+ icon_state = "mikuhair"
+ item_state = "mikuhair"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+ flags_inv = HIDEHAIR
+
+/obj/item/clothing/gloves/mikugloves
+ name = "starlight singer gloves"
+ desc = " "
+ icon_state = "mikugloves"
+ item_state = "mikugloves"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+
+/obj/item/clothing/shoes/sneakers/mikuleggings
+ name = "starlight singer leggings"
+ desc = " "
+ icon_state = "mikuleggings"
+ item_state = "mikuleggings"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
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 1c6b957d9f..34ea0e789f 100644
--- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm
@@ -41,18 +41,16 @@
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)
+ var/obj/screen/combattoggle/T = locate() in hud_used?.static_inventory
+ T?.update_icon_state()
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
mob/living/carbon/proc/toggle_vore_mode()
voremode = !voremode
- if(hud_used && hud_used.static_inventory)
- for(var/obj/screen/voretoggle/selector in hud_used.static_inventory)
- selector.rebaseintomygut(src)
+ var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory
+ T?.update_icon_state()
if(combatmode)
return FALSE //let's not override the main draw of the game these days
SEND_SIGNAL(src, COMSIG_VORE_TOGGLED, src, voremode)
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 15e08907d5..0b6903c9fe 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
@@ -1,6 +1,3 @@
-/mob/living/carbon/human
- var/sprinting = FALSE
-
/mob/living/carbon/human/Move(NewLoc, direct)
var/oldpseudoheight = pseudo_z_axis
. = ..()
@@ -28,9 +25,8 @@
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
else
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
- if(hud_used && hud_used.static_inventory)
- for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
- selector.insert_witty_toggle_joke_here(src)
+ var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
+ S?.update_icon_state()
return TRUE
/mob/living/carbon/human/proc/sprint_hotkey(targetstatus)
diff --git a/modular_citadel/code/modules/mob/living/living.dm b/modular_citadel/code/modules/mob/living/living.dm
index 16bf776171..513a80cae0 100644
--- a/modular_citadel/code/modules/mob/living/living.dm
+++ b/modular_citadel/code/modules/mob/living/living.dm
@@ -1,4 +1,5 @@
/mob/living
+ var/sprinting = FALSE
var/recoveringstam = FALSE
var/incomingstammult = 1
var/bufferedstam = 0
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..3f88513372 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
@@ -1,6 +1,3 @@
-/mob/living/silicon/robot
- var/sprinting = FALSE
-
/mob/living/silicon/robot/Move(NewLoc, direct)
. = ..()
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting)
@@ -14,7 +11,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)
@@ -24,9 +21,8 @@
if(shutdown)
playsound_local(src, 'sound/effects/light_flicker.ogg', 50, FALSE, pressure_affected = FALSE)
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
- if(hud_used && hud_used.static_inventory)
- for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
- selector.insert_witty_toggle_joke_here(src)
+ var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
+ S?.update_icon_state()
return TRUE
/mob/living/silicon/robot/proc/sprint_hotkey(targetstatus)
diff --git a/modular_citadel/code/modules/mob/mob.dm b/modular_citadel/code/modules/mob/mob.dm
deleted file mode 100644
index 2d08299320..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, atom/movable/source)
- . = ..()
- if(isliving(speaker))
- var/turf/sourceturf = get_turf(source)
- var/turf/T = get_turf(src)
- if(sourceturf && T && !(sourceturf in get_hear(5, T)))
- . = "[.] "
diff --git a/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm b/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
index b039eb9b42..8cb56803b1 100644
--- a/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
+++ b/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
@@ -50,7 +50,7 @@
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-/datum/design/m45 //Kinda NT in throey
+/datum/design/m45 //Kinda NT in theory
name = "handgun magazine (.45)"
id = "m45"
build_type = PROTOLATHE
@@ -68,3 +68,13 @@
build_path = /obj/item/ammo_box/magazine/pistolm9mm
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/sl357
+ name = "revolver speedloader (.357)"
+ desc = "A revolver speedloader."
+ id = "sl357"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/ammo_box/a357
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
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/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/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/polyclothes/item/uniform.dmi b/modular_citadel/icons/polyclothes/item/uniform.dmi
deleted file mode 100644
index 87c3479a6a..0000000000
Binary files a/modular_citadel/icons/polyclothes/item/uniform.dmi and /dev/null differ
diff --git a/modular_citadel/icons/polyclothes/mob/uniform.dmi b/modular_citadel/icons/polyclothes/mob/uniform.dmi
deleted file mode 100644
index 15b5262bab..0000000000
Binary files a/modular_citadel/icons/polyclothes/mob/uniform.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/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/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/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/tgstation.dme b/tgstation.dme
index 4c7e29739f..5526e5eaf0 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -199,8 +199,8 @@
#include "code\_onclick\hud\ghost.dm"
#include "code\_onclick\hud\guardian.dm"
#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"
@@ -383,6 +383,8 @@
#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\sizzle.dm"
#include "code\datums\components\slippery.dm"
#include "code\datums\components\spooky.dm"
#include "code\datums\components\squeak.dm"
@@ -480,6 +482,7 @@
#include "code\datums\martial\mushpunch.dm"
#include "code\datums\martial\plasma_fist.dm"
#include "code\datums\martial\psychotic_brawl.dm"
+#include "code\datums\martial\rising_bass.dm"
#include "code\datums\martial\sleeping_carp.dm"
#include "code\datums\martial\wrestling.dm"
#include "code\datums\mood_events\beauty_events.dm"
@@ -498,6 +501,7 @@
#include "code\datums\mutations\telekinesis.dm"
#include "code\datums\ruins\lavaland.dm"
#include "code\datums\ruins\space.dm"
+#include "code\datums\ruins\station.dm"
#include "code\datums\status_effects\buffs.dm"
#include "code\datums\status_effects\debuffs.dm"
#include "code\datums\status_effects\gas.dm"
@@ -555,6 +559,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"
@@ -574,6 +580,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"
@@ -1197,6 +1214,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"
@@ -1214,6 +1246,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"
@@ -1604,6 +1663,7 @@
#include "code\modules\clothing\under\color.dm"
#include "code\modules\clothing\under\miscellaneous.dm"
#include "code\modules\clothing\under\pants.dm"
+#include "code\modules\clothing\under\polychromic_clothes.dm"
#include "code\modules\clothing\under\shorts.dm"
#include "code\modules\clothing\under\syndicate.dm"
#include "code\modules\clothing\under\trek.dm"
@@ -1732,6 +1792,7 @@
#include "code\modules\food_and_drinks\kitchen_machinery\deep_fryer.dm"
#include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm"
#include "code\modules\food_and_drinks\kitchen_machinery\gibber.dm"
+#include "code\modules\food_and_drinks\kitchen_machinery\grill.dm"
#include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm"
#include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm"
#include "code\modules\food_and_drinks\kitchen_machinery\monkeyrecycler.dm"
@@ -1920,6 +1981,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"
@@ -2309,6 +2371,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"
@@ -2989,21 +3056,7 @@
#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\displaycases.dm"
-#include "modular_citadel\code\game\machinery\firealarm.dm"
#include "modular_citadel\code\game\machinery\Sleeper.dm"
#include "modular_citadel\code\game\machinery\toylathe.dm"
#include "modular_citadel\code\game\machinery\vending.dm"
@@ -3058,19 +3111,16 @@
#include "modular_citadel\code\modules\client\loadout\suit.dm"
#include "modular_citadel\code\modules\client\loadout\uniform.dm"
#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\spacesuits\flightsuit.dm"
#include "modular_citadel\code\modules\clothing\suits\polychromic_cloaks.dm"
#include "modular_citadel\code\modules\clothing\suits\suits.dm"
-#include "modular_citadel\code\modules\clothing\under\polychromic_clothes.dm"
#include "modular_citadel\code\modules\clothing\under\trek_under.dm"
#include "modular_citadel\code\modules\clothing\under\turtlenecks.dm"
#include "modular_citadel\code\modules\clothing\under\under.dm"
#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"
@@ -3080,7 +3130,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.js b/tgui/assets/tgui.js
index 531f0ded4e..cc0b5d198f 100644
--- a/tgui/assets/tgui.js
+++ b/tgui/assets/tgui.js
@@ -6,16 +6,16 @@ try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t)
return t.docFrag.appendChild(e.render())}),this.renderedFragments=this.fragments.slice(),this.fragmentsToRender=[],this.rendered=!0,this.docFrag}function Ze(t){var e,n,a=this;this.updating||(this.updating=!0,this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),this.fragmentsToCreate.length?(n={template:this.template.f||[],root:this.root,pElement:this.pElement,owner:this},this.fragmentsToCreate.forEach(function(t){var e;n.context=a.keypath.join(t),n.index=t,e=new rg(n),a.fragmentsToRender.push(a.fragments[t]=e)}),this.fragmentsToCreate.length=0):en(this,t)&&(this.bubble(),this.rendered&&bs.addView(this)),this.value=t,this.updating=!1)}function tn(t,e,n){if(e===Bu&&t.indexRefs&&t.indexRefs[0]){var a=t.indexRefs[0];(n&&"i"===a.t||!n&&"k"===a.t)&&(n||(t.length=0,t.fragmentsToUnrender=t.fragments.slice(0),t.fragmentsToUnrender.forEach(function(t){return t.unbind()}))),a.t=n?"k":"i"}t.currentSubtype=e}function en(t,e){var n={template:t.template.f||[],root:t.root,pElement:t.parentFragment.pElement,owner:t};if(t.hasContext=!0,t.subtype)switch(t.subtype){case Fu:return t.hasContext=!1,sn(t,e,!1,n);case Iu:return t.hasContext=!1,sn(t,e,!0,n);case Uu:return on(t,n);case Vu:return rn(t,e,n);case Bu:if(u(e))return tn(t,t.subtype,!0),an(t,e,n)}return t.ordered=!!o(e),t.ordered?(tn(t,Bu,!1),nn(t,e,n)):u(e)||"function"==typeof e?t.template.i?(tn(t,Bu,!0),an(t,e,n)):(tn(t,Uu,!1),on(t,n)):(tn(t,Fu,!1),t.hasContext=!1,sn(t,e,!1,n))}function nn(t,e,n){var a,r,i;if(r=e.length,r===t.length)return!1;if(rt.length)for(a=t.length;r>a;a+=1)n.context=t.keypath.join(a),n.index=a,i=new rg(n),t.fragmentsToRender.push(t.fragments[a]=i);return t.length=r,!0}function an(t,e,n){var a,r,i,o,s,p;for(i=t.hasKey||(t.hasKey={}),r=t.fragments.length;r--;)o=t.fragments[r],o.key in e||(s=!0,o.unbind(),t.fragmentsToUnrender.push(o),t.fragments.splice(r,1),i[o.key]=!1);for(r=t.fragments.length;r--;)o=t.fragments[r],o.index!==r&&(o.index=r,(p=o.registeredIndexRefs)&&p.forEach(cn));r=t.fragments.length;for(a in e)i[a]||(s=!0,n.context=t.keypath.join(a),n.key=a,n.index=r++,o=new rg(n),t.fragmentsToRender.push(o),t.fragments.push(o),i[a]=!0);return t.length=t.fragments.length,s}function rn(t,e,n){return e?on(t,n):pn(t)}function on(t,e){var n;return t.length?void 0:(e.context=t.keypath,e.index=0,n=new rg(e),t.fragmentsToRender.push(t.fragments[0]=n),t.length=1,!0)}function sn(t,e,n,a){var r,i,s,p,c;if(i=o(e)&&0===e.length,s=!1,!o(e)&&u(e)){s=!0;for(c in e){s=!1;break}}return r=n?i||s||!e:e&&!i&&!s,r?t.length?t.length>1?(t.fragmentsToUnrender=t.fragments.splice(1),t.fragmentsToUnrender.forEach(K),!0):void 0:(a.index=0,p=new rg(a),t.fragmentsToRender.push(t.fragments[0]=p),t.length=1,!0):pn(t)}function pn(t){return t.length?(t.fragmentsToUnrender=t.fragments.splice(0,t.fragments.length).filter(un),t.fragmentsToUnrender.forEach(K),t.length=t.fragmentsToRender.length=0,!0):void 0}function un(t){return t.rendered}function cn(t){t.rebind("","")}function ln(t){var e,n,a;for(e="",n=0,a=this.length,n=0;a>n;n+=1)e+=this.fragments[n].toString(t);return e}function dn(){var t=this;this.fragments.forEach(K),this.fragmentsToRender.forEach(function(e){return N(t.fragments,e)}),this.fragmentsToRender=[],_c.call(this),this.length=0,this.unbound=!0}function fn(t){this.fragments.forEach(t?hn:mn),this.renderedFragments=[],this.rendered=!1}function hn(t){t.unrender(!0)}function mn(t){t.unrender(!1)}function gn(){var t,e,n,a,r,i,o;for(n=this.renderedFragments;t=this.fragmentsToUnrender.pop();)t.unrender(!0),n.splice(n.indexOf(t),1);for(;t=this.fragmentsToRender.shift();)t.render();for(this.rendered&&(r=this.parentFragment.getNode()),o=this.fragments.length,i=0;o>i;i+=1)t=this.fragments[i],e=n.indexOf(t,i),e!==i?(this.docFrag.appendChild(t.detach()),-1!==e&&n.splice(e,1),n.splice(i,0,t)):this.docFrag.childNodes.length&&(a=t.firstNode(),r.insertBefore(this.docFrag,a));this.rendered&&this.docFrag.childNodes.length&&(a=this.parentFragment.findNextNode(this),r.insertBefore(this.docFrag,a)),this.renderedFragments=this.fragments.slice()}function vn(){var t,e;if(this.docFrag){for(t=this.nodes.length,e=0;t>e;e+=1)this.docFrag.appendChild(this.nodes[e]);return this.docFrag}}function bn(t){var e,n,a,r;for(n=this.nodes.length,e=0;n>e;e+=1)if(a=this.nodes[e],1===a.nodeType){if(lo(a,t))return a;if(r=a.querySelector(t))return r}return null}function yn(t,e){var n,a,r,i,o,s;for(a=this.nodes.length,n=0;a>n;n+=1)if(r=this.nodes[n],1===r.nodeType&&(lo(r,t)&&e.push(r),i=r.querySelectorAll(t)))for(o=i.length,s=0;o>s;s+=1)e.push(i[s])}function _n(){return this.rendered&&this.nodes[0]?this.nodes[0]:this.parentFragment.findNextNode(this)}function xn(t){return gl[t]||(gl[t]=co(t))}function wn(t){var e,n,a;t&&"select"===t.name&&t.binding&&(e=F(t.node.options).filter(kn),t.getAttribute("multiple")?a=e.map(function(t){return t.value}):(n=e[0])&&(a=n.value),void 0!==a&&t.binding.setValue(a),t.bubble())}function kn(t){return t.selected}function Sn(){if(this.rendered)throw Error("Attempted to render an item that was already rendered");return this.docFrag=document.createDocumentFragment(),this.nodes=vl(this.value,this.parentFragment.getNode(),this.docFrag),bl(this.pElement),this.rendered=!0,this.docFrag}function En(t){var e;(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),t!==this.value&&(this.value=t,this.parentFragment.bubble(),this.rendered&&bs.addView(this))}function Cn(){return void 0!=this.value?we(""+this.value):""}function Pn(t){this.rendered&&t&&(this.nodes.forEach(e),this.rendered=!1)}function An(){var t,e;if(this.rendered){for(;this.nodes&&this.nodes.length;)t=this.nodes.pop(),t.parentNode.removeChild(t);e=this.parentFragment.getNode(),this.nodes=vl(this.value,e,this.docFrag),e.insertBefore(this.docFrag,this.parentFragment.findNextNode(this)),bl(this.pElement)}}function On(){var t,e=this.node;return e?((t=e.parentNode)&&t.removeChild(e),e):void 0}function Tn(){return null}function Rn(){return this.node}function Mn(t){return this.attributes&&this.attributes[t]?this.attributes[t].value:void 0}function Ln(){var t=this.useProperty||!this.rendered?this.fragment.getValue():""+this.fragment;s(t,this.value)||("id"===this.name&&this.value&&delete this.root.nodes[this.value],this.value=t,"value"===this.name&&this.node&&(this.node._ractive.value=t),this.rendered&&bs.addView(this))}function jn(t){var e=t.fragment.items;if(1===e.length)return e[0].type===Su?e[0]:void 0}function Dn(t){return this.type=Tu,this.element=t.element,this.root=t.root,zl(this,t.name),this.isBoolean=rc.test(this.name),t.value&&"string"!=typeof t.value?(this.parentFragment=this.element.parentFragment,this.fragment=new rg({template:t.value,root:this.root,owner:this}),this.value=this.fragment.getValue(),this.interpolator=Wl(this),this.isBindable=!!this.interpolator&&!this.interpolator.isStatic,void(this.ready=!0)):void(this.value=this.isBoolean?!0:t.value||"")}function Nn(t,e){this.fragment&&this.fragment.rebind(t,e)}function Fn(t){var e;this.node=t,t.namespaceURI&&t.namespaceURI!==no.html||(e=Yl[this.name]||this.name,void 0!==t[e]&&(this.propertyName=e),(this.isBoolean||this.isTwoway)&&(this.useProperty=!0),"value"===e&&(t._ractive.value=this.value)),this.rendered=!0,this.update()}function In(){var t=this,e=t.name,n=t.namespacePrefix,a=t.value,r=t.interpolator,i=t.fragment;if(("value"!==e||"select"!==this.element.name&&"textarea"!==this.element.name)&&("value"!==e||void 0===this.element.getAttribute("contenteditable"))){if("name"===e&&"input"===this.element.name&&r)return"name={{"+(r.keypath.str||r.ref)+"}}";if(this.isBoolean)return a?e:"";if(i){if(1===i.items.length&&null==i.items[0].value)return"";a=""+i}return n&&(e=n+":"+e),a?e+'="'+Bn(a)+'"':e}}function Bn(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'")}function Un(){this.fragment&&this.fragment.unbind(),"id"===this.name&&delete this.root.nodes[this.value]}function Vn(){var t,e,n,a,r=this.value;if(!this.locked)for(this.node._ractive.value=r,t=this.node.options,a=t.length;a--;)if(e=t[a],n=e._ractive?e._ractive.value:e.value,n==r){e.selected=!0;break}}function qn(){var t,e,n,a,r=this.value;for(i(r)||(r=[r]),t=this.node.options,e=t.length;e--;)n=t[e],a=n._ractive?n._ractive.value:n.value,n.selected=M(r,a)}function Gn(){var t=this,e=t.node,n=t.value;e.checked=n==e._ractive.value}function zn(){var t,e,n,a,r=this.node;if(t=r.checked,r.value=this.element.getAttribute("value"),r.checked=this.element.getAttribute("value")===this.element.getAttribute("name"),t&&!r.checked&&this.element.binding&&(n=this.element.binding.siblings,a=n.length)){for(;a--;){if(e=n[a],!e.element.node)return;if(e.element.node.checked)return bs.addRactive(e.root),e.handleChange()}this.root.viewmodel.set(e.keypath,void 0)}}function Wn(){var t,e,n=this,a=n.element,r=n.node,o=n.value,s=a.binding;if(t=a.getAttribute("value"),i(o)){for(e=o.length;e--;)if(t==o[e])return void(s.isChecked=r.checked=!0);s.isChecked=r.checked=!1}else s.isChecked=r.checked=o==t}function Hn(){this.node.className=n(this.value)}function Kn(){var t=this,e=t.node,n=t.value;this.root.nodes[n]=e,e.id=n}function Qn(){var t,e;t=this.node,e=this.value,void 0===e&&(e=""),t.style.setAttribute("cssText",e)}function Yn(){var t=this.value;void 0===t&&(t=""),this.locked||(this.node.innerHTML=t)}function $n(){var t=this,e=t.node,n=t.value;e._ractive.value=n,this.locked||(e.value=void 0==n?"":n)}function Jn(){this.locked||(this.node[this.propertyName]=this.value)}function Xn(){var t=this,e=t.node,n=t.namespace,a=t.name,r=t.value,i=t.fragment;n?e.setAttributeNS(n,a,""+(i||r)):this.isBoolean?r?e.setAttribute(a,""):e.removeAttribute(a):null==r?e.removeAttribute(a):e.setAttribute(a,""+(i||r))}function Zn(){var t,e,n=this,a=n.name,r=n.element,i=n.node;"id"===a?e=rd:"value"===a?"select"===r.name&&"value"===a?e=r.getAttribute("multiple")?Zl:Xl:"textarea"===r.name?e=sd:null!=r.getAttribute("contenteditable")?e=od:"input"===r.name&&(t=r.getAttribute("type"),e="file"===t?ko:"radio"===t&&r.binding&&"name"===r.binding.name?ed:sd):this.isTwoway&&"name"===a?"radio"===i.type?e=td:"checkbox"===i.type&&(e=nd):"style"===a&&i.style.setAttribute?e=id:"class"!==a||i.namespaceURI&&i.namespaceURI!==no.html?this.useProperty&&(e=pd):e=ad,e||(e=ud),this.update=e,this.update()}function ta(t,e){var n=e?"svg":"div";return dd.innerHTML="<"+n+" "+t+">"+n+">",F(dd.childNodes[0].attributes)}function ea(t,e){for(var n=t.length;n--;)if(t[n].name===e.name)return!1;return!0}function na(t){for(;t=t.parent;)if("form"===t.name)return t}function aa(){this._ractive.binding.handleChange()}function ra(){var t;xd.call(this),t=this._ractive.root.viewmodel.get(this._ractive.binding.keypath),this.value=void 0==t?"":t}function ia(){var t=this._ractive.binding,e=this;t._timeout&&clearTimeout(t._timeout),t._timeout=setTimeout(function(){t.rendered&&xd.call(e),t._timeout=void 0},t.element.lazy)}function oa(t,e,n){var a=t+e+n;return Cd[a]||(Cd[a]=[])}function sa(t){return t.isChecked}function pa(t){return t.element.getAttribute("value")}function ua(t){var e,n,a,r,i,o=t.attributes;return t.binding&&(t.binding.teardown(),t.binding=null),(t.getAttribute("contenteditable")||o.contenteditable&&ca(o.contenteditable))&&ca(o.value)?n=Sd:"input"===t.name?(e=t.getAttribute("type"),"radio"===e||"checkbox"===e?(a=ca(o.name),r=ca(o.checked),a&&r&&m("A radio input can have two-way binding on its name attribute, or its checked attribute - not both",{ractive:t.root}),a?n="radio"===e?Td:Md:r&&(n="radio"===e?Ad:jd)):"file"===e&&ca(o.value)?n=Ud:ca(o.value)&&(n="number"===e||"range"===e?Vd:wd)):"select"===t.name&&ca(o.value)?n=t.getAttribute("multiple")?Id:Nd:"textarea"===t.name&&ca(o.value)&&(n=wd),n&&(i=new n(t))&&i.keypath?i:void 0}function ca(t){return t&&t.isBindable}function la(){var t=this.getAction();t&&!this.hasListener?this.listen():!t&&this.hasListener&&this.unrender()}function da(t){zs(this.root,this.getAction(),{event:t})}function fa(){return(""+this.action).trim()}function ha(t,e,n){var a,r,i,o=this;this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.name=e,-1!==e.indexOf("*")&&(l('Only component proxy-events may contain "*" wildcards, <%s on-%s="..."/> is not valid',t.name,e),this.invalid=!0),n.m?(r=n.a.r,this.method=n.m,this.keypaths=[],this.fn=Mc(n.a.s,r.length),this.parentFragment=t.parentFragment,i=this.root,this.refResolvers=[],r.forEach(function(t,e){var n=void 0;(n=Kd.exec(t))?o.keypaths[e]={eventObject:!0,refinements:n[1]?n[1].split("."):[]}:o.refResolvers.push(Rc(o,t,function(t){return o.resolve(e,t)}))}),this.fire=ma):(a=n.n||n,"string"!=typeof a&&(a=new rg({template:a,root:this.root,owner:this})),this.action=a,n.d?(this.dynamicParams=new rg({template:n.d,root:this.root,owner:this.element}),this.fire=va):n.a&&(this.params=n.a,this.fire=ga))}function ma(t){var e,n,a;if(e=this.root,"function"!=typeof e[this.method])throw Error('Attempted to call a non-existent method ("'+this.method+'")');n=this.keypaths.map(function(n){var a,r,i;if(void 0!==n){if(n.eventObject){if(a=t,r=n.refinements.length)for(i=0;r>i;i+=1)a=a[n.refinements[i]]}else a=e.viewmodel.get(n);return a}}),Gs.enqueue(e,t),a=this.fn.apply(null,n),e[this.method].apply(e,a),Gs.dequeue(e)}function ga(t){zs(this.root,this.getAction(),{event:t,args:this.params})}function va(t){var e=this.dynamicParams.getArgsList();"string"==typeof e&&(e=e.substr(1,e.length-2)),zs(this.root,this.getAction(),{event:t,args:e})}function ba(t){var e,n,a,r={};e=this._ractive,n=e.events[t.type],(a=Oc(n.element.parentFragment))&&(r=Oc.resolve(a)),n.fire({node:this,original:t,index:r,keypath:e.keypath.str,context:e.root.viewmodel.get(e.keypath)})}function ya(){var t,e=this.name;if(!this.invalid){if(t=v("events",this.root,e))this.custom=t(this.node,_a(e));else{if(!("on"+e in this.node||window&&"on"+e in window||Zi))return void(Jd[e]||g(Io(e,"event"),{node:this.node}));this.node.addEventListener(e,Qd,!1)}this.hasListener=!0}}function _a(t){return $d[t]||($d[t]=function(e){var n=e.node._ractive;e.index=n.index,e.keypath=n.keypath.str,e.context=n.root.viewmodel.get(n.keypath),n.events[t].fire(e)}),$d[t]}function xa(t,e){function n(n){n&&n.rebind(t,e)}var a;return this.method?(a=this.element.parentFragment,void this.refResolvers.forEach(n)):("string"!=typeof this.action&&n(this.action),void(this.dynamicParams&&n(this.dynamicParams)))}function wa(){this.node=this.element.node,this.node._ractive.events[this.name]=this,(this.method||this.getAction())&&this.listen()}function ka(t,e){this.keypaths[t]=e}function Sa(){return this.method?void this.refResolvers.forEach(K):("string"!=typeof this.action&&this.action.unbind(),void(this.dynamicParams&&this.dynamicParams.unbind()))}function Ea(){this.custom?this.custom.teardown():this.node.removeEventListener(this.name,Qd,!1),this.hasListener=!1}function Ca(){var t=this;this.dirty||(this.dirty=!0,bs.scheduleTask(function(){Pa(t),t.dirty=!1})),this.parentFragment.bubble()}function Pa(t){var e,n,a,r,i;e=t.node,e&&(r=F(e.options),n=t.getAttribute("value"),a=t.getAttribute("multiple"),void 0!==n?(r.forEach(function(t){var e,r;e=t._ractive?t._ractive.value:t.value,r=a?Aa(n,e):n==e,r&&(i=!0),t.selected=r}),i||(r[0]&&(r[0].selected=!0),t.binding&&t.binding.forceUpdate())):t.binding&&t.binding.forceUpdate())}function Aa(t,e){for(var n=t.length;n--;)if(t[n]==e)return!0}function Oa(t,e){t.select=Ra(t.parent),t.select&&(t.select.options.push(t),e.a||(e.a={}),void 0!==e.a.value||e.a.hasOwnProperty("disabled")||(e.a.value=e.f),"selected"in e.a&&void 0!==t.select.getAttribute("value")&&delete e.a.selected)}function Ta(t){t.select&&N(t.select.options,t)}function Ra(t){if(t)do if("select"===t.name)return t;while(t=t.parent)}function Ma(t){var e,n,a,r,i,o,s;this.type=Pu,e=this.parentFragment=t.parentFragment,n=this.template=t.template,this.parent=t.pElement||e.pElement,this.root=a=e.root,this.index=t.index,this.key=t.key,this.name=Gl(n.e),"option"===this.name&&Oa(this,n),"select"===this.name&&(this.options=[],this.bubble=Ca),"form"===this.name&&(this.formBindings=[]),s=Vl(this,n),this.attributes=hd(this,n.a),this.conditionalAttributes=vd(this,n.m),n.f&&(this.fragment=new rg({template:n.f,root:a,owner:this,pElement:this,cssIds:null})),o=a.twoway,s.twoway===!1?o=!1:s.twoway===!0&&(o=!0),this.twoway=o,this.lazy=s.lazy,o&&(r=qd(this,n.a))&&(this.binding=r,i=this.root._twowayBindings[r.keypath.str]||(this.root._twowayBindings[r.keypath.str]=[]),i.push(r)),n.v&&(this.eventHandlers=of(this,n.v)),n.o&&(this.decorator=new lf(this,n.o)),this.intro=n.t0||n.t1,this.outro=n.t0||n.t2}function La(t,e){function n(n){n.rebind(t,e)}var a,r,i,o;if(this.attributes&&this.attributes.forEach(n),this.conditionalAttributes&&this.conditionalAttributes.forEach(n),this.eventHandlers&&this.eventHandlers.forEach(n),this.decorator&&n(this.decorator),this.fragment&&n(this.fragment),i=this.liveQueries)for(o=this.root,a=i.length;a--;)i[a]._makeDirty();this.node&&(r=this.node._ractive)&&w(r,"keypath",t,e)}function ja(t){var e;(t.attributes.width||t.attributes.height)&&t.node.addEventListener("load",e=function(){var n=t.getAttribute("width"),a=t.getAttribute("height");void 0!==n&&t.node.setAttribute("width",n),void 0!==a&&t.node.setAttribute("height",a),t.node.removeEventListener("load",e,!1)},!1)}function Da(t){t.node.addEventListener("reset",Fa,!1)}function Na(t){t.node.removeEventListener("reset",Fa,!1)}function Fa(){var t=this._ractive.proxy;bs.start(),t.formBindings.forEach(Ia),bs.end()}function Ia(t){t.root.viewmodel.set(t.keypath,t.resetValue)}function Ba(t,e,n){var a,r,i;this.element=t,this.root=a=t.root,this.isIntro=n,r=e.n||e,("string"==typeof r||(i=new rg({template:r,root:a,owner:t}),r=""+i,i.unbind(),""!==r))&&(this.name=r,e.a?this.params=e.a:e.d&&(i=new rg({template:e.d,root:a,owner:t}),this.params=i.getArgsList(),i.unbind()),this._fn=v("transitions",a,r),this._fn||g(Io(r,"transition"),{ractive:this.root}))}function Ua(t){return t}function Va(){Vf.hidden=document[Ff]}function qa(){Vf.hidden=!0}function Ga(){Vf.hidden=!1}function za(){var t,e,n,a=this;return t=this.node=this.element.node,e=t.getAttribute("style"),this.complete=function(r){n||(!r&&a.isIntro&&Wa(t,e),t._ractive.transition=null,a._manager.remove(a),n=!0)},this._fn?void this._fn.apply(this.root,[this].concat(this.params)):void this.complete()}function Wa(t,e){e?t.setAttribute("style",e):(t.getAttribute("style"),t.removeAttribute("style"))}function Ha(){var t,e,n,a=this,r=this.root;return t=Ka(this),e=this.node=co(this.name,t),this.parentFragment.cssIds&&this.node.setAttribute("data-ractive-css",this.parentFragment.cssIds.map(function(t){return"{"+t+"}"}).join(" ")),Eo(this.node,"_ractive",{value:{proxy:this,keypath:cs(this.parentFragment),events:So(null),root:r}}),this.attributes.forEach(function(t){return t.render(e)}),this.conditionalAttributes.forEach(function(t){return t.render(e)}),this.fragment&&("script"===this.name?(this.bubble=Xf,this.node.text=this.fragment.toString(!1),this.fragment.unrender=ko):"style"===this.name?(this.bubble=Jf,this.bubble(),this.fragment.unrender=ko):this.binding&&this.getAttribute("contenteditable")?this.fragment.unrender=ko:this.node.appendChild(this.fragment.render())),this.binding&&(this.binding.render(),this.node._ractive.binding=this.binding),this.eventHandlers&&this.eventHandlers.forEach(function(t){return t.render()}),"option"===this.name&&Qa(this),"img"===this.name?ja(this):"form"===this.name?Da(this):"input"===this.name||"textarea"===this.name?this.node.defaultValue=this.node.value:"option"===this.name&&(this.node.defaultSelected=this.node.selected),this.decorator&&this.decorator.fn&&bs.scheduleTask(function(){a.decorator.torndown||a.decorator.init()},!0),r.transitionsEnabled&&this.intro&&(n=new Zf(this,this.intro,!0),bs.registerTransition(n),bs.scheduleTask(function(){return n.start()},!0),this.transition=n),this.node.autofocus&&bs.scheduleTask(function(){return a.node.focus()},!0),Ya(this),this.node}function Ka(t){var e,n,a;return e=(n=t.getAttribute("xmlns"))?n:"svg"===t.name?no.svg:(a=t.parent)?"foreignObject"===a.name?no.html:a.node.namespaceURI:t.root.el.namespaceURI}function Qa(t){var e,n,a;if(t.select&&(n=t.select.getAttribute("value"),void 0!==n))if(e=t.getAttribute("value"),t.select.node.multiple&&i(n)){for(a=n.length;a--;)if(e==n[a]){t.node.selected=!0;break}}else t.node.selected=e==n}function Ya(t){var e,n,a,r,i;e=t.root;do for(n=e._liveQueries,a=n.length;a--;)r=n[a],i=n["_"+r],i._test(t)&&(t.liveQueries||(t.liveQueries=[])).push(i);while(e=e.parent)}function $a(t){var e,n,a;if(e=t.getAttribute("value"),void 0===e||!t.select)return!1;if(n=t.select.getAttribute("value"),n==e)return!0;if(t.select.getAttribute("multiple")&&i(n))for(a=n.length;a--;)if(n[a]==e)return!0}function Ja(t){var e,n,a,r;return e=t.attributes,n=e.type,a=e.value,r=e.name,n&&"radio"===n.value&&a&&r.interpolator&&a.value===r.interpolator.value?!0:void 0}function Xa(t){var e=""+t;return e?" "+e:""}function Za(){this.fragment&&this.fragment.unbind(),this.binding&&this.binding.unbind(),this.eventHandlers&&this.eventHandlers.forEach(K),"option"===this.name&&Ta(this),this.attributes.forEach(K),this.conditionalAttributes.forEach(K)}function tr(t){var e,n,a;(a=this.transition)&&a.complete(),"option"===this.name?this.detach():t&&bs.detachWhenReady(this),this.fragment&&this.fragment.unrender(!1),(e=this.binding)&&(this.binding.unrender(),this.node._ractive.binding=null,n=this.root._twowayBindings[e.keypath.str],n.splice(n.indexOf(e),1)),this.eventHandlers&&this.eventHandlers.forEach(Q),this.decorator&&bs.registerDecorator(this.decorator),this.root.transitionsEnabled&&this.outro&&(a=new Zf(this,this.outro,!1),bs.registerTransition(a),bs.scheduleTask(function(){return a.start()})),this.liveQueries&&er(this),"form"===this.name&&Na(this)}function er(t){var e,n,a;for(a=t.liveQueries.length;a--;)e=t.liveQueries[a],n=e.selector,e._remove(t.node)}function nr(t,e){var n=sh.exec(e)[0];return null===t||n.length%s}}) cannot contain nested inline partials",e,{ractive:t});var s=a?i:ir(i,e);s.partials[e]=r=o.t}return a&&(r._fn=a),r.v?r.t:r}}function ir(t,e){return t.partials.hasOwnProperty(e)?t:or(t.constructor,e)}function or(t,e){return t?t.partials.hasOwnProperty(e)?t:or(t._Parent,e):void 0}function sr(t,e){if(e){if(e.template&&e.template.p&&e.template.p[t])return e.template.p[t];if(e.parentFragment&&e.parentFragment.owner)return sr(t,e.parentFragment.owner)}}function pr(t,e){var n,a=b("components",t,e);if(a&&(n=a.components[e],!n._Parent)){var r=n.bind(a);if(r.isOwner=a.components.hasOwnProperty(e),n=r(),!n)return void m(Fo,e,"component","component",{ractive:t});"string"==typeof n&&(n=pr(t,n)),n._fn=r,a.components[e]=n}return n}function ur(){var t=this.instance.fragment.detach();return yh.fire(this.instance),t}function cr(t){return this.instance.fragment.find(t)}function lr(t,e){return this.instance.fragment.findAll(t,e)}function dr(t,e){e._test(this,!0),this.instance.fragment&&this.instance.fragment.findAllComponents(t,e)}function fr(t){return t&&t!==this.name?this.instance.fragment?this.instance.fragment.findComponent(t):null:this.instance}function hr(){return this.parentFragment.findNextNode(this)}function mr(){return this.rendered?this.instance.fragment.firstNode():null}function gr(t,e,n){function a(t){var n,a;t.value=e,t.updating||(a=t.ractive,n=t.keypath,t.updating=!0,bs.start(a),a.viewmodel.mark(n),bs.end(),t.updating=!1)}var r,i,o,s,p,u;if(r=t.obj,i=t.prop,n&&!n.configurable){if("length"===i)return;throw Error('Cannot use magic mode with property "'+i+'" - object is not configurable')}n&&(o=n.get,s=n.set),p=o||function(){return e},u=function(t){s&&s(t),e=o?o():t,u._ractiveWrappers.forEach(a)},u._ractiveWrappers=[t],Object.defineProperty(r,i,{get:p,set:u,enumerable:!0,configurable:!0})}function vr(t,e){var n,a,r,i;if(this.adaptors)for(n=this.adaptors.length,a=0;n>a;a+=1)if(r=this.adaptors[a],r.filter(e,t,this.ractive))return i=this.wrapped[t]=r.wrap(this.ractive,e,t,yr(t)),void(i.value=e)}function br(t,e){var n,a={};if(!e)return t;e+=".";for(n in t)t.hasOwnProperty(n)&&(a[e+n]=t[n]);return a}function yr(t){var e;return Gh[t]||(e=t?t+".":"",Gh[t]=function(n,a){var r;return"string"==typeof n?(r={},r[e+n]=a,r):"object"==typeof n?e?br(n,t):n:void 0}),Gh[t]}function _r(t){var e,n,a=[$o];for(e=t.length;e--;)for(n=t[e].parent;n&&!n.isRoot;)-1===t.indexOf(n)&&R(a,n),n=n.parent;return a}function xr(t,e,n){var a;kr(t,e),n||(a=e.wildcardMatches(),a.forEach(function(n){wr(t,n,e)}))}function wr(t,e,n){var a,r,i;e=e.str||e,a=t.depsMap.patternObservers,r=a&&a[e],r&&r.forEach(function(e){i=n.join(e.lastKey),kr(t,i),wr(t,e,i)})}function kr(t,e){t.patternObservers.forEach(function(t){t.regex.test(e.str)&&t.update(e)})}function Sr(){function t(t){var a=t.key;t.viewmodel===o?(o.clearCache(a.str),t.invalidate(),n.push(a),e(a)):t.viewmodel.mark(a)}function e(n){var a,r;o.noCascade.hasOwnProperty(n.str)||((r=o.deps.computed[n.str])&&r.forEach(t),(a=o.depsMap.computed[n.str])&&a.forEach(e))}var n,a,r,i=this,o=this,s={};return n=this.changes,n.length?(n.slice().forEach(e),a=zh(n),a.forEach(function(e){var a;-1===n.indexOf(e)&&(a=o.deps.computed[e.str])&&a.forEach(t)}),this.changes=[],this.patternObservers.length&&(a.forEach(function(t){return Wh(i,t,!0)}),n.forEach(function(t){return Wh(i,t)})),this.deps.observers&&(a.forEach(function(t){return Er(i,null,t,"observers")}),Pr(this,n,"observers")),this.deps["default"]&&(r=[],a.forEach(function(t){return Er(i,r,t,"default")}),r.length&&Cr(this,r,n),Pr(this,n,"default")),n.forEach(function(t){s[t.str]=i.get(t)}),this.implicitChanges={},this.noCascade={},s):void 0}function Er(t,e,n,a){var r,i;(r=Ar(t,n,a))&&(i=t.get(n),r.forEach(function(t){e&&t.refineValue?e.push(t):t.setValue(i)}))}function Cr(t,e,n){e.forEach(function(e){for(var a=!1,r=0,i=n.length,o=[];i>r;){var s=n[r];if(s===e.keypath){a=!0;break}s.slice(0,e.keypath.length)===e.keypath&&o.push(s),r++}a&&e.setValue(t.get(e.keypath)),o.length&&e.refineValue(o)})}function Pr(t,e,n){function a(t){t.forEach(r),t.forEach(i)}function r(e){var a=Ar(t,e,n);a&&s.push({keypath:e,deps:a})}function i(e){var r;(r=t.depsMap[n][e.str])&&a(r)}function o(e){var n=t.get(e.keypath);e.deps.forEach(function(t){return t.setValue(n)})}var s=[];a(e),s.forEach(o)}function Ar(t,e,n){var a=t.deps[n];return a?a[e.str]:null}function Or(){this.captureGroups.push([])}function Tr(t,e){var n,a;if(e||(a=this.wrapped[t])&&a.teardown()!==!1&&(this.wrapped[t]=null),this.cache[t]=void 0,n=this.cacheMap[t])for(;n.length;)this.clearCache(n.pop())}function Rr(t,e){var n=e.firstKey;return!(n in t.data||n in t.computations||n in t.mappings)}function Mr(t,e){var n=new Xh(t,e);return this.ready&&n.init(this),this.computations[t.str]=n}function Lr(t,e){var n,a,r,i,o,s=this.cache,p=t.str;if(e=e||nm,e.capture&&(i=D(this.captureGroups))&&(~i.indexOf(t)||i.push(t)),Mo.call(this.mappings,t.firstKey))return this.mappings[t.firstKey].get(t,e);if(t.isSpecial)return t.value;if(void 0===s[p]?((a=this.computations[p])&&!a.bypass?(n=a.get(),this.adapt(p,n)):(r=this.wrapped[p])?n=r.value:t.isRoot?(this.adapt("",this.data),n=this.data):n=jr(this,t),s[p]=n):n=s[p],!e.noUnwrap&&(r=this.wrapped[p])&&(n=r.get()),t.isRoot&&e.fullRootGet)for(o in this.mappings)n[o]=this.mappings[o].getValue();return n===tm?void 0:n}function jr(t,e){var n,a,r,i;return n=t.get(e.parent),(i=t.wrapped[e.parent.str])&&(n=i.get()),null!==n&&void 0!==n?((a=t.cacheMap[e.parent.str])?-1===a.indexOf(e.str)&&a.push(e.str):t.cacheMap[e.parent.str]=[e.str],"object"!=typeof n||e.lastKey in n?(r=n[e.lastKey],t.adapt(e.str,r,!1),t.cache[e.str]=r,r):t.cache[e.str]=tm):void 0}function Dr(){var t;for(t in this.computations)this.computations[t].init(this)}function Nr(t,e){var n=this.mappings[t.str]=new im(t,e);return n.initViewmodel(this),n}function Fr(t,e){var n,a=t.str;e&&(e.implicit&&(this.implicitChanges[a]=!0),e.noCascade&&(this.noCascade[a]=!0)),(n=this.computations[a])&&n.invalidate(),-1===this.changes.indexOf(t)&&this.changes.push(t);var r=e?e.keepExistingWrapper:!1;this.clearCache(a,r),this.ready&&this.onchange()}function Ir(t,e,n,a){var r,i,o,s;if(this.mark(t),a&&a.compare){o=Ur(a.compare);try{r=e.map(o),i=n.map(o)}catch(p){m('merge(): "%s" comparison failed. Falling back to identity checking',t),r=e,i=n}}else r=e,i=n;s=sm(r,i),this.smartUpdate(t,n,s,e.length!==n.length)}function Br(t){return JSON.stringify(t)}function Ur(t){if(t===!0)return Br;if("string"==typeof t)return um[t]||(um[t]=function(e){return e[t]}),um[t];if("function"==typeof t)return t;throw Error("The `compare` option must be a function, or a string representing an identifying field (or `true` to use JSON.stringify)")}function Vr(t,e){var n,a,r,i=void 0===arguments[2]?"default":arguments[2];e.isStatic||((n=this.mappings[t.firstKey])?n.register(t,e,i):(a=this.deps[i]||(this.deps[i]={}),r=a[t.str]||(a[t.str]=[]),r.push(e),this.depsMap[i]||(this.depsMap[i]={}),t.isRoot||qr(this,t,i)))}function qr(t,e,n){for(var a,r,i;!e.isRoot;)a=t.depsMap[n],r=a[e.parent.str]||(a[e.parent.str]=[]),i=e.str,void 0===r["_"+i]&&(r["_"+i]=0,r.push(e)),r["_"+i]+=1,e=e.parent}function Gr(){return this.captureGroups.pop()}function zr(t){this.data=t,this.clearCache("")}function Wr(t,e){var n,a,r,i,o=void 0===arguments[2]?{}:arguments[2];if(!o.noMapping&&(n=this.mappings[t.firstKey]))return n.set(t,e);if(a=this.computations[t.str]){if(a.setting)return;a.set(e),e=a.get()}s(this.cache[t.str],e)||(r=this.wrapped[t.str],r&&r.reset&&(i=r.reset(e)!==!1,i&&(e=r.get())),a||i||Hr(this,t,e),o.silent?this.clearCache(t.str):this.mark(t))}function Hr(t,e,n){var a,r,i,o;i=function(){a.set?a.set(e.lastKey,n):(r=a.get(),o())},o=function(){r||(r=Fh(e.lastKey),t.set(e.parent,r,{silent:!0})),r[e.lastKey]=n},a=t.wrapped[e.parent.str],a?i():(r=t.get(e.parent),(a=t.wrapped[e.parent.str])?i():o())}function Kr(t,e,n){var a,r,i,o=this;if(r=n.length,n.forEach(function(e,n){-1===e&&o.mark(t.join(n),gm)}),this.set(t,e,{silent:!0}),(a=this.deps["default"][t.str])&&a.filter(Qr).forEach(function(t){return t.shuffle(n,e)}),r!==e.length){for(this.mark(t.join("length"),mm),i=n.touchedFrom;ii;i+=1)this.mark(t.join(i),gm)}}function Qr(t){return"function"==typeof t.shuffle}function Yr(){var t,e=this;for(Object.keys(this.cache).forEach(function(t){return e.clearCache(t)});t=this.unresolvedImplicitDependencies.pop();)t.teardown()}function $r(t,e){var n,a,r,i=void 0===arguments[2]?"default":arguments[2];if(!e.isStatic){if(n=this.mappings[t.firstKey])return n.unregister(t,e,i);if(a=this.deps[i][t.str],r=a.indexOf(e),-1===r)throw Error("Attempted to remove a dependant that was no longer registered! This should not happen. If you are seeing this bug in development please raise an issue at https://github.com/RactiveJS/Ractive/issues - thanks");a.splice(r,1),t.isRoot||Jr(this,t,i)}}function Jr(t,e,n){for(var a,r;!e.isRoot;)a=t.depsMap[n],r=a[e.parent.str],r["_"+e.str]-=1,r["_"+e.str]||(N(r,e),r["_"+e.str]=void 0),e=e.parent}function Xr(t){this.hook=new is(t),this.inProcess={},this.queue={}}function Zr(t,e){return t[e._guid]||(t[e._guid]=[])}function ti(t,e){var n=Zr(t.queue,e);for(t.hook.fire(e);n.length;)ti(t,n.shift());delete t.queue[e._guid]}function ei(t,e){var n,a={};for(n in e)a[n]=ni(t,n,e[n]);return a}function ni(t,e,n){var a,r;return"function"==typeof n&&(a=ri(n,t)),"string"==typeof n&&(a=ai(t,n)),"object"==typeof n&&("string"==typeof n.get?a=ai(t,n.get):"function"==typeof n.get?a=ri(n.get,t):l("`%s` computation must have a `get()` method",e),
"function"==typeof n.set&&(r=ri(n.set,t))),{getter:a,setter:r}}function ai(t,e){var n,a,r;return n="return ("+e.replace(km,function(t,e){return a=!0,'__ractive.get("'+e+'")'})+");",a&&(n="var __ractive = this; "+n),r=Function(n),a?r.bind(t):r}function ri(t,e){return/this/.test(""+t)?t.bind(e):t}function ii(e){var n,r,i=void 0===arguments[1]?{}:arguments[1],o=void 0===arguments[2]?{}:arguments[2];if(Mg.DEBUG&&Ro(),pi(e,o),Eo(e,"data",{get:ui}),Sm.fire(e,i),Am.forEach(function(t){e[t]=a(So(e.constructor[t]||null),i[t])}),r=new _m({adapt:oi(e,e.adapt,i),data:Wp.init(e.constructor,e,i),computed:wm(e,a(So(e.constructor.prototype.computed),i.computed)),mappings:o.mappings,ractive:e,onchange:function(){return bs.addRactive(e)}}),e.viewmodel=r,r.init(),uu.init(e.constructor,e,i),Em.fire(e),Cm.begin(e),e.template){var s=void 0;(o.cssIds||e.cssId)&&(s=o.cssIds?o.cssIds.slice():[],e.cssId&&s.push(e.cssId)),e.fragment=new rg({template:e.template,root:e,owner:e,cssIds:s})}if(Cm.end(e),n=t(e.el)){var p=e.render(n,e.append);Mg.DEBUG_PROMISES&&p["catch"](function(t){throw g("Promise debugging is enabled, to help solve errors that happen asynchronously. Some browsers will log unhandled promise rejections, in which case you can safely disable promise debugging:\n Ractive.DEBUG_PROMISES = false;"),m("An error happened during rendering",{ractive:e}),t.stack&&d(t.stack),t})}}function oi(t,e,n){function a(e){return"string"==typeof e&&(e=v("adaptors",t,e),e||l(Io(e,"adaptor"))),e}var r,i,o;if(e=e.map(a),r=j(n.adapt).map(a),r=si(e,r),i="magic"in n?n.magic:t.magic,o="modifyArrays"in n?n.modifyArrays:t.modifyArrays,i){if(!eo)throw Error("Getters and setters (magic mode) are not supported in this browser");o&&r.push(Vh),r.push(Uh)}return o&&r.push(Dh),r}function si(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function pi(t,e){t._guid="r-"+Pm++,t._subs=So(null),t._config={},t._twowayBindings=So(null),t._animations=[],t.nodes={},t._liveQueries=[],t._liveComponentQueries=[],t._boundFunctions=[],t._observers=[],e.component?(t.parent=e.parent,t.container=e.container||null,t.root=t.parent.root,t.component=e.component,e.component.instance=t,t._inlinePartials=e.inlinePartials):(t.root=t,t.parent=t.container=null)}function ui(){throw Error("Using `ractive.data` is no longer supported - you must use the `ractive.get()` API instead")}function ci(t,e,n){this.parentFragment=t.parentFragment,this.callback=n,this.fragment=new rg({template:e,root:t.root,owner:this}),this.update()}function li(t,e,n){var a;return e.r?a=Rc(t,e.r,n):e.x?a=new Dc(t,t.parentFragment,e.x,n):e.rx&&(a=new Bc(t,e.rx,n)),a}function di(t){return 1===t.length&&t[0].t===Su}function fi(t,e){var n;for(n in e)e.hasOwnProperty(n)&&hi(t.instance,t.root,n,e[n])}function hi(t,e,n,a){"string"!=typeof a&&l("Components currently only support simple events - you cannot include arguments. Sorry!"),t.on(n,function(){var t,n;return arguments.length&&arguments[0]&&arguments[0].node&&(t=Array.prototype.shift.call(arguments)),n=Array.prototype.slice.call(arguments),zs(e,a,{event:t,args:n}),!1})}function mi(t,e){var n,a;if(!e)throw Error('Component "'+this.name+'" not found');n=this.parentFragment=t.parentFragment,a=n.root,this.root=a,this.type=Ru,this.name=t.template.e,this.index=t.index,this.indexRefBindings={},this.yielders={},this.resolvers=[],Rm(this,e,t.template.a,t.template.f,t.template.p),Mm(this,t.template.v),(t.template.t0||t.template.t1||t.template.t2||t.template.o)&&m('The "intro", "outro" and "decorator" directives have no effect on components',{ractive:this.instance}),Lm(this)}function gi(t,e){function n(n){n.rebind(t,e)}var a;this.resolvers.forEach(n);for(var r in this.yielders)this.yielders[r][0]&&n(this.yielders[r][0]);(a=this.root._liveComponentQueries["_"+this.name])&&a._makeDirty()}function vi(){var t=this.instance;return t.render(this.parentFragment.getNode()),this.rendered=!0,t.fragment.detach()}function bi(){return""+this.instance.fragment}function yi(){var t=this.instance;this.resolvers.forEach(K),_i(this),t._observers.forEach(Y),t.fragment.unbind(),t.viewmodel.teardown(),t.fragment.rendered&&t.el.__ractive_instances__&&N(t.el.__ractive_instances__,t),Bm.fire(t)}function _i(t){var e,n;e=t.root;do(n=e._liveComponentQueries["_"+t.name])&&n._remove(t);while(e=e.parent)}function xi(t){this.shouldDestroy=t,this.instance.unrender()}function wi(t){var e=this;this.owner=t.owner,this.parent=this.owner.parentFragment,this.root=t.root,this.pElement=t.pElement,this.context=t.context,this.index=t.index,this.key=t.key,this.registeredIndexRefs=[],this.cssIds="cssIds"in t?t.cssIds:this.parent?this.parent.cssIds:null,this.items=t.template.map(function(n,a){return ki({parentFragment:e,pElement:t.pElement,template:n,index:a})}),this.value=this.argsList=null,this.dirtyArgs=this.dirtyValue=!0,this.bound=!0}function ki(t){if("string"==typeof t.template)return new yc(t);switch(t.template.t){case Mu:return new Hm(t);case Su:return new Wc(t);case Cu:return new ll(t);case Eu:return new Ol(t);case Pu:var e=void 0;return(e=vh(t.parentFragment.root,t.template.e))?new qm(t,e):new ih(t);case Au:return new gh(t);case Ou:return new zm(t);case Lu:return new Qm(t);default:throw Error("Something very strange happened. Please file an issue at https://github.com/ractivejs/ractive/issues. Thanks!")}}function Si(t,e){(!this.owner||this.owner.hasContext)&&w(this,"context",t,e),this.items.forEach(function(n){n.rebind&&n.rebind(t,e)})}function Ei(){var t;return 1===this.items.length?t=this.items[0].render():(t=document.createDocumentFragment(),this.items.forEach(function(e){t.appendChild(e.render())})),this.rendered=!0,t}function Ci(t){return this.items?this.items.map(t?Ai:Pi).join(""):""}function Pi(t){return""+t}function Ai(t){return t.toString(!0)}function Oi(){this.bound&&(this.items.forEach(Ti),this.bound=!1)}function Ti(t){t.unbind&&t.unbind()}function Ri(t){if(!this.rendered)throw Error("Attempted to unrender a fragment that was not rendered");this.items.forEach(function(e){return e.unrender(t)}),this.rendered=!1}function Mi(t){var e,n,a,r,i;if(t=t||{},"object"!=typeof t)throw Error("The reset method takes either no arguments, or an object containing new data");for((n=this.viewmodel.wrapped[""])&&n.reset?n.reset(t)===!1&&this.viewmodel.reset(t):this.viewmodel.reset(t),a=uu.reset(this),r=a.length;r--;)if(og.indexOf(a[r])>-1){i=!0;break}if(i){var o=void 0;this.viewmodel.mark($o),(o=this.component)&&(o.shouldDestroy=!0),this.unrender(),o&&(o.shouldDestroy=!1),this.fragment.template!==this.template&&(this.fragment.unbind(),this.fragment=new rg({template:this.template,root:this,owner:this})),e=this.render(this.el,this.anchor)}else e=bs.start(this,!0),this.viewmodel.mark($o),bs.end();return sg.fire(this,t),e}function Li(t){var e,n;Jp.init(null,this,{template:t}),e=this.transitionsEnabled,this.transitionsEnabled=!1,(n=this.component)&&(n.shouldDestroy=!0),this.unrender(),n&&(n.shouldDestroy=!1),this.fragment.unbind(),this.fragment=new rg({template:this.template,root:this,owner:this}),this.render(this.el,this.anchor),this.transitionsEnabled=e}function ji(t,e){var n,a;if(a=bs.start(this,!0),u(t)){n=t;for(t in n)n.hasOwnProperty(t)&&(e=n[t],Di(this,t,e))}else Di(this,t,e);return bs.end(),a}function Di(t,e,n){e=S(P(e)),e.isPattern?E(t,e).forEach(function(e){t.viewmodel.set(e,n)}):t.viewmodel.set(e,n)}function Ni(t,e){return Jo(this,t,void 0===e?-1:-e)}function Fi(){var t;return this.fragment.unbind(),this.viewmodel.teardown(),this._observers.forEach(Y),this.fragment.rendered&&this.el.__ractive_instances__&&N(this.el.__ractive_instances__,this),this.shouldDestroy=!0,t=this.fragment.rendered?this.unrender():us.resolve(),vg.fire(this),this._boundFunctions.forEach(Ii),t}function Ii(t){delete t.fn[t.prop]}function Bi(t){var e=this;if("string"!=typeof t)throw new TypeError(No);var n=void 0;return/\*/.test(t)?(n={},E(this,S(P(t))).forEach(function(t){n[t.str]=!e.viewmodel.get(t)}),this.set(n)):this.set(t,!this.get(t))}function Ui(){return this.fragment.toString(!0)}function Vi(){var t,e;if(!this.fragment.rendered)return m("ractive.unrender() was called on a Ractive instance that was not rendered"),us.resolve();for(t=bs.start(this,!0),e=!this.component||this.component.shouldDestroy||this.shouldDestroy;this._animations[0];)this._animations[0].stop();return this.fragment.unrender(e),N(this.el.__ractive_instances__,this),xg.fire(this),bs.end(),t}function qi(t){var e;return t=S(t)||$o,e=bs.start(this,!0),this.viewmodel.mark(t),bs.end(),Sg.fire(this,t),e}function Gi(t,e){var n,a,r;if("string"!=typeof t||e){r=[];for(a in this._twowayBindings)(!t||S(a).equalsOrStartsWith(t))&&r.push.apply(r,this._twowayBindings[a])}else r=this._twowayBindings[t];return n=zi(this,r),this.set(n)}function zi(t,e){var n={},a=[];return e.forEach(function(t){var e,r;if(!t.radioName||t.element.node.checked){if(t.checkboxName)return void(a[t.keypath.str]||t.changed()||(a.push(t.keypath),a[t.keypath.str]=t));e=t.attribute.value,r=t.getValue(),L(e,r)||s(e,r)||(n[t.keypath.str]=r)}}),a.length&&a.forEach(function(t){var e,r,i;e=a[t.str],r=e.attribute.value,i=e.getValue(),L(r,i)||(n[t.str]=i)}),n}function Wi(t,e){return"function"==typeof e&&/_super/.test(t)}function Hi(t){for(var e={};t;)Ki(t,e),Yi(t,e),t=t._Parent!==Mg?t._Parent:!1;return e}function Ki(t,e){ru.forEach(function(n){Qi(n.useDefaults?t.prototype:t,e,n.name)})}function Qi(t,e,n){var a,r=Object.keys(t[n]);r.length&&((a=e[n])||(a=e[n]={}),r.filter(function(t){return!(t in a)}).forEach(function(e){return a[e]=t[n][e]}))}function Yi(t,e){Object.keys(t.prototype).forEach(function(n){if("computed"!==n){var a=t.prototype[n];if(n in e){if("function"==typeof e[n]&&"function"==typeof a&&e[n]._method){var r=void 0,i=a._method;i&&(a=a._method),r=Pg(e[n]._method,a),i&&(r._method=r),e[n]=r}}else e[n]=a._method?a._method:a}})}function $i(){for(var t=arguments.length,e=Array(t),n=0;t>n;n++)e[n]=arguments[n];return e.length?e.reduce(Ji,this):Ji(this)}function Ji(t){var e,n,r=void 0===arguments[1]?{}:arguments[1];return r.prototype instanceof Mg&&(r=Ag(r)),e=function(t){return this instanceof e?void Om(this,t):new e(t)},n=So(t.prototype),n.constructor=e,Co(e,{defaults:{value:n},extend:{value:$i,writable:!0,configurable:!0},_Parent:{value:t}}),uu.extend(t,n,r),Wp.extend(t,n,r),r.computed&&(n.computed=a(So(t.prototype.computed),r.computed)),e.prototype=n,e}var Xi,Zi,to,eo,no,ao,ro,io=3,oo={el:void 0,append:!1,template:{v:io,t:[]},preserveWhitespace:!1,sanitize:!1,stripComments:!0,delimiters:["{{","}}"],tripleDelimiters:["{{{","}}}"],interpolate:!1,data:{},computed:{},magic:!1,modifyArrays:!0,adapt:[],isolated:!1,twoway:!0,lazy:!1,noIntro:!1,transitionsEnabled:!0,complete:void 0,css:null,noCssTransform:!1},so=oo,po={linear:function(t){return t},easeIn:function(t){return Math.pow(t,3)},easeOut:function(t){return Math.pow(t-1,3)+1},easeInOut:function(t){return(t/=.5)<1?.5*Math.pow(t,3):.5*(Math.pow(t-2,3)+2)}};Xi="object"==typeof document,Zi="undefined"!=typeof navigator&&/jsDom/.test(navigator.appName),to="undefined"!=typeof console&&"function"==typeof console.warn&&"function"==typeof console.warn.apply;try{Object.defineProperty({},"test",{value:0}),eo=!0}catch(uo){eo=!1}no={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},ao="undefined"==typeof document?!1:document&&document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),ro=["o","ms","moz","webkit"];var co,lo,fo,ho,mo,go,vo,bo,yo;if(co=ao?function(t,e){return e&&e!==no.html?document.createElementNS(e,t):document.createElement(t)}:function(t,e){if(e&&e!==no.html)throw"This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information";return document.createElement(t)},Xi){for(fo=co("div"),ho=["matches","matchesSelector"],yo=function(t){return function(e,n){return e[t](n)}},vo=ho.length;vo--&&!lo;)if(mo=ho[vo],fo[mo])lo=yo(mo);else for(bo=ro.length;bo--;)if(go=ro[vo]+mo.substr(0,1).toUpperCase()+mo.substring(1),fo[go]){lo=yo(go);break}lo||(lo=function(t,e){var n,a,r;for(a=t.parentNode,a||(fo.innerHTML="",a=fo,t=t.cloneNode(),fo.appendChild(t)),n=a.querySelectorAll(e),r=n.length;r--;)if(n[r]===t)return!0;return!1})}else lo=null;var _o,xo,wo,ko=function(){};"undefined"==typeof window?wo=null:(_o=window,xo=_o.document,wo={},xo||(wo=null),Date.now||(Date.now=function(){return+new Date}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}),Object.keys||(Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!{toString:null}.propertyIsEnumerable("toString"),n=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],a=n.length;return function(r){if("object"!=typeof r&&"function"!=typeof r||null===r)throw new TypeError("Object.keys called on non-object");var i=[];for(var o in r)t.call(r,o)&&i.push(o);if(e)for(var s=0;a>s;s++)t.call(r,n[s])&&i.push(n[s]);return i}}()),Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){var n;for(void 0===e&&(e=0),0>e&&(e+=this.length),0>e&&(e=0),n=this.length;n>e;e++)if(this.hasOwnProperty(e)&&this[e]===t)return e;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){var n,a;for(n=0,a=this.length;a>n;n+=1)this.hasOwnProperty(n)&&t.call(e,this[n],n,this)}),Array.prototype.map||(Array.prototype.map=function(t,e){var n,a,r,i=this,o=[];for(i instanceof String&&(i=""+i,r=!0),n=0,a=i.length;a>n;n+=1)(i.hasOwnProperty(n)||r)&&(o[n]=t.call(e,i[n],n,i));return o}),"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(t,e){var n,a,r,i;if("function"!=typeof t)throw new TypeError(t+" is not a function");for(r=this.length,i=!1,arguments.length>1&&(a=e,i=!0),n=0;r>n;n+=1)this.hasOwnProperty(n)?i&&(a=t(a,this[n],n,this)):(a=this[n],i=!0);if(!i)throw new TypeError("Reduce of empty array with no initial value");return a}),Array.prototype.filter||(Array.prototype.filter=function(t,e){var n,a,r=[];for(n=0,a=this.length;a>n;n+=1)this.hasOwnProperty(n)&&t.call(e,this[n],n,this)&&(r[r.length]=this[n]);return r}),Array.prototype.every||(Array.prototype.every=function(t,e){var n,a,r;if(null==this)throw new TypeError;if(n=Object(this),a=n.length>>>0,"function"!=typeof t)throw new TypeError;for(r=0;a>r;r+=1)if(r in n&&!t.call(e,n[r],r,n))return!1;return!0}),"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(t){var e,n,a,r,i=[].slice;if("function"!=typeof this)throw new TypeError("Function.prototype.bind called on non-function");return e=i.call(arguments,1),n=this,a=function(){},r=function(){var r=this instanceof a&&t?this:t;return n.apply(r,e.concat(i.call(arguments)))},a.prototype=this.prototype,r.prototype=new a,r}),_o.addEventListener||!function(t,e){var n,a,r,i,o,s;t.appearsToBeIELessEqual8=!0,n=function(t,e){var n,a=this;for(n in t)a[n]=t[n];a.currentTarget=e,a.target=t.srcElement||e,a.timeStamp=+new Date,a.preventDefault=function(){t.returnValue=!1},a.stopPropagation=function(){t.cancelBubble=!0}},a=function(t,e){var a,r,i=this;a=i.listeners||(i.listeners=[]),r=a.length,a[r]=[e,function(t){e.call(i,new n(t,i))}],i.attachEvent("on"+t,a[r][1])},r=function(t,e){var n,a,r=this;if(r.listeners)for(n=r.listeners,a=n.length;a--;)n[a][0]===e&&r.detachEvent("on"+t,n[a][1])},t.addEventListener=e.addEventListener=a,t.removeEventListener=e.removeEventListener=r,"Element"in t?(t.Element.prototype.addEventListener=a,t.Element.prototype.removeEventListener=r):(s=e.createElement,e.createElement=function(t){var e=s(t);return e.addEventListener=a,e.removeEventListener=r,e},i=e.getElementsByTagName("head")[0],o=e.createElement("style"),i.insertBefore(o,i.firstChild))}(_o,xo),_o.getComputedStyle||(wo.getComputedStyle=function(){function t(n,a,r,i){var o,s=a[r],p=parseFloat(s),u=s.split(/\d/)[0];return isNaN(p)&&/^thin|medium|thick$/.test(s)&&(p=e(s),u=""),i=null!=i?i:/%|em/.test(u)&&n.parentElement?t(n.parentElement,n.parentElement.currentStyle,"fontSize",null):16,o="fontSize"==r?i:/width/i.test(r)?n.clientWidth:n.clientHeight,"em"==u?p*i:"in"==u?96*p:"pt"==u?96*p/72:"%"==u?p/100*o:p}function e(t){var e,n;return i[t]||(e=document.createElement("div"),e.style.display="block",e.style.position="fixed",e.style.width=e.style.height="0",e.style.borderRight=t+" solid black",document.getElementsByTagName("body")[0].appendChild(e),n=e.getBoundingClientRect(),i[t]=n.right-n.left),i[t]}function n(t,e){var n="border"==e?"Width":"",a=e+"Top"+n,r=e+"Right"+n,i=e+"Bottom"+n,o=e+"Left"+n;t[e]=(t[a]==t[r]==t[i]==t[o]?[t[a]]:t[a]==t[i]&&t[o]==t[r]?[t[a],t[r]]:t[o]==t[r]?[t[a],t[r],t[i]]:[t[a],t[r],t[i],t[o]]).join(" ")}function a(e){var a,r,i,s;a=e.currentStyle,r=this,i=t(e,a,"fontSize",null);for(s in a)"normal"===a[s]&&o.hasOwnProperty(s)?r[s]=o[s]:/width|height|margin.|padding.|border.+W/.test(s)?"auto"===a[s]?/^width|height/.test(s)?r[s]=("width"===s?e.clientWidth:e.clientHeight)+"px":/(?:padding)?Top|Bottom$/.test(s)&&(r[s]="0px"):r[s]=t(e,a,s,i)+"px":"styleFloat"===s?r["float"]=a[s]:r[s]=a[s];return n(r,"margin"),n(r,"padding"),n(r,"border"),r.fontSize=i+"px",r}function r(t){return new a(t)}var i={},o={fontWeight:400,lineHeight:1.2,letterSpacing:0};return a.prototype={constructor:a,getPropertyPriority:ko,getPropertyValue:function(t){return this[t]||""},item:ko,removeProperty:ko,setProperty:ko,getPropertyCSSValue:ko},r}()));var So,Eo,Co,Po=wo;try{Object.defineProperty({},"test",{value:0}),Xi&&Object.defineProperty(document.createElement("div"),"test",{value:0}),Eo=Object.defineProperty}catch(Ao){Eo=function(t,e,n){t[e]=n.value}}try{try{Object.defineProperties({},{test:{value:0}})}catch(Ao){throw Ao}Xi&&Object.defineProperties(co("div"),{test:{value:0}}),Co=Object.defineProperties}catch(Ao){Co=function(t,e){var n;for(n in e)e.hasOwnProperty(n)&&Eo(t,n,e[n])}}try{Object.create(null),So=Object.create}catch(Ao){So=function(){var t=function(){};return function(e,n){var a;return null===e?{}:(t.prototype=e,a=new t,n&&Object.defineProperties(a,n),a)}}()}var Oo,To,Ro,Mo=Object.prototype.hasOwnProperty,Lo=Object.prototype.toString,jo=/^\[object (?:Array|FileList)\]$/,Do={};to?!function(){var t=["%cRactive.js %c0.7.3 %cin debug mode, %cmore...","color: rgb(114, 157, 52); font-weight: normal;","color: rgb(85, 85, 85); font-weight: normal;","color: rgb(85, 85, 85); font-weight: normal;","color: rgb(82, 140, 224); font-weight: normal; text-decoration: underline;"],e="You're running Ractive 0.7.3 in debug mode - messages will be printed to the console to help you fix problems and optimise your application.\n\nTo disable debug mode, add this line at the start of your app:\n Ractive.DEBUG = false;\n\nTo disable debug mode when your app is minified, add this snippet:\n Ractive.DEBUG = /unminified/.test(function(){/*unminified*/});\n\nGet help and support:\n http://docs.ractivejs.org\n http://stackoverflow.com/questions/tagged/ractivejs\n http://groups.google.com/forum/#!forum/ractive-js\n http://twitter.com/ractivejs\n\nFound a bug? Raise an issue:\n https://github.com/ractivejs/ractive/issues\n\n";Ro=function(){var n=!!console.groupCollapsed;console[n?"groupCollapsed":"log"].apply(console,t),console.log(e),n&&console.groupEnd(t),Ro=ko},To=function(t,e){if(Ro(),"object"==typeof e[e.length-1]){var n=e.pop(),a=n?n.ractive:null;if(a){var r=void 0;a.component&&(r=a.component.name)&&(t="<"+r+"> "+t);var i=void 0;(i=n.node||a.fragment&&a.fragment.rendered&&a.find("*"))&&e.push(i)}}console.warn.apply(console,["%cRactive.js: %c"+t,"color: rgb(114, 157, 52);","color: rgb(85, 85, 85);"].concat(e))},Oo=function(){console.log.apply(console,arguments)}}():To=Oo=Ro=ko;var No="Bad arguments",Fo='A function was specified for "%s" %s, but no %s was returned',Io=function(t,e){return'Missing "'+t+'" '+e+" plugin. You may need to download a plugin via http://docs.ractivejs.org/latest/plugins#"+e+"s"},Bo=function(t,e,n,a){if(t===e)return y(e);if(a){var r=v("interpolators",n,a);if(r)return r(t,e)||y(e);l(Io(a,"interpolator"))}return qo.number(t,e)||qo.array(t,e)||qo.object(t,e)||y(e)},Uo=Bo,Vo={number:function(t,e){var n;return p(t)&&p(e)?(t=+t,e=+e,n=e-t,n?function(e){return t+e*n}:function(){return t}):null},array:function(t,e){var n,a,r,o;if(!i(t)||!i(e))return null;for(n=[],a=[],o=r=Math.min(t.length,e.length);o--;)a[o]=Uo(t[o],e[o]);for(o=r;o=this.duration?(null!==i&&(bs.start(this.root),this.root.viewmodel.set(i,this.to),bs.end()),this.step&&this.step(1,this.to),this.complete(this.to),r=this.root._animations.indexOf(this),-1===r&&m("Animation was not found"),this.root._animations.splice(r,1),this.running=!1,!1):(e=this.easing?this.easing(t/this.duration):t/this.duration,null!==i&&(n=this.interpolator(e),bs.start(this.root),this.root.viewmodel.set(i,n),bs.end()),this.step&&this.step(e,n),!0)):!1},stop:function(){var t;this.running=!1,t=this.root._animations.indexOf(this),-1===t&&m("Animation was not found"),this.root._animations.splice(t,1)}};var ks=ws,Ss=nt,Es={stop:ko},Cs=rt,Ps=new is("detach"),As=it,Os=ot,Ts=function(){var t,e,n;t=this._root[this._isComponentQuery?"liveComponentQueries":"liveQueries"],e=this.selector,n=t.indexOf(e),-1!==n&&(t.splice(n,1),t[e]=null)},Rs=function(t,e){var n,a,r,i,o,s,p,u,c,l;for(n=pt(t.component||t._ractive.proxy),a=pt(e.component||e._ractive.proxy),r=D(n),i=D(a);r&&r===i;)n.pop(),a.pop(),o=r,r=D(n),i=D(a);if(r=r.component||r,i=i.component||i,c=r.parentFragment,l=i.parentFragment,c===l)return s=c.items.indexOf(r),p=l.items.indexOf(i),s-p||n.length-a.length;if(u=o.fragments)return s=u.indexOf(c),p=u.indexOf(l),s-p||n.length-a.length;throw Error("An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/RactiveJS/Ractive/issues - thanks!")},Ms=function(t,e){var n;return t.compareDocumentPosition?(n=t.compareDocumentPosition(e),2&n?1:-1):Rs(t,e)},Ls=function(){this.sort(this._isComponentQuery?Rs:Ms),this._dirty=!1},js=function(){var t=this;this._dirty||(this._dirty=!0,bs.scheduleTask(function(){t._sort()}))},Ds=function(t){var e=this.indexOf(this._isComponentQuery?t.instance:t);-1!==e&&this.splice(e,1)},Ns=ut,Fs=ct,Is=lt,Bs=dt,Us=ft,Vs=ht,qs={enqueue:function(t,e){t.event&&(t._eventQueue=t._eventQueue||[],t._eventQueue.push(t.event)),t.event=e},dequeue:function(t){t._eventQueue&&t._eventQueue.length?t.event=t._eventQueue.pop():delete t.event}},Gs=qs,zs=mt,Ws=bt,Hs=yt,Ks={capture:!0,noUnwrap:!0,fullRootGet:!0},Qs=_t,Ys=new is("insert"),$s=wt,Js=function(t,e,n,a){this.root=t,this.keypath=e,this.callback=n,this.defer=a.defer,this.context=a&&a.context?a.context:t};Js.prototype={init:function(t){this.value=this.root.get(this.keypath.str),t!==!1?this.update():this.oldValue=this.value},setValue:function(t){var e=this;s(t,this.value)||(this.value=t,this.defer&&this.ready?bs.scheduleTask(function(){return e.update()}):this.update())},update:function(){this.updating||(this.updating=!0,this.callback.call(this.context,this.value,this.oldValue,this.keypath.str),this.oldValue=this.value,this.updating=!1)}};var Xs,Zs=Js,tp=kt,ep=Array.prototype.slice;Xs=function(t,e,n,a){this.root=t,this.callback=n,this.defer=a.defer,this.keypath=e,this.regex=RegExp("^"+e.str.replace(/\./g,"\\.").replace(/\*/g,"([^\\.]+)")+"$"),this.values={},this.defer&&(this.proxies=[]),this.context=a&&a.context?a.context:t},Xs.prototype={init:function(t){var e,n;if(e=tp(this.root,this.keypath),t!==!1)for(n in e)e.hasOwnProperty(n)&&this.update(S(n));else this.values=e},update:function(t){var e,n=this;if(t.isPattern){e=tp(this.root,t);for(t in e)e.hasOwnProperty(t)&&this.update(S(t))}else if(!this.root.viewmodel.implicitChanges[t.str])return this.defer&&this.ready?void bs.scheduleTask(function(){return n.getProxy(t).update()}):void this.reallyUpdate(t)},reallyUpdate:function(t){var e,n,a,r;return e=t.str,n=this.root.viewmodel.get(t),this.updating?void(this.values[e]=n):(this.updating=!0,s(n,this.values[e])&&this.ready||(a=ep.call(this.regex.exec(e),1),r=[n,this.values[e],e].concat(a),this.values[e]=n,this.callback.apply(this.context,r)),void(this.updating=!1))},getProxy:function(t){var e=this;return this.proxies[t.str]||(this.proxies[t.str]={update:function(){return e.reallyUpdate(t)}}),this.proxies[t.str]}};var np,ap,rp,ip,op,sp,pp=Xs,up=St,cp={},lp=Et,dp=Ct,fp=function(t){return t.trim()},hp=function(t){return""!==t},mp=Pt,gp=At,vp=Ot,bp=Tt,yp=Array.prototype,_p=function(t){return function(e){for(var n=arguments.length,a=Array(n>1?n-1:0),r=1;n>r;r++)a[r-1]=arguments[r];var o,s,p,u,c=[];if(e=S(P(e)),o=this.viewmodel.get(e),s=o.length,!i(o))throw Error("Called ractive."+t+"('"+e.str+"'), but '"+e.str+"' does not refer to an array");return c=bp(o,t,a),u=yp[t].apply(o,a),p=bs.start(this,!0).then(function(){return u}),c?this.viewmodel.smartUpdate(e,o,c):this.viewmodel.mark(e),bs.end(),p}},xp=_p("pop"),wp=_p("push"),kp="/* Ractive.js component styles */\n",Sp=[],Ep=!1;Xi?(rp=document.createElement("style"),rp.type="text/css",ip=document.getElementsByTagName("head")[0],sp=!1,op=rp.styleSheet,ap=function(){var t=kp+Sp.map(function(t){return"\n/* {"+t.id+"} */\n"+t.styles}).join("\n");op?op.cssText=t:rp.innerHTML=t,sp||(ip.appendChild(rp),sp=!0)},np={add:function(t){Sp.push(t),Ep=!0},apply:function(){Ep&&(ap(),Ep=!1)}}):np={add:ko,apply:ko};var Cp,Pp,Ap,Op=np,Tp=Mt,Rp=new is("render"),Mp=new is("complete"),Lp={extend:function(t,e,n){e.adapt=jt(e.adapt,j(n.adapt))},init:function(){}},jp=Lp,Dp=Dt,Np=/(?:^|\})?\s*([^\{\}]+)\s*\{/g,Fp=/\/\*.*?\*\//g,Ip=/((?:(?:\[[^\]+]\])|(?:[^\s\+\>\~:]))+)((?::[^\s\+\>\~\(]+(?:\([^\)]+\))?)?\s*[\s\+\>\~]?)\s*/g,Bp=/^@media/,Up=/\[data-ractive-css~="\{[a-z0-9-]+\}"]/g,Vp=1,qp={
name:"css",extend:function(t,e,n){if(n.css){var a=Vp++,r=n.noCssTransform?n.css:Dp(n.css,a);e.cssId=a,Op.add({id:a,styles:r})}},init:function(){}},Gp=qp,zp={name:"data",extend:function(t,e,n){var a=void 0,r=void 0;if(n.data&&u(n.data))for(a in n.data)r=n.data[a],r&&"object"==typeof r&&(u(r)||i(r))&&m("Passing a `data` option with object and array properties to Ractive.extend() is discouraged, as mutating them is likely to cause bugs. Consider using a data function instead:\n\n // this...\n data: function () {\n return {\n myObject: {}\n };\n })\n\n // instead of this:\n data: {\n myObject: {}\n }");e.data=Bt(e.data,n.data)},init:function(t,e,n){var a=Bt(t.prototype.data,n.data);return"function"==typeof a&&(a=a.call(e)),a||{}},reset:function(t){var e=this.init(t.constructor,t,t.viewmodel);return t.viewmodel.reset(e),!0}},Wp=zp,Hp=null,Kp=["preserveWhitespace","sanitize","stripComments","delimiters","tripleDelimiters","interpolate"],Qp={fromId:zt,isHashedId:Wt,isParsed:Ht,getParseOptions:Kt,createHelper:qt,parse:Gt},Yp=Qp,$p={name:"template",extend:function(t,e,n){var a;"template"in n&&(a=n.template,"function"==typeof a?e.template=a:e.template=Jt(a,e))},init:function(t,e,n){var a,r;a="template"in n?n.template:t.prototype.template,"function"==typeof a&&(r=a,a=Yt(e,r),e._config.template={fn:r,result:a}),a=Jt(a,e),e.template=a.t,a.p&&Xt(e.partials,a.p)},reset:function(t){var e,n=Qt(t);return n?(e=Jt(n,t),t.template=e.t,Xt(t.partials,e.p,!0),!0):void 0}},Jp=$p;Cp=["adaptors","components","computed","decorators","easing","events","interpolators","partials","transitions"],Pp=function(t,e){this.name=t,this.useDefaults=e},Pp.prototype={constructor:Pp,extend:function(t,e,n){this.configure(this.useDefaults?t.defaults:t,this.useDefaults?e:e.constructor,n)},init:function(){},configure:function(t,e,n){var a,r=this.name,i=n[r];a=So(t[r]);for(var o in i)a[o]=i[o];e[r]=a},reset:function(t){var e=t[this.name],n=!1;return Object.keys(e).forEach(function(t){var a=e[t];a._fn&&(a._fn.isOwner?e[t]=a._fn:delete e[t],n=!0)}),n}},Ap=Cp.map(function(t){return new Pp(t,"computed"===t)});var Xp,Zp,tu,eu,nu,au,ru=Ap,iu=Zt,ou=ae;eu={adapt:jp,css:Gp,data:Wp,template:Jp},tu=Object.keys(so),au=oe(tu.filter(function(t){return!eu[t]})),nu=oe(tu.concat(ru.map(function(t){return t.name}))),Zp=[].concat(tu.filter(function(t){return!ru[t]&&!eu[t]}),ru,eu.data,eu.template,eu.css),Xp={extend:function(t,e,n){return re("extend",t,e,n)},init:function(t,e,n){return re("init",t,e,n)},reset:function(t){return Zp.filter(function(e){return e.reset&&e.reset(t)}).map(function(t){return t.name})},order:Zp};var su,pu,uu=Xp,cu=se,lu=pe,du=ue,fu=ce,hu=le,mu=de,gu=fe,vu=he,bu=/^\s+/;pu=function(t){this.name="ParseError",this.message=t;try{throw Error(t)}catch(e){this.stack=e.stack}},pu.prototype=Error.prototype,su=function(t,e){var n,a,r=0;for(this.str=t,this.options=e||{},this.pos=0,this.lines=this.str.split("\n"),this.lineEnds=this.lines.map(function(t){var e=r+t.length+1;return r=e,e},0),this.init&&this.init(t,e),n=[];this.posn;n+=1)if(this.pos=e,r=t[n](this))return r;return null},getLinePos:function(t){for(var e,n=0,a=0;t>=this.lineEnds[n];)a=this.lineEnds[n],n+=1;return e=t-a,[n+1,e+1,t]},error:function(t){var e=this.getLinePos(this.pos),n=e[0],a=e[1],r=this.lines[e[0]-1],i=0,o=r.replace(/\t/g,function(t,n){return n /g,lc=/&/g;var vc=function(){return e(this.node)},bc=function(t){this.type=ku,this.text=t.template};bc.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createTextNode(this.text)),this.node},toString:function(t){return t?Se(this.text):this.text},unrender:function(t){return t?this.detach():void 0}};var yc=bc,_c=Ee,xc=Ce,wc=function(t,e,n){var a;this.ref=e,this.resolved=!1,this.root=t.root,this.parentFragment=t.parentFragment,this.callback=n,a=ls(t.root,e,t.parentFragment),void 0!=a?this.resolve(a):bs.addUnresolved(this)};wc.prototype={resolve:function(t){this.keypath&&!t&&bs.addUnresolved(this),this.resolved=!0,this.keypath=t,this.callback(t)},forceResolution:function(){this.resolve(S(this.ref))},rebind:function(t,e){var n;void 0!=this.keypath&&(n=this.keypath.replace(t,e),void 0!==n&&this.resolve(n))},unbind:function(){this.resolved||bs.removeUnresolved(this)}};var kc=wc,Sc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,this.rebind()},Ec={"@keypath":{prefix:"c",prop:["context"]},"@index":{prefix:"i",prop:["index"]},"@key":{prefix:"k",prop:["key","index"]}};Sc.prototype={rebind:function(){var t,e=this.ref,n=this.parentFragment,a=Ec[e];if(!a)throw Error('Unknown special reference "'+e+'" - valid references are @index, @key and @keypath');if(this.cached)return this.callback(S("@"+a.prefix+Pe(this.cached,a)));if(-1!==a.prop.indexOf("index")||-1!==a.prop.indexOf("key"))for(;n;){if(n.owner.currentSubtype===Bu&&void 0!==(t=Pe(n,a)))return this.cached=n,n.registerIndexRef(this),this.callback(S("@"+a.prefix+t));n=!n.parent&&n.owner&&n.owner.component&&n.owner.component.parentFragment&&!n.owner.component.instance.isolated?n.owner.component.parentFragment:n.parent}else for(;n;){if(void 0!==(t=Pe(n,a)))return this.callback(S("@"+a.prefix+t.str));n=n.parent}},unbind:function(){this.cached&&this.cached.unregisterIndexRef(this)}};var Cc=Sc,Pc=function(t,e,n){this.parentFragment=t.parentFragment,this.ref=e,this.callback=n,e.ref.fragment.registerIndexRef(this),this.rebind()};Pc.prototype={rebind:function(){var t,e=this.ref.ref;t="k"===e.ref.t?"k"+e.fragment.key:"i"+e.fragment.index,void 0!==t&&this.callback(S("@"+t))},unbind:function(){this.ref.ref.fragment.unregisterIndexRef(this)}};var Ac=Pc,Oc=Ae;Ae.resolve=function(t){var e,n,a={};for(e in t.refs)n=t.refs[e],a[n.ref.n]="k"===n.ref.t?n.fragment.key:n.fragment.index;return a};var Tc,Rc=Oe,Mc=Te,Lc={},jc=Function.prototype.bind;Tc=function(t,e,n,a){var r,i=this;r=t.root,this.root=r,this.parentFragment=e,this.callback=a,this.owner=t,this.str=n.s,this.keypaths=[],this.pending=n.r.length,this.refResolvers=n.r.map(function(t,e){return Rc(i,t,function(t){i.resolve(e,t)})}),this.ready=!0,this.bubble()},Tc.prototype={bubble:function(){this.ready&&(this.uniqueString=Me(this.str,this.keypaths),this.keypath=Le(this.uniqueString),this.createEvaluator(),this.callback(this.keypath))},unbind:function(){for(var t;t=this.refResolvers.pop();)t.unbind()},resolve:function(t,e){this.keypaths[t]=e,this.bubble()},createEvaluator:function(){var t,e,n,a,r,i=this;a=this.keypath,t=this.root.viewmodel.computations[a.str],t?this.root.viewmodel.mark(a):(r=Mc(this.str,this.refResolvers.length),e=this.keypaths.map(function(t){var e;return"undefined"===t?function(){}:t.isSpecial?(e=t.value,function(){return e}):function(){var e=i.root.viewmodel.get(t,{noUnwrap:!0,fullRootGet:!0});return"function"==typeof e&&(e=De(e,i.root)),e}}),n={deps:this.keypaths.filter(je),getter:function(){var t=e.map(Re);return r.apply(null,t)}},t=this.root.viewmodel.compute(a,n))},rebind:function(t,e){this.refResolvers.forEach(function(n){return n.rebind(t,e)})}};var Dc=Tc,Nc=function(t,e,n){var a=this;this.resolver=e,this.root=e.root,this.parentFragment=n,this.viewmodel=e.root.viewmodel,"string"==typeof t?this.value=t:t.t===Nu?this.refResolver=Rc(this,t.n,function(t){a.resolve(t)}):new Dc(e,n,t,function(t){a.resolve(t)})};Nc.prototype={resolve:function(t){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.keypath=t,this.value=this.viewmodel.get(t),this.bind(),this.resolver.bubble()},bind:function(){this.viewmodel.register(this.keypath,this)},rebind:function(t,e){this.refResolver&&this.refResolver.rebind(t,e)},setValue:function(t){this.value=t,this.resolver.bubble()},unbind:function(){this.keypath&&this.viewmodel.unregister(this.keypath,this),this.refResolver&&this.refResolver.unbind()},forceResolution:function(){this.refResolver&&this.refResolver.forceResolution()}};var Fc=Nc,Ic=function(t,e,n){var a,r,i,o,s=this;this.parentFragment=o=t.parentFragment,this.root=a=t.root,this.mustache=t,this.ref=r=e.r,this.callback=n,this.unresolved=[],(i=ls(a,r,o))?this.base=i:this.baseResolver=new kc(this,r,function(t){s.base=t,s.baseResolver=null,s.bubble()}),this.members=e.m.map(function(t){return new Fc(t,s,o)}),this.ready=!0,this.bubble()};Ic.prototype={getKeypath:function(){var t=this.members.map(Ne);return!t.every(Fe)||this.baseResolver?null:this.base.join(t.join("."))},bubble:function(){this.ready&&!this.baseResolver&&this.callback(this.getKeypath())},unbind:function(){this.members.forEach(K)},rebind:function(t,e){var n;if(this.base){var a=this.base.replace(t,e);a&&a!==this.base&&(this.base=a,n=!0)}this.members.forEach(function(a){a.rebind(t,e)&&(n=!0)}),n&&this.bubble()},forceResolution:function(){this.baseResolver&&(this.base=S(this.ref),this.baseResolver.unbind(),this.baseResolver=null),this.members.forEach(Ie),this.bubble()}};var Bc=Ic,Uc=Be,Vc=Ue,qc=Ve,Gc={getValue:xc,init:Uc,resolve:Vc,rebind:qc},zc=function(t){this.type=Su,Gc.init(this,t)};zc.prototype={update:function(){this.node.data=void 0==this.value?"":this.value},resolve:Gc.resolve,rebind:Gc.rebind,detach:vc,unbind:_c,render:function(){return this.node||(this.node=document.createTextNode(n(this.value))),this.node},unrender:function(t){t&&e(this.node)},getValue:Gc.getValue,setValue:function(t){var e;this.keypath&&(e=this.root.viewmodel.wrapped[this.keypath.str])&&(t=e.get()),s(t,this.value)||(this.value=t,this.parentFragment.bubble(),this.node&&bs.addView(this))},firstNode:function(){return this.node},toString:function(t){var e=""+n(this.value);return t?Se(e):e}};var Wc=zc,Hc=qe,Kc=Ge,Qc=ze,Yc=We,$c=He,Jc=Ke,Xc=Qe,Zc=Ye,tl=$e,el=function(t,e){Gc.rebind.call(this,t,e)},nl=Xe,al=Ze,rl=ln,il=dn,ol=fn,sl=gn,pl=function(t){this.type=Cu,this.subtype=this.currentSubtype=t.template.n,this.inverted=this.subtype===Iu,this.pElement=t.pElement,this.fragments=[],this.fragmentsToCreate=[],this.fragmentsToRender=[],this.fragmentsToUnrender=[],t.template.i&&(this.indexRefs=t.template.i.split(",").map(function(t,e){return{n:t,t:0===e?"k":"i"}})),this.renderedFragments=[],this.length=0,Gc.init(this,t)};pl.prototype={bubble:Hc,detach:Kc,find:Qc,findAll:Yc,findAllComponents:$c,findComponent:Jc,findNextNode:Xc,firstNode:Zc,getIndexRef:function(t){if(this.indexRefs)for(var e=this.indexRefs.length;e--;){var n=this.indexRefs[e];if(n.n===t)return n}},getValue:Gc.getValue,shuffle:tl,rebind:el,render:nl,resolve:Gc.resolve,setValue:al,toString:rl,unbind:il,unrender:ol,update:sl};var ul,cl,ll=pl,dl=vn,fl=bn,hl=yn,ml=_n,gl={};try{co("table").innerHTML="foo"}catch(Ao){ul=!0,cl={TABLE:['"],THEAD:['"],TBODY:['"],TR:['"],SELECT:[''," "]}}var vl=function(t,e,n){var a,r,i,o,s,p=[];if(null!=t&&""!==t){for(ul&&(r=cl[e.tagName])?(a=xn("DIV"),a.innerHTML=r[0]+t+r[1],a=a.querySelector(".x"),"SELECT"===a.tagName&&(i=a.options[a.selectedIndex])):e.namespaceURI===no.svg?(a=xn("DIV"),a.innerHTML=''+t+" ",a=a.querySelector(".x")):(a=xn(e.tagName),a.innerHTML=t,"SELECT"===a.tagName&&(i=a.options[a.selectedIndex]));o=a.firstChild;)p.push(o),n.appendChild(o);if("SELECT"===e.tagName)for(s=p.length;s--;)p[s]!==i&&(p[s].selected=!1)}return p},bl=wn,yl=Sn,_l=En,xl=Cn,wl=Pn,kl=An,Sl=function(t){this.type=Eu,Gc.init(this,t)};Sl.prototype={detach:dl,find:fl,findAll:hl,firstNode:ml,getValue:Gc.getValue,rebind:Gc.rebind,render:yl,resolve:Gc.resolve,setValue:_l,toString:xl,unbind:_c,unrender:wl,update:kl};var El,Cl,Pl,Al,Ol=Sl,Tl=function(){this.parentFragment.bubble()},Rl=On,Ml=function(t){return this.node?lo(this.node,t)?this.node:this.fragment&&this.fragment.find?this.fragment.find(t):void 0:null},Ll=function(t,e){e._test(this,!0)&&e.live&&(this.liveQueries||(this.liveQueries=[])).push(e),this.fragment&&this.fragment.findAll(t,e)},jl=function(t,e){this.fragment&&this.fragment.findAllComponents(t,e)},Dl=function(t){return this.fragment?this.fragment.findComponent(t):void 0},Nl=Tn,Fl=Rn,Il=Mn,Bl=/^true|on|yes|1$/i,Ul=/^[0-9]+$/,Vl=function(t,e){var n,a,r;return r=e.a||{},a={},n=r.twoway,void 0!==n&&(a.twoway=0===n||Bl.test(n)),n=r.lazy,void 0!==n&&(0!==n&&Ul.test(n)?a.lazy=parseInt(n):a.lazy=0===n||Bl.test(n)),a},ql=Ln;El="altGlyph altGlyphDef altGlyphItem animateColor animateMotion animateTransform clipPath feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence foreignObject glyphRef linearGradient radialGradient textPath vkern".split(" "),Cl="attributeName attributeType baseFrequency baseProfile calcMode clipPathUnits contentScriptType contentStyleType diffuseConstant edgeMode externalResourcesRequired filterRes filterUnits glyphRef gradientTransform gradientUnits kernelMatrix kernelUnitLength keyPoints keySplines keyTimes lengthAdjust limitingConeAngle markerHeight markerUnits markerWidth maskContentUnits maskUnits numOctaves pathLength patternContentUnits patternTransform patternUnits pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits refX refY repeatCount repeatDur requiredExtensions requiredFeatures specularConstant specularExponent spreadMethod startOffset stdDeviation stitchTiles surfaceScale systemLanguage tableValues targetX targetY textLength viewBox viewTarget xChannelSelector yChannelSelector zoomAndPan".split(" "),Pl=function(t){for(var e={},n=t.length;n--;)e[t[n].toLowerCase()]=t[n];return e},Al=Pl(El.concat(Cl));var Gl=function(t){var e=t.toLowerCase();return Al[e]||e},zl=function(t,e){var n,a;if(n=e.indexOf(":"),-1===n||(a=e.substr(0,n),"xmlns"===a))t.name=t.element.namespace!==no.html?Gl(e):e;else if(e=e.substring(n+1),t.name=Gl(e),t.namespace=no[a.toLowerCase()],t.namespacePrefix=a,!t.namespace)throw'Unknown namespace ("'+a+'")'},Wl=jn,Hl=Dn,Kl=Nn,Ql=Fn,Yl={"accept-charset":"acceptCharset",accesskey:"accessKey",bgcolor:"bgColor","class":"className",codebase:"codeBase",colspan:"colSpan",contenteditable:"contentEditable",datetime:"dateTime",dirname:"dirName","for":"htmlFor","http-equiv":"httpEquiv",ismap:"isMap",maxlength:"maxLength",novalidate:"noValidate",pubdate:"pubDate",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"},$l=In,Jl=Un,Xl=Vn,Zl=qn,td=Gn,ed=zn,nd=Wn,ad=Hn,rd=Kn,id=Qn,od=Yn,sd=$n,pd=Jn,ud=Xn,cd=Zn,ld=function(t){this.init(t)};ld.prototype={bubble:ql,init:Hl,rebind:Kl,render:Ql,toString:$l,unbind:Jl,update:cd};var dd,fd=ld,hd=function(t,e){var n,a,r=[];for(n in e)"twoway"!==n&&"lazy"!==n&&e.hasOwnProperty(n)&&(a=new fd({element:t,name:n,value:e[n],root:t.root}),r[n]=a,"value"!==n&&r.push(a));return(a=r.value)&&r.push(a),r};"undefined"!=typeof document&&(dd=co("div"));var md=function(t,e){this.element=t,this.root=t.root,this.parentFragment=t.parentFragment,this.attributes=[],this.fragment=new rg({root:t.root,owner:this,template:[e]})};md.prototype={bubble:function(){this.node&&this.update(),this.element.bubble()},rebind:function(t,e){this.fragment.rebind(t,e)},render:function(t){this.node=t,this.isSvg=t.namespaceURI===no.svg,this.update()},unbind:function(){this.fragment.unbind()},update:function(){var t,e,n=this;t=""+this.fragment,e=ta(t,this.isSvg),this.attributes.filter(function(t){return ea(e,t)}).forEach(function(t){n.node.removeAttribute(t.name)}),e.forEach(function(t){n.node.setAttribute(t.name,t.value)}),this.attributes=e},toString:function(){return""+this.fragment}};var gd=md,vd=function(t,e){return e?e.map(function(e){return new gd(t,e)}):[]},bd=function(t){var e,n,a,r;if(this.element=t,this.root=t.root,this.attribute=t.attributes[this.name||"value"],e=this.attribute.interpolator,e.twowayBinding=this,n=e.keypath){if("}"===n.str.slice(-1))return g("Two-way binding does not work with expressions (`%s` on <%s>)",e.resolver.uniqueString,t.name,{ractive:this.root}),!1;if(n.isSpecial)return g("Two-way binding does not work with %s",e.resolver.ref,{ractive:this.root}),!1}else{var i=e.template.r?"'"+e.template.r+"' reference":"expression";m("The %s being used for two-way binding is ambiguous, and may cause unexpected results. Consider initialising your data to eliminate the ambiguity",i,{ractive:this.root}),e.resolver.forceResolution(),n=e.keypath}this.attribute.isTwoway=!0,this.keypath=n,a=this.root.viewmodel.get(n),void 0===a&&this.getInitialValue&&(a=this.getInitialValue(),void 0!==a&&this.root.viewmodel.set(n,a)),(r=na(t))&&(this.resetValue=a,r.formBindings.push(this))};bd.prototype={handleChange:function(){var t=this;bs.start(this.root),this.attribute.locked=!0,this.root.viewmodel.set(this.keypath,this.getValue()),bs.scheduleTask(function(){return t.attribute.locked=!1}),bs.end()},rebound:function(){var t,e,n;e=this.keypath,n=this.attribute.interpolator.keypath,e!==n&&(N(this.root._twowayBindings[e.str],this),this.keypath=n,t=this.root._twowayBindings[n.str]||(this.root._twowayBindings[n.str]=[]),t.push(this))},unbind:function(){}},bd.extend=function(t){var e,n=this;return e=function(t){bd.call(this,t),this.init&&this.init()},e.prototype=So(n.prototype),a(e.prototype,t),e.extend=bd.extend,e};var yd,_d=bd,xd=aa;yd=_d.extend({getInitialValue:function(){return""},getValue:function(){return this.element.node.value},render:function(){var t,e=this.element.node,n=!1;this.rendered=!0,t=this.root.lazy,this.element.lazy===!0?t=!0:this.element.lazy===!1?t=!1:p(this.element.lazy)?(t=!1,n=+this.element.lazy):p(t||"")&&(n=+t,t=!1,this.element.lazy=n),this.handler=n?ia:xd,e.addEventListener("change",xd,!1),t||(e.addEventListener("input",this.handler,!1),e.attachEvent&&e.addEventListener("keyup",this.handler,!1)),e.addEventListener("blur",ra,!1)},unrender:function(){var t=this.element.node;this.rendered=!1,t.removeEventListener("change",xd,!1),t.removeEventListener("input",this.handler,!1),t.removeEventListener("keyup",this.handler,!1),t.removeEventListener("blur",ra,!1)}});var wd=yd,kd=wd.extend({getInitialValue:function(){return this.element.fragment?""+this.element.fragment:""},getValue:function(){return this.element.node.innerHTML}}),Sd=kd,Ed=oa,Cd={},Pd=_d.extend({name:"checked",init:function(){this.siblings=Ed(this.root._guid,"radio",this.element.getAttribute("name")),this.siblings.push(this)},render:function(){var t=this.element.node;t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},handleChange:function(){bs.start(this.root),this.siblings.forEach(function(t){t.root.viewmodel.set(t.keypath,t.getValue())}),bs.end()},getValue:function(){return this.element.node.checked},unbind:function(){N(this.siblings,this)}}),Ad=Pd,Od=_d.extend({name:"name",init:function(){this.siblings=Ed(this.root._guid,"radioname",this.keypath.str),this.siblings.push(this),this.radioName=!0},getInitialValue:function(){return this.element.getAttribute("checked")?this.element.getAttribute("value"):void 0},render:function(){var t=this.element.node;t.name="{{"+this.keypath.str+"}}",t.checked=this.root.viewmodel.get(this.keypath)==this.element.getAttribute("value"),t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},getValue:function(){var t=this.element.node;return t._ractive?t._ractive.value:t.value},handleChange:function(){this.element.node.checked&&_d.prototype.handleChange.call(this)},rebound:function(t,e){var n;_d.prototype.rebound.call(this,t,e),(n=this.element.node)&&(n.name="{{"+this.keypath.str+"}}")},unbind:function(){N(this.siblings,this)}}),Td=Od,Rd=_d.extend({name:"name",getInitialValue:function(){return this.noInitialValue=!0,[]},init:function(){var t,e;this.checkboxName=!0,this.siblings=Ed(this.root._guid,"checkboxes",this.keypath.str),this.siblings.push(this),this.noInitialValue&&(this.siblings.noInitialValue=!0),this.siblings.noInitialValue&&this.element.getAttribute("checked")&&(t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),t.push(e))},unbind:function(){N(this.siblings,this)},render:function(){var t,e,n=this.element.node;t=this.root.viewmodel.get(this.keypath),e=this.element.getAttribute("value"),i(t)?this.isChecked=M(t,e):this.isChecked=t==e,n.name="{{"+this.keypath.str+"}}",n.checked=this.isChecked,n.addEventListener("change",xd,!1),n.attachEvent&&n.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},changed:function(){var t=!!this.isChecked;return this.isChecked=this.element.node.checked,this.isChecked===t},handleChange:function(){this.isChecked=this.element.node.checked,_d.prototype.handleChange.call(this)},getValue:function(){return this.siblings.filter(sa).map(pa)}}),Md=Rd,Ld=_d.extend({name:"checked",render:function(){var t=this.element.node;t.addEventListener("change",xd,!1),t.attachEvent&&t.addEventListener("click",xd,!1)},unrender:function(){var t=this.element.node;t.removeEventListener("change",xd,!1),t.removeEventListener("click",xd,!1)},getValue:function(){return this.element.node.checked}}),jd=Ld,Dd=_d.extend({getInitialValue:function(){var t,e,n,a,r=this.element.options;if(void 0===this.element.getAttribute("value")&&(e=t=r.length,t)){for(;e--;)if(r[e].getAttribute("selected")){n=r[e].getAttribute("value"),a=!0;break}if(!a)for(;++ee;e+=1)if(a=t[e],t[e].selected)return r=a._ractive?a._ractive.value:a.value},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))}}),Nd=Dd,Fd=Nd.extend({getInitialValue:function(){return this.element.options.filter(function(t){return t.getAttribute("selected")}).map(function(t){return t.getAttribute("value")})},render:function(){var t;this.element.node.addEventListener("change",xd,!1),t=this.root.viewmodel.get(this.keypath),void 0===t&&this.handleChange()},unrender:function(){this.element.node.removeEventListener("change",xd,!1)},setValue:function(){throw Error("TODO not implemented yet")},getValue:function(){var t,e,n,a,r,i;for(t=[],e=this.element.node.options,a=e.length,n=0;a>n;n+=1)r=e[n],r.selected&&(i=r._ractive?r._ractive.value:r.value,t.push(i));return t},handleChange:function(){var t,e,n;return t=this.attribute,e=t.value,n=this.getValue(),void 0!==e&&L(n,e)||Nd.prototype.handleChange.call(this),this},forceUpdate:function(){var t=this,e=this.getValue();void 0!==e&&(this.attribute.locked=!0,bs.scheduleTask(function(){return t.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,e))},updateModel:function(){void 0!==this.attribute.value&&this.attribute.value.length||this.root.viewmodel.set(this.keypath,this.initialValue)}}),Id=Fd,Bd=_d.extend({render:function(){this.element.node.addEventListener("change",xd,!1)},unrender:function(){this.element.node.removeEventListener("change",xd,!1)},getValue:function(){return this.element.node.files}}),Ud=Bd,Vd=wd.extend({getInitialValue:function(){},getValue:function(){var t=parseFloat(this.element.node.value);return isNaN(t)?void 0:t}}),qd=ua,Gd=la,zd=da,Wd=fa,Hd=ha,Kd=/^event(?:\.(.+))?/,Qd=ba,Yd=ya,$d={},Jd={touchstart:!0,touchmove:!0,touchend:!0,touchcancel:!0,touchleave:!0},Xd=xa,Zd=wa,tf=ka,ef=Sa,nf=Ea,af=function(t,e,n){this.init(t,e,n)};af.prototype={bubble:Gd,fire:zd,getAction:Wd,init:Hd,listen:Yd,rebind:Xd,render:Zd,resolve:tf,unbind:ef,unrender:nf};var rf=af,of=function(t,e){var n,a,r,i,o=[];for(a in e)if(e.hasOwnProperty(a))for(r=a.split("-"),n=r.length;n--;)i=new rf(t,r[n],e[a]),o.push(i);return o},sf=function(t,e){var n,a,r,i=this;this.element=t,this.root=n=t.root,a=e.n||e,("string"==typeof a||(r=new rg({template:a,root:n,owner:t}),a=""+r,r.unbind(),""!==a))&&(e.a?this.params=e.a:e.d&&(this.fragment=new rg({template:e.d,root:n,owner:t}),this.params=this.fragment.getArgsList(),this.fragment.bubble=function(){this.dirtyArgs=this.dirtyValue=!0,i.params=this.getArgsList(),i.ready&&i.update()}),this.fn=v("decorators",n,a),this.fn||l(Io(a,"decorator")))};sf.prototype={init:function(){var t,e,n;if(t=this.element.node,this.params?(n=[t].concat(this.params),e=this.fn.apply(this.root,n)):e=this.fn.call(this.root,t),!e||!e.teardown)throw Error("Decorator definition must return an object with a teardown method");this.actual=e,this.ready=!0},update:function(){this.actual.update?this.actual.update.apply(this.root,this.params):(this.actual.teardown(!0),this.init())},rebind:function(t,e){this.fragment&&this.fragment.rebind(t,e)},teardown:function(t){this.torndown=!0,this.ready&&this.actual.teardown(),!t&&this.fragment&&this.fragment.unbind()}};var pf,uf,cf,lf=sf,df=Ma,ff=La,hf=Ba,mf=function(t){
-return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xi?(uf={},cf=co("div").style,pf=function(t){var e,n,a;if(t=mf(t),!uf[t])if(void 0!==cf[t])uf[t]=t;else for(a=t.charAt(0).toUpperCase()+t.substring(1),e=ro.length;e--;)if(n=ro[e],void 0!==cf[n+a]){uf[t]=n+a;break}return uf[t]}):pf=null;var gf,vf,bf=pf;Xi?(vf=window.getComputedStyle||Po.getComputedStyle,gf=function(t){var e,n,a,r,o;if(e=vf(this.node),"string"==typeof t)return o=e[bf(t)],"0px"===o&&(o=0),o;if(!i(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},a=t.length;a--;)r=t[a],o=e[bf(r)],"0px"===o&&(o=0),n[r]=o;return n}):gf=null;var yf=gf,_f=function(t,e){var n;if("string"==typeof t)this.node.style[bf(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[bf(n)]=t[n]);return this},xf=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(g(Io(t.easing,"easing")),e=Ua)):e="function"==typeof t.easing?t.easing:Ua,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,xs.add(this)};xf.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wf,kf,Sf,Ef,Cf,Pf,Af,Of,Tf=xf,Rf=RegExp("^-(?:"+ro.join("|")+")-"),Mf=function(t){return t.replace(Rf,"")},Lf=RegExp("^(?:"+ro.join("|")+")([A-Z])"),jf=function(t){var e;return t?(Lf.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Df={},Nf={};Xi?(kf=co("div").style,function(){void 0!==kf.transition?(Sf="transition",Ef="transitionend",Cf=!0):void 0!==kf.webkitTransition?(Sf="webkitTransition",Ef="webkitTransitionEnd",Cf=!0):Cf=!1}(),Sf&&(Pf=Sf+"Duration",Af=Sf+"Property",Of=Sf+"TimingFunction"),wf=function(t,e,n,a,r){setTimeout(function(){var i,o,s,p,u;p=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Af]=a.map(bf).map(jf).join(","),t.node.style[Of]=jf(n.easing||"linear"),t.node.style[Pf]=n.duration/1e3+"s",u=function(e){var n;n=a.indexOf(mf(Mf(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},t.node.addEventListener(Ef,u,!1),setTimeout(function(){for(var r,c,l,d,f,h=a.length,g=[];h--;)d=a[h],r=i+d,Cf&&!Nf[r]&&(t.node.style[bf(d)]=e[d],Df[r]||(c=t.getStyle(d),Df[r]=t.getStyle(d)!=e[d],Nf[r]=!Df[r],Nf[r]&&(t.node.style[bf(d)]=c))),(!Cf||Nf[r])&&(void 0===c&&(c=t.getStyle(d)),l=a.indexOf(d),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),f=/[^\d]*$/.exec(e[d])[0],g.push({name:bf(d),interpolator:Uo(parseFloat(c),parseFloat(e[d])),suffix:f}));g.length?new Tf({root:t.root,duration:n.duration,easing:mf(n.easing||""),step:function(e){var n,a;for(a=g.length;a--;)n=g[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,p()}}):o=!0,a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},0)},n.delay||0)}):wf=null;var Ff,If,Bf,Uf,Vf,qf=wf;if("undefined"!=typeof document){if(Ff="hidden",Vf={},Ff in document)Bf="";else for(Uf=ro.length;Uf--;)If=ro[Uf],Ff=If+"Hidden",Ff in document&&(Bf=If);void 0!==Bf?(document.addEventListener(Bf+"visibilitychange",Va),Va()):("onfocusout"in document?(document.addEventListener("focusout",qa),document.addEventListener("focusin",Ga)):(window.addEventListener("pagehide",qa),window.addEventListener("blur",qa),window.addEventListener("pageshow",Ga),window.addEventListener("focus",Ga)),Vf.hidden=!1)}var Gf,zf,Wf,Hf=Vf;Xi?(zf=window.getComputedStyle||Po.getComputedStyle,Gf=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hf.hidden)return this.setStyle(t,e),Wf||(Wf=us.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(g('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new us(function(t){var e,i,o,s,p,u,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zf(r.node),p={},u=e.length;u--;)c=e[u],s=o[bf(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bf(c)]=s);return i.length?void qf(r,a,n,i,t):void t()});return i}):Gf=null;var Kf=Gf,Qf=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},Yf=za,$f=function(t,e,n){this.init(t,e,n)};$f.prototype={init:hf,start:Yf,getStyle:yf,setStyle:_f,animateStyle:Kf,processParams:Qf};var Jf,Xf,Zf=$f,th=Ha;Jf=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xf=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&$a(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Se(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""+this.template.e+">"),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Rl,find:Ml,findAll:Ll,findAllComponents:jl,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:df,rebind:ff,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,ph=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},uh=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',dh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Au,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Gc.init(this,t),this.keypath||((n=uh(this.root,this.name,e))?(_c.call(this),this.isNamed=!0,this.setTemplate(n)):g(lh,this.name))};dh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||qc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Gc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=uh(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=uh(this.root,this.name,this.parentFragment))&&(_c.call(this),this.isNamed=!0),e||g(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rg({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===ku?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||_c.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var fh,hh,mh,gh=dh,vh=pr,bh=ur,yh=new is("detach"),_h=cr,xh=lr,wh=dr,kh=fr,Sh=hr,Eh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bp(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};Eo(Ph,t,{value:e})}),fh={},fh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],Eo(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Rh,Mh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=S(n),e._ractive||(Eo(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Mh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Rh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Rh);a.splice(r,1)}}else delete t._ractive,Mh.unpatch(this.value)}},Rh="Something went wrong in a rather interesting way";var Lh,jh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Lh={filter:function(t,e,n){var a,r;return e?(e=S(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new jh(t,e,n)}},jh=function(t,e,n){var a,r,i;return n=S(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void gr(this,e,r)},jh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){Lh=!1}var Ih,Bh,Uh=Lh;Uh&&(Ih={filter:function(t,e,n){return Uh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Uh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var Vh=Ih,qh=vr,Gh={},zh=_r,Wh=xr,Hh=Sr,Kh=Or,Qh=Tr,Yh=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Yh.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var $h=Yh,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),d(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Rr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new $h(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Mr,tm={FAILED_LOOKUP:!0},em=Lr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,p;s=a,p=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&p>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},pm=Ir,um={},cm=Vr,lm=Gr,dm=zr,fm=Wr,hm=Kr,mm={implicit:!0},gm={noCascade:!0},vm=Yr,bm=$r,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=So(null),this.deps={computed:So(null),"default":So(null)},this.depsMap={computed:So(null),"default":So(null)},this.patternObservers=[],this.specials=So(null),this.wrapped=So(null),this.computations=So(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=So(null);for(e in s)this.map(S(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(S(e),o[e]);this.ready=!0};ym.prototype={adapt:qh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:pm,register:cm,release:lm,reset:dm,set:fm,smartUpdate:hm,teardown:vm,unregister:bm};var _m=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var xm=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Sm=new is("construct"),Em=new is("config"),Cm=new xm("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Rm=function(t,e,n,r,o){var s,p,u,c,l,d,f={},h={},g={},v=[];for(p=t.parentFragment,u=t.root,o=o||{},a(f,o),o.content=r||[],f[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=p;c;){if(c.owner.type===Mu){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=dc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");di(o)?(g[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?d?s.set(e,t.value):(h[e]=t.value,delete g[e]):d?s.viewmodel.mappings[e].resolve(t):g[e].keypath=t})):r=new Tm(t,o,function(t){d?s.set(e,t):h[e]=t}),v.push(r)}}),s=So(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:u.magic||e.defaults.magic,modifyArrays:u.modifyArrays,adapt:u.adapt},{parent:u,component:t,container:l,mappings:g,inlinePartials:f,cssIds:p.cssIds}),d=!0,t.resolvers=v,s},Mm=fi,Lm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},jm=mi,Dm=gi,Nm=vi,Fm=bi,Im=yi,Bm=new is("teardown"),Um=xi,Vm=function(t,e){this.init(t,e)};Vm.prototype={detach:bh,find:_h,findAll:xh,findAllComponents:wh,findComponent:kh,findNextNode:Sh,firstNode:Eh,init:jm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:Um};var qm=Vm,Gm=function(t){this.type=Ou,this.value=t.template.c};Gm.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Gm,Wm=function(t){var e,n;this.type=Mu,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rg({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,Ym=wi,$m=Si,Jm=Ei,Xm=Ci,Zm=Oi,tg=Ri,eg=function(t){this.init(t)};eg.prototype={bubble:cu,detach:lu,find:du,findAll:fu,findAllComponents:hu,findComponent:mu,findNextNode:gu,firstNode:vu,getArgsList:hc,getNode:mc,getValue:gc,init:Ym,rebind:$m,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tg};var ng,ag,rg=eg,ig=Mi,og=["template","partials","components","decorators","events"],sg=new is("reset"),pg=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Au&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Ru&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pu&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},ug=Li,cg=_p("reverse"),lg=ji,dg=_p("shift"),fg=_p("sort"),hg=_p("splice"),mg=Ni,gg=Fi,vg=new is("teardown"),bg=Bi,yg=Ui,_g=Vi,xg=new is("unrender"),wg=_p("unshift"),kg=qi,Sg=new is("update"),Eg=Gi,Cg={add:Zo,animate:Ss,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:Us,findParent:Vs,fire:Ws,get:Hs,insert:Qs,merge:$s,observe:lp,observeOnce:dp,off:mp,on:gp,once:vp,pop:xp,push:wp,render:Tp,reset:ig,resetPartial:pg,resetTemplate:ug,reverse:cg,set:lg,shift:dg,sort:fg,splice:hg,subtract:mg,teardown:gg,toggle:bg,toHTML:yg,toHtml:yg,unrender:_g,unshift:wg,update:kg,updateModel:Eg},Pg=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Ag=Hi,Og=$i,Tg=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};ng=function(t){return this instanceof ng?void Om(this,t):new ng(t)},ag={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Og},getNodeInfo:{value:Tg},parse:{value:Hp},Promise:{value:us},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:po},events:{writable:!0,value:{}},interpolators:{writable:!0,value:qo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(ng,ag),ng.prototype=a(Cg,so),ng.prototype.constructor=ng,ng.defaults=ng.prototype;var Rg="function";if(typeof Date.now!==Rg||typeof String.prototype.trim!==Rg||typeof Object.keys!==Rg||typeof Array.prototype.indexOf!==Rg||typeof Array.prototype.forEach!==Rg||typeof Array.prototype.map!==Rg||typeof Array.prototype.filter!==Rg||"undefined"!=typeof window&&typeof window.addEventListener!==Rg)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mg=ng;return Mg})},{}],342:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,293],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,313],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,333]}],style:["width: ",{t:2,r:"percentage",p:[14,48,358]},"%"]}}," ",{p:[15,3,384],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,406]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],343:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,p=/([\w\-]+)\s*(\dx)/g,u=p.exec(s),c=u[1],l=u[2];e+=' '}}return e&&(e+=" "),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,1950],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,1970]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2052]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2004]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2142]}],d:[]}},f:[{t:4,f:[{p:[78,5,2188],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2204]}]}}],n:50,r:"icon",p:[77,3,2171]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2255]}],n:50,r:"icon_stack",p:[80,3,2231]}," ",{t:16,p:[83,3,2301]}]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482}],344:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,42],t:7,e:"header",f:[{p:[4,7,57],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,61]}]}," ",{t:4,f:[{p:[6,9,105],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,130]}]}],n:50,r:"button",p:[5,7,82]}]}],n:50,r:"title",p:[2,3,24]}," ",{p:[10,3,193],t:7,e:"article",f:[{t:16,p:[11,5,207]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],345:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,159],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,185]}],placeholder:[{t:2,r:"placeholder",p:[12,51,209]}]}}," ",{p:[13,1,228],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{341:341}],346:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(338),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1223],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1267]}]},f:[{p:[48,3,1287],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1454],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1464]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1483]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1509]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1583],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1592]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1610]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1660]}," ",{t:2,r:"xunit",p:[53,113,1685]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1549]}],n:52,r:"xaxis",p:[50,7,1430]}," ",{t:4,f:[{p:[57,9,1764],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1781]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1796]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1815]}],stroke:"darkgray"}}," ",{p:[58,9,1858],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1873]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1925]}," ",{t:2,r:"yunit",p:[58,92,1941]}]}],n:52,r:"yaxis",p:[56,7,1740]}," ",{t:4,f:[{p:[61,9,2011],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2020]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2049]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,1980]}," ",{t:4,f:[{p:[64,9,2137],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2146]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2177]}],fill:"none"}}],n:52,
-i:"curve",r:"curves",p:[63,7,2106]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2308],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2337]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2348]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2386]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2263]}],n:52,i:"curve",r:"curves",p:[66,7,2232]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2605],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2632]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2639]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2718]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2787]}," ",{t:2,r:"yunit",p:[75,43,2815]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2827]}," ",{t:2,r:"xunit",p:[75,92,2864]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2566]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2521]}],n:52,i:"curve",r:"curves",p:[71,7,2490]}," ",{t:4,f:[{p:[81,9,2983],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3007]},", 10)"]},f:[{p:[82,11,3073],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3093]}]}}," ",{p:[83,11,3124],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3155]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,2952]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1323]}]}]}]},e.exports=a.extend(r.exports)},{338:338,341:341}],347:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,23]}]}]},e.exports=a.extend(r.exports)},{341:341}],348:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,739],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,716]}]},e.exports=a.extend(r.exports)},{341:341,481:481,483:483}],349:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,82],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,130]}],r:"labelcolor",p:[3,32,109]}]},f:[{t:2,r:"label",p:[3,84,161]},":"]}],n:50,r:"label",p:[2,3,64]}," ",{t:4,f:[{t:16,p:[6,5,210]}],n:50,r:"nowrap",p:[5,3,191]},{t:4,n:51,f:[{p:[8,5,235],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,263]}]},f:[{t:16,p:[9,7,304]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{341:341}],350:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,45],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,99]}],n:50,r:"button",p:[5,7,85]}]}],n:50,r:"title",p:[2,3,27]}," ",{p:[8,3,149],t:7,e:"article",f:[{t:16,p:[9,5,163]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],351:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;p.set("shown",p.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,505],t:7,e:"header",f:[{t:4,f:[{p:[22,5,535],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,552]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,577]}]}],n:52,r:"tabs",p:[21,3,516]}]}," ",{p:[25,1,617],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,632]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(352)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,352:352}],352:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,16]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],353:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(482),a=t(481),r=t(483);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1391],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1441],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1478]}]}}," ",{p:[52,5,1505],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1525]}]}," ",{t:4,f:[{p:[54,7,1573],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1642],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1546]}]}],n:50,r:"config.titlebar",p:[49,1,1365]}]},e.exports=a.extend(r.exports)},{341:341,481:481,482:482,483:483}],354:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,636],t:7,e:"ui-notice",f:[{p:[28,5,652],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,677]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,784],t:7,e:"br"}," ",{p:[29,5,794],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,870],t:7,e:"br"}," ",{p:[30,5,880],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,997],t:7,e:"br"}," ",{p:[31,5,1007],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1124],t:7,e:"hr"}," ",{p:[33,5,1134],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1207],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1381],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1528],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1699],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1785],t:7,e:"hr"}," ",{p:[43,7,1797],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1815]}]},{p:[43,38,1828],t:7,e:"br"}," ",{p:[44,7,1840],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1858]}]}],n:50,r:"debug",p:[41,5,1765]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,596]}]},e.exports=a.extend(r.exports)},{341:341}],355:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},shockState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,327],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[23,2,362],t:7,e:"ui-section",a:{label:"Main"},f:[{p:[24,3,390],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.main"],s:"_0(_1)"},p:[24,16,403]}]},f:[{t:2,x:{r:["data.power.main"],s:'_0?"Online":"Offline"'},p:[24,49,436]}]}," ",{t:4,f:["[ ",{p:[26,6,542],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"},p:[25,3,488]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.main_timeleft",p:[29,7,646]}," seconds left ]"],n:50,x:{r:["data.power.main_timeleft"],s:"_0>0"},p:[28,4,603]}],x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"}}," ",{p:[32,3,713],t:7,e:"div",a:{style:"float:right"},f:[{p:[33,4,742],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-main",state:[{t:2,x:{r:["data.power.main"],s:'_0?null:"disabled"'},p:[33,63,801]}]},f:["Disrupt"]}]}]}," ",{p:[36,2,887],t:7,e:"ui-section",a:{label:"Backup"},f:[{p:[37,3,917],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.backup"],s:"_0(_1)"},p:[37,16,930]}]},f:[{t:2,x:{r:["data.power.backup"],s:'_0?"Online":"Offline"'},p:[37,51,965]}]}," ",{t:4,f:["[ ",{p:[39,6,1077],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"},p:[38,3,1019]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.backup_timeleft",p:[42,7,1183]}," seconds left ]"],n:50,x:{r:["data.power.backup_timeleft"],s:"_0>0"},p:[41,4,1138]}],x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"}}," ",{p:[45,3,1252],t:7,e:"div",a:{style:"float:right"},f:[{p:[46,4,1281],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-backup",state:[{t:2,x:{r:["data.power.backup"],s:'_0?null:"disabled"'},p:[46,65,1342]}]},f:["Disrupt"]}]}]}," ",{p:[49,2,1430],t:7,e:"ui-section",a:{label:"Electrify"},f:[{p:[50,3,1463],t:7,e:"span",a:{"class":[{t:2,x:{r:["shockState","data.shock"],s:"_0(_1)"},p:[50,16,1476]}]},f:[{t:2,x:{r:["data.shock"],s:'_0==2?"Safe":"Electrified"'},p:[50,44,1504]}]}," ",{t:4,f:["[ ",{p:[52,6,1589],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.shock"],s:"!_0"},p:[51,3,1558]},{t:4,n:51,f:[{t:4,f:["[ ",{p:[55,7,1688],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"data.shock_timeleft",p:[55,25,1706]}," seconds left"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0>0"},p:[54,4,1650]}," ",{t:4,f:["[ ",{p:[58,7,1806],t:7,e:"span",a:{"class":"bad"},f:["Permanent"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0==-1"},p:[57,4,1766]}],x:{r:["data.wires.shock"],s:"!_0"}}," ",{p:[61,3,1866],t:7,e:"div",a:{style:"float:right"},f:[{p:[62,4,1895],t:7,e:"ui-button",a:{icon:"wrench",action:"shock-restore",state:[{t:2,x:{r:["data.wires.shock","data.shock"],s:'_0&&_1==0?null:"disabled"'},p:[62,59,1950]}]},f:["Restore"]}," ",{p:[63,4,2032],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-temp",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[63,54,2082]}]},f:["Set (Temporary)"]}," ",{p:[64,4,2136],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-perm",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[64,53,2185]}]},f:["Set (Permanent)"]}]}]}]}," ",{p:[68,1,2274],t:7,e:"ui-display",a:{title:"Access & Door Control"},f:[{p:[69,2,2318],t:7,e:"ui-section",a:{label:"ID Scan"},f:[{t:4,f:["[ ",{p:[71,6,2385],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[70,3,2349]}," ",{p:[73,3,2444],t:7,e:"div",a:{style:"float:right"},f:[{p:[74,4,2473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[74,22,2491]}],icon:"power-off",action:"idscan-on",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"selected":""'},p:[74,93,2562]}]},f:["Enabled"]}," ",{p:[75,4,2624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[75,22,2642]}],icon:"close",action:"idscan-off",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"":"selected"'},p:[75,90,2710]}]},f:["Disabled"]}]}]}," ",{p:[78,2,2795],t:7,e:"ui-section",a:{label:"Emergency Access"},f:[{p:[79,3,2835],t:7,e:"div",a:{style:"float:right"},f:[{p:[80,4,2864],t:7,e:"ui-button",a:{icon:"power-off",action:"emergency-on",style:[{t:2,x:{r:["data.emergency"],s:'_0?"selected":""'},p:[80,61,2921]}]},f:["Enabled"]}," ",{p:[81,4,2982],t:7,e:"ui-button",a:{icon:"close",action:"emergency-off",style:[{t:2,x:{r:["data.emergency"],s:'_0?"":"selected"'},p:[81,58,3036]}]},f:["Disabled"]}]}]}," ",{p:[84,2,3120],t:7,e:"br"}," ",{p:[85,2,3128],t:7,e:"ui-section",a:{label:"Door bolts"},f:[{t:4,f:["[ ",{p:[87,6,3193],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.bolts"],s:"!_0"},p:[86,3,3162]}," ",{p:[89,3,3252],t:7,e:"div",a:{style:"float:right"},f:[{p:[90,4,3281],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[90,22,3299]}],icon:"unlock",action:"bolt-raise",style:[{t:2,x:{r:["data.locked"],s:'_0?"":"selected"'},p:[90,85,3362]}]},f:["Raised"]}," ",{p:[91,4,3419],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[91,22,3437]}],icon:"lock",action:"bolt-drop",style:[{t:2,x:{r:["data.locked"],s:'_0?"selected":""'},p:[91,82,3497]}]},f:["Dropped"]}]}]}," ",{p:[94,2,3577],t:7,e:"ui-section",a:{label:"Door bolt lights"},f:[{t:4,f:["[ ",{p:[96,6,3649],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.lights"],s:"!_0"},p:[95,3,3617]}," ",{p:[98,3,3708],t:7,e:"div",a:{style:"float:right"},f:[{p:[99,4,3737],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[99,22,3755]}],icon:"power-off",action:"light-on",style:[{t:2,x:{r:["data.lights"],s:'_0?"selected":""'},p:[99,88,3821]}]},f:["Enabled"]}," ",{p:[100,4,3879],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[100,22,3897]}],icon:"close",action:"light-off",style:[{t:2,x:{r:["data.lights"],s:'_0?"":"selected"'},p:[100,85,3960]}]},f:["Disabled"]}]}]}," ",{p:[103,2,4041],t:7,e:"ui-section",a:{label:"Door force sensors"},f:[{t:4,f:["[ ",{p:[105,6,4113],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.safe"],s:"!_0"},p:[104,3,4083]}," ",{p:[107,3,4172],t:7,e:"div",a:{style:"float:right"},f:[{p:[108,4,4201],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[108,22,4219]}],icon:"power-off",action:"safe-on",style:[{t:2,x:{r:["data.safe"],s:'_0?"selected":""'},p:[108,85,4282]}]},f:["Enabled"]}," ",{p:[109,4,4338],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[109,22,4356]}],icon:"close",action:"safe-off",style:[{t:2,x:{r:["data.safe"],s:'_0?"":"selected"'},p:[109,82,4416]}]},f:["Disabled"]}]}]}," ",{p:[112,2,4495],t:7,e:"ui-section",a:{label:"Door timing safety"},f:[{t:4,f:["[ ",{p:[114,6,4569],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.timing"],s:"!_0"},p:[113,3,4537]}," ",{p:[116,3,4628],t:7,e:"div",a:{style:"float:right"},f:[{p:[117,4,4657],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[117,22,4675]}],icon:"power-off",action:"speed-on",style:[{t:2,x:{r:["data.speed"],s:'_0?"selected":""'},p:[117,88,4741]}]},f:["Enabled"]}," ",{p:[118,4,4798],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[118,22,4816]}],icon:"close",action:"speed-off",style:[{t:2,x:{r:["data.speed"],s:'_0?"":"selected"'},p:[118,85,4879]}]},f:["Disabled"]}]}]}," ",{p:[121,2,4959],t:7,e:"br"}," ",{p:[122,2,4967],t:7,e:"ui-section",a:{label:"Door control"},f:[{t:4,f:["[ ",{p:[124,6,5043],t:7,e:"span",a:{"class":"bad"},f:["Door is ",{t:2,x:{r:["data.locked","data.welded"],s:'(_0?"bolted":"")+(_0&&_1?" and ":"")+(_1?"welded":"")'},p:[124,32,5069]}]}," ]"],n:50,x:{r:["data.locked","data.welded"],s:"_0||_1"},p:[123,3,5003]}," ",{p:[126,3,5202],t:7,e:"div",a:{style:"float:right"},f:[{p:[127,4,5231],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(_2&&"disabled")'},p:[127,22,5249]}],icon:"sign-out",action:"open-close"},f:["Open door"]}," ",{p:[128,4,5375],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(!_2&&"disabled")'},p:[128,22,5393]}],icon:"sign-in",action:"open-close"},f:["Close door"]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],356:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,261],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,304],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[10,7,346],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,363]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,414]}]}]}],n:50,r:"data.siliconUser",p:[8,3,275]},{t:4,n:51,f:[{p:[13,5,502],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,528]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,610],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,701],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,743],t:7,e:"ui-section",f:[{p:[21,11,766],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,783]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,853]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,916]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1022],t:7,e:"ui-section",f:[{p:[25,11,1045],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1062]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1130]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1211]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1295],t:7,e:"br"}," ",{p:[29,9,1309],t:7,e:"ui-section",f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1463],t:7,e:"ui-section",f:[{p:[33,11,1486],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1623],t:7,e:"ui-section",f:[{p:[36,11,1646],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1773],t:7,e:"ui-section",f:[{p:[39,11,1796],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,663]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,1990],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2045],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2100],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2156],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,620]}]},r.exports.components=r.exports.components||{};var i={vents:t(362),modes:t(358),thresholds:t(361),status:t(360),scrubbers:t(359)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,358:358,359:359,360:360,361:361,362:362}],357:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{341:341}],358:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,111],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,161],t:7,e:"ui-section",f:[{p:[9,7,180],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,197]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,258]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,351]},"}"]},f:[{t:2,r:"name",p:[11,51,362]}]}]}],n:52,r:"data.modes",p:[7,3,136]}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],359:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," ",{p:{button:[{p:[6,5,180],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[9,5,234],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[9,27,256]}]},f:[{p:[10,7,278],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,313],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[11,26,330]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[11,68,372]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[12,46,448]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[12,66,468]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[12,80,482]}]}]}," ",{p:[14,7,545],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[15,9,579],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[15,26,596]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[15,71,641]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[16,50,723]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[16,70,743]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[16,88,761]}]}]}," ",{p:[18,7,841],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[19,9,876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[19,26,893]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[19,70,937]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,1017]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[20,68,1037]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[20,84,1053]}]}]}," ",{p:[22,7,1127],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[23,9,1164],t:7,e:"filters"}]}]}],n:52,r:"data.scrubbers",p:[8,3,205]},{t:4,n:51,f:[{p:[27,5,1231],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457),back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357,457:457}],360:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,107],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,126]}]},f:[{p:[5,6,142],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,155]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,232]},{t:2,r:"unit",p:[6,29,256]}]}]}],n:52,r:"adata.environment_data",p:[3,5,68]}," ",{p:[10,5,313],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,353],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,366]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,464]}]}]}," ",{p:[15,5,605],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,644],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,657]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,728]}]}]}],n:50,r:"data.environment_data",p:[2,3,34]},{t:4,n:51,f:[{p:[21,5,856],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,891],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1015],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1050],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,990]}]}]},e.exports=a.extend(r.exports)},{341:341}],361:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" th, td {\n padding-right: 16px;\n text-align: left;\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,112],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,137],t:7,e:"table",f:[{p:[8,5,149],t:7,e:"thead",f:[{p:[8,12,156],t:7,e:"tr",f:[{p:[9,7,167],t:7,e:"th"}," ",{p:[10,7,183],t:7,e:"th",f:[{p:[10,11,187],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,228],t:7,e:"th",f:[{p:[11,11,232],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,277],t:7,e:"th",f:[{p:[12,11,281],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,326],t:7,e:"th",f:[{p:[13,11,330],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,387],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,426],t:7,e:"tr",f:[{p:[17,9,439],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,443]}]}," ",{t:4,f:[{p:[18,27,485],t:7,e:"td",f:[{p:[19,11,500],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,547]},'", "var": "',{t:2,r:"val",p:[19,76,565]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,576]}]}]}],n:52,r:"settings",p:[18,9,467]}]}],n:52,r:"data.thresholds",p:[16,7,401]}]}," ",{p:[23,3,675],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],362:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,109],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,159],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,181]}]},f:[{p:[9,7,203],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,238],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,255]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,297]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,373]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,393]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,407]}]}]}," ",{p:[13,7,470],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,504],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,510]}]}]}," ",{p:[16,7,601],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,649],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,682]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,762]},'", "val": ',{t:2,r:"checks",p:[18,68,782]},"}"]},f:["Internal"]}," ",{p:[19,9,824],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,858]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,938]},'", "val": ',{t:2,r:"checks",p:[20,68,958]},"}"]},f:["External"]}]}," ",{t:4,f:[{p:[23,9,1042],t:7,e:"ui-section",a:{label:"Internal Target Pressure"},f:[{p:[24,11,1098],t:7,e:"ui-button",a:{icon:"pencil",action:"set_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,33,1186]},'"}']},f:[{t:2,x:{r:["internal"],s:"Math.fixed(_0)"},p:[25,47,1200]}]}," ",{p:[26,11,1247],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["intdefault"],s:'_0?"disabled":null'},p:[26,44,1280]}],action:"reset_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,33,1381]},'"}']},f:["Reset"]}]}],n:50,r:"incheck",p:[22,7,1018]}," ",{t:4,f:[{p:[31,11,1481],t:7,e:"ui-section",a:{label:"External Target Pressure"},f:[{p:[32,13,1539],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,35,1629]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[33,49,1643]}]}," ",{p:[34,13,1692],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[34,46,1725]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[35,35,1828]},'"}']},f:["Reset"]}]}],n:50,r:"excheck",p:[30,7,1455]}]}],n:52,r:"data.vents",p:[7,3,134]},{t:4,n:51,f:[{p:[40,5,1934],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],363:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" table {\n width: 100%;\n border-spacing: 2px;\n }\n th {\n text-align: left;\n }\n td {\n vertical-align: top;\n }\n td .button {\n margin-top: 4px\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",f:[{p:[3,5,32],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,49]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,109]}," Required"]}," ",{p:[4,5,169],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,246],t:7,e:"hr"}," ",{p:[7,3,254],t:7,e:"table",f:[{p:[8,3,264],t:7,e:"thead",f:[{p:[9,4,275],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,306],t:7,e:"th",f:[{p:[10,9,310],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,339]}]}]}],n:52,r:"data.regions",p:[9,8,279]}]}]}," ",{p:[13,3,391],t:7,e:"tbody",f:[{p:[14,4,402],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,433],t:7,e:"td",f:[{t:4,f:[{p:[16,11,466],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,483]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,531]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,605]},'"}']},f:[{t:2,r:"name",p:[17,56,615]}]}," ",{p:[18,9,644],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,437]}]}],n:52,r:"data.regions",p:[14,8,406]}]}]}]}," ",{p:[23,2,709],t:7,e:"hr"}," ",{p:[24,2,716],t:7,e:"span",a:{"class":"highlight bold"},f:["Unrestricted Access:"]}," ",{p:[25,2,774],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"check-square-o":"square-o"'},p:[25,19,791]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"selected":null'},p:[25,88,860]}],action:"direc_set",params:'{"unres_direction": "1"}'},f:["North"]}," ",{p:[26,2,982],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"check-square-o":"square-o"'},p:[26,19,999]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"selected":null'},p:[26,88,1068]}],action:"direc_set",params:'{"unres_direction": "4"}'},f:["East"]}," ",{p:[27,2,1189],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"check-square-o":"square-o"'},p:[27,19,1206]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"selected":null'
+return t.replace(/-([a-zA-Z])/g,function(t,e){return e.toUpperCase()})};Xi?(uf={},cf=co("div").style,pf=function(t){var e,n,a;if(t=mf(t),!uf[t])if(void 0!==cf[t])uf[t]=t;else for(a=t.charAt(0).toUpperCase()+t.substring(1),e=ro.length;e--;)if(n=ro[e],void 0!==cf[n+a]){uf[t]=n+a;break}return uf[t]}):pf=null;var gf,vf,bf=pf;Xi?(vf=window.getComputedStyle||Po.getComputedStyle,gf=function(t){var e,n,a,r,o;if(e=vf(this.node),"string"==typeof t)return o=e[bf(t)],"0px"===o&&(o=0),o;if(!i(t))throw Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(n={},a=t.length;a--;)r=t[a],o=e[bf(r)],"0px"===o&&(o=0),n[r]=o;return n}):gf=null;var yf=gf,_f=function(t,e){var n;if("string"==typeof t)this.node.style[bf(t)]=e;else for(n in t)t.hasOwnProperty(n)&&(this.node.style[bf(n)]=t[n]);return this},xf=function(t){var e;this.duration=t.duration,this.step=t.step,this.complete=t.complete,"string"==typeof t.easing?(e=t.root.easing[t.easing],e||(g(Io(t.easing,"easing")),e=Ua)):e="function"==typeof t.easing?t.easing:Ua,this.easing=e,this.start=ns(),this.end=this.start+this.duration,this.running=!0,xs.add(this)};xf.prototype={tick:function(t){var e,n;return this.running?t>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(e=t-this.start,n=this.easing(e/this.duration),this.step&&this.step(n),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}};var wf,kf,Sf,Ef,Cf,Pf,Af,Of,Tf=xf,Rf=RegExp("^-(?:"+ro.join("|")+")-"),Mf=function(t){return t.replace(Rf,"")},Lf=RegExp("^(?:"+ro.join("|")+")([A-Z])"),jf=function(t){var e;return t?(Lf.test(t)&&(t="-"+t),e=t.replace(/[A-Z]/g,function(t){return"-"+t.toLowerCase()})):""},Df={},Nf={};Xi?(kf=co("div").style,function(){void 0!==kf.transition?(Sf="transition",Ef="transitionend",Cf=!0):void 0!==kf.webkitTransition?(Sf="webkitTransition",Ef="webkitTransitionEnd",Cf=!0):Cf=!1}(),Sf&&(Pf=Sf+"Duration",Af=Sf+"Property",Of=Sf+"TimingFunction"),wf=function(t,e,n,a,r){setTimeout(function(){var i,o,s,p,u;p=function(){o&&s&&(t.root.fire(t.name+":end",t.node,t.isIntro),r())},i=(t.node.namespaceURI||"")+t.node.tagName,t.node.style[Af]=a.map(bf).map(jf).join(","),t.node.style[Of]=jf(n.easing||"linear"),t.node.style[Pf]=n.duration/1e3+"s",u=function(e){var n;n=a.indexOf(mf(Mf(e.propertyName))),-1!==n&&a.splice(n,1),a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},t.node.addEventListener(Ef,u,!1),setTimeout(function(){for(var r,c,l,d,f,h=a.length,g=[];h--;)d=a[h],r=i+d,Cf&&!Nf[r]&&(t.node.style[bf(d)]=e[d],Df[r]||(c=t.getStyle(d),Df[r]=t.getStyle(d)!=e[d],Nf[r]=!Df[r],Nf[r]&&(t.node.style[bf(d)]=c))),(!Cf||Nf[r])&&(void 0===c&&(c=t.getStyle(d)),l=a.indexOf(d),-1===l?m("Something very strange happened with transitions. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!",{node:t.node}):a.splice(l,1),f=/[^\d]*$/.exec(e[d])[0],g.push({name:bf(d),interpolator:Uo(parseFloat(c),parseFloat(e[d])),suffix:f}));g.length?new Tf({root:t.root,duration:n.duration,easing:mf(n.easing||""),step:function(e){var n,a;for(a=g.length;a--;)n=g[a],t.node.style[n.name]=n.interpolator(e)+n.suffix},complete:function(){o=!0,p()}}):o=!0,a.length||(t.node.removeEventListener(Ef,u,!1),s=!0,p())},0)},n.delay||0)}):wf=null;var Ff,If,Bf,Uf,Vf,qf=wf;if("undefined"!=typeof document){if(Ff="hidden",Vf={},Ff in document)Bf="";else for(Uf=ro.length;Uf--;)If=ro[Uf],Ff=If+"Hidden",Ff in document&&(Bf=If);void 0!==Bf?(document.addEventListener(Bf+"visibilitychange",Va),Va()):("onfocusout"in document?(document.addEventListener("focusout",qa),document.addEventListener("focusin",Ga)):(window.addEventListener("pagehide",qa),window.addEventListener("blur",qa),window.addEventListener("pageshow",Ga),window.addEventListener("focus",Ga)),Vf.hidden=!1)}var Gf,zf,Wf,Hf=Vf;Xi?(zf=window.getComputedStyle||Po.getComputedStyle,Gf=function(t,e,n){var a,r=this;if(4===arguments.length)throw Error("t.animateStyle() returns a promise - use .then() instead of passing a callback");if(Hf.hidden)return this.setStyle(t,e),Wf||(Wf=us.resolve());"string"==typeof t?(a={},a[t]=e):(a=t,n=e),n||(g('The "%s" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340',this.name),n=this);var i=new us(function(t){var e,i,o,s,p,u,c;if(!n.duration)return r.setStyle(a),void t();for(e=Object.keys(a),i=[],o=zf(r.node),p={},u=e.length;u--;)c=e[u],s=o[bf(c)],"0px"===s&&(s=0),s!=a[c]&&(i.push(c),r.node.style[bf(c)]=s);return i.length?void qf(r,a,n,i,t):void t()});return i}):Gf=null;var Kf=Gf,Qf=function(t,e){return"number"==typeof t?t={duration:t}:"string"==typeof t?t="slow"===t?{duration:600}:"fast"===t?{duration:200}:{duration:400}:t||(t={}),r({},t,e)},Yf=za,$f=function(t,e,n){this.init(t,e,n)};$f.prototype={init:hf,start:Yf,getStyle:yf,setStyle:_f,animateStyle:Kf,processParams:Qf};var Jf,Xf,Zf=$f,th=Ha;Jf=function(){var t=this.node,e=this.fragment.toString(!1);if(window&&window.appearsToBeIELessEqual8&&(t.type="text/css"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}},Xf=function(){this.node.type&&"text/javascript"!==this.node.type||m("Script tag was updated. This does not cause the code to be re-evaluated!",{ractive:this.root}),this.node.text=this.fragment.toString(!1)};var eh=function(){var t,e;return this.template.y?"":(t="<"+this.template.e,t+=this.attributes.map(Xa).join("")+this.conditionalAttributes.map(Xa).join(""),"option"===this.name&&$a(this)&&(t+=" selected"),"input"===this.name&&Ja(this)&&(t+=" checked"),t+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?t+=Se(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(t+=this.getAttribute("value")||""),this.fragment&&(e="script"!==this.name&&"style"!==this.name,t+=this.fragment.toString(e)),ic.test(this.template.e)||(t+=""+this.template.e+">"),t)},nh=Za,ah=tr,rh=function(t){this.init(t)};rh.prototype={bubble:Tl,detach:Rl,find:Ml,findAll:Ll,findAllComponents:jl,findComponent:Dl,findNextNode:Nl,firstNode:Fl,getAttribute:Il,init:df,rebind:ff,render:th,toString:eh,unbind:nh,unrender:ah};var ih=rh,oh=/^\s*$/,sh=/^\s*/,ph=function(t){var e,n,a,r;return e=t.split("\n"),n=e[0],void 0!==n&&oh.test(n)&&e.shift(),a=D(e),void 0!==a&&oh.test(a)&&e.pop(),r=e.reduce(nr,null),r&&(t=e.map(function(t){return t.replace(r,"")}).join("\n")),t},uh=ar,ch=function(t,e){var n;return e?n=t.split("\n").map(function(t,n){return n?e+t:t}).join("\n"):t},lh='Could not find template for partial "%s"',dh=function(t){var e,n;e=this.parentFragment=t.parentFragment,this.root=e.root,this.type=Au,this.index=t.index,this.name=t.template.r,this.rendered=!1,this.fragment=this.fragmentToRender=this.fragmentToUnrender=null,Gc.init(this,t),this.keypath||((n=uh(this.root,this.name,e))?(_c.call(this),this.isNamed=!0,this.setTemplate(n)):g(lh,this.name))};dh.prototype={bubble:function(){this.parentFragment.bubble()},detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},getPartialName:function(){return this.isNamed&&this.name?this.name:void 0===this.value?this.name:this.value},getValue:function(){return this.fragment.getValue()},rebind:function(t,e){this.isNamed||qc.call(this,t,e),this.fragment&&this.fragment.rebind(t,e)},render:function(){return this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,this.docFrag},resolve:Gc.resolve,setValue:function(t){var e;(void 0===t||t!==this.value)&&(void 0!==t&&(e=uh(this.root,""+t,this.parentFragment)),!e&&this.name&&(e=uh(this.root,this.name,this.parentFragment))&&(_c.call(this),this.isNamed=!0),e||g(lh,this.name,{ractive:this.root}),this.value=t,this.setTemplate(e||[]),this.bubble(),this.rendered&&bs.addView(this))},setTemplate:function(t){this.fragment&&(this.fragment.unbind(),this.rendered&&(this.fragmentToUnrender=this.fragment)),this.fragment=new rg({template:t,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.fragmentToRender=this.fragment},toString:function(t){var e,n,a,r;return e=this.fragment.toString(t),n=this.parentFragment.items[this.index-1],n&&n.type===ku?(a=n.text.split("\n").pop(),(r=/^\s+$/.exec(a))?ch(e,r[0]):e):e},unbind:function(){this.isNamed||_c.call(this),this.fragment&&this.fragment.unbind()},unrender:function(t){this.rendered&&(this.fragment&&this.fragment.unrender(t),this.rendered=!1)},update:function(){var t,e;this.fragmentToUnrender&&(this.fragmentToUnrender.unrender(!0),this.fragmentToUnrender=null),this.fragmentToRender&&(this.docFrag.appendChild(this.fragmentToRender.render()),this.fragmentToRender=null),this.rendered&&(t=this.parentFragment.getNode(),e=this.parentFragment.findNextNode(this),t.insertBefore(this.docFrag,e))}};var fh,hh,mh,gh=dh,vh=pr,bh=ur,yh=new is("detach"),_h=cr,xh=lr,wh=dr,kh=fr,Sh=hr,Eh=mr,Ch=function(t,e,n,a){var r=t.root,i=t.keypath;a?r.viewmodel.smartUpdate(i,e,a):r.viewmodel.mark(i)},Ph=[],Ah=["pop","push","reverse","shift","sort","splice","unshift"];Ah.forEach(function(t){var e=function(){for(var e=arguments.length,n=Array(e),a=0;e>a;a++)n[a]=arguments[a];var r,i,o,s;for(r=bp(this,t,n),i=Array.prototype[t].apply(this,arguments),bs.start(),this._ractive.setting=!0,s=this._ractive.wrappers.length;s--;)o=this._ractive.wrappers[s],bs.addRactive(o.root),Ch(o,this,t,r);return bs.end(),this._ractive.setting=!1,i};Eo(Ph,t,{value:e})}),fh={},fh.__proto__?(hh=function(t){t.__proto__=Ph},mh=function(t){t.__proto__=Array.prototype}):(hh=function(t){var e,n;for(e=Ah.length;e--;)n=Ah[e],Eo(t,n,{value:Ph[n],configurable:!0})},mh=function(t){var e;for(e=Ah.length;e--;)delete t[Ah[e]]}),hh.unpatch=mh;var Oh,Th,Rh,Mh=hh;Oh={filter:function(t){return i(t)&&(!t._ractive||!t._ractive.setting)},wrap:function(t,e,n){return new Th(t,e,n)}},Th=function(t,e,n){this.root=t,this.value=e,this.keypath=S(n),e._ractive||(Eo(e,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),Mh(e)),e._ractive.instances[t._guid]||(e._ractive.instances[t._guid]=0,e._ractive.instances.push(t)),e._ractive.instances[t._guid]+=1,e._ractive.wrappers.push(this)},Th.prototype={get:function(){return this.value},teardown:function(){var t,e,n,a,r;if(t=this.value,e=t._ractive,n=e.wrappers,a=e.instances,e.setting)return!1;if(r=n.indexOf(this),-1===r)throw Error(Rh);if(n.splice(r,1),n.length){if(a[this.root._guid]-=1,!a[this.root._guid]){if(r=a.indexOf(this.root),-1===r)throw Error(Rh);a.splice(r,1)}}else delete t._ractive,Mh.unpatch(this.value)}},Rh="Something went wrong in a rather interesting way";var Lh,jh,Dh=Oh,Nh=/^\s*[0-9]+\s*$/,Fh=function(t){return Nh.test(t)?[]:{}};try{Object.defineProperty({},"test",{value:0}),Lh={filter:function(t,e,n){var a,r;return e?(e=S(e),(a=n.viewmodel.wrapped[e.parent.str])&&!a.magic?!1:(r=n.viewmodel.get(e.parent),i(r)&&/^[0-9]+$/.test(e.lastKey)?!1:r&&("object"==typeof r||"function"==typeof r))):!1},wrap:function(t,e,n){return new jh(t,e,n)}},jh=function(t,e,n){var a,r,i;return n=S(n),this.magic=!0,this.ractive=t,this.keypath=n,this.value=e,this.prop=n.lastKey,a=n.parent,this.obj=a.isRoot?t.viewmodel.data:t.viewmodel.get(a),r=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),r&&r.set&&(i=r.set._ractiveWrappers)?void(-1===i.indexOf(this)&&i.push(this)):void gr(this,e,r)},jh.prototype={get:function(){return this.value},reset:function(t){return this.updating?void 0:(this.updating=!0,this.obj[this.prop]=t,bs.addRactive(this.ractive),this.ractive.viewmodel.mark(this.keypath,{keepExistingWrapper:!0}),this.updating=!1,!0)},set:function(t,e){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=Fh(t),this.updating=!1),this.obj[this.prop][t]=e)},teardown:function(){var t,e,n,a,r;return this.updating?!1:(t=Object.getOwnPropertyDescriptor(this.obj,this.prop),e=t&&t.set,void(e&&(a=e._ractiveWrappers,r=a.indexOf(this),-1!==r&&a.splice(r,1),a.length||(n=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=n))))}}}catch(Ao){Lh=!1}var Ih,Bh,Uh=Lh;Uh&&(Ih={filter:function(t,e,n){return Uh.filter(t,e,n)&&Dh.filter(t)},wrap:function(t,e,n){return new Bh(t,e,n)}},Bh=function(t,e,n){this.value=e,this.magic=!0,this.magicWrapper=Uh.wrap(t,e,n),this.arrayWrapper=Dh.wrap(t,e,n)},Bh.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(t){return this.magicWrapper.reset(t)}});var Vh=Ih,qh=vr,Gh={},zh=_r,Wh=xr,Hh=Sr,Kh=Or,Qh=Tr,Yh=function(t,e){this.computation=t,this.viewmodel=t.viewmodel,this.ref=e,this.root=this.viewmodel.ractive,this.parentFragment=this.root.component&&this.root.component.parentFragment};Yh.prototype={resolve:function(t){this.computation.softDeps.push(t),this.computation.unresolvedDeps[t.str]=null,this.viewmodel.register(t,this.computation,"computed")}};var $h=Yh,Jh=function(t,e){this.key=t,this.getter=e.getter,this.setter=e.setter,this.hardDeps=e.deps||[],this.softDeps=[],this.unresolvedDeps={},this.depValues={},this._dirty=this._firstRun=!0};Jh.prototype={constructor:Jh,init:function(t){var e,n=this;this.viewmodel=t,this.bypass=!0,e=t.get(this.key),t.clearCache(this.key.str),this.bypass=!1,this.setter&&void 0!==e&&this.set(e),this.hardDeps&&this.hardDeps.forEach(function(e){return t.register(e,n,"computed")})},invalidate:function(){this._dirty=!0},get:function(){var t,e,n=this,a=!1;if(this.getting){var r="The "+this.key.str+" computation indirectly called itself. This probably indicates a bug in the computation. It is commonly caused by `array.sort(...)` - if that's the case, clone the array first with `array.slice().sort(...)`";return h(r),this.value}if(this.getting=!0,this._dirty){if(this._firstRun||!this.hardDeps.length&&!this.softDeps.length?a=!0:[this.hardDeps,this.softDeps].forEach(function(t){var e,r,i;if(!a)for(i=t.length;i--;)if(e=t[i],r=n.viewmodel.get(e),!s(r,n.depValues[e.str]))return n.depValues[e.str]=r,void(a=!0)}),a){this.viewmodel.capture();try{this.value=this.getter()}catch(i){m('Failed to compute "%s"',this.key.str),d(i.stack||i),this.value=void 0}t=this.viewmodel.release(),e=this.updateDependencies(t),e&&[this.hardDeps,this.softDeps].forEach(function(t){t.forEach(function(t){n.depValues[t.str]=n.viewmodel.get(t)})})}this._dirty=!1}return this.getting=this._firstRun=!1,this.value},set:function(t){if(this.setting)return void(this.value=t);if(!this.setter)throw Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter(t)},updateDependencies:function(t){var e,n,a,r,i;for(n=this.softDeps,e=n.length;e--;)a=n[e],-1===t.indexOf(a)&&(r=!0,this.viewmodel.unregister(a,this,"computed"));for(e=t.length;e--;)a=t[e],-1!==n.indexOf(a)||this.hardDeps&&-1!==this.hardDeps.indexOf(a)||(r=!0,Rr(this.viewmodel,a)&&!this.unresolvedDeps[a.str]?(i=new $h(this,a.str),t.splice(e,1),this.unresolvedDeps[a.str]=i,bs.addUnresolved(i)):this.viewmodel.register(a,this,"computed"));return r&&(this.softDeps=t.slice()),r}};var Xh=Jh,Zh=Mr,tm={FAILED_LOOKUP:!0},em=Lr,nm={},am=Dr,rm=Nr,im=function(t,e){this.localKey=t,this.keypath=e.keypath,this.origin=e.origin,this.deps=[],this.unresolved=[],this.resolved=!1};im.prototype={forceResolution:function(){this.keypath=this.localKey,this.setup()},get:function(t,e){return this.resolved?this.origin.get(this.map(t),e):void 0},getValue:function(){return this.keypath?this.origin.get(this.keypath):void 0},initViewmodel:function(t){this.local=t,this.setup()},map:function(t){return void 0===typeof this.keypath?this.localKey:t.replace(this.localKey,this.keypath)},register:function(t,e,n){this.deps.push({keypath:t,dep:e,group:n}),this.resolved&&this.origin.register(this.map(t),e,n)},resolve:function(t){void 0!==this.keypath&&this.unbind(!0),this.keypath=t,this.setup()},set:function(t,e){this.resolved||this.forceResolution(),this.origin.set(this.map(t),e)},setup:function(){var t=this;void 0!==this.keypath&&(this.resolved=!0,this.deps.length&&(this.deps.forEach(function(e){var n=t.map(e.keypath);if(t.origin.register(n,e.dep,e.group),e.dep.setValue)e.dep.setValue(t.origin.get(n));else{if(!e.dep.invalidate)throw Error("An unexpected error occurred. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");e.dep.invalidate()}}),this.origin.mark(this.keypath)))},setValue:function(t){if(!this.keypath)throw Error("Mapping does not have keypath, cannot set value. Please raise an issue at https://github.com/ractivejs/ractive/issues - thanks!");this.origin.set(this.keypath,t)},unbind:function(t){var e=this;t||delete this.local.mappings[this.localKey],this.resolved&&(this.deps.forEach(function(t){e.origin.unregister(e.map(t.keypath),t.dep,t.group)}),this.tracker&&this.origin.unregister(this.keypath,this.tracker))},unregister:function(t,e,n){var a,r;if(this.resolved){for(a=this.deps,r=a.length;r--;)if(a[r].dep===e){a.splice(r,1);break}this.origin.unregister(this.map(t),e,n)}}};var om=Fr,sm=function(t,e){var n,a,r,i;return n={},a=0,r=t.map(function(t,r){var o,s,p;s=a,p=e.length;do{if(o=e.indexOf(t,s),-1===o)return i=!0,-1;s=o+1}while(n[o]&&p>s);return o===a&&(a+=1),o!==r&&(i=!0),n[o]=!0,o})},pm=Ir,um={},cm=Vr,lm=Gr,dm=zr,fm=Wr,hm=Kr,mm={implicit:!0},gm={noCascade:!0},vm=Yr,bm=$r,ym=function(t){var e,n,a=t.adapt,r=t.data,i=t.ractive,o=t.computed,s=t.mappings;this.ractive=i,this.adaptors=a,this.onchange=t.onchange,this.cache={},this.cacheMap=So(null),this.deps={computed:So(null),"default":So(null)},this.depsMap={computed:So(null),"default":So(null)},this.patternObservers=[],this.specials=So(null),this.wrapped=So(null),this.computations=So(null),this.captureGroups=[],this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={},this.noCascade={},this.data=r,this.mappings=So(null);for(e in s)this.map(S(e),s[e]);if(r)for(e in r)(n=this.mappings[e])&&void 0===n.getValue()&&n.setValue(r[e]);for(e in o)s&&e in s&&l("Cannot map to a computed property ('%s')",e),this.compute(S(e),o[e]);this.ready=!0};ym.prototype={adapt:qh,applyChanges:Hh,capture:Kh,clearCache:Qh,compute:Zh,get:em,init:am,map:rm,mark:om,merge:pm,register:cm,release:lm,reset:dm,set:fm,smartUpdate:hm,teardown:vm,unregister:bm};var _m=ym;Xr.prototype={constructor:Xr,begin:function(t){this.inProcess[t._guid]=!0},end:function(t){var e=t.parent;e&&this.inProcess[e._guid]?Zr(this.queue,e).push(t):ti(this,t),delete this.inProcess[t._guid]}};var xm=Xr,wm=ei,km=/\$\{([^\}]+)\}/g,Sm=new is("construct"),Em=new is("config"),Cm=new xm("init"),Pm=0,Am=["adaptors","components","decorators","easing","events","interpolators","partials","transitions"],Om=ii,Tm=ci;ci.prototype={bubble:function(){this.dirty||(this.dirty=!0,bs.addView(this))},update:function(){this.callback(this.fragment.getValue()),this.dirty=!1},rebind:function(t,e){this.fragment.rebind(t,e)},unbind:function(){this.fragment.unbind()}};var Rm=function(t,e,n,r,o){var s,p,u,c,l,d,f={},h={},g={},v=[];for(p=t.parentFragment,u=t.root,o=o||{},a(f,o),o.content=r||[],f[""]=o.content,e.defaults.el&&m("The <%s/> component has a default `el` property; it has been disregarded",t.name),c=p;c;){if(c.owner.type===Mu){l=c.owner.container;break}c=c.parent}return n&&Object.keys(n).forEach(function(e){var a,r,o=n[e];if("string"==typeof o)a=dc(o),h[e]=a?a.value:o;else if(0===o)h[e]=!0;else{if(!i(o))throw Error("erm wut");di(o)?(g[e]={origin:t.root.viewmodel,keypath:void 0},r=li(t,o[0],function(t){t.isSpecial?d?s.set(e,t.value):(h[e]=t.value,delete g[e]):d?s.viewmodel.mappings[e].resolve(t):g[e].keypath=t})):r=new Tm(t,o,function(t){d?s.set(e,t):h[e]=t}),v.push(r)}}),s=So(e.prototype),Om(s,{el:null,append:!0,data:h,partials:o,magic:u.magic||e.defaults.magic,modifyArrays:u.modifyArrays,adapt:u.adapt},{parent:u,component:t,container:l,mappings:g,inlinePartials:f,cssIds:p.cssIds}),d=!0,t.resolvers=v,s},Mm=fi,Lm=function(t){var e,n;for(e=t.root;e;)(n=e._liveComponentQueries["_"+t.name])&&n.push(t.instance),e=e.parent},jm=mi,Dm=gi,Nm=vi,Fm=bi,Im=yi,Bm=new is("teardown"),Um=xi,Vm=function(t,e){this.init(t,e)};Vm.prototype={detach:bh,find:_h,findAll:xh,findAllComponents:wh,findComponent:kh,findNextNode:Sh,firstNode:Eh,init:jm,rebind:Dm,render:Nm,toString:Fm,unbind:Im,unrender:Um};var qm=Vm,Gm=function(t){this.type=Ou,this.value=t.template.c};Gm.prototype={detach:vc,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return""},unrender:function(t){t&&this.node.parentNode.removeChild(this.node)}};var zm=Gm,Wm=function(t){var e,n;this.type=Mu,this.container=e=t.parentFragment.root,this.component=n=e.component,this.container=e,this.containerFragment=t.parentFragment,this.parentFragment=n.parentFragment;var a=this.name=t.template.n||"",r=e._inlinePartials[a];r||(m('Could not find template for partial "'+a+'"',{ractive:t.root}),r=[]),this.fragment=new rg({owner:this,root:e.parent,template:r,pElement:this.containerFragment.pElement}),i(n.yielders[a])?n.yielders[a].push(this):n.yielders[a]=[this],bs.scheduleTask(function(){if(n.yielders[a].length>1)throw Error("A component template can only have one {{yield"+(a?" "+a:"")+"}} declaration at a time")})};Wm.prototype={detach:function(){return this.fragment.detach()},find:function(t){return this.fragment.find(t)},findAll:function(t,e){return this.fragment.findAll(t,e)},findComponent:function(t){return this.fragment.findComponent(t)},findAllComponents:function(t,e){return this.fragment.findAllComponents(t,e)},findNextNode:function(){return this.containerFragment.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(t){return this.fragment.getValue(t)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(t){this.fragment.unrender(t),N(this.component.yielders[this.name],this)},rebind:function(t,e){this.fragment.rebind(t,e)},toString:function(){return""+this.fragment}};var Hm=Wm,Km=function(t){this.declaration=t.template.a};Km.prototype={init:ko,render:ko,unrender:ko,teardown:ko,toString:function(){return""}};var Qm=Km,Ym=wi,$m=Si,Jm=Ei,Xm=Ci,Zm=Oi,tg=Ri,eg=function(t){this.init(t)};eg.prototype={bubble:cu,detach:lu,find:du,findAll:fu,findAllComponents:hu,findComponent:mu,findNextNode:gu,firstNode:vu,getArgsList:hc,getNode:mc,getValue:gc,init:Ym,rebind:$m,registerIndexRef:function(t){var e=this.registeredIndexRefs;-1===e.indexOf(t)&&e.push(t)},render:Jm,toString:Xm,unbind:Zm,unregisterIndexRef:function(t){var e=this.registeredIndexRefs;e.splice(e.indexOf(t),1)},unrender:tg};var ng,ag,rg=eg,ig=Mi,og=["template","partials","components","decorators","events"],sg=new is("reset"),pg=function(t,e){function n(e,a,r){r&&r.partials[t]||e.forEach(function(e){e.type===Au&&e.getPartialName()===t&&a.push(e),e.fragment&&n(e.fragment.items,a,r),i(e.fragments)?n(e.fragments,a,r):i(e.items)?n(e.items,a,r):e.type===Ru&&e.instance&&n(e.instance.fragment.items,a,e.instance),e.type===Pu&&(i(e.attributes)&&n(e.attributes,a,r),i(e.conditionalAttributes)&&n(e.conditionalAttributes,a,r))})}var a,r=[];return n(this.fragment.items,r),this.partials[t]=e,a=bs.start(this,!0),r.forEach(function(e){e.value=void 0,e.setValue(t)}),bs.end(),a},ug=Li,cg=_p("reverse"),lg=ji,dg=_p("shift"),fg=_p("sort"),hg=_p("splice"),mg=Ni,gg=Fi,vg=new is("teardown"),bg=Bi,yg=Ui,_g=Vi,xg=new is("unrender"),wg=_p("unshift"),kg=qi,Sg=new is("update"),Eg=Gi,Cg={add:Zo,animate:Ss,detach:Cs,find:As,findAll:Fs,findAllComponents:Is,findComponent:Bs,findContainer:Us,findParent:Vs,fire:Ws,get:Hs,insert:Qs,merge:$s,observe:lp,observeOnce:dp,off:mp,on:gp,once:vp,pop:xp,push:wp,render:Tp,reset:ig,resetPartial:pg,resetTemplate:ug,reverse:cg,set:lg,shift:dg,sort:fg,splice:hg,subtract:mg,teardown:gg,toggle:bg,toHTML:yg,toHtml:yg,unrender:_g,unshift:wg,update:kg,updateModel:Eg},Pg=function(t,e,n){return n||Wi(t,e)?function(){var n,a="_super"in this,r=this._super;return this._super=e,n=t.apply(this,arguments),a&&(this._super=r),n}:t},Ag=Hi,Og=$i,Tg=function(t){var e,n,a={};return t&&(e=t._ractive)?(a.ractive=e.root,a.keypath=e.keypath.str,a.index={},(n=Oc(e.proxy.parentFragment))&&(a.index=Oc.resolve(n)),a):a};ng=function(t){return this instanceof ng?void Om(this,t):new ng(t)},ag={DEBUG:{writable:!0,value:!0},DEBUG_PROMISES:{writable:!0,value:!0},extend:{value:Og},getNodeInfo:{value:Tg},parse:{value:Hp},Promise:{value:us},svg:{value:ao},magic:{value:eo},VERSION:{value:"0.7.3"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:po},events:{writable:!0,value:{}},interpolators:{writable:!0,value:qo},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},Co(ng,ag),ng.prototype=a(Cg,so),ng.prototype.constructor=ng,ng.defaults=ng.prototype;var Rg="function";if(typeof Date.now!==Rg||typeof String.prototype.trim!==Rg||typeof Object.keys!==Rg||typeof Array.prototype.indexOf!==Rg||typeof Array.prototype.forEach!==Rg||typeof Array.prototype.map!==Rg||typeof Array.prototype.filter!==Rg||"undefined"!=typeof window&&typeof window.addEventListener!==Rg)throw Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");var Mg=ng;return Mg})},{}],342:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.observe("value",function(e,n,a){var r=t.get(),i=r.min,o=r.max,s=Math.clamp(i,o,e);t.animate("percentage",Math.round((s-i)/(o-i)*100))})}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,293],t:7,e:"div",a:{"class":"bar"},f:[{p:[14,3,313],t:7,e:"div",a:{"class":["barFill ",{t:2,r:"state",p:[14,23,333]}],style:["width: ",{t:2,r:"percentage",p:[14,48,358]},"%"]}}," ",{p:[15,3,384],t:7,e:"span",a:{"class":"barText"},f:[{t:16,p:[15,25,406]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],343:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(480);e.exports={computed:{clickable:function(){return!this.get("enabled")||this.get("state")&&"toggle"!=this.get("state")?!1:!0},enabled:function(){return this.get("config.status")===n.UI_INTERACTIVE?!0:!1},styles:function(){var t="";if(this.get("class")&&(t+=" "+this.get("class")),this.get("tooltip-side")&&(t=" tooltip-"+this.get("tooltip-side")),this.get("grid")&&(t+=" gridable"),this.get("enabled")){var e=this.get("state"),n=this.get("style");return e?"inactive "+e+" "+t:"active normal "+n+" "+t}return"inactive disabled "+t}},oninit:function(){var t=this;this.on("press",function(e){var n=t.get(),r=n.action,i=n.params;(0,a.act)(t.get("config.ref"),r,i),e.node.blur()})},data:{iconStackToHTML:function(t){var e="",n=t.split(",");if(n.length){e+='';for(var a=n,r=Array.isArray(a),i=0,a=r?a:a[Symbol.iterator]();;){var o;if(r){if(i>=a.length)break;o=a[i++]}else{if(i=a.next(),i.done)break;o=i.value}var s=o,p=/([\w\-]+)\s*(\dx)/g,u=p.exec(s),c=u[1],l=u[2];e+=' '}}return e&&(e+=" "),e}}}}(r),r.exports.template={v:3,t:[" ",{p:[70,1,1950],t:7,e:"span",a:{"class":["button ",{t:2,r:"styles",p:[70,21,1970]}],unselectable:"on","data-tooltip":[{t:2,r:"tooltip",p:[73,17,2052]}]},m:[{t:4,f:["tabindex='0'"],r:"clickable",p:[72,3,2004]}],v:{"mouseover-mousemove":"hover",mouseleave:"unhover","click-enter":{n:[{t:4,f:["press"],r:"clickable",p:[76,19,2142]}],d:[]}},f:[{t:4,f:[{p:[78,5,2188],t:7,e:"i",a:{"class":["fa fa-",{t:2,r:"icon",p:[78,21,2204]}]}}],n:50,r:"icon",p:[77,3,2171]}," ",{t:4,f:[{t:3,x:{r:["iconStackToHTML","icon_stack"],s:"_0(_1)"},p:[81,6,2255]}],n:50,r:"icon_stack",p:[80,3,2231]}," ",{t:16,p:[83,3,2301]}]}]},e.exports=a.extend(r.exports)},{341:341,480:480,481:481}],344:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"display"},f:[{t:4,f:[{p:[3,5,42],t:7,e:"header",f:[{p:[4,7,57],t:7,e:"h3",f:[{t:2,r:"title",p:[4,11,61]}]}," ",{t:4,f:[{p:[6,9,105],t:7,e:"div",a:{"class":"buttonRight"},f:[{t:16,n:"button",p:[6,34,130]}]}],n:50,r:"button",p:[5,7,82]}]}],n:50,r:"title",p:[2,3,24]}," ",{p:[10,3,193],t:7,e:"article",f:[{t:16,p:[11,5,207]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],345:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.on("clear",function(){t.set("value",""),t.find("input").focus()})}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,159],t:7,e:"input",a:{type:"text",value:[{t:2,r:"value",p:[12,27,185]}],placeholder:[{t:2,r:"placeholder",p:[12,51,209]}]}}," ",{p:[13,1,228],t:7,e:"ui-button",a:{icon:"refresh"},v:{press:"clear"}}]},e.exports=a.extend(r.exports)},{341:341}],346:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";e.exports={data:{graph:t(338),xaccessor:function(t){return t.x},yaccessor:function(t){return t.y}},computed:{size:function(){var t=this.get("points");return t[0].length},scale:function(){var t=this.get("points");return Math.max.apply(Math,Array.map(t,function(t){return Math.max.apply(Math,Array.map(t,function(t){return t.y}))}))},xaxis:function(){var t=this.get("xinc"),e=this.get("size");return Array.from(Array(e).keys()).filter(function(e){return e&&e%t==0})},yaxis:function(){var t=this.get("yinc"),e=this.get("scale");return Array.from(Array(t).keys()).map(function(t){return Math.round(e*(++t/100)*10)})}},oninit:function(){var t=this;this.on({enter:function(t){this.set("selected",t.index.count)},exit:function(t){this.set("selected")}}),window.addEventListener("resize",function(e){t.set("width",t.el.clientWidth)})},onrender:function(){this.set("width",this.el.clientWidth)}}}(r),r.exports.template={v:3,t:[" ",{p:[47,1,1223],t:7,e:"svg",a:{"class":"linegraph",width:"100%",height:[{t:2,x:{r:["height"],s:"_0+10"},p:[47,45,1267]}]},f:[{p:[48,3,1287],t:7,e:"g",a:{transform:"translate(0, 5)"},f:[{t:4,f:[{t:4,f:[{p:[51,9,1454],t:7,e:"line",a:{x1:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,19,1464]}],x2:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[51,38,1483]}],y1:"0",y2:[{t:2,r:"height",p:[51,64,1509]}],stroke:"darkgray"}}," ",{t:4,f:[{p:[53,11,1583],t:7,e:"text",a:{x:[{t:2,x:{r:["xscale","."],s:"_0(_1)"},p:[53,20,1592]}],y:[{t:2,x:{r:["height"],s:"_0-5"},p:[53,38,1610]}],"text-anchor":"middle",fill:"white"},f:[{t:2,x:{r:["size",".","xfactor"],s:"(_0-_1)*_2"},p:[53,88,1660]}," ",{t:2,r:"xunit",p:[53,113,1685]}]}],n:50,x:{r:["@index"],s:"_0%2==0"},p:[52,9,1549]}],n:52,r:"xaxis",p:[50,7,1430]}," ",{t:4,f:[{p:[57,9,1764],t:7,e:"line",a:{x1:"0",x2:[{t:2,r:"width",p:[57,26,1781]}],y1:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,41,1796]}],y2:[{t:2,x:{r:["yscale","."],s:"_0(_1)"},p:[57,60,1815]}],stroke:"darkgray"}}," ",{p:[58,9,1858],t:7,e:"text",a:{x:"0",y:[{t:2,x:{r:["yscale","."],s:"_0(_1)-5"},p:[58,24,1873]}],"text-anchor":"begin",fill:"white"},f:[{t:2,x:{r:[".","yfactor"],s:"_0*_1"},p:[58,76,1925]}," ",{t:2,r:"yunit",p:[58,92,1941]}]}],n:52,r:"yaxis",p:[56,7,1740]}," ",{t:4,f:[{p:[61,9,2011],t:7,e:"path",a:{d:[{t:2,x:{r:["area.path"],s:"_0.print()"},p:[61,18,2020]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[61,47,2049]}],opacity:"0.1"}}],n:52,i:"curve",r:"curves",p:[60,7,1980]}," ",{t:4,f:[{p:[64,9,2137],t:7,e:"path",a:{d:[{t:2,x:{r:["line.path"],s:"_0.print()"},p:[64,18,2146]}],stroke:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[64,49,2177]}],fill:"none"}}],n:52,
+i:"curve",r:"curves",p:[63,7,2106]}," ",{t:4,f:[{t:4,f:[{p:[68,11,2308],t:7,e:"circle",a:{transform:["translate(",{t:2,r:".",p:[68,40,2337]},")"],r:[{t:2,x:{r:["selected","count"],s:"_0==_1?10:4"},p:[68,51,2348]}],fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[68,89,2386]}]},v:{mouseenter:"enter",mouseleave:"exit"}}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[67,9,2263]}],n:52,i:"curve",r:"curves",p:[66,7,2232]}," ",{t:4,f:[{t:4,f:[{t:4,f:[{p:[74,13,2605],t:7,e:"text",a:{transform:["translate(",{t:2,r:".",p:[74,40,2632]},") ",{t:2,x:{r:["count","size"],s:'_0<=_1/2?"translate(15, 4)":"translate(-15, 4)"'},p:[74,47,2639]}],"text-anchor":[{t:2,x:{r:["count","size"],s:'_0<=_1/2?"start":"end"'},p:[74,126,2718]}],fill:"white"},f:[{t:2,x:{r:["count","item","yfactor"],s:"_1[_0].y*_2"},p:[75,15,2787]}," ",{t:2,r:"yunit",p:[75,43,2815]}," @ ",{t:2,x:{r:["size","count","item","xfactor"],s:"(_0-_2[_1].x)*_3"},p:[75,55,2827]}," ",{t:2,r:"xunit",p:[75,92,2864]}]}],n:50,x:{r:["selected","count"],s:"_0==_1"},p:[73,11,2566]}],n:52,i:"count",x:{r:["line.path"],s:"_0.points()"},p:[72,9,2521]}],n:52,i:"curve",r:"curves",p:[71,7,2490]}," ",{t:4,f:[{p:[81,9,2983],t:7,e:"g",a:{transform:["translate(",{t:2,x:{r:["width","curves.length","@index"],s:"(_0/(_1+1))*(_2+1)"},p:[81,33,3007]},", 10)"]},f:[{p:[82,11,3073],t:7,e:"circle",a:{r:"4",fill:[{t:2,rx:{r:"colors",m:[{t:30,n:"curve"}]},p:[82,31,3093]}]}}," ",{p:[83,11,3124],t:7,e:"text",a:{x:"8",y:"4",fill:"white"},f:[{t:2,rx:{r:"legend",m:[{t:30,n:"curve"}]},p:[83,42,3155]}]}]}],n:52,i:"curve",r:"curves",p:[80,7,2952]}],x:{r:["graph","points","xaccessor","yaccessor","width","height"],s:"_0({data:_1,xaccessor:_2,yaccessor:_3,width:_4,height:_5})"},p:[49,5,1323]}]}]}]},e.exports=a.extend(r.exports)},{338:338,341:341}],347:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"notice"},f:[{t:16,p:[2,3,23]}]}]},e.exports=a.extend(r.exports)},{341:341}],348:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(480),a=t(482);e.exports={oninit:function(){var t=this,e=a.resize.bind(this),r=function(){return t.set({resize:!1,x:null,y:null})};this.observe("config.fancy",function(a,i,o){(0,n.winset)(t.get("config.window"),"can-resize",!a),a?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",r)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",r))}),this.on("resize",function(){return t.toggle("resize")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[28,3,739],t:7,e:"div",a:{"class":"resize"},v:{mousedown:"resize"}}],n:50,r:"config.fancy",p:[27,1,716]}]},e.exports=a.extend(r.exports)},{341:341,480:480,482:482}],349:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"section",a:{"class":[{t:4,f:["candystripe"],r:"candystripe",p:[1,17,16]}]},f:[{t:4,f:[{p:[3,5,82],t:7,e:"span",a:{"class":"label",style:[{t:4,f:["color:",{t:2,r:"labelcolor",p:[3,53,130]}],r:"labelcolor",p:[3,32,109]}]},f:[{t:2,r:"label",p:[3,84,161]},":"]}],n:50,r:"label",p:[2,3,64]}," ",{t:4,f:[{t:16,p:[6,5,210]}],n:50,r:"nowrap",p:[5,3,191]},{t:4,n:51,f:[{p:[8,5,235],t:7,e:"div",a:{"class":"content",style:[{t:4,f:["float:right;"],r:"right",p:[8,33,263]}]},f:[{t:16,p:[9,7,304]}]}],r:"nowrap"}]}]},e.exports=a.extend(r.exports)},{341:341}],350:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"subdisplay"},f:[{t:4,f:[{p:[3,5,45],t:7,e:"header",f:[{p:[4,7,60],t:7,e:"h4",f:[{t:2,r:"title",p:[4,11,64]}]}," ",{t:4,f:[{t:16,n:"button",p:[5,21,99]}],n:50,r:"button",p:[5,7,85]}]}],n:50,r:"title",p:[2,3,27]}," ",{p:[8,3,149],t:7,e:"article",f:[{t:16,p:[9,5,163]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],351:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={oninit:function(){var t=this;this.set("active",this.findComponent("tab").get("name")),this.on("switch",function(e){t.set("active",e.node.textContent.trim())}),this.observe("active",function(e,n,a){for(var r=t.findAllComponents("tab"),i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;p.set("shown",p.get("name")===e)}})}}}(r),r.exports.template={v:3,t:[" "," ",{p:[20,1,505],t:7,e:"header",f:[{t:4,f:[{p:[22,5,535],t:7,e:"ui-button",a:{pane:[{t:2,r:".",p:[22,22,552]}]},v:{press:"switch"},f:[{t:2,r:".",p:[22,47,577]}]}],n:52,r:"tabs",p:[21,3,516]}]}," ",{p:[25,1,617],t:7,e:"ui-display",f:[{t:8,r:"content",p:[26,3,632]}]}]},r.exports.components=r.exports.components||{};var i={tab:t(352)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,352:352}],352:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:16,p:[2,3,16]}],n:50,r:"shown",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],353:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(480),r=t(482);e.exports={computed:{visualStatus:function(){switch(this.get("config.status")){case n.UI_INTERACTIVE:return"good";case n.UI_UPDATE:return"average";case n.UI_DISABLED:return"bad";default:return"bad"}}},oninit:function(){var t=this,e=r.drag.bind(this),n=function(e){return t.set({drag:!1,x:null,y:null})};this.observe("config.fancy",function(r,i,o){(0,a.winset)(t.get("config.window"),"titlebar",!r&&t.get("config.titlebar")),r?(document.addEventListener("mousemove",e),document.addEventListener("mouseup",n)):(document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",n))}),this.on({drag:function(){this.toggle("drag")},close:function(){(0,a.winset)(this.get("config.window"),"is-visible",!1),window.location.href=(0,a.href)({command:"uiclose "+this.get("config.ref")},"winset")},minimize:function(){(0,a.winset)(this.get("config.window"),"is-minimized",!0)}})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[50,3,1391],t:7,e:"header",a:{"class":"titlebar"},v:{mousedown:"drag"},f:[{p:[51,5,1441],t:7,e:"i",a:{"class":["statusicon fa fa-eye fa-2x ",{t:2,r:"visualStatus",p:[51,42,1478]}]}}," ",{p:[52,5,1505],t:7,e:"span",a:{"class":"title"},f:[{t:16,p:[52,25,1525]}]}," ",{t:4,f:[{p:[54,7,1573],t:7,e:"i",a:{"class":"minimize fa fa-minus fa-2x"},v:{click:"minimize"}}," ",{p:[55,7,1642],t:7,e:"i",a:{"class":"close fa fa-close fa-2x"},v:{click:"close"}}],n:50,r:"config.fancy",p:[53,5,1546]}]}],n:50,r:"config.titlebar",p:[49,1,1365]}]},e.exports=a.extend(r.exports)},{341:341,480:480,481:481,482:482}],354:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";var e=[11,10,9,8];t.exports={data:{userAgent:navigator.userAgent},computed:{ie:function(){if(document.documentMode)return document.documentMode;for(var t in e){var n=document.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return t}}},oninit:function(){var t=this;this.on("debug",function(){return t.toggle("debug")})}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[27,3,636],t:7,e:"ui-notice",f:[{p:[28,5,652],t:7,e:"span",f:["You have an old (IE",{t:2,r:"ie",p:[28,30,677]},"), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed."]},{p:[28,137,784],t:7,e:"br"}," ",{p:[29,5,794],t:7,e:"span",f:["To upgrade, click 'Upgrade IE' to download IE11 from Microsoft."]},{p:[29,81,870],t:7,e:"br"}," ",{p:[30,5,880],t:7,e:"span",f:["If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft."]},{p:[30,122,997],t:7,e:"br"}," ",{p:[31,5,1007],t:7,e:"span",f:["Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message)."]}," ",{p:[32,5,1124],t:7,e:"hr"}," ",{p:[33,5,1134],t:7,e:"ui-button",a:{icon:"close",action:"tgui:nofrills"},f:["No Frills"]}," ",{p:[34,5,1207],t:7,e:"ui-button",a:{icon:"internet-explorer",action:"tgui:link",params:'{"url": "http://windows.microsoft.com/en-us/internet-explorer/download-ie"}'},f:["Upgrade IE"]}," ",{p:[36,5,1381],t:7,e:"ui-button",a:{icon:"edge",action:"tgui:link",params:'{"url": "https://dev.windows.com/en-us/microsoft-edge/tools/vms"}'},f:["IE VMs"]}," ",{p:[38,5,1528],t:7,e:"ui-button",a:{icon:"info",action:"tgui:link",params:'{"url": "https://support.microsoft.com/en-us/lifecycle#gp/Microsoft-Internet-Explorer"}'},f:["EOL Info"]}," ",{p:[40,5,1699],t:7,e:"ui-button",a:{icon:"bug"},v:{press:"debug"},f:["Debug Info"]}," ",{t:4,f:[{p:[42,7,1785],t:7,e:"hr"}," ",{p:[43,7,1797],t:7,e:"span",f:["Detected: IE",{t:2,r:"ie",p:[43,25,1815]}]},{p:[43,38,1828],t:7,e:"br"}," ",{p:[44,7,1840],t:7,e:"span",f:["User Agent: ",{t:2,r:"userAgent",p:[44,25,1858]}]}],n:50,r:"debug",p:[41,5,1765]}]}],n:50,x:{r:["config.fancy","ie"],s:"_0&&_1&&_1<11"},p:[26,1,596]}]},e.exports=a.extend(r.exports)},{341:341}],355:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},shockState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[22,1,327],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[23,2,362],t:7,e:"ui-section",a:{label:"Main"},f:[{p:[24,3,390],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.main"],s:"_0(_1)"},p:[24,16,403]}]},f:[{t:2,x:{r:["data.power.main"],s:'_0?"Online":"Offline"'},p:[24,49,436]}]}," ",{t:4,f:["[ ",{p:[26,6,542],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"},p:[25,3,488]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.main_timeleft",p:[29,7,646]}," seconds left ]"],n:50,x:{r:["data.power.main_timeleft"],s:"_0>0"},p:[28,4,603]}],x:{r:["data.wires.main_1","data.wires.main_2"],s:"!_0||!_1"}}," ",{p:[32,3,713],t:7,e:"div",a:{style:"float:right"},f:[{p:[33,4,742],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-main",state:[{t:2,x:{r:["data.power.main"],s:'_0?null:"disabled"'},p:[33,63,801]}]},f:["Disrupt"]}]}]}," ",{p:[36,2,887],t:7,e:"ui-section",a:{label:"Backup"},f:[{p:[37,3,917],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.power.backup"],s:"_0(_1)"},p:[37,16,930]}]},f:[{t:2,x:{r:["data.power.backup"],s:'_0?"Online":"Offline"'},p:[37,51,965]}]}," ",{t:4,f:["[ ",{p:[39,6,1077],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"},p:[38,3,1019]},{t:4,n:51,f:[{t:4,f:["[ ",{t:2,r:"data.power.backup_timeleft",p:[42,7,1183]}," seconds left ]"],n:50,x:{r:["data.power.backup_timeleft"],s:"_0>0"},p:[41,4,1138]}],x:{r:["data.wires.backup_1","data.wires.backup_2"],s:"!_0||!_1"}}," ",{p:[45,3,1252],t:7,e:"div",a:{style:"float:right"},f:[{p:[46,4,1281],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"disrupt-backup",state:[{t:2,x:{r:["data.power.backup"],s:'_0?null:"disabled"'},p:[46,65,1342]}]},f:["Disrupt"]}]}]}," ",{p:[49,2,1430],t:7,e:"ui-section",a:{label:"Electrify"},f:[{p:[50,3,1463],t:7,e:"span",a:{"class":[{t:2,x:{r:["shockState","data.shock"],s:"_0(_1)"},p:[50,16,1476]}]},f:[{t:2,x:{r:["data.shock"],s:'_0==2?"Safe":"Electrified"'},p:[50,44,1504]}]}," ",{t:4,f:["[ ",{p:[52,6,1589],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.shock"],s:"!_0"},p:[51,3,1558]},{t:4,n:51,f:[{t:4,f:["[ ",{p:[55,7,1688],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"data.shock_timeleft",p:[55,25,1706]}," seconds left"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0>0"},p:[54,4,1650]}," ",{t:4,f:["[ ",{p:[58,7,1806],t:7,e:"span",a:{"class":"bad"},f:["Permanent"]}," ]"],n:50,x:{r:["data.shock_timeleft"],s:"_0==-1"},p:[57,4,1766]}],x:{r:["data.wires.shock"],s:"!_0"}}," ",{p:[61,3,1866],t:7,e:"div",a:{style:"float:right"},f:[{p:[62,4,1895],t:7,e:"ui-button",a:{icon:"wrench",action:"shock-restore",state:[{t:2,x:{r:["data.wires.shock","data.shock"],s:'_0&&_1==0?null:"disabled"'},p:[62,59,1950]}]},f:["Restore"]}," ",{p:[63,4,2032],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-temp",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[63,54,2082]}]},f:["Set (Temporary)"]}," ",{p:[64,4,2136],t:7,e:"ui-button",a:{icon:"bolt",action:"shock-perm",state:[{t:2,x:{r:["data.wires.shock"],s:"!_0"},p:[64,53,2185]}]},f:["Set (Permanent)"]}]}]}]}," ",{p:[68,1,2274],t:7,e:"ui-display",a:{title:"Access & Door Control"},f:[{p:[69,2,2318],t:7,e:"ui-section",a:{label:"ID Scan"},f:[{t:4,f:["[ ",{p:[71,6,2385],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[70,3,2349]}," ",{p:[73,3,2444],t:7,e:"div",a:{style:"float:right"},f:[{p:[74,4,2473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[74,22,2491]}],icon:"power-off",action:"idscan-on",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"selected":""'},p:[74,93,2562]}]},f:["Enabled"]}," ",{p:[75,4,2624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.id_scanner"],s:"!_0"},p:[75,22,2642]}],icon:"close",action:"idscan-off",style:[{t:2,x:{r:["data.id_scanner"],s:'_0?"":"selected"'},p:[75,90,2710]}]},f:["Disabled"]}]}]}," ",{p:[78,2,2795],t:7,e:"ui-section",a:{label:"Emergency Access"},f:[{p:[79,3,2835],t:7,e:"div",a:{style:"float:right"},f:[{p:[80,4,2864],t:7,e:"ui-button",a:{icon:"power-off",action:"emergency-on",style:[{t:2,x:{r:["data.emergency"],s:'_0?"selected":""'},p:[80,61,2921]}]},f:["Enabled"]}," ",{p:[81,4,2982],t:7,e:"ui-button",a:{icon:"close",action:"emergency-off",style:[{t:2,x:{r:["data.emergency"],s:'_0?"":"selected"'},p:[81,58,3036]}]},f:["Disabled"]}]}]}," ",{p:[84,2,3120],t:7,e:"br"}," ",{p:[85,2,3128],t:7,e:"ui-section",a:{label:"Door bolts"},f:[{t:4,f:["[ ",{p:[87,6,3193],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.bolts"],s:"!_0"},p:[86,3,3162]}," ",{p:[89,3,3252],t:7,e:"div",a:{style:"float:right"},f:[{p:[90,4,3281],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[90,22,3299]}],icon:"unlock",action:"bolt-raise",style:[{t:2,x:{r:["data.locked"],s:'_0?"":"selected"'},p:[90,85,3362]}]},f:["Raised"]}," ",{p:[91,4,3419],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.bolts"],s:"!_0"},p:[91,22,3437]}],icon:"lock",action:"bolt-drop",style:[{t:2,x:{r:["data.locked"],s:'_0?"selected":""'},p:[91,82,3497]}]},f:["Dropped"]}]}]}," ",{p:[94,2,3577],t:7,e:"ui-section",a:{label:"Door bolt lights"},f:[{t:4,f:["[ ",{p:[96,6,3649],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.lights"],s:"!_0"},p:[95,3,3617]}," ",{p:[98,3,3708],t:7,e:"div",a:{style:"float:right"},f:[{p:[99,4,3737],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[99,22,3755]}],icon:"power-off",action:"light-on",style:[{t:2,x:{r:["data.lights"],s:'_0?"selected":""'},p:[99,88,3821]}]},f:["Enabled"]}," ",{p:[100,4,3879],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.lights"],s:"!_0"},p:[100,22,3897]}],icon:"close",action:"light-off",style:[{t:2,x:{r:["data.lights"],s:'_0?"":"selected"'},p:[100,85,3960]}]},f:["Disabled"]}]}]}," ",{p:[103,2,4041],t:7,e:"ui-section",a:{label:"Door force sensors"},f:[{t:4,f:["[ ",{p:[105,6,4113],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.safe"],s:"!_0"},p:[104,3,4083]}," ",{p:[107,3,4172],t:7,e:"div",a:{style:"float:right"},f:[{p:[108,4,4201],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[108,22,4219]}],icon:"power-off",action:"safe-on",style:[{t:2,x:{r:["data.safe"],s:'_0?"selected":""'},p:[108,85,4282]}]},f:["Enabled"]}," ",{p:[109,4,4338],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.safe"],s:"!_0"},p:[109,22,4356]}],icon:"close",action:"safe-off",style:[{t:2,x:{r:["data.safe"],s:'_0?"":"selected"'},p:[109,82,4416]}]},f:["Disabled"]}]}]}," ",{p:[112,2,4495],t:7,e:"ui-section",a:{label:"Door timing safety"},f:[{t:4,f:["[ ",{p:[114,6,4569],t:7,e:"span",a:{"class":"bad"},f:["Wires have been cut"]}," ]"],n:50,x:{r:["data.wires.timing"],s:"!_0"},p:[113,3,4537]}," ",{p:[116,3,4628],t:7,e:"div",a:{style:"float:right"},f:[{p:[117,4,4657],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[117,22,4675]}],icon:"power-off",action:"speed-on",style:[{t:2,x:{r:["data.speed"],s:'_0?"selected":""'},p:[117,88,4741]}]},f:["Enabled"]}," ",{p:[118,4,4798],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.wires.timing"],s:"!_0"},p:[118,22,4816]}],icon:"close",action:"speed-off",style:[{t:2,x:{r:["data.speed"],s:'_0?"":"selected"'},p:[118,85,4879]}]},f:["Disabled"]}]}]}," ",{p:[121,2,4959],t:7,e:"br"}," ",{p:[122,2,4967],t:7,e:"ui-section",a:{label:"Door control"},f:[{t:4,f:["[ ",{p:[124,6,5043],t:7,e:"span",a:{"class":"bad"},f:["Door is ",{t:2,x:{r:["data.locked","data.welded"],s:'(_0?"bolted":"")+(_0&&_1?" and ":"")+(_1?"welded":"")'},p:[124,32,5069]}]}," ]"],n:50,x:{r:["data.locked","data.welded"],s:"_0||_1"},p:[123,3,5003]}," ",{p:[126,3,5202],t:7,e:"div",a:{style:"float:right"},f:[{p:[127,4,5231],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(_2&&"disabled")'},p:[127,22,5249]}],icon:"sign-out",action:"open-close"},f:["Open door"]}," ",{p:[128,4,5375],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.locked","data.welded","data.opened"],s:'(_0||_1)||(!_2&&"disabled")'},p:[128,22,5393]}],icon:"sign-in",action:"open-close"},f:["Close door"]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],356:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," ",{p:[7,1,261],t:7,e:"ui-notice",f:[{t:4,f:[{p:[9,5,304],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[10,7,346],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[10,24,363]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[10,75,414]}]}]}],n:50,r:"data.siliconUser",p:[8,3,275]},{t:4,n:51,f:[{p:[13,5,502],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,31,528]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[16,1,610],t:7,e:"status"}," ",{t:4,f:[{t:4,f:[{p:[19,7,701],t:7,e:"ui-display",a:{title:"Air Controls"},f:[{p:[20,9,743],t:7,e:"ui-section",f:[{p:[21,11,766],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"exclamation-triangle":"exclamation"'},p:[21,28,783]}],style:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"caution":null'},p:[21,98,853]}],action:[{t:2,x:{r:["data.atmos_alarm"],s:'_0?"reset":"alarm"'},p:[22,23,916]}]},f:["Area Atmosphere Alarm"]}]}," ",{p:[24,9,1022],t:7,e:"ui-section",f:[{p:[25,11,1045],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0==3?"exclamation-triangle":"exclamation"'},p:[25,28,1062]}],style:[{t:2,x:{r:["data.mode"],s:'_0==3?"danger":null'},p:[25,96,1130]}],action:"mode",params:['{"mode": ',{t:2,x:{r:["data.mode"],s:"_0==3?1:3"},p:[26,44,1211]},"}"]},f:["Panic Siphon"]}]}," ",{p:[28,9,1295],t:7,e:"br"}," ",{p:[29,9,1309],t:7,e:"ui-section",f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:"sign-out",action:"tgui:view",params:'{"screen": "vents"}'},f:["Vent Controls"]}]}," ",{p:[32,9,1463],t:7,e:"ui-section",f:[{p:[33,11,1486],t:7,e:"ui-button",a:{icon:"filter",action:"tgui:view",params:'{"screen": "scrubbers"}'},f:["Scrubber Controls"]}]}," ",{p:[35,9,1623],t:7,e:"ui-section",f:[{p:[36,11,1646],t:7,e:"ui-button",a:{icon:"cog",action:"tgui:view",params:'{"screen": "modes"}'},f:["Operating Mode"]}]}," ",{p:[38,9,1773],t:7,e:"ui-section",f:[{p:[39,11,1796],t:7,e:"ui-button",a:{icon:"bar-chart",action:"tgui:view",params:'{"screen": "thresholds"}'},f:["Alarm Thresholds"]}]}]}],n:50,x:{r:["config.screen"],s:'_0=="home"'},p:[18,3,663]},{t:4,n:51,f:[{t:4,n:50,x:{r:["config.screen"],s:'_0=="vents"'},f:[{p:[43,5,1990],t:7,e:"vents"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&(_0=="scrubbers")'},f:[" ",{p:[45,5,2045],t:7,e:"scrubbers"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&(_0=="modes"))'},f:[" ",{p:[47,5,2100],t:7,e:"modes"}]},{t:4,n:50,x:{r:["config.screen"],s:'(!(_0=="vents"))&&((!(_0=="scrubbers"))&&((!(_0=="modes"))&&(_0=="thresholds")))'},f:[" ",{p:[49,5,2156],t:7,e:"thresholds"}]}],x:{r:["config.screen"],s:'_0=="home"'}}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[17,1,620]}]},r.exports.components=r.exports.components||{};var i={vents:t(362),modes:t(358),thresholds:t(361),status:t(360),scrubbers:t(359)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,358:358,359:359,360:360,361:361,362:362}],357:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-button",a:{icon:"arrow-left",action:"tgui:view",params:'{"screen": "home"}'},f:["Back"]}]},e.exports=a.extend(r.exports)},{341:341}],358:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,111],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Operating Modes",button:0},f:[" ",{t:4,f:[{p:[8,5,161],t:7,e:"ui-section",f:[{p:[9,7,180],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["selected"],s:'_0?"check-square-o":"square-o"'},p:[9,24,197]}],state:[{t:2,x:{r:["selected","danger"],s:'_0?_1?"danger":"selected":null'},p:[10,16,258]}],action:"mode",params:['{"mode": ',{t:2,r:"mode",p:[11,40,351]},"}"]},f:[{t:2,r:"name",p:[11,51,362]}]}]}],n:52,r:"data.modes",p:[7,3,136]}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],359:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," ",{p:{button:[{p:[6,5,180],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Scrubber Controls",button:0},f:[" ",{t:4,f:[{p:[9,5,234],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[9,27,256]}]},f:[{p:[10,7,278],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,313],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[11,26,330]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[11,68,372]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[12,46,448]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[12,66,468]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[12,80,482]}]}]}," ",{p:[14,7,545],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[15,9,579],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["scrubbing"],s:'_0?"filter":"sign-in"'},p:[15,26,596]}],style:[{t:2,x:{r:["scrubbing"],s:'_0?null:"danger"'},p:[15,71,641]}],action:"scrubbing",params:['{"id_tag": "',{t:2,r:"id_tag",p:[16,50,723]},'", "val": ',{t:2,x:{r:["scrubbing"],s:"+!_0"},p:[16,70,743]},"}"]},f:[{t:2,x:{r:["scrubbing"],s:'_0?"Scrubbing":"Siphoning"'},p:[16,88,761]}]}]}," ",{p:[18,7,841],t:7,e:"ui-section",a:{label:"Range"},f:[{p:[19,9,876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["widenet"],s:'_0?"expand":"compress"'},p:[19,26,893]}],style:[{t:2,x:{r:["widenet"],s:'_0?"selected":null'},p:[19,70,937]}],action:"widenet",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,1017]},'", "val": ',{t:2,x:{r:["widenet"],s:"+!_0"},p:[20,68,1037]},"}"]},f:[{t:2,x:{r:["widenet"],s:'_0?"Expanded":"Normal"'},p:[20,84,1053]}]}]}," ",{p:[22,7,1127],t:7,e:"ui-section",a:{label:"Filters"},f:[{p:[23,9,1164],t:7,e:"filters"}]}]}],n:52,r:"data.scrubbers",p:[8,3,205]},{t:4,n:51,f:[{p:[27,5,1231],t:7,e:"span",a:{"class":"bad"},f:["Error: No scrubbers connected."]}],r:"data.scrubbers"}]}]},r.exports.components=r.exports.components||{};var i={filters:t(456),back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357,456:456}],360:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Air Status"},f:[{t:4,f:[{t:4,f:[{p:[4,7,107],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[4,26,126]}]},f:[{p:[5,6,142],t:7,e:"span",a:{"class":[{t:2,x:{r:["danger_level"],s:'_0==2?"bad":_0==1?"average":"good"'},p:[5,19,155]}]},f:[{t:2,x:{r:["value"],s:"Math.fixed(_0,2)"},p:[6,5,232]},{t:2,r:"unit",p:[6,29,256]}]}]}],n:52,r:"adata.environment_data",p:[3,5,68]}," ",{p:[10,5,313],t:7,e:"ui-section",a:{label:"Local Status"},f:[{p:[11,7,353],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.danger_level"],s:'_0==2?"bad bold":_0==1?"average bold":"good"'},p:[11,20,366]}]},f:[{t:2,x:{r:["data.danger_level"],s:'_0==2?"Danger (Internals Required)":_0==1?"Caution":"Optimal"'},p:[12,6,464]}]}]}," ",{p:[15,5,605],t:7,e:"ui-section",a:{label:"Area Status"},f:[{p:[16,7,644],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.atmos_alarm","data.fire_alarm"],s:'_0||_1?"bad bold":"good"'},p:[16,20,657]}]},f:[{t:2,x:{r:["data.atmos_alarm","fire_alarm"],s:'_0?"Atmosphere Alarm":_1?"Fire Alarm":"Nominal"'},p:[17,8,728]}]}]}],n:50,r:"data.environment_data",p:[2,3,34]},{t:4,n:51,f:[{p:[21,5,856],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[22,7,891],t:7,e:"span",a:{"class":"bad bold"},f:["Cannot obtain air sample for analysis."]}]}],r:"data.environment_data"}," ",{t:4,f:[{p:[26,5,1015],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[27,7,1050],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[25,3,990]}]}]},e.exports=a.extend(r.exports)},{341:341}],361:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" th, td {\n padding-right: 16px;\n text-align: left;\n }",r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,112],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Alarm Thresholds",button:0},f:[" ",{p:[7,3,137],t:7,e:"table",f:[{p:[8,5,149],t:7,e:"thead",f:[{p:[8,12,156],t:7,e:"tr",f:[{p:[9,7,167],t:7,e:"th"}," ",{p:[10,7,183],t:7,e:"th",f:[{p:[10,11,187],t:7,e:"span",a:{"class":"bad"},f:["min2"]}]}," ",{p:[11,7,228],t:7,e:"th",f:[{p:[11,11,232],t:7,e:"span",a:{"class":"average"},f:["min1"]}]}," ",{p:[12,7,277],t:7,e:"th",f:[{p:[12,11,281],t:7,e:"span",a:{"class":"average"},f:["max1"]}]}," ",{p:[13,7,326],t:7,e:"th",f:[{p:[13,11,330],t:7,e:"span",a:{"class":"bad"},f:["max2"]}]}]}]}," ",{p:[15,5,387],t:7,e:"tbody",f:[{t:4,f:[{p:[16,32,426],t:7,e:"tr",f:[{p:[17,9,439],t:7,e:"th",f:[{t:3,r:"name",p:[17,13,443]}]}," ",{t:4,f:[{p:[18,27,485],t:7,e:"td",f:[{p:[19,11,500],t:7,e:"ui-button",a:{action:"threshold",params:['{"env": "',{t:2,r:"env",p:[19,58,547]},'", "var": "',{t:2,r:"val",p:[19,76,565]},'"}']},f:[{t:2,x:{r:["selected"],s:"Math.fixed(_0,2)"},p:[19,87,576]}]}]}],n:52,r:"settings",p:[18,9,467]}]}],n:52,r:"data.thresholds",p:[16,7,401]}]}," ",{p:[23,3,675],t:7,e:"table",f:[]}]}]}," "]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],362:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:{button:[{p:[5,5,109],t:7,e:"back"}]},t:7,e:"ui-display",a:{title:"Vent Controls",button:0},f:[" ",{t:4,f:[{p:[8,5,159],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"long_name",p:[8,27,181]}]},f:[{p:[9,7,203],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[10,9,238],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["power"],s:'_0?"power-off":"close"'},p:[10,26,255]}],style:[{t:2,x:{r:["power"],s:'_0?"selected":null'},p:[10,68,297]}],action:"power",params:['{"id_tag": "',{t:2,r:"id_tag",p:[11,46,373]},'", "val": ',{t:2,x:{r:["power"],s:"+!_0"},p:[11,66,393]},"}"]},f:[{t:2,x:{r:["power"],s:'_0?"On":"Off"'},p:[11,80,407]}]}]}," ",{p:[13,7,470],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[14,9,504],t:7,e:"span",f:[{t:2,x:{r:["direction"],s:'_0=="release"?"Pressurizing":"Siphoning"'},p:[14,15,510]}]}]}," ",{p:[16,7,601],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[17,9,649],t:7,e:"ui-button",a:{icon:"sign-in",style:[{t:2,x:{r:["incheck"],s:'_0?"selected":null'},p:[17,42,682]}],action:"incheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[18,48,762]},'", "val": ',{t:2,r:"checks",p:[18,68,782]},"}"]},f:["Internal"]}," ",{p:[19,9,824],t:7,e:"ui-button",a:{icon:"sign-out",style:[{t:2,x:{r:["excheck"],s:'_0?"selected":null'},p:[19,43,858]}],action:"excheck",params:['{"id_tag": "',{t:2,r:"id_tag",p:[20,48,938]},'", "val": ',{t:2,r:"checks",p:[20,68,958]},"}"]},f:["External"]}]}," ",{t:4,f:[{p:[23,9,1042],t:7,e:"ui-section",a:{label:"Internal Target Pressure"},f:[{p:[24,11,1098],t:7,e:"ui-button",a:{icon:"pencil",action:"set_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[25,33,1186]},'"}']},f:[{t:2,x:{r:["internal"],s:"Math.fixed(_0)"},p:[25,47,1200]}]}," ",{p:[26,11,1247],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["intdefault"],s:'_0?"disabled":null'},p:[26,44,1280]}],action:"reset_internal_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[27,33,1381]},'"}']},f:["Reset"]}]}],n:50,r:"incheck",p:[22,7,1018]}," ",{t:4,f:[{p:[31,11,1481],t:7,e:"ui-section",a:{label:"External Target Pressure"},f:[{p:[32,13,1539],t:7,e:"ui-button",a:{icon:"pencil",action:"set_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[33,35,1629]},'"}']},f:[{t:2,x:{r:["external"],s:"Math.fixed(_0)"},p:[33,49,1643]}]}," ",{p:[34,13,1692],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["extdefault"],s:'_0?"disabled":null'},p:[34,46,1725]}],action:"reset_external_pressure",params:['{"id_tag": "',{t:2,r:"id_tag",p:[35,35,1828]},'"}']},f:["Reset"]}]}],n:50,r:"excheck",p:[30,7,1455]}]}],n:52,r:"data.vents",p:[7,3,134]},{t:4,n:51,f:[{p:[40,5,1934],t:7,e:"span",a:{"class":"bad"},f:["Error: No vents connected."]}],r:"data.vents"}]}]},r.exports.components=r.exports.components||{};var i={back:t(357)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,357:357}],363:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.css=" table {\n width: 100%;\n border-spacing: 2px;\n }\n th {\n text-align: left;\n }\n td {\n vertical-align: top;\n }\n td .button {\n margin-top: 4px\n }",r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",f:[{p:[3,5,32],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oneAccess"],s:'_0?"unlock":"lock"'},p:[3,22,49]}],action:"one_access"},f:[{t:2,x:{r:["data.oneAccess"],s:'_0?"One":"All"'},p:[3,82,109]}," Required"]}," ",{p:[4,5,169],t:7,e:"ui-button",a:{icon:"refresh",action:"clear"},f:["Clear"]}]}," ",{p:[6,3,246],t:7,e:"hr"}," ",{p:[7,3,254],t:7,e:"table",f:[{p:[8,3,264],t:7,e:"thead",f:[{p:[9,4,275],t:7,e:"tr",f:[{t:4,f:[{p:[10,5,306],t:7,e:"th",f:[{p:[10,9,310],t:7,e:"span",a:{"class":"highlight bold"},f:[{t:2,r:"name",p:[10,38,339]}]}]}],n:52,r:"data.regions",p:[9,8,279]}]}]}," ",{p:[13,3,391],t:7,e:"tbody",f:[{p:[14,4,402],t:7,e:"tr",f:[{t:4,f:[{p:[15,5,433],t:7,e:"td",f:[{t:4,f:[{p:[16,11,466],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["req"],s:'_0?"check-square-o":"square-o"'},p:[16,28,483]}],style:[{t:2,x:{r:["req"],s:'_0?"selected":null'},p:[16,76,531]}],action:"set",params:['{"access": "',{t:2,r:"id",p:[17,46,605]},'"}']},f:[{t:2,r:"name",p:[17,56,615]}]}," ",{p:[18,9,644],t:7,e:"br"}],n:52,r:"accesses",p:[15,9,437]}]}],n:52,r:"data.regions",p:[14,8,406]}]}]}]}," ",{p:[23,2,709],t:7,e:"hr"}," ",{p:[24,2,716],t:7,e:"span",a:{"class":"highlight bold"},f:["Unrestricted Access:"]}," ",{p:[25,2,774],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"check-square-o":"square-o"'},p:[25,19,791]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&1?"selected":null'},p:[25,88,860]}],action:"direc_set",params:'{"unres_direction": "1"}'},f:["North"]}," ",{p:[26,2,982],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"check-square-o":"square-o"'},p:[26,19,999]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&4?"selected":null'},p:[26,88,1068]}],action:"direc_set",params:'{"unres_direction": "4"}'},f:["East"]}," ",{p:[27,2,1189],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"check-square-o":"square-o"'},p:[27,19,1206]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&2?"selected":null'
},p:[27,88,1275]}],action:"direc_set",params:'{"unres_direction": "2"}'},f:["South"]}," ",{p:[28,2,1397],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"check-square-o":"square-o"'},p:[28,19,1414]}],style:[{t:2,x:{r:["data.unres_direction"],s:'_0&8?"selected":null'},p:[28,88,1483]}],action:"direc_set",params:'{"unres_direction": "8"}'},f:["West"]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],364:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}}},computed:{malfAction:function(){switch(this.get("data.malfStatus")){case 1:return"hack";case 2:return"occupy";case 3:return"deoccupy"}},malfButton:function(){switch(this.get("data.malfStatus")){case 1:return"Override Programming";case 2:case 4:return"Shunt Core Process";case 3:return"Return to Main Core"}},malfIcon:function(){switch(this.get("data.malfStatus")){case 1:return"terminal";case 2:case 4:return"caret-square-o-down";case 3:return"caret-square-o-left"}},powerCellStatusState:function(){var t=this.get("data.powerCellStatus");return t>50?"good":t>25?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[46,2,1161],t:7,e:"ui-notice",f:[{p:[47,3,1175],t:7,e:"b",f:[{p:[47,6,1178],t:7,e:"h3",f:["SYSTEM FAILURE"]}]}," ",{p:[48,3,1208],t:7,e:"i",f:["I/O regulators malfunction detected! Waiting for system reboot..."]},{p:[48,75,1280],t:7,e:"br"}," Automatic reboot in ",{t:2,r:"data.failTime",p:[49,23,1307]}," seconds... ",{p:[50,3,1338],t:7,e:"ui-button",a:{icon:"refresh",action:"reboot"},f:["Reboot Now"]},{p:[50,67,1402],t:7,e:"br"},{p:[50,71,1406],t:7,e:"br"},{p:[50,75,1410],t:7,e:"br"}]}],n:50,r:"data.failTime",p:[45,1,1138]},{t:4,n:51,f:[{p:[53,2,1439],t:7,e:"ui-notice",f:[{t:4,f:[{p:[55,3,1481],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[56,5,1521],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[56,22,1538]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[56,73,1589]}]}]}],n:50,r:"data.siliconUser",p:[54,4,1454]},{t:4,n:51,f:[{p:[59,3,1674],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[59,29,1700]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[62,2,1785],t:7,e:"ui-display",a:{title:"Power Status"},f:[{p:[63,4,1822],t:7,e:"ui-section",a:{label:"Main Breaker"},f:[{t:4,f:[{p:[65,5,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isOperating"],s:'_0?"good":"bad"'},p:[65,18,1916]}]},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[65,57,1955]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[64,3,1858]},{t:4,n:51,f:[{p:[67,5,2013],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[67,22,2030]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[67,75,2083]}],action:"breaker"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[68,21,2145]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}," ",{p:[71,4,2223],t:7,e:"ui-section",a:{label:"External Power"},f:[{p:[72,3,2261],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.externalPower"],s:"_0(_1)"},p:[72,16,2274]}]},f:[{t:2,x:{r:["data.externalPower"],s:'_0==2?"Good":_0==1?"Low":"None"'},p:[72,52,2310]}]}]}," ",{p:[74,4,2417],t:7,e:"ui-section",a:{label:"Power Cell"},f:[{t:4,f:[{p:[76,5,2492],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerCellStatus",p:[76,38,2525]}],state:[{t:2,r:"powerCellStatusState",p:[76,71,2558]}]},f:[{t:2,x:{r:["adata.powerCellStatus"],s:"Math.fixed(_0)"},p:[76,97,2584]},"%"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[75,3,2451]},{t:4,n:51,f:[{p:[78,5,2647],t:7,e:"span",a:{"class":"bad"},f:["Removed"]}],x:{r:["data.powerCellStatus"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[82,3,2749],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{t:4,f:[{p:[84,4,2830],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.chargeMode"],s:'_0?"good":"bad"'},p:[84,17,2843]}]},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[84,55,2881]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[83,5,2786]},{t:4,n:51,f:[{p:[86,4,2941],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.chargeMode"],s:'_0?"refresh":"close"'},p:[86,21,2958]}],style:[{t:2,x:{r:["data.chargeMode"],s:'_0?"selected":null'},p:[86,71,3008]}],action:"charge"},f:[{t:2,x:{r:["data.chargeMode"],s:'_0?"Auto":"Off"'},p:[87,22,3070]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}," [",{p:[90,6,3147],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.chargingStatus"],s:"_0(_1)"},p:[90,19,3160]}]},f:[{t:2,x:{r:["data.chargingStatus"],s:'_0==2?"Fully Charged":_0==1?"Charging":"Not Charging"'},p:[90,56,3197]}]},"]"]}],n:50,x:{r:["data.powerCellStatus"],s:"_0!=null"},p:[81,4,2710]}]}," ",{p:[94,2,3352],t:7,e:"ui-display",a:{title:"Power Channels"},f:[{t:4,f:[{p:[96,3,3422],t:7,e:"ui-section",a:{label:[{t:2,r:"title",p:[96,22,3441]}],nowrap:0},f:[{p:[97,5,3464],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.powerChannels",m:[{t:30,n:"@index"},"powerLoad"]},p:[97,26,3485]}]}," ",{p:[98,5,3537],t:7,e:"div",a:{"class":"content"},f:[{p:[98,26,3558],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0>=2?"good":"bad"'},p:[98,39,3571]}]},f:[{t:2,x:{r:["status"],s:'_0>=2?"On":"Off"'},p:[98,73,3605]}]}]}," ",{p:[99,5,3653],t:7,e:"div",a:{"class":"content"},f:["[",{p:[99,27,3675],t:7,e:"span",f:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"Auto":"Manual"'},p:[99,33,3681]}]},"]"]}," ",{p:[100,5,3750],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{t:4,f:[{p:[102,6,3841],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["status"],s:'_0==1||_0==3?"selected":null'},p:[102,39,3874]}],action:"channel",params:[{t:2,r:"topicParams.auto",p:[103,30,3955]}]},f:["Auto"]}," ",{p:[104,6,3999],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["status"],s:'_0==2?"selected":null'},p:[104,41,4034]}],action:"channel",params:[{t:2,r:"topicParams.on",p:[105,13,4100]}]},f:["On"]}," ",{p:[106,6,4140],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["status"],s:'_0==0?"selected":null'},p:[106,37,4171]}],action:"channel",params:[{t:2,r:"topicParams.off",p:[107,13,4237]}]},f:["Off"]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[101,4,3795]}]}]}],n:52,r:"data.powerChannels",p:[95,4,3391]}," ",{p:[112,4,4328],t:7,e:"ui-section",a:{label:"Total Load"},f:[{p:[113,3,4362],t:7,e:"span",a:{"class":"bold"},f:[{t:2,r:"adata.totalLoad",p:[113,22,4381]}]}]}]}," ",{t:4,f:[{p:[117,4,4469],t:7,e:"ui-display",a:{title:"System Overrides"},f:[{p:[118,3,4509],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"overload"},f:["Overload"]}," ",{t:4,f:[{p:[120,5,4608],t:7,e:"ui-button",a:{icon:[{t:2,r:"malfIcon",p:[120,22,4625]}],state:[{t:2,x:{r:["data.malfStatus"],s:'_0==4?"disabled":null'},p:[120,43,4646]}],action:[{t:2,r:"malfAction",p:[120,97,4700]}]},f:[{t:2,r:"malfButton",p:[120,113,4716]}]}],n:50,r:"data.malfStatus",p:[119,3,4580]}]}],n:50,r:"data.siliconUser",p:[116,2,4441]}," ",{p:[124,2,4780],t:7,e:"ui-notice",f:[{p:[125,4,4795],t:7,e:"ui-section",a:{label:"Emergency Light Fallback"},f:[{t:4,f:[{p:[127,8,4894],t:7,e:"span",f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[127,14,4900]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[126,6,4846]},{t:4,n:51,f:[{p:[129,8,4978],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"emergency_lighting"},f:[{t:2,x:{r:["data.emergencyLights"],s:'_0?"Enabled":"Disabled"'},p:[129,66,5036]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[133,2,5143],t:7,e:"ui-notice",f:[{p:[134,4,5158],t:7,e:"ui-section",a:{label:"Night Shift Lighting"},f:[{t:4,f:[{p:[136,8,5253],t:7,e:"span",f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[136,14,5259]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[135,6,5205]},{t:4,n:51,f:[{p:[138,8,5338],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"toggle_nightshift"},f:[{t:2,x:{r:["data.nightshiftLights"],s:'_0?"Enabled":"Disabled"'},p:[138,65,5395]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}," ",{p:[142,2,5503],t:7,e:"ui-notice",f:[{p:[143,4,5518],t:7,e:"ui-section",a:{label:"Cover Lock"},f:[{t:4,f:[{p:[145,5,5597],t:7,e:"span",f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[145,11,5603]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"},p:[144,3,5552]},{t:4,n:51,f:[{p:[147,5,5673],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.coverLocked"],s:'_0?"lock":"unlock"'},p:[147,22,5690]}],action:"cover"},f:[{t:2,x:{r:["data.coverLocked"],s:'_0?"Engaged":"Disengaged"'},p:[147,79,5747]}]}],x:{r:["data.locked","data.siliconUser"],s:"_0&&!_1"}}]}]}],r:"data.failTime"}]},e.exports=a.extend(r.exports)},{341:341}],365:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Alarms"},f:[{p:[2,3,30],t:7,e:"ul",f:[{t:4,f:[{p:[4,7,69],t:7,e:"li",f:[{p:[4,11,73],t:7,e:"ui-button",a:{icon:"close",style:"danger",action:"clear",params:['{"zone": "',{t:2,r:".",p:[4,83,145]},'"}']},f:[{t:2,r:".",p:[4,92,154]}]}]}],n:52,r:"data.priority",p:[3,5,39]},{t:4,n:51,f:[{p:[6,7,196],t:7,e:"li",f:[{p:[6,11,200],t:7,e:"span",a:{"class":"good"},f:["No Priority Alerts"]}]}],r:"data.priority"}," ",{t:4,f:[{p:[9,7,295],t:7,e:"li",f:[{p:[9,11,299],t:7,e:"ui-button",a:{icon:"close",style:"caution",action:"clear",params:['{"zone": "',{t:2,r:".",p:[9,84,372]},'"}']},f:[{t:2,r:".",p:[9,93,381]}]}]}],n:52,r:"data.minor",p:[8,5,268]},{t:4,n:51,f:[{p:[11,7,423],t:7,e:"li",f:[{p:[11,11,427],t:7,e:"span",a:{"class":"good"},f:["No Minor Alerts"]}]}],r:"data.minor"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],366:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.tank","data.sensors.0.long_name"],s:"_0?_1:null"},p:[1,20,19]}]},f:[{t:4,f:[{p:[3,5,100],t:7,e:"ui-subdisplay",a:{title:[{t:2,x:{r:["data.tank","long_name"],s:"!_0?_1:null"},p:[3,27,122]}]},f:[{p:[4,7,164],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[5,3,196],t:7,e:"span",f:[{t:2,x:{r:["pressure"],s:"Math.fixed(_0,2)"},p:[5,9,202]}," kPa"]}]}," ",{t:4,f:[{p:[8,9,295],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[9,11,338],t:7,e:"span",f:[{t:2,x:{r:["temperature"],s:"Math.fixed(_0,2)"},p:[9,17,344]}," K"]}]}],n:50,r:"temperature",p:[7,7,267]}," ",{t:4,f:[{p:[13,9,450],t:7,e:"ui-section",a:{label:[{t:2,r:"id",p:[13,28,469]}]},f:[{p:[14,5,482],t:7,e:"span",f:[{t:2,x:{r:["."],s:"Math.fixed(_0,2)"},p:[14,11,488]},"%"]}]}],n:52,i:"id",r:"gases",p:[12,4,423]}]}],n:52,r:"adata.sensors",p:[2,3,72]}]}," ",{t:4,f:[{p:{button:[{p:[23,5,682],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[25,5,768],t:7,e:"ui-section",a:{label:"Input Injector"},f:[{p:[26,7,810],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputting"],s:'_0?"power-off":"close"'},p:[26,24,827]}],style:[{t:2,x:{r:["data.inputting"],s:'_0?"selected":null'},p:[26,75,878]}],action:"input"},f:[{t:2,x:{r:["data.inputting"],s:'_0?"Injecting":"Off"'},p:[27,9,942]}]}]}," ",{p:[29,5,1016],t:7,e:"ui-section",a:{label:"Input Rate"},f:[{p:[30,7,1054],t:7,e:"span",f:[{t:2,x:{r:["adata.inputRate"],s:"Math.fixed(_0)"},p:[30,13,1060]}," L/s"]}]}," ",{p:[32,5,1125],t:7,e:"ui-section",a:{label:"Output Regulator"},f:[{p:[33,7,1169],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputting"],s:'_0?"power-off":"close"'},p:[33,24,1186]}],style:[{t:2,x:{r:["data.outputting"],s:'_0?"selected":null'},p:[33,76,1238]}],action:"output"},f:[{t:2,x:{r:["data.outputting"],s:'_0?"Open":"Closed"'},p:[34,9,1304]}]}]}," ",{p:[36,5,1377],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[37,7,1420],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure"},f:[{t:2,x:{r:["adata.outputPressure"],s:"Math.round(_0)"},p:[37,50,1463]}," kPa"]}]}]}],n:50,r:"data.tank",p:[20,1,599]}]},e.exports=a.extend(r.exports)},{341:341}],367:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,16],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,48],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,65]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,109]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,164]}]}]}," ",{p:[6,3,223],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[7,5,263],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[8,5,350],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[8,35,380]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[9,5,492],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[9,11,498]}," L/s"]}]}," ",{p:[11,3,556],t:7,e:"ui-section",a:{label:"Filter"},f:[{t:4,f:[{p:[13,7,624],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[13,25,642]}],action:"filter",params:['{"mode": ',{t:2,r:"id",p:[14,42,718]},"}"]},f:[{t:2,r:"name",p:[14,51,727]}]}],n:52,r:"data.filter_types",p:[12,5,589]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],368:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{p:[6,3,218],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[7,5,259],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[8,5,353],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.set_pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[8,35,383]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[9,5,514],t:7,e:"span",f:[{t:2,x:{r:["adata.set_pressure"],s:"Math.round(_0)"},p:[9,11,520]}," kPa"]}]}," ",{p:[11,3,584],t:7,e:"ui-section",a:{label:"Node 1"},f:[{p:[12,5,616],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[12,44,655]}],action:"node1",params:'{"concentration": -0.1}'}}," ",{p:[14,5,770],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==0?"disabled":null'},p:[14,39,804]}],action:"node1",params:'{"concentration": -0.01}'}}," ",{p:[16,5,920],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[16,38,953]}],action:"node1",params:'{"concentration": 0.01}'}}," ",{p:[18,5,1070],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node1_concentration"],s:'_0==100?"disabled":null'},p:[18,43,1108]}],action:"node1",params:'{"concentration": 0.1}'}}," ",{p:[20,5,1224],t:7,e:"span",f:[{t:2,x:{r:["adata.node1_concentration"],s:"Math.round(_0)"},p:[20,11,1230]},"%"]}]}," ",{p:[22,3,1298],t:7,e:"ui-section",a:{label:"Node 2"},f:[{p:[23,5,1330],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[23,44,1369]}],action:"node2",params:'{"concentration": -0.1}'}}," ",{p:[25,5,1484],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==0?"disabled":null'},p:[25,39,1518]}],action:"node2",params:'{"concentration": -0.01}'}}," ",{p:[27,5,1634],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[27,38,1667]}],action:"node2",params:'{"concentration": 0.01}'}}," ",{p:[29,5,1784],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.node2_concentration"],s:'_0==100?"disabled":null'},p:[29,43,1822]}],action:"node2",params:'{"concentration": 0.1}'}}," ",{p:[31,5,1938],t:7,e:"span",f:[{t:2,x:{r:["adata.node2_concentration"],s:"Math.round(_0)"},p:[31,11,1944]},"%"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],369:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,46],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[3,22,63]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[3,66,107]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[4,22,161]}]}]}," ",{t:4,f:[{p:[7,5,244],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{p:[8,7,285],t:7,e:"ui-button",a:{icon:"pencil",action:"rate",params:'{"rate": "input"}'},f:["Set"]}," ",{p:[9,7,373],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.rate","data.max_rate"],s:'_0==_1?"disabled":null'},p:[9,37,403]}],action:"rate",params:'{"rate": "max"}'},f:["Max"]}," ",{p:[10,7,516],t:7,e:"span",f:[{t:2,x:{r:["adata.rate"],s:"Math.round(_0)"},p:[10,13,522]}," L/s"]}]}],n:50,r:"data.max_rate",p:[6,3,218]},{t:4,n:51,f:[{p:[13,5,593],t:7,e:"ui-section",a:{label:"Output Pressure"},f:[{p:[14,7,636],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[15,7,732],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.pressure","data.max_pressure"],s:'_0==_1?"disabled":null'},p:[15,37,762]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}," ",{p:[16,7,891],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[16,13,897]}," kPa"]}]}],r:"data.max_rate"}]}]},e.exports=a.extend(r.exports)},{341:341}],370:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,70],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"data.borg.name",p:[1,20,19]}],button:0},f:[" ",{p:[5,2,145],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[6,4,176],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"check-square-o":"square-o"'},p:[6,21,193]}],style:[{t:2,x:{r:["data.borg.emagged"],s:'_0?"selected":null'},p:[6,83,255]}],action:"toggle_emagged"},f:["Emagged"]}," ",{p:[7,4,345],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"check-square-o":"square-o"'},p:[7,21,362]}],style:[{t:2,x:{r:["data.borg.lockdown"],s:'_0?"selected":null'},p:[7,84,425]}],action:"toggle_lockdown"},f:["Locked down"]}," ",{p:[8,4,521],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"check-square-o":"square-o"'},p:[8,21,538]}],style:[{t:2,x:{r:["data.borg.scrambledcodes"],s:'_0?"selected":null'},p:[8,90,607]}],action:"toggle_scrambledcodes"},f:["Scrambled codes"]}]}," ",{p:[10,2,732],t:7,e:"ui-section",a:{label:"Charge"},f:[{t:4,f:[{p:[12,4,792],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.cell.maxcharge",p:[12,25,813]}],value:[{t:2,r:"data.cell.charge",p:[12,57,845]}]},f:[{t:2,x:{r:["data.cell.charge"],s:"Math.round(_0)"},p:[12,79,867]}," / ",{t:2,x:{r:["data.cell.maxcharge"],s:"Math.round(_0)"},p:[12,114,902]}]}],n:50,x:{r:["data.cell.missing"],s:"!_0"},p:[11,3,762]},{t:4,n:51,f:[{p:[14,4,961],t:7,e:"span",a:{"class":"warning"},f:["Cell missing"]},{p:[14,45,1002],t:7,e:"br"}],x:{r:["data.cell.missing"],s:"!_0"}}," ",{p:[16,3,1020],t:7,e:"ui-button",a:{icon:"pencil",action:"set_charge"},f:["Set"]},{p:[16,63,1080],t:7,e:"ui-button",a:{icon:"eject",action:"change_cell"},f:["Change"]},{p:[16,126,1143],t:7,e:"ui-button",a:{icon:"trash","class":"bad",action:"remove_cell"},f:["Remove"]}]}," ",{p:[18,2,1235],t:7,e:"ui-section",a:{label:"Radio channels"},f:[{t:4,f:[{p:[20,4,1300],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[20,21,1317]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[20,75,1371]}],action:"toggle_radio",params:['{"channel": "',{t:2,r:"name",p:[20,154,1450]},'"}']},f:[{t:2,r:"name",p:[20,166,1462]}]}],n:52,r:"data.channels",p:[19,3,1273]}]}," ",{p:[23,2,1511],t:7,e:"ui-section",a:{label:"Module"},f:[{t:4,f:[{p:[25,4,1567],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"check-square-o":"square-o"'},p:[25,21,1584]}],style:[{t:2,x:{r:["data.borg.active_module","type"],s:'_0==_1?"selected":null'},p:[25,97,1660]}],action:"setmodule",params:['{"module": "',{t:2,r:"type",p:[25,193,1756]},'"}']},f:[{t:2,r:"name",p:[25,205,1768]}]}],n:52,r:"data.modules",p:[24,3,1541]}]}," ",{p:[28,2,1817],t:7,e:"ui-section",a:{label:"Upgrades"},f:[{t:4,f:[{p:[30,4,1876],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["installed"],s:'_0?"check-square-o":"square-o"'},p:[30,21,1893]}],style:[{t:2,x:{r:["installed"],s:'_0?"selected":null'},p:[30,75,1947]}],action:"toggle_upgrade",params:['{"upgrade": "',{t:2,r:"type",p:[30,155,2027]},'"}']},f:[{t:2,r:"name",p:[30,167,2039]}]}],n:52,r:"data.upgrades",p:[29,3,1849]}]}," ",{p:[33,2,2088],t:7,e:"ui-section",a:{label:"Master AI"},f:[{t:4,f:[{p:[35,4,2143],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["connected"],s:'_0?"check-square-o":"square-o"'},p:[35,21,2160]}],style:[{t:2,x:{r:["connected"],s:'_0?"selected":null'},p:[35,75,2214]}],action:"slavetoai",params:['{"slavetoai": "',{t:2,r:"ref",p:[35,152,2291]},'"}']},f:[{t:2,r:"name",p:[35,163,2302]}]}],n:52,r:"data.ais",p:[34,3,2121]}]}]}," ",{p:{button:[{p:[41,3,2420],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"check-square-o":"square-o"'},p:[41,20,2437]}],style:[{t:2,x:{r:["data.borg.lawupdate"],s:'_0?"selected":null'},p:[41,84,2501]}],action:"toggle_lawupdate"},f:["Lawsync"]}]},t:7,e:"ui-display",a:{title:"Laws",button:0},f:[" ",{t:4,f:[{p:[44,3,2629],t:7,e:"p",f:[{t:2,r:".",p:[44,6,2632]}]}],n:52,r:"data.laws",p:[43,2,2607]}]}]},e.exports=a.extend(r.exports)},{341:341}],371:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,5,65],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"selected":null'},p:[3,38,98]}],action:[{t:2,x:{r:["data.timing"],s:'_0?"stop":"start"'},p:[3,83,143]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"Stop":"Start"'},p:[3,119,179]}]}," ",{p:[4,5,230],t:7,e:"ui-button",a:{icon:"lightbulb-o",action:"flash",style:[{t:2,x:{r:["data.flash_charging"],s:'_0?"disabled":null'},p:[4,57,282]}]},f:[{t:2,x:{r:["data.flash_charging"],s:'_0?"Recharging":"Flash"'},p:[4,102,327]}]}]},t:7,e:"ui-display",a:{title:"Cell Timer",button:0},f:[" ",{p:[6,3,405],t:7,e:"ui-section",f:[{p:[7,5,422],t:7,e:"ui-button",a:{icon:"fast-backward",action:"time",params:'{"adjust": -600}'}}," ",{p:[8,5,511],t:7,e:"ui-button",a:{icon:"backward",action:"time",params:'{"adjust": -100}'}}," ",{p:[9,5,595],t:7,e:"span",f:[{t:2,x:{r:["text","data.minutes"],s:"_0.zeroPad(_1,2)"},p:[9,11,601]},":",{t:2,x:{r:["text","data.seconds"],s:"_0.zeroPad(_1,2)"},p:[9,45,635]}]}," ",{p:[10,5,680],t:7,e:"ui-button",a:{icon:"forward",action:"time",params:'{"adjust": 100}'}}," ",{p:[11,5,762],t:7,e:"ui-button",a:{icon:"fast-forward",action:"time",params:'{"adjust": 600}'}}]}," ",{p:[13,3,863],t:7,e:"ui-section",f:[{p:[14,7,882],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "short"}'},f:["Short"]}," ",{p:[15,7,985],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "medium"}'},f:["Medium"]}," ",{p:[16,7,1090],t:7,e:"ui-button",a:{icon:"hourglass-start",action:"preset",params:'{"preset": "long"}'},f:["Long"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],372:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Bluespace Artillery Control",button:0},f:[{t:4,f:[{p:[8,3,160],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,5,192],t:7,e:"ui-button",a:{icon:"crosshairs",action:"recalibrate"},f:[{t:2,r:"data.target",p:[9,55,242]}]}]}," ",{p:[11,3,288],t:7,e:"ui-section",a:{label:"Controls"},f:[{t:4,f:[{p:[13,3,344],t:7,e:"ui-notice",f:[{p:[14,4,359],t:7,e:"span",f:["Bluespace Artillery firing protocols must be globally unlocked from two keycard authentication devices first!"]}]}],n:50,x:{r:["data.unlocked"],s:"!_0"},p:[12,2,319]},{t:4,n:51,f:[{p:[17,3,509],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.ready"],s:'_0?null:"disabled"'},p:[17,36,542]}],action:"fire"},f:["FIRE!"]}],x:{r:["data.unlocked"],s:"!_0"}}]}],n:50,r:"data.connected",p:[7,3,135]}," ",{t:4,f:[{p:[22,3,673],t:7,e:"ui-section",a:{label:"Maintenance"},f:[{p:[23,7,712],t:7,e:"ui-button",a:{icon:"wrench",action:"build"},f:["Complete Deployment."]}]}],n:50,x:{r:["data.connected"],s:"!_0"},p:[21,3,647]}]}]},e.exports=a.extend(r.exports)},{341:341}],373:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.hasHoldingTank"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:{button:[{p:[6,5,180],t:7,e:"ui-button",a:{icon:"pencil",action:"relabel"},f:["Relabel"]}]},t:7,e:"ui-display",a:{title:"Canister",button:0},f:[" ",{p:[8,3,259],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[9,5,293],t:7,e:"span",f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[9,11,299]}," kPa"]}]}," ",{p:[11,3,363],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[12,5,393],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.portConnected"],s:'_0?"good":"average"'},p:[12,18,406]}]},f:[{t:2,x:{r:["data.portConnected"],s:'_0?"Connected":"Not Connected"'},p:[12,63,451]}]}]}," ",{t:4,f:[{p:[15,3,559],t:7,e:"ui-section",a:{label:"Access"},f:[{p:[16,7,593],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.restricted"],s:'_0?"lock":"unlock"'},p:[16,24,610]}],style:[{t:2,x:{r:[],s:'"caution"'},p:[17,14,664]}],action:"restricted"},f:[{t:2,x:{r:["data.restricted"],s:'_0?"Restricted to Engineering":"Public"'},p:[18,27,705]}]}]}],n:50,r:"data.isPrototype",p:[14,3,531]}]}," ",{p:[22,1,818],t:7,e:"ui-display",a:{title:"Valve"},f:[{p:[23,3,847],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[24,5,889],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[24,18,902]}],max:[{t:2,r:"data.maxReleasePressure",p:[24,52,936]}],value:[{t:2,r:"data.releasePressure",p:[25,14,978]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[25,40,1004]}," kPa"]}]}," ",{p:[27,3,1073],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[28,5,1117],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[28,38,1150]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[30,5,1304],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[30,36,1335]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[32,5,1480],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[33,5,1574],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[33,35,1604]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}," ",{p:[36,3,1763],t:7,e:"ui-section",a:{label:"Valve"},f:[{p:[37,5,1794],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.valveOpen"],s:'_0?"unlock":"lock"'},p:[37,22,1811]}],style:[{t:2,x:{r:["data.valveOpen","data.hasHoldingTank"],s:'_0?_1?"caution":"danger":null'},p:[38,14,1864]}],action:"valve"},f:[{t:2,x:{r:["data.valveOpen"],s:'_0?"Open":"Closed"'},p:[39,22,1957]}]}]}]}," ",{t:4,f:[{p:[42,1,2049],t:7,e:"ui-display",a:{title:"Valve Toggle Timer"},f:[{t:4,f:[{p:[44,5,2112],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[45,7,2152],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.timer_is_not_default"],s:'_0?null:"disabled"'},p:[45,40,2185]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[47,7,2312],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.timer_is_not_min"],s:'_0?null:"disabled"'},p:[47,38,2343]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[49,7,2472],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:[],s:'"disabled"'},p:[49,39,2504]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[51,7,2587],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.timer_is_not_max"],s:'_0?null:"disabled"'},p:[51,37,2617]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[43,3,2091]}," ",{p:[55,3,2779],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[56,6,2811],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[56,39,2844]}],action:"toggle_timer"},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[57,30,2913]}]}," ",{p:[59,2,2959],t:7,e:"ui-section",a:{label:"Time until Valve Toggle"},f:[{p:[60,2,3005],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[60,8,3011]}]}]}]}]}],n:50,r:"data.isPrototype",p:[41,1,2022]},{p:{button:[{t:4,f:[{p:[69,7,3209],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.valveOpen"],s:'_0?"danger":null'},p:[69,38,3240]}],action:"eject"},f:["Eject"]}],n:50,r:"data.hasHoldingTank",p:[68,5,3175]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[73,3,3370],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holdingTank.name",p:[74,4,3400]}]}," ",{p:[76,3,3444],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holdingTank.tankPressure"],s:"Math.round(_0)"},p:[77,4,3477]}," kPa"]}],n:50,r:"data.hasHoldingTank",p:[72,3,3340]},{t:4,n:51,f:[{p:[80,3,3556],t:7,e:"ui-section",f:[{p:[81,4,3572],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.hasHoldingTank"}]}]},e.exports=a.extend(r.exports)},{341:341}],374:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,158],t:7,e:"ui-display",a:{title:"Cargo"},f:[{p:[12,3,188],t:7,e:"ui-section",a:{label:"Shuttle"},f:[{t:4,f:[{p:[14,7,270],t:7,e:"ui-button",a:{action:"send"},f:[{t:2,r:"data.location",p:[14,32,295]}]}],n:50,x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"},p:[13,5,222]},{t:4,n:51,f:[{p:[16,7,346],t:7,e:"span",f:[{t:2,r:"data.location",p:[16,13,352]}]}],x:{r:["data.docked","data.requestonly"],s:"_0&&!_1"}}]}," ",{p:[19,3,410],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[20,5,444],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[20,11,450]}]}]}," ",{p:[22,3,506],t:7,e:"ui-section",a:{label:"CentCom Message"},f:[{p:[23,7,550],t:7,e:"span",f:[{t:2,r:"data.message",p:[23,13,556]}]}]}," ",{t:4,f:[{p:[26,5,644],t:7,e:"ui-section",a:{label:"Loan"},f:[{t:4,f:[{p:[28,9,716],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.away","data.docked"],s:'_0&&_1?null:"disabled"'},p:[29,17,744]}],action:"loan"},f:["Loan Shuttle"]}],n:50,x:{r:["data.loan_dispatched"],s:"!_0"},p:[27,7,677]},{t:4,n:51,f:[{p:[32,9,868],t:7,e:"span",a:{"class":"bad"},f:["Loaned to CentCom"]}],x:{r:["data.loan_dispatched"],s:"!_0"}}]}],n:50,x:{r:["data.loan","data.requestonly"],s:"_0&&!_1"},p:[25,3,600]}]}," ",{t:4,f:[{p:{button:[{p:[40,7,1066],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.cart.length"],s:'_0?null:"disabled"'},p:[40,38,1097]}],action:"clear"},f:["Clear"]}]},t:7,e:"ui-display",a:{title:"Cart",button:0},f:[" ",{t:4,f:[{p:[43,7,1222],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[44,9,1263],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[44,31,1285]}]}," ",{p:[45,9,1307],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[45,30,1328]}]}," ",{p:[46,9,1354],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[46,30,1375]}," Credits"]}," ",{p:[47,9,1407],t:7,e:"div",a:{"class":"content"},f:[{p:[48,11,1440],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"id": "',{t:2,r:"id",p:[48,67,1496]},'"}']}}]}]
}],n:52,r:"data.cart",p:[42,5,1195]},{t:4,n:51,f:[{p:[52,7,1566],t:7,e:"span",f:["Nothing in Cart"]}],r:"data.cart"}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[37,1,972]},{p:{button:[{t:4,f:[{p:[59,7,1735],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.requests.length"],s:'_0?null:"disabled"'},p:[59,38,1766]}],action:"denyall"},f:["Clear"]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[58,5,1702]}]},t:7,e:"ui-display",a:{title:"Requests",button:0},f:[" ",{t:4,f:[{p:[63,5,1908],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[64,7,1947],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[64,29,1969]}]}," ",{p:[65,7,1989],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"object",p:[65,28,2010]}]}," ",{p:[66,7,2034],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"cost",p:[66,28,2055]}," Credits"]}," ",{p:[67,7,2085],t:7,e:"div",a:{"class":"content"},f:["By ",{t:2,r:"orderer",p:[67,31,2109]}]}," ",{p:[68,7,2134],t:7,e:"div",a:{"class":"content"},f:["Comment: ",{t:2,r:"reason",p:[68,37,2164]}]}," ",{t:4,f:[{p:[70,9,2223],t:7,e:"div",a:{"class":"content"},f:[{p:[71,11,2256],t:7,e:"ui-button",a:{icon:"check",action:"approve",params:['{"id": "',{t:2,r:"id",p:[71,68,2313]},'"}']}}," ",{p:[72,11,2336],t:7,e:"ui-button",a:{icon:"close",action:"deny",params:['{"id": "',{t:2,r:"id",p:[72,65,2390]},'"}']}}]}],n:50,x:{r:["data.requestonly"],s:"!_0"},p:[69,7,2188]}]}],n:52,r:"data.requests",p:[62,3,1879]},{t:4,n:51,f:[{p:[77,7,2473],t:7,e:"span",f:["No Requests"]}],r:"data.requests"}]}," ",{p:[80,1,2529],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[80,16,2544]}]},f:[{t:4,f:[{p:[82,5,2587],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[82,16,2598]}]},f:[{t:4,f:[{p:[84,9,2641],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,28,2660]}],candystripe:0,right:0},f:[{p:[85,11,2700],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"desc",p:[85,31,2720]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[85,90,2779]},'"}']},f:[{t:2,r:"cost",p:[85,100,2789]}," Credits"]}]}],n:52,r:"packs",p:[83,7,2616]}]}],n:52,r:"data.supplies",p:[81,3,2558]}]}]},e.exports=a.extend(r.exports)},{341:341}],375:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tabs:function(){return Object.keys(this.get("data.supplies"))}}}}(r),r.exports.template={v:3,t:[" ",{p:[12,1,163],t:7,e:"ui-notice",f:[{t:4,f:[{p:[14,5,207],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[15,7,249],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[15,24,266]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[15,75,317]}]}]}],n:50,r:"data.siliconUser",p:[13,3,177]},{t:4,n:51,f:[{p:[18,5,405],t:7,e:"span",f:["Swipe a QM-Level ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[18,39,439]}," this interface."]}],r:"data.siliconUser"}]}," ",{t:4,f:[{p:[23,3,546],t:7,e:"ui-display",a:{title:"Express Cargo Console"},f:[{p:[25,5,594],t:7,e:"ui-section",a:{label:"Landing Location"},f:[{p:[26,7,638],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.usingBeacon"],s:'_0?null:"selected"'},p:[26,25,656]}],action:"LZCargo"},f:["Cargo Bay"]}," ",{p:[27,7,744],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.hasBeacon","data.usingBeacon"],s:'_0?_1?"selected":null:"disabled"'},p:[27,25,762]}],action:"LZBeacon"},f:[{t:2,r:"data.beaconzone",p:[27,116,853]}," (",{t:2,r:"data.beaconName",p:[27,137,874]},")"]}," ",{p:[28,7,913],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBuyBeacon"],s:'_0?null:"disabled"'},p:[28,25,931]}],action:"printBeacon"},f:[{t:2,r:"data.printMsg",p:[28,90,996]}]}]}," ",{p:[31,5,1049],t:7,e:"ui-section",a:{label:"Credits"},f:[{p:[32,7,1084],t:7,e:"span",f:[{t:2,x:{r:["adata.points"],s:"Math.floor(_0)"},p:[32,13,1090]}]}]}," ",{p:[35,5,1149],t:7,e:"ui-section",a:{label:"Notice"},f:[{p:[36,7,1183],t:7,e:"span",f:[{t:2,r:"data.message",p:[36,13,1189]}]}]}]}," ",{p:[39,3,1249],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"tabs",p:[39,18,1264]}]},f:[{t:4,f:[{p:[41,7,1309],t:7,e:"tab",a:{name:[{t:2,r:"name",p:[41,18,1320]}]},f:[{t:4,f:[{p:[43,11,1365],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[43,30,1384]}],candystripe:0,right:0},f:[{p:[44,13,1425],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.canBeacon"],s:'_0?null:"disabled"'},p:[44,31,1443]}],tooltip:[{t:2,r:"desc",p:[44,80,1492]}],"tooltip-side":"left",action:"add",params:['{"id": "',{t:2,r:"id",p:[44,139,1551]},'"}']},f:[{t:2,r:"cost",p:[44,149,1561]}," Credits ",{t:2,r:"data.beaconError",p:[44,166,1578]}]}]}],n:52,r:"packs",p:[42,9,1339]}]}],n:52,r:"data.supplies",p:[40,5,1279]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[22,1,522]}]},e.exports=a.extend(r.exports)},{341:341}],376:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Cellular Emporium",button:0},f:[{p:[2,3,48],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.can_readapt"],s:'_0?null:"disabled"'},p:[2,36,81]}],action:"readapt"},f:["Readapt"]}," ",{p:[4,3,166],t:7,e:"ui-section",a:{label:"Genetic Points Remaining",right:0},f:[{t:2,r:"data.genetic_points_remaining",p:[5,5,222]}]}]}," ",{p:[8,1,286],t:7,e:"ui-display",f:[{t:4,f:[{p:[10,3,326],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[10,22,345]}],candystripe:0,right:0},f:[{p:[11,5,378],t:7,e:"span",f:[{t:2,r:"desc",p:[11,11,384]}]}," ",{p:[12,5,404],t:7,e:"span",f:[{t:2,r:"helptext",p:[12,11,410]}]}," ",{p:[13,5,434],t:7,e:"span",f:["Cost: ",{t:2,r:"dna_cost",p:[13,17,446]}]}," ",{p:[14,5,470],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["owned","can_purchase"],s:'_0?"selected":_1?null:"disabled"'},p:[15,14,494]}],action:"evolve",params:['{"name": "',{t:2,r:"name",p:[17,25,599]},'"}']},f:[{t:2,x:{r:["owned"],s:'_0?"Evolved":"Evolve"'},p:[18,7,618]}]}]}],n:52,r:"data.abilities",p:[9,1,299]},{t:4,f:[{p:[23,3,716],t:7,e:"span",a:{"class":"warning"},f:["No abilities available."]}],n:51,r:"data.abilities",p:[22,1,694]}]}]},e.exports=a.extend(r.exports)},{341:341}],377:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,17],t:7,e:"span",f:["To use this, simply spawn the atoms you want in one of the five Centcom Supplypod Bays. Items in the bay will then be launched inside your supplypod, one turf-full at a time! You can optionally use the following buttons to configure how the supplypod acts."]}]}," ",{p:[5,1,304],t:7,e:"ui-display",a:{title:"Centcom Pod Customization (to be used against helen weinstein)"},f:[{p:[8,5,397],t:7,e:"ui-section",a:{label:"Which supplypod bay will you use?"},f:[{p:[9,6,458],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==1?"selected":null'},p:[9,24,476]}],action:"bay1"},f:["Bay #1"]}," ",{p:[10,6,561],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==2?"selected":null'},p:[10,24,579]}],action:"bay2"},f:["Bay #2"]}," ",{p:[11,6,664],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==3?"selected":null'},p:[11,24,682]}],action:"bay3"},f:["Bay #3"]}," ",{p:[12,6,766],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==4?"selected":null'},p:[12,24,784]}],action:"bay4"},f:["Bay #4"]}," ",{p:[13,6,868],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.bayNumber"],s:'_0==5?"selected":null'},p:[13,24,886]}],action:"bay5","tooltip-side":"left",tooltip:"This bay is located on the western edge of CentCom. Its the glass room directly west of where ERT spawn, and south of the CentCom ferry. Useful for launching ERT/Deathsquads/etc. onto the station via drop pods."},f:["ERT Bay"]}]}," ",{p:[18,5,1236],t:7,e:"ui-section",a:{label:"Teleport to:"},f:[{p:[19,9,1279],t:7,e:"ui-button",a:{action:"teleportCentcom"},f:[{t:2,r:"data.bay",p:[19,45,1315]}]}," ",{p:[20,9,1349],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.oldArea"],s:'_0?null:"disabled"'},p:[20,27,1367]}],action:"teleportBack"},f:[{t:2,x:{r:["data.oldArea"],s:'_0?_0:"where you were"'},p:[20,86,1426]}]}]}," ",{p:[25,5,1519],t:7,e:"ui-section",a:{label:"Launch the real atoms?"},f:[{p:[26,6,1570],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchClone"],s:'_0?"selected":null'},p:[26,24,1588]}],action:"launchClone","tooltip-side":"left",tooltip:"Choosing this will create a duplicate of the item to be launched in Centcom, allowing you to send one type of item multiple times. Either way, the atoms are forceMoved into the supplypod after it lands (but before it opens)."},f:["Launch Clones"]}]}," ",{p:[29,5,1958],t:7,e:"ui-section",a:{label:"Launch all at once?"},f:[{p:[30,9,2008],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==1?"selected":null'},p:[30,27,2026]}],action:"launchOrdered","tooltip-side":"left",tooltip:'Instead of launching everything in the bay at once, this will "scan" things (one turf-full at a time) in order, left to right and top to bottom. Refreshing will reset the "scanner" to the top-leftmost position.'},f:["Ordered"]}," ",{p:[32,9,2376],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.launchChoice"],s:'_0==2?"selected":null'},p:[32,27,2394]}],action:"launchRandom","tooltip-side":"left",tooltip:"Instead of launching everything in the bay at once, this will launch one random turf of items at a time."},f:["Random"]}]}," ",{p:[38,5,2656],t:7,e:"ui-section",a:{label:"Add an explosion?"},f:[{p:[39,5,2700],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==1?"selected":null'},p:[39,23,2718]}],action:"explosionCustom","tooltip-side":"left",tooltip:"This will cause an explosion of whatever size you like (including flame range) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Custom Size"]}," ",{p:[41,5,3023],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.explosionChoice"],s:'_0==2?"selected":null'},p:[41,23,3041]}],action:"explosionBus","tooltip-side":"left",tooltip:"This will cause a maxcap explosion (dependent on server config) to occur as soon as the supplypod lands. Dont worry, supply-pods are explosion-proof!"},f:["Adminbus"]}]}," ",{p:[46,5,3344],t:7,e:"ui-section",a:{label:"Extra damage?","(default":"None)"},f:[{p:[47,5,3401],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==1?"selected":null'},p:[47,23,3419]}],action:"damageCustom","tooltip-side":"left",tooltip:"Anyone caught under the pod when it lands will be dealt this amount of brute damage. Sucks to be them!"},f:["Custom Damage"]}," ",{p:[49,5,3659],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.damageChoice"],s:'_0==2?"selected":null'},p:[49,23,3677]}],action:"damageGib","tooltip-side":"left",tooltip:"This will attempt to gib any mob caught under the pod when it lands, as well as dealing a nice 5000 brute damage. Ya know, just to be sure!"},f:["Gib"]}]}," ",{p:[54,5,3960],t:7,e:"ui-section",a:{label:"Damaging effects?"},f:[{p:[55,5,4004],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStun"],s:'_0?"selected":null'},p:[55,23,4022]}],action:"effectStun","tooltip-side":"left",tooltip:"Anyone who is on the turf when the supplypod is launched will be stunned until the supplypod lands. They cant get away that easy!"},f:["Stun"]}," ",{p:[57,5,4271],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectLimb"],s:'_0?"selected":null'},p:[57,23,4289]}],action:"effectLimb","tooltip-side":"left",tooltip:"This will cause anyone caught under the pod to lose a limb, excluding their head."},f:["Delimb"]}," ",{p:[59,5,4492],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectOrgans"],s:'_0?"selected":null'},p:[59,23,4510]}],action:"effectOrgans","tooltip-side":"left",tooltip:"This will cause anyone caught under the pod to lose all their limbs and organs in a spectacular fashion."},f:["Yeet Organs"]}]}," ",{p:[64,5,4764],t:7,e:"ui-section",a:{label:"Movement effects?"},f:[{p:[65,5,4808],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBluespace"],s:'_0?"selected":null'},p:[65,23,4826]}],action:"effectBluespace","tooltip-side":"left",tooltip:"Gives the supplypod an advanced Bluespace Recyling Device. After opening, the supplypod will be warped directly to the surface of a nearby NT-designated trash planet (/r/ss13)."},f:["Bluespace"]}," ",{p:[67,5,5137],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectStealth"],s:'_0?"selected":null'},p:[67,23,5155]}],action:"effectStealth","tooltip-side":"left",tooltip:'This hides the red target icon from appearing when you launch the supplypod. Combos well with the "Invisible" style. Sneak attack, go!'},f:["Stealth"]}," ",{p:[69,5,5418],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectQuiet"],s:'_0?"selected":null'},p:[69,23,5436]}],action:"effectQuiet","tooltip-side":"left",tooltip:"This will keep the supplypod from making any sounds, except for those specifically set by admins in the Sound section."},f:["Quiet Landing"]}," ",{p:[71,5,5685],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectReverse"],s:'_0?"selected":null'},p:[71,23,5703]}],action:"effectReverse","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, after landing, the supplypod will close (similar to a normal closet closing), and then launch back to the right centcom bay to drop off any new contents."},f:["Reverse Mode"]}," ",{p:[73,5,6033],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectMissile"],s:'_0?"selected":null'},p:[73,23,6051]}],action:"effectMissile","tooltip-side":"left",tooltip:"This pod will not send any items. Instead, it will immediatley delete after landing (Similar visually to setting openDelay & departDelay to 0, but this looks nicer). Useful if you just wanna fuck some shit up. Combos well with the Missile style."},f:["Missile Mode"]}," ",{p:[75,5,6430],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectCircle"],s:'_0?"selected":null'},p:[75,23,6448]}],action:"effectCircle","tooltip-side":"left",tooltip:"This will make the supplypod come in from any angle. Im not sure why this feature exists, but here it is."},f:["Any Descent Angle"]}," ",{p:[77,5,6690],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectBurst"],s:'_0?"selected":null'},p:[77,23,6708]}],action:"effectBurst","tooltip-side":"left",tooltip:"This will make each click launch 5 supplypods inaccuratly around the target turf (a 3x3 area). Combos well with the Missle Mode if you dont want shit lying everywhere after."},f:["Machine Gun Mode"]}," ",{p:[79,5,7015],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectTarget"],s:'_0?"selected":null'},p:[79,23,7033]}],action:"effectTarget","tooltip-side":"left",tooltip:"This will make the supplypod target a specific atom, instead of the mouses position. Smiting does this automatically!"},f:["Specific Target"]}]}," ",{p:[84,5,7304],t:7,e:"ui-section",a:{label:"Change Name/Desc?"},f:[{p:[85,5,7348],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectName"],s:'_0?"selected":null'},p:[85,23,7366]}],action:"effectName","tooltip-side":"left",tooltip:"Allows you to add a custom name and description."},f:["Custom Name/Desc"]}," ",{p:[87,5,7546],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.effectAnnounce"],s:'_0?"selected":null'},p:[87,23,7564]}],action:"effectAnnounce","tooltip-side":"left",tooltip:"Alerts ghosts when a pod is launched. Useful if some dumb shit is aboutta come outta the pod."},f:["Alert Ghosts"]}]}," ",{p:[92,5,7812],t:7,e:"ui-section",a:{label:"Sound?"},f:[{p:[93,5,7845],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.fallingSound"],s:'_0?"selected":null'},p:[93,23,7863]}],action:"fallingSound","tooltip-side":"left",tooltip:"Choose a sound to play as the pod falls. Note that for this to work right you should know the exact length of the sound, in seconds."},f:["Custom Falling Sound"]}," ",{p:[95,5,8135],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingSound"],s:'_0?"selected":null'},p:[95,23,8153]}],action:"landingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod lands."},f:["Custom Landing Sound"]}," ",{p:[97,5,8335],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingSound"],s:'_0?"selected":null'},p:[97,23,8353]}],action:"openingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod opens."},f:["Custom Opening Sound"]}," ",{p:[99,5,8535],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.leavingSound"],s:'_0?"selected":null'},p:[99,23,8553]}],action:"leavingSound","tooltip-side":"left",tooltip:"Choose a sound to play when the pod departs (whether that be delection in the case of a bluespace pod, or leaving for centcom for a reversing pod)."},f:["Custom Leaving Sound"]}," ",{p:[101,5,8840],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.soundVolume"],s:'_0?"selected":null'},p:[101,23,8858]}],action:"soundVolume","tooltip-side":"left",tooltip:"Choose the volume for the sound to play at. Default values are between 1 and 100, but hey, do whatever. Im a tooltip, not a cop."},f:["Admin Sound Volume"]}]}," ",{p:[106,5,9141],t:7,e:"ui-section",a:{label:"Delay timers?"},f:[{p:[107,5,9181],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.fallDuration"],s:'_0!=4?"selected":null'},p:[107,23,9199]}],action:"fallDuration","tooltip-side":"left",tooltip:"Set how long the animation for the pod falling lasts. Create dramatic, slow falling pods!"},f:["Custom Falling Duration"]}," ",{p:[109,5,9436],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.landingDelay"],s:'_0!=20?"selected":null'},p:[109,23,9454]}],action:"landingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to hit the station. By default this value is 0.5 seconds."},f:["Custom Landing Time"]}," ",{p:[111,9,9713],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.openingDelay"],s:'_0!=30?"selected":null'},p:[111,27,9731]}],action:"openingDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to open after landing. Useful for giving whatevers inside the pod a nice dramatic entrance! By default this value is 3 seconds."},f:["Custom Opening Time"]}," ",{p:[113,5,10056],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.departureDelay"],s:'_0!=30?"selected":null'},p:[113,23,10074]}],action:"departureDelay","tooltip-side":"left",tooltip:"Choose the amount of time it takes for the supplypod to leave after landing. By default this value is 3 seconds."},f:["Custom Leaving Time"]}]}," ",{p:[118,5,10354],t:7,e:"ui-section",a:{label:"Style?"},f:[{p:[119,5,10387],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==1?"selected":null'},p:[119,23,10405]}],action:"styleStandard","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to your standard Nanotrasen black and orange. Same color scheme as the normal station-used supplypods."},f:["Standard"]}," ",{p:[121,5,10701],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==2?"selected":null'},p:[121,23,10719]}],action:"styleBluespace","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to the same as the stations upgraded blue-and-white Bluespace Supplypods."},f:["Advanced"]}," ",{p:[123,5,10987],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==4?"selected":null'},p:[123,23,11005]}],action:"styleSyndie","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and blood-red. Great for sending meme-ops in style!"},f:["Syndicate"]}," ",{p:[125,5,11269],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==5?"selected":null'},p:[125,23,11287]}],action:"styleBlue","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a menacing black and dark blue. Great for sending deathsquads in style!"},f:["Deathsquad"]}," ",{p:[127,5,11553],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==6?"selected":null'},p:[127,23,11571]}],action:"styleCult","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a blood and rune covered cult pod!"},f:["Cult Pod"]}," ",{p:[129,5,11791],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==7?"selected":null'},p:[129,23,11809]}],action:"styleMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large missile. Combos well with a missile mode, so the missile doesnt stick around after landing."},f:["Missile"]}," ",{p:[131,5,12096],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==8?"selected":null'},p:[131,23,12114]}],action:"styleSMissile","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large blood-red missile. Combos well with missile mode, so the missile doesnt stick around after landing."},f:["Syndicate Missile"]}," ",{p:[133,5,12420],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==9?"selected":null'},p:[133,23,12438]}],action:"styleBox","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom style to a large, dark-green military supply crate."},f:["Supply Crate"]}," ",{p:[135,5,12669],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==10?"selected":null'},p:[135,23,12687]}],action:"styleHONK","tooltip-side":"left",tooltip:"Changes the pods style from the default Centcom color scheme to a colorful, clown inspired look."},f:["HONK"]}," ",{p:[137,5,12909],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==11?"selected":null'},p:[137,23,12927]}],action:"styleFruit","tooltip-side":"left",tooltip:"for when an orange is angry"},f:["Fruit~"]}," ",{p:[139,5,13083],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==12?"selected":null'},p:[139,23,13101]}],action:"styleInvisible","tooltip-side":"left",tooltip:'Makes the supplypod invisible! Useful for when you want to use this feature with a gateway or something. Combos well with the "Stealth" and "Quiet Landing" effects.'},f:["Invisible"]}," ",{p:[141,5,13400],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==13?"selected":null'},p:[141,23,13418]}],action:"styleGondola","tooltip-side":"left",tooltip:"this gondola can control when he wants to deliver his supplies if he has a smart enough mind, so offer up his body to ghosts for maximum enjoyment. (Make sure to turn off bluespace and set a arbitrarily high open-time if you do!)"},f:["Gondola (alive)"]}," ",{p:[143,5,13787],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.styleChoice"],s:'_0==14?"selected":null'},p:[143,23,13805]}],action:"styleSeeThrough","tooltip-side":"left",tooltip:"By selecting this, the pod will instead look like whatevers inside it (as if it were the contents falling by themselves, without a pod). Useful for launching mechs at the station and standing tall as they soar in from the heavens."},f:["Show Contents (See-Through Pod)!"]}]}]}," ",{p:[148,1,14223],t:7,e:"ui-display",f:[{p:[149,5,14241],t:7,e:"ui-section",a:{label:[{t:2,r:"data.numObjects",p:[149,24,14260]}," turfs in ",{t:2,r:"data.bay",p:[149,53,14289]}],candystripe:0,right:0},f:[{p:[150,9,14331],t:7,e:"ui-button",a:{action:"refresh","tooltip-side":"left",tooltip:"Manually refreshes the possible things to launch in the pod bay."},f:["Refresh Pod Bay"]}," ",{p:[152,9,14500],t:7,e:"ui-button",a:{style:[{t:2,x:{r:["data.giveLauncher"],s:'_0?"selected":null'},p:[152,27,14518]}],action:"giveLauncher","tooltip-side":"left",tooltip:"THE CODEX ASTARTES CALLS THIS MANEUVER: STEEL RAIN"},f:["Enter Launch Mode"]}," ",{p:[154,9,14712],t:7,e:"ui-button",a:{style:"danger",action:"clearBay","tooltip-side":"left",tooltip:"This will delete all objs and mobs from the selected bay."},f:["Clear Selected Bay"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],378:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,31],t:7,e:"ui-section",a:{label:"Energy"},f:[{p:[3,5,64],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.maxEnergy",p:[3,26,85]}],value:[{t:2,r:"data.energy",p:[3,53,112]}]},f:[{t:2,x:{r:["adata.energy"],s:"Math.fixed(_0)"},p:[3,70,129]}," Units"]}]}]}," ",{p:[6,1,206],t:7,e:"ui-display",a:{title:"Saved Recipes",button:0},f:[{p:[7,3,251],t:7,e:"ui-section",f:[{p:[8,5,269],t:7,e:"ui-button",a:{icon:"plus",action:"add_recipe"},f:["Add Recipe"]}," ",{p:[9,2,337],t:7,e:"ui-button",a:{icon:"minus",action:"clear_recipes"},f:["Clear Recipes"]}," ",{t:4,f:[{p:[11,7,445],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense_recipe",params:['{"recipe": "',{t:2,r:"contents",p:[11,80,518]},'"}']},f:[{t:2,r:"recipe_name",p:[11,96,534]}]}],n:52,r:"data.recipes",p:[10,5,415]}]}]}," ",{p:{button:[{t:4,f:[{p:[18,7,719],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.amount","."],s:'_0==_1?"selected":null'},p:[18,37,749]}],action:"amount",params:['{"target": ',{t:2,r:".",p:[18,114,826]},"}"]},f:[{t:2,r:".",p:[18,122,834]}]}],n:52,r:"data.beakerTransferAmounts",p:[17,5,675]}]},t:7,e:"ui-display",a:{title:"Dispense",button:0},f:[" ",{p:[21,3,886],t:7,e:"ui-section",f:[{t:4,f:[{p:[23,7,936],t:7,e:"ui-button",a:{grid:0,icon:"tint",action:"dispense",params:['{"reagent": "',{t:2,r:"id",p:[23,74,1003]},'"}']},f:[{t:2,r:"title",p:[23,84,1013]}]}],n:52,r:"data.chemicals",p:[22,5,904]}]}]}," ",{p:{button:[{t:4,f:[{p:[30,7,1190],t:7,e:"ui-button",a:{icon:"minus",action:"remove",params:['{"amount": ',{t:2,r:".",p:[30,66,1249]},"}"]},f:[{t:2,r:".",p:[30,74,1257]}]}],n:52,r:"data.beakerTransferAmounts",p:[29,5,1146]}," ",{p:[32,5,1295],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[32,36,1326]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[34,3,1423],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[36,7,1493],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[36,13,1499]},"/",{t:2,r:"data.beakerMaxVolume",p:[36,55,1541]}," Units"]}," ",{p:[37,4,1583],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.beakerCurrentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[37,14,1593]}]}," ",{p:[38,7,1679],t:7,e:"br"}," ",{t:4,f:[{p:[40,9,1732],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[40,52,1775]}," units of ",{t:2,r:"name",p:[40,87,1810]}]},{p:[40,102,1825],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[39,7,1692]},{t:4,n:51,f:[{p:[42,9,1856],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[35,5,1458]},{t:4,n:51,f:[{p:[45,7,1932],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],379:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[2,3,35],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,5,67],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isActive"],s:'_0?"power-off":"close"'},p:[3,22,84]}],style:[{t:2,x:{r:["data.isActive"],s:'_0?"selected":null'},p:[4,10,137]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,10,186]}],action:"power"},f:[{t:2,x:{r:["data.isActive"],s:'_0?"On":"Off"'},p:[6,18,249]}]}]}," ",{p:[8,3,314],t:7,e:"ui-section",a:{label:"Target"},f:[{p:[9,4,346],t:7,e:"ui-button",a:{icon:"pencil",action:"temperature",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[9,79,421]}," K"]}]}]}," ",{p:{button:[{p:[14,5,564],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[14,36,595]}],action:"eject"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[16,3,692],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[18,7,762],t:7,e:"span",f:["Temperature: ",{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[18,26,781]}," K"]}," ",{p:[19,4,828],t:7,e:"br"}," ",{p:[20,7,842],t:7,e:"span",f:["pH: ",{t:2,x:{r:["adata.currentpH","adata.partRating"],s:"Math.round(_0*_1)/_1"},p:[20,17,852]}]}," ",{p:[21,7,932],t:7,e:"br"}," ",{t:4,f:[{p:[23,3,980],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[23,46,1023]}," units of ",{t:2,r:"name",p:[23,81,1058]}]},{p:[23,96,1073],t:7,e:"br"}," ",{t:4,f:[{p:[25,4,1111],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["Purity: ",{t:2,x:{r:["purity"],s:"Math.fixed(_0,2)"},p:[25,55,1162]}]},{p:[25,87,1194],t:7,e:"br"}],n:50,r:"data.showPurity",p:[24,3,1083]}],n:52,r:"adata.beakerContents",p:[22,7,946]},{t:4,n:51,f:[{p:[28,9,1237],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[17,5,727]},{t:4,n:51,f:[{p:[31,7,1313],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],380:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,33],t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[{p:[3,3,71],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"close"'},p:[3,20,88]}],style:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"selected":null'},p:[4,11,144]}],state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,11,200]}],action:"eject"},f:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"Eject":"No beaker"'},p:[7,5,269]}]}," ",{p:[10,3,341],t:7,e:"ui-section",f:[{t:4,f:[{t:4,f:[{p:[13,6,427],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[13,25,446]}," units of ",{t:2,r:"name",p:[13,60,481]}],nowrap:0},f:[{p:[14,7,506],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[15,8,556],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[15,61,609]},'", "amount": 1}']},f:["1"]}," ",{p:[16,8,654],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[16,61,707]},'", "amount": 5}']},f:["5"]}," ",{p:[17,8,752],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[17,61,805]},'", "amount": 10}']},f:["10"]}," ",{p:[18,8,852],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[18,61,905]},'", "amount": 1000}']},f:["All"]}," ",{p:[19,8,955],t:7,e:"ui-button",a:{action:"transferToBuffer",params:['{"id": "',{t:2,r:"id",p:[19,61,1008]},'", "amount": -1}']},f:["Custom"]}," ",{p:[20,8,1059],t:7,e:"ui-button",a:{action:"analyzeBeak",params:['{"id": "',{t:2,r:"id",p:[20,56,1107]},'"}']},f:["Analyze"]}]}]}],n:52,r:"data.beakerContents",p:[12,5,391]},{t:4,n:51,f:[{p:[24,5,1189],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"data.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,4,358]},{t:4,n:51,f:[{p:[27,5,1260],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}," ",{p:[32,2,1348],t:7,e:"ui-display",a:{title:"Buffer"},f:[{p:[33,3,1379],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?null:"selected"'},p:[33,41,1417]}]},f:["Destroy"]}," ",{p:[34,3,1475],t:7,e:"ui-button",a:{action:"toggleMode",state:[{t:2,x:{r:["data.mode"],s:'_0?"selected":null'},p:[34,41,1513]}]},f:["Transfer to Beaker"]}," ",{p:[35,3,1582],t:7,e:"ui-section",f:[{t:4,f:[{p:[37,5,1634],t:7,e:"ui-section",a:{label:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[37,24,1653]}," units of ",{t:2,r:"name",p:[37,59,1688]}],nowrap:0},f:[{p:[38,6,1712],t:7,e:"div",a:{"class":"content",style:"float:right"},f:[{p:[39,7,1761],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[39,62,1816]},'", "amount": 1}']},f:["1"]}," ",{p:[40,7,1860],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[40,62,1915]},'", "amount": 5}']},f:["5"]}," ",{p:[41,7,1959],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[41,62,2014]},'", "amount": 10}']},f:["10"]}," ",{p:[42,7,2060],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[42,62,2115]},'", "amount": 1000}']},f:["All"]}," ",{p:[43,7,2164],t:7,e:"ui-button",a:{action:"transferFromBuffer",params:['{"id": "',{t:2,r:"id",p:[43,62,2219]},'", "amount": -1}']},f:["Custom"]}," ",{p:[44,7,2269],t:7,e:"ui-button",a:{action:"analyzeBuff",params:['{"id": "',{t:2,r:"id",p:[44,55,2317]},'"}']},f:["Analyze"]
}]}]}],n:52,r:"data.bufferContents",p:[36,4,1599]}]}]}," ",{t:4,f:[{p:[52,3,2453],t:7,e:"ui-display",a:{title:"Pills, Bottles and Patches"},f:[{t:4,f:[{p:[54,5,2537],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["id","data.chosenPillStyle"],s:'_0==_1?"selected":null'},p:[54,23,2555]}],action:"pillStyle",params:['{"id": "',{t:2,r:"id",p:[54,108,2640]},'"}']},f:[{t:3,r:"htmltag",p:[54,118,2650]}]}],n:52,r:"data.pillStyles",p:[53,4,2506]}," ",{p:[56,4,2694],t:7,e:"br"}," ",{t:4,f:[{p:[58,5,2740],t:7,e:"ui-button",a:{action:"ejectp",state:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?null:"disabled"'},p:[58,39,2774]}]},f:[{t:2,x:{r:["data.isPillBottleLoaded"],s:'_0?"Eject":"No Pill bottle loaded"'},p:[58,88,2823]}]}," ",{p:[59,5,2904],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.pillBotContent",p:[59,27,2926]},"/",{t:2,r:"data.pillBotMaxContent",p:[59,51,2950]}]}],n:50,r:"data.isPillBottleLoaded",p:[57,4,2703]},{t:4,n:51,f:[{p:[61,5,3002],t:7,e:"span",a:{"class":"average"},f:["No Pillbottle"]}],r:"data.isPillBottleLoaded"}," ",{p:[64,4,3063],t:7,e:"br"}," ",{p:[65,4,3073],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[65,63,3132]}]},f:["Create Pill (max 50µ)"]}," ",{p:[66,4,3216],t:7,e:"br"}," ",{p:[67,4,3226],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[67,63,3285]}]},f:["Create Multiple Pills"]}," ",{p:[68,4,3369],t:7,e:"br"}," ",{p:[69,4,3379],t:7,e:"br"}," ",{p:[70,4,3389],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[70,64,3449]}]},f:["Create Patch (max 40µ)"]}," ",{p:[71,4,3534],t:7,e:"br"}," ",{p:[72,4,3544],t:7,e:"ui-button",a:{action:"createPatch",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[72,64,3604]}]},f:["Create Multiple Patches"]}," ",{p:[73,4,3690],t:7,e:"br"}," ",{p:[74,4,3700],t:7,e:"br"}," ",{p:[75,4,3710],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[75,65,3771]}]},f:["Create Bottle (max 30µ)"]}," ",{p:[76,4,3857],t:7,e:"br"}," ",{p:[77,4,3867],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[77,65,3928]}]},f:["Dispense Buffer to Bottles"]}," ",{p:[78,4,4017],t:7,e:"br"}," ",{p:[79,4,4027],t:7,e:"br"}," ",{p:[80,4,4037],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[80,63,4096]}]},f:["Create Hypo Vial (max 60µ)"]}," ",{p:[81,4,4185],t:7,e:"br"}," ",{p:[82,4,4195],t:7,e:"ui-button",a:{action:"createVial",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[82,63,4254]}]},f:["Dispense Buffer to Hypo vials"]}," ",{p:[83,4,4347],t:7,e:"br"}," ",{p:[84,4,4357],t:7,e:"br"}," ",{p:[85,4,4367],t:7,e:"ui-button",a:{action:"createDart",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[85,63,4426]}]},f:["Create SmartDart (max 20µ)"]}," ",{p:[86,4,4515],t:7,e:"br"}," ",{p:[87,4,4525],t:7,e:"ui-button",a:{action:"createDart",params:'{"many": 1}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[87,63,4584]}]},f:["Create Multiple SmartDarts"]}," ",{p:[88,4,4674],t:7,e:"br"}]}],n:50,x:{r:["data.condi"],s:"!_0"},p:[51,2,2430]},{t:4,n:51,f:[{p:[93,3,4717],t:7,e:"ui-display",a:{title:"Condiments bottles and packs"},f:[{p:[94,4,4772],t:7,e:"ui-button",a:{action:"createPill",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[94,63,4831]}]},f:["Create Pack (max 10µ)"]}," ",{p:[95,4,4915],t:7,e:"br"}," ",{p:[96,4,4925],t:7,e:"br"}," ",{p:[97,4,4935],t:7,e:"ui-button",a:{action:"createBottle",params:'{"many": 0}',state:[{t:2,x:{r:["data.bufferContents"],s:'_0?null:"disabled"'},p:[97,65,4996]}]},f:["Create Bottle (max 50µ)"]}]}],x:{r:["data.condi"],s:"!_0"}}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.screen"],s:'_0=="analyze"'},f:[{p:[101,2,5144],t:7,e:"ui-display",a:{title:[{t:2,r:"data.analyzeVars.name",p:[101,20,5162]}]},f:[{p:[102,3,5193],t:7,e:"span",a:{"class":"highlight"},f:["Description:"]}," ",{p:[103,3,5241],t:7,e:"span",a:{"class":"content",style:"float:center"},f:[{t:2,r:"data.analyzeVars.description",p:[103,46,5284]}]}," ",{p:[104,3,5327],t:7,e:"br"}," ",{p:[105,3,5336],t:7,e:"span",a:{"class":"highlight"},f:["Color:"]}," ",{p:[106,3,5378],t:7,e:"span",a:{style:["color: ",{t:2,r:"data.analyzeVars.color",p:[106,23,5398]},"; background-color: ",{t:2,r:"data.analyzeVars.color",p:[106,69,5444]}]},f:[{t:2,r:"data.analyzeVars.color",p:[106,97,5472]}]}," ",{p:[107,3,5509],t:7,e:"br"}," ",{p:[108,3,5518],t:7,e:"span",a:{"class":"highlight"},f:["State:"]}," ",{p:[109,3,5560],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.state",p:[109,25,5582]}]}," ",{p:[110,3,5619],t:7,e:"br"}," ",{p:[111,3,5628],t:7,e:"span",a:{"class":"highlight"},f:["Metabolization Rate:"]}," ",{p:[112,3,5684],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.metaRate",p:[112,25,5706]},"µ/minute"]}," ",{p:[113,3,5754],t:7,e:"br"}," ",{p:[114,3,5763],t:7,e:"span",a:{"class":"highlight"},f:["Overdose Threshold:"]}," ",{p:[115,3,5818],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.overD",p:[115,25,5840]}]}," ",{p:[116,3,5877],t:7,e:"br"}," ",{p:[117,3,5886],t:7,e:"span",a:{"class":"highlight"},f:["Addiction Threshold:"]}," ",{p:[118,3,5942],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.addicD",p:[118,25,5964]}]}," ",{p:[119,3,6002],t:7,e:"br"}," ",{t:4,f:[{p:[121,4,6041],t:7,e:"span",a:{"class":"highlight"},f:["Minumum Reaction Temperature:"]}," ",{p:[122,4,6107],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.minTemp",p:[122,26,6129]},"K"]}," ",{p:[123,4,6170],t:7,e:"br"}," ",{p:[124,4,6180],t:7,e:"span",a:{"class":"highlight"},f:["Optimal Reaction Temperature:"]}," ",{p:[125,4,6246],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.maxTemp",p:[125,26,6268]},"K"]}," ",{p:[126,4,6309],t:7,e:"br"}," ",{p:[127,4,6319],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Reaction Temperature:"]}," ",{p:[128,4,6387],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.eTemp",p:[128,26,6409]},"K"]}," ",{p:[129,4,6448],t:7,e:"br"}," ",{p:[130,4,6458],t:7,e:"span",a:{"class":"highlight"},f:["Optimal reaction pH:"]}," ",{p:[131,4,6515],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.pHpeak",p:[131,26,6537]}]}," ",{p:[132,4,6576],t:7,e:"br"}," ",{p:[133,4,6586],t:7,e:"span",a:{"class":"highlight"},f:["Current Purity:"]}," ",{p:[134,4,6638],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityF",p:[134,26,6660]}]}," ",{p:[135,4,6700],t:7,e:"br"}," ",{p:[136,4,6710],t:7,e:"span",a:{"class":"highlight"},f:["Inverse Purity Threshold:"]}," ",{p:[137,4,6772],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.inverseRatioF",p:[137,26,6794]}]}," ",{p:[138,4,6840],t:7,e:"br"}," ",{p:[139,4,6850],t:7,e:"span",a:{"class":"highlight"},f:["Explosion Purity Threshold:"]}," ",{p:[140,4,6914],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.analyzeVars.purityE",p:[140,26,6936]}]}," ",{p:[141,4,6976],t:7,e:"br"}],n:50,r:"data.fermianalyze",p:[120,3,6011]}," ",{p:[143,3,6996],t:7,e:"br"}," ",{p:[144,3,7005],t:7,e:"ui-button",a:{action:"goScreen",params:'{"screen": "home"}'},f:["Back"]}]}]}],x:{r:["data.screen"],s:'_0=="home"'}}]},e.exports=a.extend(r.exports)},{341:341}],381:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Recipient Contents"},f:[{p:[2,2,41],t:7,e:"ui-section",f:[{p:[3,3,56],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[3,34,87]}],action:"ejectBeaker"},f:["Eject"]}," ",{p:[4,3,173],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[4,35,205]}],action:"input"},f:["Input"]}," ",{p:[5,3,285],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[5,35,317]}],action:"amount"},f:[{t:2,r:"data.amount",p:[5,96,378]},"U"]}," ",{p:[6,3,409],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?"disabled":null'},p:[6,33,439]}],action:"makecup"},f:["Create Beaker"]}]}]}," ",{p:[9,1,556],t:7,e:"ui-display",a:{title:"Recipient"},f:[{p:[10,2,588],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[12,4,651],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[12,10,657]},"/",{t:2,r:"data.beakerMaxVolume",p:[12,52,699]}," Units"]}," ",{t:4,f:[{p:[14,5,775],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[14,48,818]}," units of ",{t:2,r:"name",p:[14,83,853]}]},{p:[14,98,868],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[13,4,740]},{t:4,n:51,f:[{p:[16,5,890],t:7,e:"span",a:{"class":"bad"},f:["Recipient Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[11,3,620]},{t:4,n:51,f:[{p:[19,4,958],t:7,e:"span",a:{"class":"average"},f:["No Recipient"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],382:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-button",a:{action:"toggle"},f:[{t:2,x:{r:["data.recollection"],s:'_0?"Recital":"Recollection"'},p:[2,30,42]}]}]}," ",{t:4,f:[{p:[5,3,145],t:7,e:"ui-display",f:[{t:3,r:"data.rec_text",p:[6,3,160]}," ",{t:4,f:[{p:[8,4,224],t:7,e:"br"},{p:[8,8,228],t:7,e:"ui-button",a:{action:"rec_category",params:['{"category": "',{t:2,r:"name",p:[8,63,283]},'"}']},f:[{t:3,r:"name",p:[8,75,295]}," - ",{t:3,r:"desc",p:[8,88,308]}]}],n:52,r:"data.recollection_categories",p:[7,3,182]}," ",{t:3,r:"data.rec_section",p:[10,3,345]}," ",{t:3,r:"data.rec_binds",p:[11,3,370]}]}],n:50,r:"data.recollection",p:[4,1,117]},{t:4,n:51,f:[{p:[14,2,418],t:7,e:"ui-display",a:{title:"Power",button:0},f:[{p:[15,4,455],t:7,e:"ui-section",f:[{t:3,r:"data.power",p:[16,6,473]}]}]}," ",{p:[19,2,523],t:7,e:"ui-display",f:[{p:[20,3,538],t:7,e:"ui-section",f:[{p:[21,4,554],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Driver"?"selected":null'},p:[21,22,572]}],action:"select",params:'{"category": "Driver"}'},f:["Driver"]}," ",{p:[22,4,694],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Script"?"selected":null'},p:[22,22,712]}],action:"select",params:'{"category": "Script"}'},f:["Scripts"]}," ",{p:[23,4,835],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.selected"],s:'_0=="Application"?"selected":null'},p:[23,22,853]}],action:"select",params:'{"category": "Application"}'},f:["Applications"]}," ",{p:[24,4,991],t:7,e:"br"},{t:3,r:"data.tier_info",p:[24,8,995]}]}," ",{p:[26,3,1034],t:7,e:"ui-section",f:[{t:3,r:"data.scripturecolors",p:[27,4,1050]}]},{p:[28,16,1092],t:7,e:"hr"}," ",{p:[29,3,1099],t:7,e:"ui-section",f:[{t:4,f:[{p:[31,4,1142],t:7,e:"div",f:[{p:[31,9,1147],t:7,e:"ui-button",a:{tooltip:[{t:3,r:"tip",p:[31,29,1167]}],"tooltip-side":"right",action:"recite",params:['{"category": "',{t:2,r:"type",p:[31,99,1237]},'"}']},f:["Recite ",{t:3,r:"required",p:[31,118,1256]}]}," ",{t:4,f:[{t:4,f:[{p:[34,6,1329],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[34,53,1376]},'"}']},f:["Unbind ",{t:3,r:"bound",p:[34,72,1395]}]}],n:50,r:"bound",p:[33,5,1310]},{t:4,n:51,f:[{p:[36,6,1437],t:7,e:"ui-button",a:{action:"bind",params:['{"category": "',{t:2,r:"type",p:[36,53,1484]},'"}']},f:["Quickbind"]}],r:"bound"}],n:50,r:"quickbind",p:[32,6,1288]}," ",{t:3,r:"name",p:[39,6,1548]}," ",{t:3,r:"descname",p:[39,17,1559]}," ",{t:3,r:"invokers",p:[39,32,1574]}]}],n:52,r:"data.scripture",p:[30,3,1114]}]}]}],r:"data.recollection"}]},e.exports=a.extend(r.exports)},{341:341}],383:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Codex Gigas"},f:[{p:[2,2,34],t:7,e:"ui-section",f:[{t:2,r:"data.name",p:[3,3,49]}]}," ",{p:[5,5,82],t:7,e:"ui-section",a:{label:"Prefix"},f:[{p:[6,3,112],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[6,22,131]}],action:"Dark "},f:["Dark"]}," ",{p:[7,3,215],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[7,22,234]}],action:"Hellish "},f:["Hellish"]}," ",{p:[8,3,324],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[8,22,343]}],action:"Fallen "},f:["Fallen"]}," ",{p:[9,3,431],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[9,22,450]}],action:"Fiery "},f:["Fiery"]}," ",{p:[10,3,536],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[10,22,555]}],action:"Sinful "},f:["Sinful"]}," ",{p:[11,3,643],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[11,22,662]}],action:"Blood "},f:["Blood"]}," ",{p:[12,3,748],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==1?null:"disabled"'},p:[12,22,767]}],action:"Fluffy "},f:["Fluffy"]}]}," ",{p:[14,5,875],t:7,e:"ui-section",a:{label:"Title"},f:[{p:[15,3,904],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[15,22,923]}],action:"Lord "},f:["Lord"]}," ",{p:[16,3,1007],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[16,22,1026]}],action:"Prelate "},f:["Prelate"]}," ",{p:[17,3,1116],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[17,22,1135]}],action:"Count "},f:["Count"]}," ",{p:[18,3,1221],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[18,22,1240]}],action:"Viscount "},f:["Viscount"]}," ",{p:[19,3,1332],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[19,22,1351]}],action:"Vizier "},f:["Vizier"]}," ",{p:[20,3,1439],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[20,22,1458]}],action:"Elder "},f:["Elder"]}," ",{p:[21,3,1544],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=2?null:"disabled"'},p:[21,22,1563]}],action:"Adept "},f:["Adept"]}]}," ",{p:[23,5,1669],t:7,e:"ui-section",a:{label:"Name"},f:[{p:[24,3,1697],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[24,22,1716]}],action:"hal"},f:["hal"]}," ",{p:[25,3,1797],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[25,22,1816]}],action:"ve"},f:["ve"]}," ",{p:[26,3,1895],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[26,22,1914]}],action:"odr"},f:["odr"]}," ",{p:[27,3,1995],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[27,22,2014]}],action:"neit"},f:["neit"]}," ",{p:[28,3,2097],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[28,22,2116]}],action:"ci"},f:["ci"]}," ",{p:[29,3,2195],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[29,22,2214]}],action:"quon"},f:["quon"]}," ",{p:[30,3,2297],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[30,22,2316]}],action:"mya"},f:["mya"]}," ",{p:[31,3,2397],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[31,22,2416]}],action:"folth"},f:["folth"]}," ",{p:[32,3,2501],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[32,22,2520]}],action:"wren"},f:["wren"]}," ",{p:[33,3,2603],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[33,22,2622]}],action:"geyr"},f:["geyr"]}," ",{p:[34,3,2705],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[34,22,2724]}],action:"hil"},f:["hil"]}," ",{p:[35,3,2805],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[35,22,2824]}],action:"niet"},f:["niet"]}," ",{p:[36,3,2907],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[36,22,2926]}],action:"twou"},f:["twou"]}," ",{p:[37,3,3009],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[37,22,3028]}],action:"phi"},f:["phi"]}," ",{p:[38,3,3109],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0<=4?null:"disabled"'},p:[38,22,3128]}],action:"coa"},f:["coa"]}]}," ",{p:[40,5,3229],t:7,e:"ui-section",a:{label:"suffix"},f:[{p:[41,3,3259],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[41,22,3278]}],action:" the Red"},f:["the Red"]}," ",{p:[42,3,3368],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[42,22,3387]}],action:" the Soulless"},f:["the Soulless"]}," ",{p:[43,3,3487],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[43,22,3506]}],action:" the Master"},f:["the Master"]}," ",{p:[44,3,3602],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[44,22,3621]}],action:", the Lord of all things"},f:["the Lord of all things"]}," ",{p:[45,3,3742],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0==4?null:"disabled"'},p:[45,22,3761]}],action:", Jr."},f:["jr"]}]}," ",{p:[47,5,3863],t:7,e:"ui-section",a:{label:"submit"},f:[{p:[48,3,3894],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.currentSection"],s:'_0>=4?null:"disabled"'},p:[48,21,3912]}],action:"search"},f:["search"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],384:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[2,1,1],t:7,e:"ui-button",a:{icon:"circle",action:"clean_order"},f:["Clear Order"]},{p:[2,70,70],t:7,e:"br"},{p:[2,74,74],t:7,e:"br"}," ",{p:[3,1,79],t:7,e:"i",f:["Your new computer device you always dreamed of is just four steps away..."]},{p:[3,81,159],t:7,e:"hr"}," ",{t:4,f:[" ",{p:[5,1,219],t:7,e:"div",a:{"class":"item"},f:[{p:[6,2,239],t:7,e:"h2",f:["Step 1: Select your device type"]}," ",{p:[7,2,281],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "1"}'},f:["Laptop"]}," ",{p:[8,2,370],t:7,e:"ui-button",a:{icon:"calc",action:"pick_device",params:'{"pick" : "2"}'},f:["LTablet"]}]}],n:50,x:{r:["data.state"],s:"_0==0"},p:[4,1,164]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.state"],s:"_0==1"},f:[{p:[11,1,492],t:7,e:"div",a:{"class":"item"},f:[{p:[12,2,512],t:7,e:"h2",f:["Step 2: Personalise your device"]}," ",{p:[13,2,554],t:7,e:"table",f:[{p:[14,3,564],t:7,e:"tr",f:[{p:[15,4,572],t:7,e:"td",f:[{p:[15,8,576],t:7,e:"b",f:["Current Price:"]}]},{p:[16,4,601],t:7,e:"td",f:[{t:2,r:"data.totalprice",p:[16,8,605]},"C"]}]}," ",{p:[18,3,636],t:7,e:"tr",f:[{p:[19,4,645],t:7,e:"td",f:[{p:[19,8,649],t:7,e:"b",f:["Battery:"]}]},{p:[20,4,668],t:7,e:"td",f:[{p:[20,8,672],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "1"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==1?"selected":null'},p:[20,73,737]}]},f:["Standard"]}]},{p:[21,4,807],t:7,e:"td",f:[{p:[21,8,811],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "2"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==2?"selected":null'},p:[21,73,876]}]},f:["Upgraded"]}]},{p:[22,4,946],t:7,e:"td",f:[{p:[22,8,950],t:7,e:"ui-button",a:{action:"hw_battery",params:'{"battery" : "3"}',state:[{t:2,x:{r:["data.hw_battery"],s:'_0==3?"selected":null'},p:[22,73,1015]}]},f:["Advanced"]}]}]}," ",{p:[24,3,1092],t:7,e:"tr",f:[{p:[25,4,1100],t:7,e:"td",f:[{p:[25,8,1104],t:7,e:"b",f:["Hard Drive:"]}]},{p:[26,4,1126],t:7,e:"td",f:[{p:[26,8,1130],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "1"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==1?"selected":null'},p:[26,67,1189]}]},f:["Standard"]}]},{p:[27,4,1256],t:7,e:"td",f:[{p:[27,8,1260],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "2"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==2?"selected":null'},p:[27,67,1319]}]},f:["Upgraded"]}]},{p:[28,4,1386],t:7,e:"td",f:[{p:[28,8,1390],t:7,e:"ui-button",a:{action:"hw_disk",params:'{"disk" : "3"}',state:[{t:2,x:{r:["data.hw_disk"],s:'_0==3?"selected":null'},p:[28,67,1449]}]},f:["Advanced"]}]}]}," ",{p:[30,3,1523],t:7,e:"tr",f:[{p:[31,4,1531],t:7,e:"td",f:[{p:[31,8,1535],t:7,e:"b",f:["Network Card:"]}]},{p:[32,4,1559],t:7,e:"td",f:[{p:[32,8,1563],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "0"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==0?"selected":null'},p:[32,73,1628]}]},f:["None"]}]},{p:[33,4,1694],t:7,e:"td",f:[{p:[33,8,1698],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "1"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==1?"selected":null'},p:[33,73,1763]}]},f:["Standard"]}]},{p:[34,4,1833],t:7,e:"td",f:[{p:[34,8,1837],t:7,e:"ui-button",a:{action:"hw_netcard",params:'{"netcard" : "2"}',state:[{t:2,x:{r:["data.hw_netcard"],s:'_0==2?"selected":null'},p:[34,73,1902]}]},f:["Advanced"]}]}]}," ",{p:[36,3,1979],t:7,e:"tr",f:[{p:[37,4,1987],t:7,e:"td",f:[{p:[37,8,1991],t:7,e:"b",f:["Nano Printer:"]}]},{p:[38,4,2015],t:7,e:"td",f:[{p:[38,8,2019],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "0"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==0?"selected":null'},p:[38,73,2084]}]},f:["None"]}]},{p:[39,4,2152],t:7,e:"td",f:[{p:[39,8,2156],t:7,e:"ui-button",a:{action:"hw_nanoprint",params:'{"print" : "1"}',state:[{t:2,x:{r:["data.hw_nanoprint"],s:'_0==1?"selected":null'},p:[39,73,2221]}]},f:["Standard"]}]}]}," ",{p:[41,3,2300],t:7,e:"tr",f:[{p:[42,4,2308],t:7,e:"td",f:[{p:[42,8,2312],t:7,e:"b",f:["Card Reader:"]}]},{p:[43,4,2335],t:7,e:"td",f:[{p:[43,8,2339],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "0"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==0?"selected":null'},p:[43,67,2398]}]},f:["None"]}]},{p:[44,4,2461],t:7,e:"td",f:[{p:[44,8,2465],t:7,e:"ui-button",a:{action:"hw_card",params:'{"card" : "1"}',state:[{t:2,x:{r:["data.hw_card"],s:'_0==1?"selected":null'},p:[44,67,2524]}]},f:["Standard"]}]}]}]}," ",{t:4,f:[" ",{p:[49,4,2658],t:7,e:"table",f:[{p:[50,5,2670],t:7,e:"tr",f:[{p:[51,6,2680],t:7,e:"td",f:[{p:[51,10,2684],t:7,e:"b",f:["Processor Unit:"]}]},{p:[52,6,2712],t:7,e:"td",f:[{p:[52,10,2716],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "1"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==1?"selected":null'},p:[52,67,2773]}]},f:["Standard"]}]},{p:[53,6,2841],t:7,e:"td",f:[{p:[53,10,2845],t:7,e:"ui-button",a:{action:"hw_cpu",params:'{"cpu" : "2"}',state:[{t:2,x:{r:["data.hw_cpu"],s:'_0==2?"selected":null'},p:[53,67,2902]}]},f:["Advanced"]}]}]}," ",{p:[55,5,2979],t:7,e:"tr",f:[{p:[56,6,2989],t:7,e:"td",f:[{p:[56,10,2993],t:7,e:"b",f:["Tesla Relay:"]}]},{p:[57,6,3018],t:7,e:"td",f:[{p:[57,10,3022],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "0"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==0?"selected":null'},p:[57,71,3083]}]},f:["None"]}]},{p:[58,6,3149],t:7,e:"td",f:[{p:[58,10,3153],t:7,e:"ui-button",a:{action:"hw_tesla",params:'{"tesla" : "1"}',state:[{t:2,x:{r:["data.hw_tesla"],s:'_0==1?"selected":null'},p:[58,71,3214]}]},f:["Standard"]}]}]}]}],n:50,x:{r:["data.devtype"],s:"_0!=2"},p:[48,3,2612]}," ",{p:[62,3,3313],t:7,e:"table",f:[{p:[63,4,3324],t:7,e:"tr",f:[{p:[64,5,3333],t:7,e:"td",f:[{p:[64,9,3337],t:7,e:"b",f:["Confirm Order:"]}]},{p:[65,5,3363],t:7,e:"td",f:[{p:[65,9,3367],t:7,e:"ui-button",a:{action:"confirm_order"},f:["CONFIRM"]}]}]}]}," ",{p:[69,2,3444],t:7,e:"hr"}," ",{p:[70,2,3450],t:7,e:"b",f:["Battery"]}," allows your device to operate without external utility power source. Advanced batteries increase battery life.",{p:[70,127,3575],t:7,e:"br"}," ",{p:[71,2,3581],t:7,e:"b",f:["Hard Drive"]}," stores file on your device. Advanced drives can store more files, but use more power, shortening battery life.",{p:[71,130,3709],t:7,e:"br"}," ",{p:[72,2,3715],t:7,e:"b",f:["Network Card"]}," allows your device to wirelessly connect to stationwide NTNet network. Basic cards are limited to on-station use, while advanced cards can operate anywhere near the station, which includes the asteroid outposts.",{p:[72,233,3946],t:7,e:"br"}," ",{p:[73,2,3952],t:7,e:"b",f:["Processor Unit"]}," is critical for your device's functionality. It allows you to run programs from your hard drive. Advanced CPUs use more power, but allow you to run more programs on background at once.",{p:[73,208,4158],t:7,e:"br"}," ",{p:[74,2,4164],t:7,e:"b",f:["Tesla Relay"]}," is an advanced wireless power relay that allows your device to connect to nearby area power controller to provide alternative power source. This component is currently unavailable on tablet computers due to size restrictions.",{p:[74,246,4408],t:7,e:"br"}," ",{p:[75,2,4414],t:7,e:"b",f:["Nano Printer"]}," is device that allows for various paperwork manipulations, such as, scanning of documents or printing new ones. This device was certified EcoFriendlyPlus and is capable of recycling existing paper for printing purposes.",{p:[75,241,4653],t:7,e:"br"}," ",{p:[76,2,4659],t:7,e:"b",f:["Card Reader"]}," adds a slot that allows you to manipulate RFID cards. Please note that this is not necessary to allow the device to read your identification, it is just necessary to manipulate other cards."]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&(_0==2)"},f:[" ",{p:[79,2,4903],t:7,e:"h2",f:["Step 3: Payment"]}," ",{p:[80,2,4929],t:7,e:"b",f:["Your device is now ready for fabrication.."]},{p:[80,51,4978],t:7,e:"br"}," ",{p:[81,2,4984],t:7,e:"i",f:["Please ensure the required amount of credits are in the machine, then press purchase."]},{p:[81,94,5076],t:7,e:"br"}," ",{p:[82,2,5082],t:7,e:"i",f:["Current credits: ",{p:[82,22,5102],t:7,e:"b",f:[{t:2,r:"data.credits",p:[82,25,5105]},"C"]}]},{p:[82,50,5130],t:7,e:"br"}," ",{p:[83,2,5136],t:7,e:"i",f:["Total price: ",{p:[83,18,5152],t:7,e:"b",f:[{t:2,r:"data.totalprice",p:[83,21,5155]},"C"]}]},{p:[83,49,5183],t:7,e:"br"},{p:[83,53,5187],t:7,e:"br"}," ",{p:[84,2,5193],t:7,e:"ui-button",a:{action:"purchase",state:[{t:2,x:{r:["data.credits","data.totalprice"],s:'_0>=_1?null:"disabled"'},p:[84,38,5229]}]},f:["PURCHASE"]}]},{t:4,n:50,x:{r:["data.state"],s:"(!(_0==1))&&((!(_0==2))&&(_0==3))"},f:[" ",{p:[87,2,5337],t:7,e:"h2",f:["Step 4: Thank you for your purchase"]},{p:[87,46,5381],t:7,e:"br"}," ",{p:[88,2,5387],t:7,e:"b",f:["Should you experience any issues with your new device, contact your local network admin for assistance."]}]}],x:{r:["data.state"],s:"_0==0"}}]},e.exports=a.extend(r.exports)},{341:341}],385:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,22],t:7,e:"ui-display",f:[{p:[3,2,37],t:7,e:"ui-section",a:{label:"Cap"},f:[{p:[4,3,65],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.is_capped"],s:'_0?"power-off":"close"'},p:[4,20,82]}],style:[{t:2,x:{r:["data.is_capped"],s:'_0?null:"selected"'},p:[4,71,133]}],action:"toggle_cap"},f:[{t:2,x:{r:["data.is_capped"],s:'_0?"On":"Off"'},p:[6,4,202]}]}]}]}],n:50,r:"data.has_cap",p:[1,1,0]},{p:[10,1,288],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,2,419],t:7,e:"ui-section",f:[{p:[15,3,435],t:7,e:"ui-button",a:{action:"select_colour"},f:["Select New Colour"]}]}],n:50,r:"data.can_change_colour",p:[13,1,386]}]}," ",{p:[19,1,540],t:7,e:"ui-display",a:{title:"Stencil"},f:[{t:4,f:[{p:[21,2,599],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[21,21,618]}]},f:[{t:4,f:[{p:[23,7,655],t:7,e:"ui-button",a:{action:"select_stencil",params:['{"item":"',{t:2,r:"item",p:[23,59,707]},'"}'],style:[{t:2,x:{r:["item","data.selected_stencil"],s:'_0==_1?"selected":null'},p:[24,12,731]}]},f:[{t:2,r:"item",p:[25,4,791]}]}],n:52,r:"items",p:[22,3,632]}]}],n:52,r:"data.drawables",p:[20,3,572]}]}," ",{p:[31,1,874],t:7,e:"ui-display",a:{title:"Text Mode"},f:[{p:[32,2,907],t:7,e:"ui-section",a:{label:"Current Buffer"},f:[{t:2,r:"data.text_buffer",p:[32,37,942]}]}," ",{p:[34,2,981],t:7,e:"ui-section",f:[{p:[34,14,993],t:7,e:"ui-button",a:{action:"enter_text"},f:["New Text"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],386:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{isHead:function(t){return t%10==0},dept_class:function(t){return 0==t?"dept-cap":t>=10&&20>t?"dept-sec":t>=20&&30>t?"dept-med":t>=30&&40>t?"dept-sci":t>=40&&50>t?"dept-eng":t>=50&&60>t?"dept-cargo":t>=200&&230>t?"dept-cent":"dept-other"},health_state:function(t,e,n,a){var r=t+e+n+a;return 0>=r?"health-5":25>=r?"health-4":50>=r?"health-3":75>=r?"health-2":"health-0"}}}}(r),r.exports.css=" .health {\n width: 16px;\n height: 16px;\n background-color: #FFF;\n border: 1px solid #434343;\n position: relative;\n top: 2px;\n display: inline-block;\n }\n .health-5 { background-color: #17d568; }\n .health-4 { background-color: #2ecc71; }\n .health-3 { background-color: #e67e22; }\n .health-2 { background-color: #ed5100; }\n .health-1 { background-color: #e74c3c; }\n .health-0 { background-color: #ed2814; }\n\n .dept-cap {color : #C06616;}\n .dept-sec {color : #E74C3C;}\n .dept-med {color : #3498DB;}\n .dept-sci {color : #9B59B6;}\n .dept-eng {color : #F1C40F;}\n .dept-cargo {color : #F39C12;}\n .dept-cent {color : #00C100;}\n .dept-other {color: #C38312;}\n\n .oxy { color : #3498db; }\n .toxin { color : #2ecc71; }\n .burn { color : #e67e22; }\n .brute { color : #e74c3c; }\n\n table.crew{\n border-collapse: collapse;\n }\n\n table.crew td {\n padding : 0px 10px;\n }",r.exports.template={v:3,t:[" ",{p:[27,1,1004],t:7,e:"ui-display",f:[{p:[28,2,1018],t:7,e:"ui-section",f:[{p:[29,3,1033],t:7,e:"table",a:{"class":"crew"},f:[{p:[30,3,1056],t:7,e:"thead",f:[{p:[31,3,1066],t:7,e:"tr",f:[{p:[32,4,1074],t:7,e:"th",f:["Name"]}," ",{p:[33,4,1091],t:7,e:"th",f:["Status"]}," ",{p:[34,4,1110],t:7,e:"th",f:["Vitals"]}," ",{p:[35,4,1129],t:7,e:"th",f:["Position"]}," ",{t:4,f:[{p:[37,5,1180],t:7,e:"th",f:["Tracking"]}],n:50,r:"data.link_allowed",p:[36,4,1150]}]}]}," ",{p:[41,3,1230],t:7,e:"tbody",f:[{t:4,f:[{p:[43,4,1266],t:7,e:"tr",f:[{p:[44,5,1275],t:7,e:"td",f:[{p:[45,6,1285],t:7,e:"span",a:{"class":[{t:2,x:{r:["isHead","ijob"],s:'_0(_1)?"bold ":""'},p:[45,19,1298]},{t:2,x:{r:["dept_class","ijob"],s:"_0(_1)"},p:[45,49,1328]}]},f:[{t:2,r:"name",p:[46,7,1357]}," (",{t:2,r:"assignment",p:[46,17,1367]},") ",{p:[47,6,1388],t:7,e:"span",f:[]}]}]}," ",{p:[49,5,1409],t:7,e:"td",f:[{t:4,f:[{p:[51,7,1448],t:7,e:"span",a:{"class":["health ",{t:2,x:{r:["health_state","oxydam","toxdam","burndam","brutedam"],s:"_0(_1,_2,_3,_4)"},p:[51,27,1468]}]}}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[50,6,1419]},{t:4,n:51,f:[{t:4,f:[{p:[54,8,1573],t:7,e:"span",a:{"class":"health health-5"}}],n:50,r:"life_status",p:[53,7,1546]},{t:4,n:51,f:[{p:[56,8,1633],t:7,e:"span",a:{"class":"health health-0"}}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[60,5,1712],t:7,e:"td",f:[{t:4,f:[{p:[62,7,1751],t:7,e:"span",f:["( ",{p:[64,8,1773],t:7,e:"span",a:{"class":"oxy"},f:[{t:2,r:"oxydam",p:[64,26,1791]}]}," / ",{p:[66,8,1825],t:7,e:"span",a:{"class":"toxin"},f:[{t:2,r:"toxdam",p:[66,28,1845]}]}," / ",{p:[68,8,1879],t:7,e:"span",a:{"class":"burn"},f:[{t:2,r:"burndam",p:[68,27,1898]}]}," / ",{p:[70,8,1933],t:7,e:"span",a:{"class":"brute"},f:[{t:2,r:"brutedam",p:[70,28,1953]}]}," )"]}],n:50,x:{r:["oxydam"],s:"_0!=null"},p:[61,6,1722]},{t:4,n:51,f:[{t:4,f:[{p:[75,8,2042],t:7,e:"span",f:["Alive"]}],n:50,r:"life_status",p:[74,7,2015]},{t:4,n:51,f:[{p:[77,8,2083],t:7,e:"span",f:["Dead"]}],r:"life_status"}],x:{r:["oxydam"],s:"_0!=null"}}]}," ",{p:[81,5,2142],t:7,e:"td",f:[{t:4,f:[{p:[83,6,2178],t:7,e:"span",f:[{t:2,r:"area",p:[83,12,2184]}]}],n:50,x:{r:["pos_x"],s:"_0!=null"},p:[82,5,2151]},{t:4,n:51,f:[{p:[85,6,2218],t:7,e:"span",f:["N/A"]}],
-x:{r:["pos_x"],s:"_0!=null"}}]}," ",{t:4,f:[{p:[89,6,2293],t:7,e:"td",f:[{p:[90,7,2304],t:7,e:"ui-button",a:{action:"select_person",state:[{t:2,x:{r:["can_track"],s:'_0?null:"disabled"'},p:[90,48,2345]}],params:['{"name":"',{t:2,r:"name",p:[90,100,2397]},'"}']},f:["Track"]}]}],n:50,r:"data.link_allowed",p:[88,5,2261]}]}],n:52,r:"data.sensors",p:[42,3,1240]}]}]}]}]}," "]},e.exports=a.extend(r.exports)},{341:341}],387:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,184],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,217],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,230]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,259]}]}]}," ",{p:[9,4,309],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[10,6,347],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.temperaturestatus",p:[10,19,360]}]},f:[{t:2,r:"data.occupant.bodyTemperature",p:[10,56,397]}," K"]}]}," ",{p:[12,5,461],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[13,7,495],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[13,20,508]}],max:[{t:2,r:"data.occupant.maxHealth",p:[13,54,542]}],value:[{t:2,r:"data.occupant.health",p:[13,90,578]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[14,16,619]}]},f:[{t:2,r:"data.occupant.health",p:[14,68,671]}]}]}," ",{t:4,f:[{p:[17,7,892],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[17,26,911]}]},f:[{p:[18,9,931],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[18,30,952]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,66,988]}],state:"bad"},f:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,103,1025]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[16,5,727]}],n:50,r:"data.hasOccupant",p:[5,3,155]}]}," ",{p:[23,1,1116],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[24,3,1144],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[25,5,1175],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[25,22,1192]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[26,14,1251]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[27,14,1306]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[28,22,1364]}]}]}," ",{p:[30,3,1430],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,3,1465],t:7,e:"span",a:{"class":[{t:2,r:"data.temperaturestatus",p:[31,16,1478]}]},f:[{t:2,r:"data.cellTemperature",p:[31,44,1506]}," K"]}]}," ",{p:[33,2,1556],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[34,5,1586],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[34,22,1603]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[34,73,1654]}]}," ",{p:[35,5,1706],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[35,22,1723]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[35,86,1787]}]}]}]}," ",{p:{button:[{p:[40,5,1928],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[40,36,1959]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[42,3,2060],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[45,9,2167],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,r:"volume",p:[45,52,2210]}," units of ",{t:2,r:"name",p:[45,72,2230]}]},{p:[45,87,2245],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[44,7,2128]},{t:4,n:51,f:[{p:[47,9,2274],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[43,5,2094]},{t:4,n:51,f:[{p:[50,7,2347],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],388:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,14],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,73],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,43]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,147],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,119]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,239],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,203]},{t:4,n:51,f:[{p:[12,6,299],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,377],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,409],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,442]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,469]},"%"]}]}," ",{p:[20,5,511],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,547],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,568]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,625]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,691]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,739]}]}]}," ",{p:[27,2,811],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,840],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,874]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,951],t:7,e:"br"}]}," ",{p:[30,2,973],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1002],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1037]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1086]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1144]}]}},{p:[31,206,1205],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],389:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,42],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,79],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,100]}],value:[{t:2,r:"data.dna",p:[3,53,125]}]},f:[{t:2,r:"data.dna",p:[3,67,139]},"/",{t:2,r:"data.dna_max",p:[3,80,152]}," Samples"]}]}," ",{p:[5,3,204],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,240],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,261]}],value:[{t:2,r:"data.plants",p:[6,54,289]}]},f:[{t:2,r:"data.plants",p:[6,71,306]},"/",{t:2,r:"data.plants_max",p:[6,87,322]}," Samples"]}]}," ",{p:[8,3,377],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,414],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,435]}],value:[{t:2,r:"data.animals",p:[9,55,464]}]},f:[{t:2,r:"data.animals",p:[9,73,482]},"/",{t:2,r:"data.animals_max",p:[9,90,499]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,604],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,650],t:7,e:"ui-section",f:[{p:[15,2,664],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,731],t:7,e:"ui-section",f:[{p:[18,2,745],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,790]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,810]}]}," ",{p:[19,2,840],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,885]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,905]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,567]}]},e.exports=a.extend(r.exports)},{341:341}],390:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,178],t:7,e:"ui-section",a:{label:"Items in storage"},f:[{p:[7,4,219],t:7,e:"span",f:[{t:2,r:"data.items",p:[7,10,225]}]}]}],n:50,r:"data.items",p:[5,3,155]}," ",{t:4,f:[{p:[11,5,300],t:7,e:"ui-section",a:{label:"State"},f:[{p:[12,7,333],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[12,20,346]}]},f:[{t:2,r:"data.occupant.stat",p:[12,49,375]}]}]}," ",{p:[14,5,426],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[15,7,460],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[15,20,473]}],max:[{t:2,r:"data.occupant.maxHealth",p:[15,54,507]}],value:[{t:2,r:"data.occupant.health",p:[15,90,543]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[16,16,584]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[16,68,636]}]}]}," ",{t:4,f:[{p:[19,7,870],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[19,26,889]}]},f:[{p:[20,9,909],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[20,30,930]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[20,66,966]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[20,103,1003]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[18,5,705]}," ",{p:[23,5,1087],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[24,9,1122],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[24,22,1135]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[24,68,1181]}]}]}," ",{p:[26,5,1262],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[27,9,1297],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[27,22,1310]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[27,68,1356]}]}]}," ",{p:[29,5,1438],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[31,11,1523],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[31,54,1566]}," units of ",{t:2,r:"name",p:[31,89,1601]}]},{p:[31,104,1616],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[30,9,1479]},{t:4,n:51,f:[{p:[33,11,1649],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[10,3,274]}]}," ",{p:[38,1,1740],t:7,e:"ui-display",a:{title:"Operations"},f:[{p:[39,3,1774],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[41,7,1832],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied"],s:'_0?null:"disabled"'},p:[41,38,1863]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[41,111,1936]},'"}']},f:[{t:2,r:"name",p:[41,121,1946]}]},{p:[41,141,1966],t:7,e:"br"}],n:52,r:"data.chem",p:[40,5,1806]}]}," ",{p:[44,2,2003],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[45,6,2035],t:7,e:"ui-button",a:{icon:"sign-out",action:"eject"},f:["Eject Contents"]}]}," ",{p:[47,2,2120],t:7,e:"ui-section",a:{label:"Self Cleaning"},f:[{p:[48,3,2157],t:7,e:"ui-button",a:{icon:"recycle",action:"cleaning"},f:["Self-Clean Cycle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],391:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,41]}]},f:[{p:[3,5,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,114],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,169]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,200]}]},f:[{t:2,r:"answer",p:[7,53,235]}," (",{t:2,r:"amount",p:[7,65,247]},")"]}],n:52,r:"data.answers",p:[4,7,83]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,341],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{341:341}],392:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,16],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,41]}]}]}," ",{p:[4,1,80],t:7,e:"ui-notice",f:[{p:[5,3,94],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,109]}]}]}," ",{p:[7,1,174],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,209],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,242]}]}," ",{p:[10,2,309],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,393]}]},f:["AUTHORIZE"]}," ",{p:[15,2,459],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,508]}]},f:["Repeal"]}," ",{p:[19,2,571],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,619]}]},f:["Repeal All"]}]}," ",{p:[24,1,699],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,768],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,799]}," (",{t:2,r:"job",p:[26,44,809]},")"]}],n:52,r:"data.authorizations",p:[25,2,736]},{t:4,n:51,f:[{p:[28,3,843],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{341:341}],393:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,48]}]}," ",{p:[5,3,90],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,126]}]}," ",{p:[8,3,162],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,196],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,242]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,333]}]}," ",{p:[13,5,368],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,412]}],action:"neutral"}}," ",{p:[17,5,546],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,594]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,691]}]}]}]}," ",{t:4,f:[{p:[24,3,782],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,819],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,852]}]}," ",{p:[26,5,890],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,933]}]}," ",{p:[27,5,972],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,756]}]},e.exports=a.extend(r.exports)},{341:341}],394:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,45]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{341:341}],395:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,19],t:7,e:"ui-notice",f:["Currently syncing with the database"]}],n:50,r:"data.sync",p:[1,1,0]},{t:4,n:51,f:[{p:{button:[{p:[8,4,156],t:7,e:"ui-button",a:{icon:"eject",action:"eject_all"},f:["Eject all"]}," ",{p:[9,4,224],t:7,e:"ui-button",a:{icon:["toggle-",{t:2,x:{r:["data.show_materials"],s:'_0?"off":"on"'},p:[9,28,248]}],action:"toggle_materials_visibility"},f:[{t:2,x:{r:["data.show_materials"],s:'_0?"Hide":"Show"'},p:[10,5,330]}]}]},t:7,e:"ui-display",a:{title:"Materials",button:0},f:[" ",{t:4,f:[{p:[14,4,436],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[15,5,470],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[16,6,505],t:7,e:"section",a:{"class":"cell"}}," ",{p:[17,6,543],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[20,6,601],t:7,e:"section",a:{"class":"cell"},f:["Amount"]}," ",{p:[23,6,658],t:7,e:"section",a:{"class":"cell"}}," ",{p:[24,6,696],t:7,e:"section",a:{"class":"cell"}}]}," ",{t:4,f:[{p:[27,6,782],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[28,7,818],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[29,8,848]}]}," ",{p:[31,7,880],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"amount",p:[32,8,910]}]}," ",{p:[34,7,944],t:7,e:"section",a:{"class":"cell"},f:[{p:[35,8,974],t:7,e:"ui-button",a:{icon:"eject"},f:["Release amount"]}]}," ",{p:[37,7,1048],t:7,e:"section",a:{"class":"cell",style:"width: 40px;"},f:[{p:[38,8,1099],t:7,e:"ui-button",a:{icon:"eject"},f:["Release all"]}]}]}],n:52,r:"data.all_materials",p:[26,5,748]}]}],n:50,r:"data.show_materials",p:[13,3,405]}]}," ",{p:[45,2,1230],t:7,e:"ui-display",a:{title:"Categories"},f:[{t:4,f:[{p:[47,4,1288],t:7,e:"ui-button",f:[{t:2,r:".",p:[47,15,1299]}]}],r:"data.categories",p:[46,3,1264]}]}],r:"data.sync"}]},e.exports=a.extend(r.exports)},{341:341}],396:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,5,47],t:7,e:"ui-button",a:{action:"toggle_power",style:[{t:2,x:{r:["data.toggle"],s:'_0?"selected":null'},p:[5,18,107]}]},f:["Turn ",{t:2,x:{r:["data.toggle"],s:'_0?"off":"on"'},p:[6,16,161]}]}]}," ",{p:[9,3,227],t:7,e:"ui-display",a:{title:"Logging"},f:[{t:4,f:[{p:[11,3,282],t:7,e:"ui-section",a:{label:">"},f:[{t:2,r:".",p:[11,25,304]},{p:[11,30,309],t:7,e:"ui-section",f:[]}]}],n:52,r:"data.logs",p:[10,5,260]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],397:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{seclevelState:function(){switch(this.get("data.seclevel")){case"blue":return"average";case"red":return"bad";case"delta":return"bad bold";default:return"good"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[16,1,308],t:7,e:"ui-display",f:[{p:[17,5,325],t:7,e:"ui-section",a:{label:"Alert Level"},f:[{p:[18,9,366],t:7,e:"span",a:{"class":[{t:2,r:"seclevelState",p:[18,22,379]}]},f:[{t:2,x:{r:["text","data.seclevel"],s:"_0.titleCase(_1)"},p:[18,41,398]}]}]}," ",{p:[20,5,461],t:7,e:"ui-section",a:{label:"Controls"},f:[{p:[21,9,499],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.alarm"],s:'_0?"close":"bell-o"'},p:[21,26,516]}],action:[{t:2,x:{r:["data.alarm"],s:'_0?"reset":"alarm"'},p:[21,71,561]}]},f:[{t:2,x:{r:["data.alarm"],s:'_0?"Reset":"Activate"'},p:[22,13,610]}]}]}," ",{t:4,f:[{p:[25,7,709],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[26,9,746],t:7,e:"span",a:{"class":"bad bold"},f:["Safety measures offline. Device may exhibit abnormal behavior."]}]}],n:50,r:"data.emagged",p:[24,5,682]}]}]},e.exports=a.extend(r.exports)},{341:341}],398:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,30],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,58],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,93]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,148]}]}]}," ",{p:[5,1,214],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,240],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,281]}]}]}," ",{p:[8,1,320],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,356],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,372]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,417]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,575]}]}]}," ",{p:[11,1,639],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,677],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,710]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,840]}]}]}]}," ",{t:4,f:[{p:[16,2,942],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,982],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,988]}]}]}," ",{p:[20,2,1029],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1093],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1111]}]},f:[{p:[23,3,1127],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1133]}," (",{t:2,r:"coord",p:[23,19,1143]},")"]}," ",{t:4,f:[{p:[25,4,1185],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1197]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1212]},"° (",{t:2,r:"direction",p:[25,45,1226]},")"]}],n:50,r:"direction",p:[24,3,1164]}]}],n:52,r:"data.signals",p:[21,2,1068]}]}],n:50,r:"data.power",p:[15,1,922]}]},e.exports=a.extend(r.exports)},{341:341}],399:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,44],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,85],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,98]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,136]}]}]}," ",{t:4,f:[{p:[6,4,239],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,273],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,279]}]}]}," ",{p:[9,4,335],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,374],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,391]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,462]}]}," ",{p:[11,5,527],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,559]}]}]}],n:50,r:"data.teleporter",p:[5,3,212]},{t:4,n:51,f:[{p:[14,4,653],t:7,e:"span",f:[{p:[14,10,659],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,754],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,794],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,831],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,844]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,878]}]}]}," ",{t:4,f:[{p:[22,3,971],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1004],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1010]}]}]}],n:50,r:"data.beacon",p:[21,2,949]},{t:4,n:51,f:[{p:[26,4,1072],t:7,e:"span",f:[{p:[26,10,1078],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1165],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1204],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1239],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1269]}]}]}," ",{t:4,f:[{p:[34,2,1359],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1395],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1424]}]}]}],n:50,r:"data.id",p:[33,2,1342]}," ",{p:[38,2,1475],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1507],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1513]}]}]}," ",{t:4,f:[{p:[42,3,1620],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1660],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1666]}]}]}],n:50,r:"data.prisoner",p:[41,2,1596]}]}," ",{p:[47,1,1739],t:7,e:"ui-display",f:[{p:[48,2,1753],t:7,e:"center",f:[{p:[48,10,1761],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1796]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],400:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,22,78]}]},f:[{p:[4,4,93],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2,r:"mob",p:[4,56,145]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[4,72,161]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[2,2,36]}]}]},e.exports=a.extend(r.exports)},{341:341}],401:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,68],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,85]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,128]}],action:"safety"},f:["Safeties: ",{p:[4,14,206],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,219]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,254]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,356],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,406]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,424]}]},f:[{t:2,r:"name",p:[9,5,475]}," "]},{p:[10,14,497],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,323]}]}," ",{t:4,f:[{p:[14,2,549],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,623],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,688]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,706]}]},f:[{t:2,r:"name",p:[17,5,757]}," "]},{p:[18,16,781],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,591]}]}],n:50,r:"data.emagged",p:[13,1,527]}]},e.exports=a.extend(r.exports)},{341:341}],402:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,266],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,298],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,330],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,336]}]}]}," ",{t:4,f:[{p:[20,5,447],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,480],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,493]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,516]}]}]}],n:50,r:"data.occupied",p:[19,3,421]}]}," ",{p:[25,1,656],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,687],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,717],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,734]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,783]}]}]}," ",{p:[29,3,846],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,876]}," ",{t:4,f:[{p:[32,7,938],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,906]}]}," ",{p:[35,3,1002],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1038],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1056]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1162]}," "]},{p:[38,19,1265],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],403:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,282],t:7,e:"ui-notice",f:[{p:[16,5,298],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,260]},{p:{button:[{t:4,f:[{p:[22,7,458],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,489]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,540]}," AI"]}],n:50,r:"data.name",p:[21,5,434]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,370]}],button:0},f:[" ",{t:4,f:[{p:[26,5,647],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,683],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,696]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,750]}]}]}," ",{p:[29,5,843],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,889],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,922]}],state:[{t:2,r:"healthState",p:[30,64,946]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,963]},"%"]}]}," ",{p:[32,5,1024],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1084],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1108]}]},{p:[34,45,1120],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1056]}]}," ",{p:[37,5,1164],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1200],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1232]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1325],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1361]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,625]}]}]},e.exports=a.extend(r.exports)},{341:341}],404:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,22],t:7,e:"ui-notice",f:[{p:[3,3,36],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,127],t:7,e:"ui-display",f:[{p:[7,3,142],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,189],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,243]}]}],n:50,r:"data.auth_required",p:[8,4,158]},{t:4,n:51,f:[{p:[11,5,294],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,327]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,412],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,444]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,560],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{341:341}],405:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[10,3,229],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[10,9,235]}]}," ",{p:[11,3,271],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[11,42,310]}]},f:["Claim points"]}]}]}," ",{p:[14,1,413],t:7,e:"ui-display",f:[{p:[15,2,428],t:7,e:"span",f:["Points: ",{t:2,r:"data.id_points",p:[15,16,442]}]}," ",{p:[16,2,470],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[17,3,501],t:7,e:"span",f:[{t:2,r:"data.status_info",p:[17,9,507]}]}," ",{p:[18,3,538],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[18,42,577]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],406:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,68],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,86]}]},f:[{p:[4,7,102],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,108]}]}," ",{p:[5,7,130],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,142]}]}," ",{t:4,f:[{p:[7,9,186],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow",
-p:[6,7,163]}," ",{p:[9,7,237],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,243]}]}," ",{t:4,f:[{p:[11,9,332],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,413]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,442]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,512]}]}],n:50,r:"data.is_living",p:[10,7,301]}," ",{t:4,f:[{t:4,f:[{p:[20,11,666],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,727]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,641]},{t:4,n:51,f:[{p:[22,11,784],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,846]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,609]}]}],n:52,r:"data.languages",p:[2,3,39]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1004],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1061]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"'},p:[33,19,1120]}]}],n:50,r:"data.is_living",p:[29,3,977]}," ",{p:[36,3,1196],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1278],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1296]}]},f:[{p:[39,9,1314],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1320]}]}," ",{p:[40,9,1344],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1356]}]}," ",{p:[41,9,1379],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1460]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1239]}]}],n:50,r:"data.admin_mode",p:[28,1,951]}]},e.exports=a.extend(r.exports)},{341:341}],407:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,81],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,114],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,54]},{t:4,n:51,f:[{p:[8,4,176],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,210],t:7,e:"span",f:[{p:[9,10,216],t:7,e:"b",f:[{t:2,r:"data.pad_name",p:[9,13,219]}]}]},{p:[9,41,247],t:7,e:"br"}," ",{p:[10,4,255],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,318],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,414],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,449],t:7,e:"table",f:[{p:[16,4,460],t:7,e:"tr",f:[{p:[17,5,469],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,502],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,553],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,605],t:7,e:"ui-button",a:{action:"up"},f:["↑"]}]}," ",{p:[19,5,651],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,702],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,762],t:7,e:"tr",f:[{p:[22,5,771],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,804],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["←"]}]}," ",{p:[23,5,881],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,933],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,982],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1033],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1090],t:7,e:"tr",f:[{p:[27,5,1099],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1132],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1185],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1237],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1285],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1336],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1427],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1467],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1473]}," ",{t:2,r:"data.north_south",p:[34,26,1488]}]},{p:[34,53,1515],t:7,e:"br"}," ",{p:[35,5,1524],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1530]}," ",{t:2,r:"data.east_west",p:[35,26,1545]}]}]}," ",{p:[37,4,1591],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1625],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1751],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,31]},{t:4,n:51,f:[{p:[45,3,1912],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1944],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{341:341}],408:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,526],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,624],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,660],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,681]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,728]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,771]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,825]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,873]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1034],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1060],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,984]},{t:4,n:51,f:[{p:[30,11,1141],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1180],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1201]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1253]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1301]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1360]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1413]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,945]},{t:4,n:51,f:[{p:[35,3,1524],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1550],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,589]},{t:4,n:51,f:[{p:[38,4,1625],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,561]},{t:4,n:51,f:[{p:[41,5,1689],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1741],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{341:341}],409:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,43],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,85],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,102]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,153]}]}]}],n:50,r:"data.siliconUser",p:[2,3,14]},{t:4,n:51,f:[{p:[7,5,241],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,267]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,349],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,379],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,458],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,475]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,519]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,567]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,410]},{t:4,n:51,f:[{p:[15,7,625],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,638]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,675]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,710]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,774],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,804],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,817]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,847]}]}]}," ",{p:[21,3,923],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,953],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,966]}]},f:[{t:2,r:"data.mode",p:[22,39,987]}]}]}," ",{p:[24,3,1026],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1056],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1069]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1105]}]}]}," ",{p:[27,3,1165],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1202],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1215]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1257]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1479],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1453]}," ",{t:4,f:[{p:[38,9,1586],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1558]}," ",{p:[40,7,1670],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1750],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1789],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1869],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1929],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2001],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2033],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2096],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2181],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2217],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2234]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2294]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2396],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2413]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2473]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2577],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2594]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2658]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1343]}]},e.exports=a.extend(r.exports)},{341:341}],410:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Chamber Console"},f:[{p:[2,1,44],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,2,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,63,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,3,195],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[6,36,228]}]}," ",{p:[7,3,262],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[7,35,294]}]}," ",{p:[8,3,328],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[8,41,366]}]}," ",{t:4,f:[{p:[10,4,468],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[10,41,505]}]}],n:50,r:"data.disk.activation_delay",p:[9,3,430]}," ",{t:4,f:[{p:[13,4,588],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[13,30,614]}]}," ",{p:[14,4,650],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[14,36,682]}]}],n:50,r:"data.disk.timer",p:[12,3,561]}," ",{t:4,f:[{p:[17,4,769],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[17,40,805]}]}],n:50,r:"data.disk.activation_code",p:[16,3,732]}," ",{t:4,f:[{p:[20,4,899],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[20,42,937]}]}],n:50,r:"data.disk.deactivation_code",p:[19,3,860]}," ",{t:4,f:[{p:[23,4,1025],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[23,34,1055]}]}],n:50,r:"data.disk.kill_code",p:[22,3,994]}," ",{t:4,f:[{p:[26,4,1138],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[26,37,1171]}]}],n:50,r:"data.disk.trigger_code",p:[25,3,1104]}," ",{t:4,f:[{t:4,f:[{p:[30,6,1303],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[30,25,1322]}]},f:[{t:2,r:"value",p:[30,35,1332]}]}],n:52,r:"data.disk.extra_settings",p:[29,4,1263]}],n:50,r:"data.disk.has_extra_settings",p:[28,3,1223]}],n:50,r:"data.has_program",p:[5,2,168]},{t:4,n:51,f:[{p:[34,3,1390],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,1,78]},{t:4,n:51,f:[{p:[37,2,1453],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[40,1,1511],t:7,e:"br"}," ",{t:4,f:[{p:[42,2,1541],t:7,e:"ui-notice",f:[{t:2,r:"data.status_msg",p:[42,13,1552]}]}],n:50,r:"data.status_msg",p:[41,1,1516]},{t:4,n:51,f:[{p:[44,2,1594],t:7,e:"ui-display",a:{title:"Chamber"},f:[{p:[45,2,1624],t:7,e:"ui-section",f:[{p:[45,14,1636],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock-open":"lock"'},p:[45,30,1652]}],action:"toggle_lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[45,90,1712]}," Chamber"]},{p:[45,146,1768],t:7,e:"br"}]}," ",{p:[46,2,1787],t:7,e:"ui-section",f:[{p:[46,14,1799],t:7,e:"b",f:["Occupant:"]}," ",{t:2,r:"data.occupant_name",p:[46,31,1816]}]}," ",{t:4,f:[{p:[48,4,1882],t:7,e:"ui-section",f:[{p:[48,16,1894],t:7,e:"ui-notice",f:["No nanites detected."]}]}," ",{p:[49,4,1954],t:7,e:"ui-section",f:[{p:[49,16,1966],t:7,e:"ui-button",a:{icon:"syringe",action:"nanite_injection"},f:["Implant Nanites"]}]}],n:50,x:{r:["data.has_nanites"],s:"!_0"},p:[47,2,1853]},{t:4,n:51,f:[{p:[51,3,2071],t:7,e:"ui-display",a:{title:"Nanites"},f:[{t:4,f:[{p:[53,5,2129],t:7,e:"ui-button",a:{icon:"download",action:"add_program"},f:["Install Program From Disk"]},{p:[53,90,2214],t:7,e:"br"}," ",{p:[54,5,2223],t:7,e:"br"}],n:50,r:"data.has_disk",p:[52,4,2103]}," ",{p:[56,4,2242],t:7,e:"ui-section",f:[{p:[57,5,2259],t:7,e:"ui-section",a:{label:"Nanite Volume"},f:[{t:2,r:"data.nanite_volume",p:[57,39,2293]}]}," ",{p:[58,5,2333],t:7,e:"ui-section",a:{label:"Growth Rate"},f:[{t:2,r:"data.regen_rate",p:[58,37,2365]}]}," ",{p:[59,5,2402],t:7,e:"ui-section",a:{label:"Safety Threshold"},f:[{t:2,r:"data.safety_threshold",p:[59,42,2439]}," ",{p:[59,68,2465],t:7,e:"ui-button",a:{icon:"pencil",action:"set_safety"},f:["Set"]}]}," ",{p:[60,5,2544],t:7,e:"ui-section",a:{label:"Cloud ID"},f:[{t:2,x:{r:["data.cloud_id"],s:'_0?_0:"No Cloud"'},p:[60,34,2573]}," ",{p:[60,82,2621],t:7,e:"ui-button",a:{icon:"pencil",action:"set_cloud"},f:["Set"]}]}]}," ",{p:[62,4,2715],t:7,e:"ui-display",a:{title:"Programs"},f:[{t:4,f:[{p:[64,6,2782],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[64,25,2801]}],button:0},f:[{p:[65,6,2824],t:7,e:"ui-button",a:{icon:"minus",action:"remove_program",params:['{"program_id": "',{t:2,r:"id",p:[65,78,2896]},'"}']},f:["Uninstall"]}," ",{p:[66,6,2933],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[66,38,2965]}]}," ",{t:4,f:[{p:[68,7,3027],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[68,45,3065]}]}," ",{p:[69,7,3123],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[69,44,3160]},"/s"]}," ",{t:4,f:[{p:[71,8,3221],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[71,41,3254]}]}," ",{p:[72,8,3291],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[72,45,3328]}," seconds"]}],n:50,r:"can_trigger",p:[70,7,3194]}," ",{t:4,f:[{t:4,f:[{p:[76,9,3459],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,46,3496]}]}],n:50,r:"activation_delay",p:[75,8,3426]}," ",{t:4,f:[{p:[79,9,3574],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,35,3600]}]}," ",{p:[80,9,3631],t:7,e:"ui-section",a:{label:"Timer Type"},f:[{t:2,r:"timer_type",p:[80,40,3662]}]}],n:50,r:"timer",p:[78,8,3552]}," ",{t:4,f:[{t:4,f:[{p:[84,11,3782],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,30,3801]}]},f:[{t:2,r:"value",p:[84,40,3811]}]}],n:52,r:"extra_settings",p:[83,9,3747]}],n:50,r:"has_extra_settings",p:[82,8,3712]}," ",{t:4,f:[{t:4,f:[{p:[89,10,3944],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[89,46,3980]}]}],n:50,r:"activation_code",p:[88,9,3911]}," ",{t:4,f:[{p:[92,10,4072],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[92,48,4110]}]}],n:50,r:"deactivation_code",p:[91,9,4037]}," ",{t:4,f:[{p:[95,10,4196],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[95,40,4226]}]}],n:50,r:"kill_code",p:[94,9,4169]}," ",{t:4,f:[{p:[98,10,4307],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[98,43,4340]}]}],n:50,r:"trigger_code",p:[97,9,4277]}],n:50,x:{r:["data.scan_level"],s:"_0>=4"},p:[87,8,3874]}],n:50,x:{r:["data.scan_level"],s:"_0>=3"},p:[74,7,3390]}],n:50,x:{r:["data.scan_level"],s:"_0>=2"},p:[67,6,2992]}]}],n:52,r:"data.mob_programs",p:[63,5,2749]}]}]}],x:{r:["data.has_nanites"],s:"!_0"}}]}],r:"data.status_msg"}]}]},e.exports=a.extend(r.exports)},{341:341}],411:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Cloud Console"},f:[{p:[2,1,42],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,3,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,64,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,4,197],t:7,e:"ui-section",f:[{p:[7,5,214],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[7,38,247]}]}," ",{p:[8,5,283],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[8,37,315]}]}," ",{p:[9,5,351],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[9,43,389]}]}," ",{t:4,f:[{p:[11,6,495],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[11,43,532]}]}],n:50,r:"data.disk.activation_delay",p:[10,5,455]}," ",{t:4,f:[{p:[14,6,621],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[14,32,647]}]}," ",{p:[15,6,685],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[15,38,717]}]}],n:50,r:"data.disk.timer",p:[13,5,592]}," ",{t:4,f:[{p:[18,6,810],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[18,42,846]}]}],n:50,r:"data.disk.activation_code",p:[17,5,771]}," ",{t:4,f:[{p:[21,6,946],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[21,44,984]}]}],n:50,r:"data.disk.deactivation_code",p:[20,5,905]}," ",{t:4,f:[{p:[24,6,1078],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[24,36,1108]}]}],n:50,r:"data.disk.kill_code",p:[23,5,1045]}," ",{t:4,f:[{p:[27,6,1197],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[27,39,1230]}]}],n:50,r:"data.disk.trigger_code",p:[26,5,1161]}," ",{t:4,f:[{t:4,f:[{p:[31,8,1370],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,27,1389]}]},f:[{t:2,r:"value",p:[31,37,1399]}]}],n:52,r:"data.disk.extra_settings",p:[30,6,1328]}],n:50,r:"data.disk.has_extra_settings",p:[29,5,1286]}]}],n:50,r:"data.has_program",p:[5,3,169]},{t:4,n:51,f:[{p:[36,4,1480],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,2,77]},{t:4,n:51,f:[{p:[39,3,1546],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[42,1,1605],t:7,e:"ui-display",a:{title:"Cloud Storage"},f:[{t:4,f:[{p:[44,3,1670],t:7,e:"ui-button",a:{icon:"plus-circle",action:"create_backup"},f:["Create New Backup"]}," ",{p:[45,3,1755],t:7,e:"ui-display",a:{title:"Active Backups"},f:[{t:4,f:[{p:[47,5,1827],t:7,e:"ui-button",a:{action:"set_view",params:['{"view": "',{t:2,r:"cloud_id",p:[47,52,1874]},'"}']},f:["Backup #",{t:2,r:"cloud_id",p:[47,76,1898]}]}],n:52,r:"data.cloud_backups",p:[46,4,1794]}]}],n:50,x:{r:["data.current_view"],s:"!_0"},p:[43,2,1641]},{t:4,n:51,f:[{p:[51,3,1964],t:7,e:"ui-button",a:{icon:"undo",action:"set_view",params:'{"view": "0"}'},f:["Return"]}," ",{t:4,f:[{p:[53,4,2079],t:7,e:"ui-notice",f:["ERROR: Backup not found."]}],n:50,x:{r:["data.cloud_backup"],s:"!_0"},p:[52,3,2049]},{t:4,n:51,f:[{p:[55,4,2141],t:7,e:"ui-display",a:{title:["Backup #",{t:2,r:"data.current_view",p:[55,31,2168]}]},f:[{t:4,f:[{p:[57,6,2226],t:7,e:"ui-button",a:{icon:"upload",action:"upload_program",style:"selected"},f:["Upload Program From Disk"]},{p:[57,108,2328],t:7,e:"br"}],n:50,r:"data.has_program",p:[56,5,2196]}," ",{t:4,f:[{p:[60,6,2384],t:7,e:"hr"}," ",{p:[61,6,2394],t:7,e:"ui-section",f:[{p:[62,7,2413],t:7,e:"h3",f:[{t:2,r:"name",p:[62,11,2417]}]}," ",{p:[63,7,2437],t:7,e:"div",a:{style:"float:right"},f:[{p:[64,8,2470],t:7,e:"ui-button",a:{icon:"minus-circle",action:"remove_program",style:"danger",params:['{"program_id": "',{t:2,r:"id",p:[64,102,2564]},'"}']},f:["Uninstall"]}]}]}," ",{p:[67,6,2633],t:7,e:"ui-section",f:[{p:[68,7,2652],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[68,39,2684]}]}," ",{p:[69,7,2712],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[69,45,2750]}]}," ",{p:[70,7,2808],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[70,44,2845]},"/s"]}," ",{t:4,f:[{p:[72,8,2906],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[72,41,2939]},"/s"]}," ",{p:[73,8,2978],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[73,45,3015]},"/s"]}],n:50,r:"can_trigger",p:[71,7,2879]}," ",{t:4,f:[{p:[76,8,3103],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,45,3140]}]}],n:50,r:"activation_delay",p:[75,7,3071]}," ",{t:4,f:[{p:[79,8,3215],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,34,3241]}]}," ",{p:[80,8,3271],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"timer_type",p:[80,40,3303]}]}],n:50,r:"timer",p:[78,7,3194]}," ",{t:4,f:[{p:[83,8,3382],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[83,44,3418]}]}],n:50,r:"activation_code",p:[82,7,3351]}," ",{t:4,f:[{p:[86,8,3504],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[86,46,3542]}]}],n:50,r:"deactivation_code",p:[85,7,3471]}," ",{t:4,f:[{p:[89,8,3622],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[89,38,3652]}]}],n:50,r:"kill_code",p:[88,7,3597]}," ",{t:4,f:[{p:[92,8,3727],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[92,41,3760]}]}],n:50,r:"trigger_code",p:[91,7,3699]}," ",{t:4,f:[{t:4,f:[{p:[96,10,3878],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[96,29,3897]}]},f:[{t:2,r:"value",p:[96,39,3907]}]}],n:52,r:"extra_settings",p:[95,8,3844]}],n:50,r:"has_extra_settings",p:[94,7,3810]}]}],n:52,r:"data.cloud_programs",p:[59,5,2349]}]}],x:{r:["data.cloud_backup"],s:"!_0"}}],x:{r:["data.current_view"],s:"!_0"}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],412:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Program Hub"},f:[{t:4,f:[{p:[3,2,63],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{p:[4,3,99],t:7,e:"ui-section",f:[{p:[5,4,115],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{p:[6,4,180],t:7,e:"ui-button",a:{icon:"minus-circle",action:"clear"},f:["Delete Program"]}]}," ",{t:4,f:[{p:[9,4,299],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[9,37,332]}]}," ",{p:[10,4,367],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[10,36,399]}]}],n:50,r:"data.has_program",p:[8,3,271]},{t:4,n:51,f:[{p:[12,4,445],t:7,e:"ui-notice",f:["No program installed."]}],r:"data.has_program"}]}],n:50,r:"data.has_disk",p:[2,1,40]},{t:4,n:51,f:[{p:[16,2,525],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"},{p:[18,1,569],t:7,e:"br"}," ",{p:[19,1,574],t:7,e:"ui-display",a:{title:"Programs"},f:[{p:[20,2,605],t:7,e:"ui-section",f:[{p:[21,3,620],t:7,e:"ui-button",a:{icon:"undo",action:"set_category",params:'{"category": "Main"}'},f:["Return"]}," ",{p:[22,3,716],t:7,e:"ui-button",a:{icon:"align-justify ",action:"toggle_details"},f:[{t:2,x:{r:["data.detail_view"],s:'_0?"Compact View":"Detailed View"'},p:[22,60,773]}]}]}," ",{t:4,f:[{p:[25,3,892],t:7,e:"ui-display",f:[{t:4,f:[{p:[27,5,938],t:7,e:"ui-section",f:[{p:[27,17,950],t:7,e:"ui-button",a:{action:"set_category",params:['{"category": "',{t:2,r:"name",p:[27,72,1005]},'"}']},f:[{t:2,r:"name",p:[27,84,1017]}]}]}],n:52,r:"data.categories",p:[26,4,908]}]}],n:50,x:{r:["data.category"],s:'_0=="Main"'},p:[24,2,858]},{t:4,n:51,f:[{p:[31,3,1092],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[31,22,1111]}]},f:[{t:4,f:[{t:4,f:[{p:[34,6,1196],t:7,e:"ui-display",f:[{p:[35,7,1215],t:7,e:"ui-section",f:[{p:[35,19,1227],t:7,e:"b",f:[{t:2,r:"name",p:[35,22,1230]}]}]}," ",{p:[36,7,1262],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[36,19,1274]}]}," ",{p:[37,7,1302],t:7,e:"ui-section",f:[{p:[38,8,1322],t:7,e:"ui-button",a:{icon:"download",action:"download",params:['{"program_id": "',{t:2,r:"id",p:[38,77,1391]},'"}'],state:[{t:2,x:{r:["data.has_disk"],s:'_0?null:"disabled"'},p:[38,94,1408]}]},f:["Download"]}]}]}],n:50,r:"data.detail_view",p:[33,5,1166]},{t:4,n:51,f:[{p:[44,6,1542],t:7,e:"ui-section",f:[{p:[44,18,1554],t:7,e:"ui-button",a:{action:"download",params:['{"program_id": "',{t:2,r:"id",p:[44,71,1607]},'"}']},f:[{t:2,r:"name",p:[44,81,1617]}]}]}],r:"data.detail_view"}],n:52,r:"data.program_list",p:[32,4,1134]}]}],x:{r:["data.category"],s:'_0=="Main"'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],413:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Programming"},f:[{t:4,f:[{p:[3,3,65],t:7,e:"ui-notice",f:["Insert a nanite program disk."]}],n:50,x:{r:["data.has_disk"],s:"!_0"},p:[2,1,40]},{t:4,n:51,f:[{p:[5,3,129],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{t:4,f:[{p:[7,5,223],t:7,e:"ui-notice",f:["No program detected."]}],n:50,x:{r:["data.has_program"],s:"!_0"},p:[6,3,193]},{t:4,n:51,f:[{p:[9,5,282],t:7,e:"ui-section",f:[{p:[10,7,301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.name",p:[10,26,320]}]},f:[{t:2,r:"data.desc",p:[11,9,344]}]}]}," ",{p:[14,5,400],t:7,e:"ui-section",f:[{p:[15,7,419],t:7,e:"ui-section",a:{label:"Program Info"},f:["Nanites Consumed: ",{t:2,r:"data.use_rate",p:[16,26,478]},{p:[16,43,495],t:7,e:"br"}," ",{t:4,f:["Trigger Cost: ",{t:2,r:"data.trigger_cost",p:[18,25,557]},"u",{p:[18,47,579],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[17,9,508]}]}," ",{p:[22,7,627],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[23,9,663],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.activated"],s:'_0?"toggle-on":"toggle-off"'},p:[24,17,690]}],action:"toggle_active"},f:[{t:2,x:{r:["data.activated"],s:'_0?"Active":"Inactive"'},p:[26,11,784]}]}]}," ",{p:[30,7,876],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[31,9,914],t:7,e:"ui-button",a:{icon:"pencil",action:"set_activation_delay"}}," Activation Delay: ",{t:2,r:"data.activation_delay",p:[31,95,1e3]}," ",{p:[31,121,1026],t:7,e:"br"}," ",{p:[32,9,1039],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer"}}," Timer: ",{t:2,r:"data.timer",p:[32,73,1103]}," ",{p:[32,88,1118],t:7,e:"br"}," ",{p:[33,9,1131],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer_type"}}," Timer Type: ",{t:2,r:"data.timer_type",p:[33,83,1205]}," ",{p:[33,103,1225],t:7,e:"br"}]}," ",{p:[36,7,1257],t:7,e:"ui-section",a:{label:"Codes"},f:[{p:[37,9,1292],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "activation"}'}}," Activation Code: ",{t:2,r:"data.activation_code",p:[37,121,1404]}," ",{p:[37,146,1429],t:7,e:"br"}," ",{p:[38,9,1442],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "deactivation"}'}}," Deactivation Code: ",{t:2,r:"data.deactivation_code",p:[38,125,1558]}," ",{p:[38,152,1585],t:7,e:"br"}," ",{p:[39,9,1598],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "kill"}'}}," Kill Code: ",{t:2,r:"data.kill_code",p:[39,109,1698]}," ",{p:[39,128,1717],t:7,e:"br"}," ",{t:4,f:[{p:[41,11,1765],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "trigger"}'}}," Trigger Code: ",{t:2,r:"data.trigger_code",p:[41,117,1871]}," ",{p:[41,139,1893],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[40,9,1730]}]}," ",{t:4,f:[{p:[46,9,1981],t:7,e:"ui-section",a:{label:"Special"},f:[{t:4,f:[{p:[48,13,2062],t:7,e:"ui-button",a:{icon:"pencil",action:"set_extra_setting",params:['{"target_setting": "',{t:2,r:"name",p:[48,93,2142]},'"}']}}," ",{t:2,r:"name",p:[48,118,2167]},": ",{t:2,r:"value",p:[48,128,2177]}," ",{p:[48,138,2187],t:7,e:"br"}],n:52,r:"data.extra_settings",p:[47,11,2020]}]}],n:50,r:"data.has_extra_settings",p:[45,7,1941]}]}],x:{r:["data.has_program"],s:"!_0"}}],x:{r:["data.has_disk"],s:"!_0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],414:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Control"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-notice",f:["The interface is locked."]}],n:50,r:"data.locked",p:[2,1,36]},{t:4,n:51,f:[{p:[5,3,117],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock Interface"]}," ",{p:[6,3,183],t:7,e:"ui-button",a:{icon:"save",action:"save"},f:["Save Current Setting"]}," ",{p:[7,3,255],t:7,e:"ui-section",a:{label:"Signal Code"},f:[{p:[8,5,292],t:7,e:"span",f:[{t:2,r:"data.code",p:[8,11,298]}]}," ",{p:[9,4,322],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code"},f:["Set"]}]}," ",{t:4,f:[{p:[12,5,432],t:7,e:"ui-section",a:{label:"Relay Code"},f:[{p:[13,7,470],t:7,e:"span",f:[{t:2,r:"data.relay_code",p:[13,13,476]}]}," ",{p:[14,5,507],t:7,e:"ui-button",a:{icon:"pencil",action:"set_relay_code"},f:["Set"]}]}],n:50,x:{r:["data.mode"],s:'_0=="Relay"'},p:[11,3,399]}," ",{p:[17,3,602],t:7,e:"ui-section",a:{label:"Signal Mode"},f:[{p:[18,5,639],t:7,e:"span",f:[{t:2,r:"data.mode",p:[18,11,645]}]}," ",{p:[19,5,670],t:7,e:"br"}," ",{p:[20,4,678],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Off"}'},f:["Off"]}," ",{p:[21,5,755],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Local"}'},f:["Local"]}," ",{p:[22,5,836],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Targeted"}'},f:["Targeted"]}," ",{p:[23,5,923],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Area"}'},f:["Area"]}," ",{p:[24,5,1002],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Relay"}'},f:["Relay"]}]}],r:"data.locked"}]}," ",{p:[28,1,1117],t:7,e:"ui-display",a:{title:"Saved Settings"},f:[{t:4,f:[{p:[30,3,1186],t:7,e:"ui-button",a:{icon:"load",action:"load",params:['{"save_id": "',{t:2,r:"id",p:[30,61,1244]},'"}']},f:[{t:2,r:"name",p:[30,71,1254]}]}," ",{t:4,f:[{p:[32,4,1301],t:7,e:"ui-button",
-a:{icon:"remove",action:"remove_save",params:['{"save_id": "',{t:2,r:"id",p:[32,71,1368]},'"}']},f:["Remove"]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[31,3,1277]}," ",{p:[34,3,1409],t:7,e:"br"}],n:52,r:"data.saved_settings",p:[29,2,1154]}]}]},e.exports=a.extend(r.exports)},{341:341}],415:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ghost roles"},f:[{p:[2,2,34],t:7,e:"ui-section",a:{label:"Ignored roles"},f:[{t:4,f:[{p:[4,4,96],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[4,21,113]}],style:[{t:2,x:{r:["enabled"],s:'_0?"danger":null'},p:[4,73,165]}],action:"toggle_ignore",params:['{"key": "',{t:2,r:"key",p:[4,144,236]},'"}']},f:[{t:2,r:"desc",p:[4,155,247]}]}],n:52,r:"data.ignore",p:[3,3,71]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],416:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,55],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,93],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,127],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."]}," ",{p:[6,3,479],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,514],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,555],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,28]},{t:4,n:51,f:[{p:[12,3,652],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,689],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,739]}]}]}," ",{p:[18,3,819],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,865]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,889]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports)},{341:341}],417:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,306],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,346],t:7,e:"ui-notice",f:[{p:[19,5,362],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,321]},{p:[24,1,428],t:7,e:"ui-display",f:[{p:[26,1,442],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,463],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,512],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[31,2,539],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,589]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,626]}]}]}]}," ",{t:4,f:[{p:[36,2,709],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,719]}]}],n:50,r:"data.error",p:[35,1,689]},{t:4,n:51,f:[{p:[38,2,748],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,772],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,793],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,843],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,872]}]}," ",{p:[46,3,897],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,943],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,972]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1059],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1115],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1144],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1177]}],state:[{t:2,r:"healthState",p:[61,11,1204]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1221]},"%"]}]}," ",{p:[63,3,1274],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1325],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1354],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1394],t:7,e:"tr",f:[{p:[69,10,1398],t:7,e:"td",f:[{p:[69,14,1402],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1426]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1366]}]}]}," ",{p:[73,2,1475],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1509],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1539]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],418:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,87],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,166]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,61]},{p:[7,1,247],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,336]}]},f:["Job Management"]}," ",{p:[8,1,404],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,495]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,584],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,634]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,558]},{t:4,f:[{p:[14,1,753],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,774],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,799],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,857],t:7,e:"br"},{p:[16,65,861],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,898],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,918]}," - ",{t:2,r:"rank",p:[20,13,929]}]}],n:52,r:"data.manifest",p:[18,1,873]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,733]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,984],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1005],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1036],t:7,e:"table",f:[{p:[29,1,1044],t:7,e:"tr",f:[{p:[29,5,1048],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1070],t:7,e:"b",f:["Job"]}]},{p:[29,42,1085],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1107],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1124],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1146],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1166],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1188],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1238],t:7,e:"tr",f:[{p:[32,6,1242],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1246]}]},{p:[32,24,1260],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1264]},"/",{t:2,r:"total",p:[32,40,1276]}]},{p:[32,54,1290],t:7,e:"td",f:[{p:[32,58,1294],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1348]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1368]}]},f:[{t:2,r:"desc_open",p:[32,169,1405]}]},{p:[32,194,1430],t:7,e:"br"}]},{p:[32,203,1439],t:7,e:"td",f:[{p:[32,207,1443],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1498]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1518]}]},f:[{t:2,r:"desc_close",p:[32,320,1556]}]}]}]}],n:52,r:"data.slots",p:[30,1,1215]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1626],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1647],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1707],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1727],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1791],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1684]},{p:[48,1,1805],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1826],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1879],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1906],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,1976]}]}]}]}," ",{p:[56,1,2021],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2042],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2093],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2120],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2192]}]}]}]}," ",{p:[64,1,2239],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2295],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2317],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2364],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2386],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2442],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2470]}]}]}," ",{p:[81,2,2507],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2529],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2574],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2602]}]}]}," ",{p:[89,2,2638],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2660],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2707],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2735],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2788]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2849]}]}]}]}],n:50,r:"data.minor",p:[72,2,2344]},{t:4,n:51,f:[{p:[99,2,2909],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,2931],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,2987],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3015],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3082]}]}]}]}," ",{p:[108,2,3132],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3154],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3184],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3228]}]}," ",{p:[112,2,3304],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3326],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3379],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3429],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3457],t:7,e:"table",f:[{p:[121,5,3469],t:7,e:"tr",f:[{p:[122,4,3477],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3497],t:7,e:"td",f:[{p:[124,6,3507],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3584]}]},f:["Captain"]}]}]}," ",{p:[127,5,3678],t:7,e:"tr",f:[{p:[128,4,3686],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3706],t:7,e:"td",f:[{p:[130,6,3716],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3827],t:7,e:"tr",f:[{p:[134,4,3835],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,3885],t:7,e:"td",f:[{t:4,f:[{p:[137,5,3931],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,3990]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4008]}]},f:[{t:2,r:"display_name",p:[137,127,4053]}]}],n:52,r:"data.engineering_jobs",p:[136,6,3895]}]}]}," ",{p:[141,5,4120],t:7,e:"tr",f:[{p:[142,4,4128],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4174],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4216],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4275]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4293]}]},f:[{t:2,r:"display_name",p:[145,127,4338]}]}],n:52,r:"data.medical_jobs",p:[144,6,4184]}]}]}," ",{p:[149,5,4405],t:7,e:"tr",f:[{p:[150,4,4413],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4459],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4501],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4560]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4578]}]},f:[{t:2,r:"display_name",p:[153,127,4623]}]}],n:52,r:"data.science_jobs",p:[152,6,4469]}]}]}," ",{p:[157,5,4690],t:7,e:"tr",f:[{p:[158,4,4698],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4745],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4788],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,4847]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,4865]}]},f:[{t:2,r:"display_name",p:[161,127,4910]}]}],n:52,r:"data.security_jobs",p:[160,6,4755]}]}]}," ",{p:[165,5,4977],t:7,e:"tr",f:[{p:[166,4,4985],t:7,e:"th",a:{style:"color: '#cc6600';"},f:["Cargo"]}," ",{p:[167,4,5029],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5069],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5128]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5146]}]},f:[{t:2,r:"display_name",p:[169,127,5191]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5039]}]}]}," ",{p:[173,5,5258],t:7,e:"tr",f:[{p:[174,4,5266],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5313],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5356],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5415]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5433]}]},f:[{t:2,r:"display_name",p:[177,127,5478]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5323]}]}]}," ",{t:4,f:[{p:[182,4,5576],t:7,e:"tr",f:[{p:[183,6,5586],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5634],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5677],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5736]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5754]}]},f:[{t:2,r:"display_name",p:[186,129,5799]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5643]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5545]}]}]}],n:50,r:"data.assignments",p:[118,4,3401]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,5956],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,5977],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6015],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6094],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6128],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6187]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6210]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6232]}]},f:[{t:2,r:"desc",p:[204,140,6263]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6056]}]}],n:50,r:"data.centcom_access",p:[197,2,5925]},{t:4,n:51,f:[{p:[209,4,6330],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6351],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6355]}]}]}," ",{p:[212,4,6395],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6463],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6525],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6546],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6584]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6637]},'"}']},f:[{p:[215,129,6650],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6653]}]}]}]}," ",{p:[216,4,6687],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6721],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6755],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,6814]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,6837]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,6859]}]},f:[{t:2,r:"desc",p:[219,140,6890]}]}]}],n:52,r:"accesses",p:[217,6,6697]}]}],n:52,r:"data.regions",p:[213,3,6436]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2274]}],n:50,r:"data.authenticated",p:[66,1,2245]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],419:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,297],t:7,e:"ntosheader"}," ",{p:[17,1,312],t:7,e:"ui-display",f:[{p:[18,2,326],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,461],t:7,e:"hr"}," ",{p:[19,2,467],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,503],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,539]},"W"]}," ",{t:4,f:[{p:[25,4,606],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,674],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,714]}]}," ",{p:[31,4,755],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,795],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,816]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,846]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,879]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,918]},"/",{t:2,r:"adata.battery.max",p:[32,165,955]}]}]}],n:50,r:"data.battery",p:[24,3,582]},{t:4,n:51,f:[{p:[35,4,1017],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1116],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1151],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1189],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1210]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1238]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1272]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1308]},"GQ"]}]}]}," ",{p:[47,2,1373],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1443],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1465]}]},f:[{p:[50,5,1480],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1534]}]}," ",{p:[52,5,1554],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1586],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1604]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1685]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1704]}]}]}," ",{t:4,f:[{p:[59,6,1810],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1849]},"W"]}],n:50,r:"powerusage",p:[58,5,1786]}]}," ",{p:[64,4,1922],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1416]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],420:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,97],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,189]},{p:[8,41,203],t:7,e:"br"}," ",{p:[9,3,210],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,311],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,410],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,427]}]}," ",{p:[14,4,453],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,475],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,530],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,579],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,640],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,648]}],n:50,r:"data.filename",p:[12,3,385]},{t:4,n:51,f:[{p:[21,4,682],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,719],t:7,e:"table",f:[{p:[23,5,731],t:7,e:"tr",f:[{p:[24,6,741],t:7,e:"th",f:["File name"]}," ",{p:[25,6,765],t:7,e:"th",f:["File type"]}," ",{p:[26,6,789],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,818],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,878],t:7,e:"tr",f:[{p:[31,7,889],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,893]}]}," ",{p:[32,7,913],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,918]}]}," ",{p:[33,7,938],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,942]},"GQ"]}," ",{p:[34,7,964],t:7,e:"td",f:[{p:[35,8,976],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1027]},'"}']},f:["VIEW"]}," ",{p:[36,8,1063],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1081]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1160]},'"}']},f:["DELETE"]}," ",{p:[37,8,1198],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1216]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1291]},'"}']},f:["RENAME"]}," ",{p:[38,8,1329],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1347]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1421]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1492],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1510]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1588]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1458]}]}]}],n:52,r:"data.files",p:[29,5,852]}]}," ",{t:4,f:[{p:[47,4,1715],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1762],t:7,e:"table",f:[{p:[49,5,1774],t:7,e:"tr",f:[{p:[50,6,1784],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1808],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1832],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1861],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1924],t:7,e:"tr",f:[{p:[57,7,1935],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1939]}]}," ",{p:[58,7,1959],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,1964]}]}," ",{p:[59,7,1984],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,1988]},"GQ"]}," ",{p:[60,7,2010],t:7,e:"td",f:[{p:[61,8,2022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2040]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2122]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2194],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2212]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2292]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2160]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1895]}]}],n:50,r:"data.usbconnected",p:[46,4,1686]}," ",{p:[70,4,2401],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],421:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,141],t:7,e:"table",f:[{t:4,f:[{p:[8,4,178],t:7,e:"tr",f:[{p:[8,8,182],t:7,e:"td",f:[{p:[8,12,186],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,238]},'"}']},f:[{t:2,r:"desc",p:[9,5,255]}]}]},{p:[11,4,283],t:7,e:"td",f:[{p:[11,8,287],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,305]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,393]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,151]}]}," ",{p:[14,2,441],t:7,e:"br"},{p:[14,6,445],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,476],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,519]}]},f:["Toggle Flashlight"]},{p:[16,114,587],t:7,e:"br"}," ",{p:[17,3,594],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,653],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,710]},";"]},f:[" "]}]}],n:50,r:"data.has_light",p:[15,2,451]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],422:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,100],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,75]}," ",{t:4,f:[{p:[10,3,161],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,217],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,246]}]}," ",{p:[16,3,272],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,328],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,386],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,357]},{t:4,n:51,f:[{p:[23,5,417],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,455],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,504],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,533],t:7,e:"table",f:[{p:[31,5,545],t:7,e:"tr",f:[{p:[31,9,549],t:7,e:"td",f:[{p:[31,13,553],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,612],t:7,e:"tr",f:[{p:[32,9,616],t:7,e:"td",f:[{p:[32,13,620],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,687],t:7,e:"tr",f:[{p:[33,9,691],t:7,e:"td",f:[{p:[33,13,695],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,774],t:7,e:"tr",f:[{p:[34,9,778],t:7,e:"td",f:[{p:[34,13,782],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,849],t:7,e:"tr",f:[{p:[35,9,853],t:7,e:"td",f:[{p:[35,13,857],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,959],t:7,e:"tr",f:[{p:[37,10,963],t:7,e:"td",f:[{p:[37,14,967],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1037],t:7,e:"tr",f:[{p:[38,10,1041],t:7,e:"td",f:[{p:[38,14,1045],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1111],t:7,e:"tr",f:[{p:[39,10,1115],t:7,e:"td",f:[{p:[39,14,1119],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,929]}]}]}]}]}," ",{p:[43,3,1221],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1243],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1298],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1321],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1403]},{p:[48,14,1410],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1373]}]}]}]}," ",{p:[53,3,1464],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1486],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1519]},{p:[55,12,1527],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1493]}],n:50,r:"data.title",p:[9,2,140]},{t:4,n:51,f:[{p:[58,3,1556],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1575],t:7,e:"table",f:[{p:[60,4,1586],t:7,e:"tr",f:[{p:[60,8,1590],t:7,e:"td",f:[{p:[60,12,1594],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1660],t:7,e:"tr",f:[{p:[61,8,1664],t:7,e:"td",f:[{p:[61,12,1668],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1730],t:7,e:"tr",f:[{p:[62,8,1734],t:7,e:"td",f:[{p:[62,12,1738],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1826],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1855],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1898],t:7,e:"tr",f:[{p:[67,8,1902],t:7,e:"td",f:[{p:[67,12,1906],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,1958]},'"}']},f:[{t:2,r:"chan",p:[67,74,1968]}]},{p:[67,94,1988],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1865]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],423:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,112]},{p:[6,33,126],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,75]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,236]},"GQ/s",{p:[8,57,254],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,291]},{p:[10,12,299],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,261]}," ",{p:[12,3,318],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,430],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,479]}],n:50,r:"data.focus",p:[15,3,437]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,545],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,596],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,657],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,689],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,746]},'"}']},f:[{t:2,r:"id",p:[23,71,756]}]}],n:52,r:"data.relays",p:[22,3,664]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],424:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,170],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,197],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,236],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,273]}]}," ",{p:[11,4,308],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,347],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,176]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,498],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,540],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,566],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,602]}]}," ",{p:[24,5,646],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,689]}]}," ",{p:[27,5,733],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,769]},"GQ"]}," ",{p:[30,5,815],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,855]}," GQ/s"]}," ",{p:[33,5,905],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,949],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,970]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1001]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],
-s:"Math.round(_0)"},p:[34,101,1044]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1089]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,469]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1230],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1267],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1307],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1328]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1356]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1390]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1426]},"GQ"]}]}]}," ",{p:[47,4,1499],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1594],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1616]}]},f:[{p:[50,7,1637],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1691]}]}," ",{p:[52,7,1723],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1761]}," (",{t:2,r:"size",p:[53,22,1775]}," GQ)"]}," ",{p:[55,7,1814],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1856]}]}," ",{p:[58,7,1900],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,1973]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2052],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1552]}]}," ",{t:4,f:[{p:[67,5,2128],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},f:[{p:[68,6,2182],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2326],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2348]}]},f:[{p:[71,8,2370],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2424]}]}," ",{p:[73,8,2458],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2497]}," (",{t:2,r:"size",p:[74,23,2511]}," GQ)"]}," ",{p:[76,8,2552],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2595]}]}," ",{p:[79,8,2641],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2714]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2797],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2289]}]}],n:50,r:"data.hackedavailable",p:[66,4,2095]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1207]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1178]}," ",{p:[89,2,2866],t:7,e:"br"},{p:[89,6,2870],t:7,e:"br"},{p:[89,10,2874],t:7,e:"hr"},{p:[89,14,2878],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],425:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[6,2,76],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,122],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,165],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,168]}]}]}," ",{t:4,f:[{p:[12,4,239],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,279],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,282]}]}]}," ",{p:[15,4,352],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,385],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,480],t:7,e:"br"},{p:[21,8,484],t:7,e:"br"}," ",{p:[22,4,492],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,211]},{t:4,n:51,f:[{p:[24,4,627],t:7,e:"br"},{p:[24,8,631],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,722],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,768],t:7,e:"table",f:[{p:[32,3,778],t:7,e:"tr",f:[{p:[33,4,786],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,802],t:7,e:"th",f:["STATUS"]},{p:[35,4,816],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,830],t:7,e:"tr",f:[" ",{p:[37,4,838],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,864],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,868]}]},{p:[39,4,929],t:7,e:"td",f:[" ",{p:[39,9,934],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1012],t:7,e:"tr",f:[" ",{p:[41,4,1020],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1048],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1052]}]},{p:[43,4,1107],t:7,e:"td",f:[{p:[43,8,1111],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1189],t:7,e:"tr",f:[" ",{p:[45,4,1197],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1226],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1230]}]},{p:[47,4,1288],t:7,e:"td",f:[{p:[47,8,1292],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1370],t:7,e:"tr",f:[" ",{p:[49,4,1378],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1407],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1411]}]},{p:[51,4,1469],t:7,e:"td",f:[{p:[51,8,1473],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1576],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1642],t:7,e:"ui-notice",f:[{p:[59,5,1658],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1714],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1617]}," ",{p:[64,3,1839],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1890],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1893]}]}]}," ",{p:[68,3,1962],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2004],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2007]}]}]}," ",{p:[72,3,2054],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2103],t:7,e:"table",f:[{p:[75,4,2114],t:7,e:"tr",f:[{p:[75,8,2118],t:7,e:"td",f:[{p:[75,12,2122],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2176],t:7,e:"tr",f:[{p:[76,8,2180],t:7,e:"td",f:[{p:[76,12,2184],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2240],t:7,e:"tr",f:[{p:[77,8,2244],t:7,e:"td",f:[{p:[77,12,2248],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2311],t:7,e:"tr",f:[{p:[78,8,2315],t:7,e:"td",f:[{p:[78,12,2319],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2387],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2425],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2479],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2501],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2582]},{p:[86,15,2591],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2552]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],426:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,96],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,117],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,170],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,201]},{p:[9,48,215],t:7,e:"br"}," ",{p:[10,3,222],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,309],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,344],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,400],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,429]}]}," ",{p:[20,3,464],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,522],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,551]}," / ",{t:2,r:"data.download_size",p:[24,33,580]}," GQ"]}," ",{p:[26,3,617],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,672],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,701]},"GQ/s"]}," ",{p:[32,3,743],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,792],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,821],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,916],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1e3],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1029]}]}," ",{p:[46,3,1064],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1118],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1147]}]}," ",{p:[52,3,1183],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1239],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1268]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1359],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1408],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1437],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1501],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1599],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1662],t:7,e:"table",f:[{p:[72,3,1672],t:7,e:"tr",f:[{p:[72,7,1676],t:7,e:"th",f:["File name"]},{p:[72,20,1689],t:7,e:"th",f:["File size"]},{p:[72,33,1702],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1751],t:7,e:"tr",f:[{p:[74,8,1755],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1759]}]},{p:[75,4,1775],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1779]},"GQ"]},{p:[76,4,1793],t:7,e:"td",f:[{p:[76,8,1797],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1848]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1717]}]}]}]}," ",{p:[79,3,1903],t:7,e:"hr"}," ",{p:[80,3,1910],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,1973],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2034],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2062],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2114],t:7,e:"tr",f:[{p:[84,59,2118],t:7,e:"th",f:["Server UID"]},{p:[84,73,2132],t:7,e:"th",f:["File Name"]},{p:[84,86,2145],t:7,e:"th",f:["File Size"]},{p:[84,99,2158],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2181],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2226],t:7,e:"tr",f:[{p:[86,9,2230],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2234]}]},{p:[87,5,2246],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2250]}]},{p:[88,5,2267],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2271]},"GQ ",{t:4,f:[{p:[90,6,2311],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2286]}," ",{t:4,f:[{p:[93,6,2365],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2339]}]},{p:[96,5,2399],t:7,e:"td",f:[{p:[96,9,2403],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2456]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2199]}]}]}]}," ",{p:[99,3,2514],t:7,e:"hr"}," ",{p:[100,3,2521],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],427:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1040],t:7,e:"ntosheader"}," ",{p:[45,1,1055],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1111],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[47,27,1133]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1283]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1338]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1086]},{t:4,n:51,f:[{p:[52,5,1386],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1423],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1429]}]}]}," ",{p:[55,5,1474],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1508],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1514]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1579],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1608],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1632],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1668],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1706],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1780],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1821],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1861],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,1943],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,1962]}],nowrap:0},f:[{p:[72,7,1986],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2007]}," %"]}," ",{p:[73,7,2064],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2085]}]}," ",{p:[74,7,2126],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2147],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2160]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2189]}]}]}," ",{p:[75,7,2235],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2256],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2269]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2292]}," [",{p:[75,87,2315],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2321]}]},"]"]}]}," ",{p:[76,7,2369],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2390],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2403]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2426]}," [",{p:[76,87,2449],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2455]}]},"]"]}]}," ",{p:[77,7,2503],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2524],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2537]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2560]}," [",{p:[77,87,2583],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2589]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1918]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],428:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,96],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,150],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,179]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,255],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,303],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,332],t:7,e:"table",f:[{p:[21,4,343],t:7,e:"tr",f:[{p:[21,8,347],t:7,e:"td",f:[{p:[21,12,351],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,423],t:7,e:"tr",f:[{p:[22,8,427],t:7,e:"td",f:[{p:[22,12,431],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,466]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,500]}]}," ",{p:[23,4,549],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,584]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],429:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,91],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,110]}," Alarms"]},f:[{p:[6,5,133],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,164],t:7,e:"li",f:[{t:2,r:".",p:[8,13,168]}]}],n:52,r:".",p:[7,7,144]},{t:4,n:51,f:[{p:[10,9,202],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,61]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],430:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,399],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,436],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,490],t:7,e:"br"}," ",{p:[28,3,497],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,540],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,580],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,613]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,644]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,680]},"%"]}]}," ",{p:[32,3,730],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,768],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,781]}]},f:[{t:2,r:"data.SM_power",p:[33,55,818]}," MeV/cm3"]}]}," ",{p:[35,3,869],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,906],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,919]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,964]}," K"]}]}," ",{p:[38,3,1015],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1049],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1062]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1112]}," kPa"]}]}]}," ",{p:[42,3,1186],t:7,e:"hr"},{p:[42,7,1190],t:7,e:"br"}," ",{p:[43,3,1197],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1263],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1282]}]},f:[{t:2,r:"amount",p:[46,6,1298]}," %"]}],n:52,r:"data.gases",p:[44,4,1238]}]}],n:50,r:"data.active",p:[26,1,415]},{t:4,n:51,f:[{p:[51,2,1368],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1419],t:7,e:"br"}," ",{p:[52,2,1425],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1499],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1529]}," - (#",{t:2,r:"uid",p:[55,23,1547]},")"]}," ",{p:[57,3,1574],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1609]}," %"]}," ",{p:[60,3,1643],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1676],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1725]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1469]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(431)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,431:431}],431:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,40],t:7,e:"table",f:[{p:[2,9,47],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,110],t:7,e:"td",f:[{p:[4,7,114],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,124]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,53]}," ",{t:4,f:[{p:[7,3,220],t:7,e:"td",f:[{p:[7,7,224],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,227]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,160]}," ",{t:4,f:[{p:[10,3,296],t:7,e:"td",f:[{p:[10,7,300],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,310]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,268]}," ",{t:4,f:[{p:[13,3,374],t:7,e:"td",f:[{p:[13,7,378],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,388]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,344]}," ",{t:4,f:[{p:[16,3,454],t:7,e:"td",f:[{p:[16,7,458],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,461]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,424]}," ",{t:4,f:[{p:[19,3,534],t:7,e:"td",f:[{p:[19,7,538],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,548]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,499]}]}]}]}," ",{p:[23,1,587],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,632],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,720],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,775],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,686]}]}," ",{p:[30,1,852],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{341:341}],432:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,67],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,35]},{t:4,n:51,f:[{p:[5,7,168],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,259],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,289],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,295]},"-",{t:2,r:"data.status2",p:[9,26,312]}]}]}," ",{p:[11,1,350],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,379],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,423],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,429]}]}]}," ",{t:4,f:[{p:[16,5,525],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,565],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,598]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,768],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,799]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,971],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1003]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1134],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1164]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,504]}," ",{p:[26,3,1369],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1400],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1433]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1514]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1602]}]}]}]}," ",{p:[34,1,1680],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1713],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1735]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1810]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1860]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1918]}]}]}," ",{p:[41,1,1982],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2012],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2034]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2109]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2173]}]},f:[{p:[46,7,2220],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2226]}]}]}]}," ",{p:[49,1,2293],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2321],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2349]}]}," ",{p:[51,3,2381],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2413],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2447]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2531],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2565]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2649],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2683]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2767],t:7,e:"br"}," ",{p:[56,5,2776],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2810]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2894],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2928]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3012],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3046]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3130],t:7,e:"br"}," ",{p:[60,5,3139],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3173]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3257],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3291]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3375],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3409]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3493],t:7,e:"br"}," ",{p:[64,5,3502],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3536]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3620],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3654]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3738],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3772]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,24],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,111],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,162],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,273],t:7,e:"ui-display",f:[{p:[7,6,291],t:7,e:"ui-section",f:[{p:[7,18,303],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,306]}]}]}," ",{p:[8,6,337],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,349]}]}]}],n:52,r:"data.surgeries",p:[5,3,245]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,425],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,542],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,517]}," ",{p:[19,2,605],t:7,e:"ui-display",f:[{p:[20,3,620],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,683],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,715],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,728]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,756]}]}]}," ",{p:[25,5,807],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,844],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,866]}]}]}," ",{p:[28,5,923],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,956],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,969]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1002]}],value:[{t:2,r:"data.patient.health",p:[29,87,1037]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1074]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1125]}]}]}," ",{t:4,f:[{p:[33,6,1357],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1376]}]},f:[{p:[34,7,1394],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1415]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1450]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1486]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1193]}],n:50,r:"data.patient",p:[21,4,658]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1630],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1734],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1756]}]},f:[{p:[45,7,1773],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1811],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1833]}]}," ",{t:4,f:[{p:[48,9,1890],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1912],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1938],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1943]}]}],n:50,r:"chems_needed",p:[47,8,1861]}]}," ",{t:4,f:[{p:[52,8,2040],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2086],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2108]}]}," ",{t:4,f:[{p:[55,10,2178],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2200],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2226],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2231]}]}],n:50,r:"alt_chems_needed",p:[54,9,2144]}]}],n:50,r:"alternative_step",p:[51,7,2008]}]}],n:52,r:"data.procedures",p:[43,5,1703]}],n:50,r:"data.procedures",p:[42,4,1675]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117],
-t:7,e:"ui-section",f:["Current unclaimed credits: ",{t:2,r:"data.unclaimedPoints",p:[6,30,160]}," ",{p:[7,4,189],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim"]}]}]}," ",{p:[12,1,276],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,3,315],t:7,e:"ui-section",f:[{p:[15,4,332],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[20,4,460],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[21,5,496],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[21,42,533]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[21,129,620]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[24,10,676]},": ",{t:2,r:"name",p:[24,21,687]}]}],n:52,r:"data.diskDesigns",p:[19,3,429]}],n:50,r:"data.hasDisk",p:[13,2,291]},{t:4,n:51,f:[{p:[28,3,741],t:7,e:"ui-section",f:[{p:[29,4,758],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[36,2,911],t:7,e:"ui-display",f:[{p:[37,3,927],t:7,e:"ui-section",f:[{p:[38,4,944],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[38,20,960]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[35,1,883]},{t:4,f:[{p:[43,2,1100],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[44,3,1133],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[45,5,1168],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[48,5,1226],t:7,e:"section",a:{"class":"cell"},f:["Sheets"]}," ",{p:[51,5,1283],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[53,5,1327],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[55,5,1371],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[60,4,1473],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[61,5,1508],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[62,6,1537]}]}," ",{p:[64,5,1567],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[65,6,1610]}]}," ",{p:[67,5,1642],t:7,e:"section",a:{"class":"cell"},f:[{p:[68,6,1671],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[68,19,1684]}],placeholder:"###","class":"number"}}]}," ",{p:[70,5,1751],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[71,6,1794],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[71,60,1848]}],params:['{ "id" : ',{t:2,r:"id",p:[71,115,1903]},', "sheets" : ',{t:2,r:"sheets",p:[71,134,1922]}," }"]},f:["Release"]}]}," ",{p:[75,5,1993],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[76,6,2036]}]}]}],n:52,r:"data.materials",p:[59,3,1444]}," ",{t:4,f:[{p:[81,4,2119],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[82,5,2154],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[83,6,2183]}]}," ",{p:[85,5,2213],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[86,6,2256]}]}," ",{p:[88,5,2288],t:7,e:"section",a:{"class":"cell"},f:[{p:[89,6,2317],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[89,19,2330]}],placeholder:"###","class":"number"}}]}," ",{p:[91,5,2397],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[92,6,2440],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[92,58,2492]}],params:['{ "id" : ',{t:2,r:"id",p:[92,114,2548]},', "sheets" : ',{t:2,r:"sheets",p:[92,133,2567]}," }"]},f:["Smelt"]}]}," ",{p:[96,5,2635],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[80,3,2093]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[42,1,1060]}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,84],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,116]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,225],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,256]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,349],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,380]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,514],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,562],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,531]},{t:4,n:51,f:[{p:[19,6,626],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,692],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,722]}]}," ",{p:[22,8,761],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,792]}]}],n:50,r:"data.has_blood",p:[20,7,662]},{t:4,n:51,f:[{p:[24,8,847],t:7,e:"ui-section",f:[{p:[25,9,868],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[14,3,487]},{t:4,n:51,f:[{p:[32,4,1023],t:7,e:"ui-section",f:[{p:[33,5,1040],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1151],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1301],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1357]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1409]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1279]}," ",{p:[47,7,1492],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1554]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1609]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1230]}],button:0},f:[" ",{p:[51,6,1699],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1733]}]}," ",{p:[52,6,1761],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1793]}]}," ",{p:[53,6,1827],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1854]}]}," ",{p:[54,6,1883],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1917]}]}," ",{t:4,f:[{p:[56,7,1966],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2030],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2102]},', "index": ',{t:2,r:"index",p:[58,105,2126]},"}"]},f:[{t:2,r:"name",p:[59,10,2148]}," "]},{p:[60,21,2177],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2003]}]}," ",{p:[63,7,2227],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2258]}]}," ",{p:[64,7,2292],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2320]}]}," ",{p:[65,7,2351],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2383]}]}," ",{p:[66,7,2418],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2455]}]}],n:50,r:"is_adv",p:[55,6,1945]}]}],n:52,r:"data.viruses",p:[39,4,1184]},{t:4,n:51,f:[{p:[70,5,2532],t:7,e:"ui-section",f:[{p:[71,6,2550],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2669],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2735],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2754]}]},f:[{p:[78,7,2771],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2807]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2893]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2704]},{t:4,n:51,f:[{p:[83,5,2985],t:7,e:"ui-section",f:[{p:[84,6,3003],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[37,2,1126]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3142],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3237],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3256]}]},f:[{p:[95,4,3270],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3287]}," ",{t:4,f:[{p:[98,5,3320],t:7,e:"br"}," ",{p:[99,5,3330],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3299]}]}," ",{p:[102,4,3463],t:7,e:"ui-section",f:[{p:[103,5,3480],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3506]}]}," ",{p:[104,5,3533],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3564]}]}," ",{p:[105,5,3596],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3624]}]}," ",{p:[106,5,3653],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3685]}]}," ",{p:[107,5,3718],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3755]}]}]}," ",{p:[109,4,3805],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3851],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3863]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3211]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],436:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(484);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1295],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1314]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1358]}],n:50,r:"data.subcategory",p:[48,37,1331]}]},f:[{t:4,f:[{p:[50,3,1410],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1438],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1390]},{t:4,n:51,f:[{p:[54,3,1504],t:7,e:"ui-section",f:[{p:[55,4,1520],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1551],t:7,e:"tr",f:[{p:[57,6,1561],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1602],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1660]}]}]}," ",{p:[62,6,1713],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1754],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1811]}]}]}," ",{p:[67,6,1864],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,1946],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1904]},{t:4,n:51,f:[{p:[73,7,2066],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2191],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2232],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2249]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2391],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2430],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2471],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2532]}]}]}," ",{p:[91,6,2588],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2629],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2690]}]}]}],n:50,r:"data.subcategory",p:[85,5,2400]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2892],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,2909]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2803]}],n:50,r:"config.fancy",p:[99,4,2778]}]}," ",{t:4,f:[{p:[106,5,3039],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3086],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3105]}]},f:[{p:[109,7,3122],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3142]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3250]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3056]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3452],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3471]}]},f:[{p:[117,8,3489],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3509]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3420]}],n:51,r:"data.display_craftable_only",p:[114,5,3382]}]}],n:50,r:"data.display_compact",p:[105,4,3006]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3822],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3841]}]},f:[{t:4,f:[{p:[128,8,3882],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,3924]}]}],n:50,r:"req_text",p:[127,7,3858]}," ",{t:4,f:[{p:[133,8,4007],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4046]}]}],n:50,r:"catalyst_text",p:[132,7,3978]}," ",{t:4,f:[{p:[138,8,4130],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4165]}]}],n:50,r:"tool_text",p:[137,7,4105]}," ",{p:[142,7,4220],t:7,e:"ui-section",f:[{p:[143,8,4240],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4298]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3792]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4471],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4490]}]},f:[{t:4,f:[{p:[153,9,4533],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4576]}]}],n:50,r:"req_text",p:[152,8,4508]}," ",{t:4,f:[{p:[158,9,4663],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4703]}]}],n:50,r:"catalyst_text",p:[157,8,4633]}," ",{t:4,f:[{p:[163,9,4791],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4827]}]}],n:50,r:"tool_text",p:[162,8,4765]}]}],n:52,r:"data.cant_craft",p:[150,6,4439]}],n:51,r:"data.display_craftable_only",p:[149,5,4401]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{341:341,484:484}],437:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:[4,1,110],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,181],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,187]}," kPa"]}]}," ",{p:[8,3,247],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,277],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,290]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,331]}]}]}]}," ",{p:[12,1,419],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,447],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,478],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,495]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,545]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,601]}]}]}," ",{p:[18,3,658],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,693],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,710]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,789]}]}]}," ",{p:[22,3,862],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,903],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,916]}],max:[{t:2,r:"data.max_pressure",p:[23,46,944]}],value:[{t:2,r:"data.target_pressure",p:[24,14,980]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1006]}," kPa"]}]}," ",{p:[26,3,1075],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1119],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1152]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1300],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1331]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1470],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1564],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1594]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1853],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1884]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1826]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2e3],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2030]}]}," ",{p:[46,3,2070],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2103]}," kPa"]}],n:50,r:"data.holding",p:[42,3,1977]},{t:4,n:51,f:[{p:[50,3,2174],t:7,e:"ui-section",f:[{p:[51,4,2190],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{341:341}],438:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(457)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,457:457}],439:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,167],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,224],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,257],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,274]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,325]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,398]}]}]}],n:50,r:"data.headset",p:[12,3,199]},{t:4,n:51,f:[{p:[19,5,476],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,514],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,531]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,585]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,664]}]}]}," ",{p:[24,5,746],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,781],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,798]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,849]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,922]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1034],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1073],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1090]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1142]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1217]}]}]}],n:50,r:"data.command",p:[30,3,1009]}]}," ",{p:[38,1,1305],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1336],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1399],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1405]}]}],n:50,r:"data.freqlock",p:[40,5,1371]},{t:4,n:51,f:[{p:[43,7,1453],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1492]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1603],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1637]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1749],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1820]}]}," ",{p:[46,7,1860],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1893]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2004],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2042]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2212],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2261],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2278]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2328]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2395]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2176]}," ",{t:4,f:[{p:[57,5,2522],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2598],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2615]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2671]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2746]},'"}']},f:[{t:2,r:"channel",p:[62,11,2772]}]},{p:[62,34,2795],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2558]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2479]}]}]},e.exports=a.extend(r.exports)},{341:341}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,550],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,583],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,621],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,562]},{t:4,f:[{p:[18,2,712],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,727]}]},f:[{p:[19,3,745],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,772],t:7,e:"techweb"}]}," ",{p:[22,3,794],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,820],t:7,e:"nodeview"}]}," ",{p:[25,3,843],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,871],t:7,e:"designview"}]}," ",{p:[28,3,896],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,937],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,965],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1010],t:7,e:"diskopstech"}]}," ",{p:[34,3,1036],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1076],t:7,e:"destruct"}]}," ",{p:[37,3,1099],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1126],t:7,e:"protolathe"}]}," ",{p:[40,3,1151],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1185],t:7,e:"circuit"}]}," ",{p:[43,3,1207],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1232],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,690]}]},r.exports.components=r.exports.components||{};var i={settings:t(450),circuit:t(442),protolathe:t(448),destruct:t(444),diskopsdesign:t(445),diskopstech:t(446),designview:t(443),nodeview:t(447),techweb:t(451),rdheader:t(449)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,56],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,29]},{t:4,n:51,f:[{p:[5,3,126],t:7,e:"ui-display",f:[{p:[6,4,142],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,254],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,333]},"}"]},f:["Search"]}]}," ",{p:[10,4,389],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,412]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,435]}]}," ",{p:[11,4,475],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,497]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,521]}]}," ",{p:[12,3,561],t:7,e:"ui-display",f:[{p:[14,3,577],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,592]}]},f:[{p:[15,4,617],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,680],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,717]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,809]},'"}']},f:[{t:2,r:"name",p:[17,147,821]}]}],n:52,r:"data.circuitcats",p:[16,5,648]}]}," ",{p:[20,4,869],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,935],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,947]},{t:2,r:"matstring",p:[22,26,955]}," ",{p:[23,7,975],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1008]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1087]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,904]}]}," ",{p:[27,4,1161],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1226],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1238]},{t:2,r:"matstring",p:[29,26,1246]}," ",{p:[30,7,1266],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1299]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1378]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1193]}]}," ",{p:[34,4,1452],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1515],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1527]}," : ",{t:2,r:"amount",p:[36,29,1538]}," cm3 - ",{t:4,f:[{p:[38,7,1586],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1599]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1625]}],"class":"number"}}," ",{p:[39,7,1660],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1737]},', "sheets" : ',{t:2,
-r:"number",p:[39,107,1760]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1561]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1479]}]}," ",{p:[44,4,1852],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1916],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1928]}," : ",{t:2,r:"amount",p:[46,29,1939]}," - ",{p:[47,7,1959],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2032]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2049]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1879]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2162],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,30],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,49]}]},f:[{p:[3,3,75],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,107]}]}]}," ",{p:[5,2,158],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,233],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,193]}," ",{t:4,f:[{p:[10,4,337],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,297]}," ",{t:4,f:[{p:[13,4,434],t:7,e:"ui-section",a:{title:"Autolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,394]}," ",{t:4,f:[{p:[16,4,530],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,490]}," ",{t:4,f:[{p:[19,4,637],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&16"},p:[18,3,596]}," ",{t:4,f:[{p:[22,4,743],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,702]}," ",{t:4,f:[{p:[25,4,843],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,802]}," ",{t:4,f:[{p:[28,4,943],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128"},p:[27,3,901]}]}," ",{p:[31,2,1015],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1084],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1103]}]},f:[{t:2,r:"matamt",p:[33,36,1116]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1048]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1211],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1180]}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,57],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"}}],n:50,r:"data.destroybusy",p:[3,2,30]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,162],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,130]},{t:4,n:51,f:[{p:[9,4,240],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,276],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,301]}]}]}," ",{p:[12,4,356],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,425],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,444]}," | ",{t:2,r:"value",p:[14,36,455]}]},f:[{p:[15,7,473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,491]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,556]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,393]}]}," ",{p:[19,4,652],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,1]},{t:4,n:51,f:[{p:[23,2,733],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,116],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,88]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,213],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,250],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,296]}," blueprints."]}," ",{p:[11,5,345],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,373],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,453],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,484],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,579],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,610],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,703],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,776],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,804]},": ",{t:4,f:[{p:[19,8,848],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,910]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,820]},{t:4,n:51,f:[{p:[21,8,976],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1026]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1043]}]},f:[{t:2,r:"name",p:[21,122,1090]}]}," ",{p:[22,8,1118],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1184]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1201]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,742]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,183]},{t:4,n:51,f:[{p:[28,4,1340],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1382],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1484],t:7,e:"ui-section",f:[{p:[30,17,1496],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1551]},'"}']},f:[{t:2,r:"name",p:[30,82,1561]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1442]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,120],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,92]},{t:4,n:51,f:[{p:[8,3,191],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,231],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,259],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,327],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,397],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,428],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,520],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,551],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,640],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,709],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,757]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,774]}]},f:[{t:2,r:"display_name",p:[15,115,819]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,678]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,28],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,47]}]},f:[{p:[3,3,71],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,116]}]}," ",{p:[4,3,151],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,194]}]}," ",{p:[5,3,229],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,276]}]}," ",{p:[6,3,313],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,362]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,379]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,425]}]}]}," ",{p:[8,2,511],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,579],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,627]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,644]}]},f:[{t:2,r:"display_name",p:[10,114,689]}]}],n:52,r:"data.node_prereqs",p:[9,3,548]}]}," ",{p:[13,2,747],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,809],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,857]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,874]}]},f:[{t:2,r:"display_name",p:[15,114,919]}]}],n:52,r:"data.node_unlocks",p:[14,3,778]}]}," ",{p:[18,2,977],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1039],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1089]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1106]}]},f:[{t:2,r:"name",p:[20,118,1153]}]}],n:52,r:"data.node_designs",p:[19,3,1008]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1239],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1210]}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,32]},{t:4,n:51,f:[{p:[5,3,120],t:7,e:"ui-display",f:[{p:[6,4,136],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,177],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,190]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,248],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,325]},"}"]},f:["Search"]}]}," ",{p:[10,4,381],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,404]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,425]}]}," ",{p:[11,4,463],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,485]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,507]}]}," ",{p:[12,3,545],t:7,e:"ui-display",f:[{p:[14,3,561],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,576]}]},f:[{p:[15,4,601],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,662],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,699]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,781]},'"}']},f:[{t:2,r:"name",p:[17,137,793]}]}],n:52,r:"data.protocats",p:[16,5,632]}]}," ",{p:[20,4,841],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,905],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,917]},{t:2,r:"matstring",p:[22,26,925]}," ",{t:4,f:[{p:[24,8,973],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,986]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1012]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,945]}," ",{p:[26,7,1083],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1116]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1193]},'", "amount" : "',{t:2,r:"number",p:[26,138,1214]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,876]}]}," ",{p:[30,4,1292],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1355],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1367]},{t:2,r:"matstring",p:[32,26,1375]}," ",{t:4,f:[{p:[34,8,1423],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1436]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1462]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1395]}," ",{p:[36,7,1533],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1566]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1643]},'", "amount" : "',{t:2,r:"number",p:[36,138,1664]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1324]}]}," ",{p:[40,4,1742],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1803],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1815]}," : ",{t:2,r:"amount",p:[42,29,1826]}," cm3 - ",{t:4,f:[{p:[44,7,1874],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1887]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1913]}],"class":"number"}}," ",{p:[45,7,1948],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2023]},', "sheets" : ',{t:2,r:"number",p:[45,105,2046]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1849]}]}],n:52,r:"data.protomat_list",p:[41,5,1769]}]}," ",{p:[50,4,2138],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2200],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2212]}," : ",{t:2,r:"amount",p:[52,29,2223]}," - ",{p:[53,7,2243],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2314]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2331]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2165]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2444],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,13],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,65],t:7,e:"br"}," Available Points: ",{p:[3,19,89],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,125]}]}," ",{p:[4,1,170],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,206]}]},f:[{p:[4,47,216],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,229]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,290],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,333]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,44],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,99],t:7,e:"br"}," ",{p:[3,1,105],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,147],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,217]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,305],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,373]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,454],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,526]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,76],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,124]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,141]}]},f:[{t:2,r:"display_name",p:[3,113,186]}]}],n:52,r:"data.techweb_avail",p:[2,2,45]}]}," ",{p:[6,1,240],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,307],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,355]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,372]}]},f:[{t:2,r:"display_name",p:[8,113,417]}]}],n:52,r:"data.techweb_locked",p:[7,2,275]}]}," ",{p:[11,1,472],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,547],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,595]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,612]}]},f:[{t:2,r:"display_name",p:[13,113,657]}]}],n:52,r:"data.techweb_researched",p:[12,2,511]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,24],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,201],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,232]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,355],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,389],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,402]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,443]}]}," ",{p:[12,2,489],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,522]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,640],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,739],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,786]}]},{p:[17,71,801],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,702]},{t:4,n:51,f:[{p:[19,9,830],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,674]},{t:4,n:51,f:[{p:[22,7,890],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1020],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1051]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1173],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1241],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1247]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1289]}," Units"]}," ",{p:[33,7,1333],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1384],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1427]}," units of ",{t:2,r:"name",p:[35,87,1462]}]},{p:[35,102,1477],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1345]},{t:4,n:51,f:[{p:[37,9,1506],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1207]},{t:4,n:51,f:[{p:[40,7,1582],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,248]},"-",{t:2,r:"icon_state",p:[6,88,256]}],title:[{t:2,r:"dir_name",p:[6,111,279]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}," ",{t:4,f:[{p:[12,2,395],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,455],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,473]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,569]},"}"]},f:[{t:2,r:"@key",p:[15,55,580]}]}],n:52,r:"data.paint_colors",p:[13,3,424]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,367]},{p:[19,1,636],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,668],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,685]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,792],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,809]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,917],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,934]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1072],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1089]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1043]}]}," ",{p:[31,1,1219],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1250],t:7,e:"ui-section",f:[{p:[33,3,1265],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1282]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1345]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1462],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1479]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1542]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1673]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1736]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1897],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1934],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1952]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2072],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2090]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2210],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2228]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1868]}]}," ",{t:4,f:[{p:[52,2,2411],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2430]}]},f:[{t:4,f:[{p:[54,4,2468],t:7,e:"ui-section",f:[{p:[55,5,2485],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2503]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2583]},', "category": ',{t:2,r:"cat_name",p:[56,56,2611]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2626]}]}]}],n:52,r:"recipes",p:[53,3,2447]}]}],n:52,r:"data.categories",p:[51,1,2384]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,76]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,152]},"}"]},f:[{t:2,r:"color_name",p:[4,45,169]}]}],n:52,r:"data.paint_colors",p:[2,2,28]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,239]},".",{t:2,r:"icon_state",p:[6,79,247]},".png"],title:[{t:2,r:"dir_name",p:[6,106,274]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,161],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,201],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,223]}]}," ",{p:[10,9,244],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,265]}]}," ",{p:[11,9,288],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,320],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,363]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,373]}]}]}]}],n:52,r:"data.satellites",p:[7,2,132]}]}," ",{t:4,f:[{p:[18,1,511],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,558],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,579]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,623]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,656]}," %"]}," ",{p:[20,1,739],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,484]}]},e.exports=a.extend(r.exports)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,42]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,94]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,174]},'", "val": ',{t:2,r:"gas_id",p:[3,68,194]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,207]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],458:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,196],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,211]}]},f:[{p:[6,2,228],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,250],t:7,e:"status"}]}," ",{p:[9,2,269],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,294],t:7,e:"templates"}]}," ",{p:[12,2,316],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,368],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,344]}," ",{t:4,f:[{p:[17,3,421],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,396]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(459),templates:t(461),status:t(460)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,459:459,460:460,461:461}],459:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,94],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,126]}]}],n:50,r:"data.selected.description",p:[2,3,56]}," ",{t:4,f:[{p:[6,5,219],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,251]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,181]}]}," ",{t:4,f:[{p:[11,3,351],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,388]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,433]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,513]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,470]}," ",{p:[16,5,565],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,633]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,319]},{t:4,f:[{p:[24,3,755],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,722]},{p:[27,1,821],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,875]},'"}']},f:["Preview"]}," ",{p:[31,1,931],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,982]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1053],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,47],t:7,e:"tr",f:[{p:[4,5,56],t:7,e:"td",f:[{p:[5,7,67],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,129]},'"}']},f:["JMP"]}]}," ",{p:[9,5,185],t:7,e:"td",f:[{p:[10,7,196],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,236]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,253]}]},f:["Fly"]}]}," ",{p:[14,5,332],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,343]}," (",{p:[15,17,353],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,359]}]},")"]}," ",{p:[17,5,388],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,399]}]}," ",{p:[20,5,424],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,456]}],n:50,r:"mode",p:[21,7,435]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,508]},") ",{p:[26,9,530],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,578]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,595]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,485]}]}]}],n:52,r:"data.shuttles",p:[2,1,21]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,72],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,83]}]},f:[{t:4,f:[{p:[5,9,131],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,150]}]},f:[{t:4,f:[{p:[7,13,203],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,235]}]}],n:50,r:"description",p:[6,11,171]}," ",{t:4,f:[{p:[10,13,324],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,356]}]}],n:50,r:"admin_notes",p:[9,11,292]}," ",{p:[13,11,414],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,486]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,523]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,614]}]}]}],n:52,r:"templates",p:[4,7,103]}]}],n:52,r:"data.templates",p:[2,3,43]}]}]},e.exports=a.extend(r.exports)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{
-label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW ":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{t:4,f:[{p:[35,3,2083],t:7,e:"ui-section",a:{label:"Failing Organs"},f:[{t:4,f:[{p:[37,5,2167],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"name",p:[37,24,2186]}]}],n:52,r:"data.occupant.failing_organs",p:[36,4,2123]}]}],n:50,r:"data.occupant.failing_organs",p:[34,2,2043]}," ",{p:[41,5,2249],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[43,11,2336],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[43,54,2379]}," units of ",{t:2,r:"name",p:[43,89,2414]}]},{p:[43,104,2429],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[42,9,2291]},{t:4,n:51,f:[{p:[45,11,2464],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[50,1,2560],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[51,2,2592],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[52,5,2623],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[52,22,2640]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[52,71,2689]}]}]}," ",{p:[55,3,2756],t:7,e:"ui-section",a:{label:"Synthesize"},f:[{t:4,f:[{p:[57,7,2826],t:7,e:"ui-button",a:{grid:0,state:[{t:2,x:{r:["synth_allowed"],s:'_0?null:"disabled"'},p:[57,30,2849]}],action:"synth",params:['{"chem": "',{t:2,r:"id",p:[57,102,2921]},'"}']},f:[{t:2,r:"name",p:[57,112,2931]}]}],n:52,r:"data.synthchems",p:[56,5,2793]}]}," ",{p:[61,3,2989],t:7,e:"ui-section",a:{label:"Inject"},f:[{p:[62,2,3019],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[63,3,3052],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[64,4,3086],t:7,e:"section",a:{"class":"compressedcell"},f:["Name"]}," ",{p:[68,4,3150],t:7,e:"section",a:{"class":"compressedcell"},f:["Volume"]}," ",{t:4,f:[{p:[73,5,3250],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[74,6,3289],t:7,e:"span",f:["Purity"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[72,4,3216]}," ",{t:4,f:[{p:[79,5,3377],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[78,4,3343]}," ",{t:4,f:[{p:[84,5,3478],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=2"},p:[83,4,3444]}," ",{p:[88,4,3545],t:7,e:"section",a:{"class":"compressedcell"},f:[]}," ",{p:[91,4,3599],t:7,e:"section",a:{"class":"compressedcell"},f:[]}]}," ",{t:4,f:[{p:[96,4,3691],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[97,5,3726],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[98,6,3765],t:7,e:"span",f:[{p:[98,12,3771],t:7,e:"b",f:[{t:2,r:"name",p:[98,15,3774]}]}]}]}," ",{p:[101,5,3817],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[102,6,3871],t:7,e:"span",f:[{t:2,r:"vol",p:[102,12,3877]},"u"]}]}," ",{t:4,f:[{p:[106,6,3953],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[107,7,4008],t:7,e:"span",f:[{t:2,r:"purity",p:[107,13,4014]}]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[105,7,3918]}," ",{t:4,f:[{p:[112,6,4106],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[113,7,4146],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[113,25,4164]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[113,109,4248]},'", "volume": 1}']},f:["1"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[111,5,4071]}," ",{t:4,f:[{p:[118,6,4358],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[119,7,4398],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[119,25,4416]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[119,109,4500]},'", "volume": 5}']},f:["5"]}]}],n:50,x:{r:["adata.efficiency"],s:"_0>=2"},p:[117,5,4322]}," ",{p:[123,5,4574],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[124,6,4613],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[124,24,4631]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[124,108,4715]},'", "volume": 10}']},f:["10"]}]}," ",{p:[127,5,4777],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[128,6,4816],t:7,e:"ui-button",a:{action:"purge",params:['{"chem": "',{t:2,r:"id",p:[128,50,4860]},'"}']},f:["Purge"]},{p:[128,77,4887],t:7,e:"br"}]}]}],n:52,r:"data.chems",p:[95,3,3666]}]}]}," ",{p:[135,3,4968],t:7,e:"ui-section",a:{label:"Capacity"},f:[{p:[136,5,5003],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.tot_capacity",p:[136,24,5022]}],value:[{t:2,r:"data.current_vol",p:[136,54,5052]}],state:[{t:2,r:"data.current_vol",p:[137,12,5086]}]},f:[{t:2,r:"data.current_vol",p:[137,34,5108]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,43]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,65]}],candystripe:0,right:0},f:[{p:[3,5,103],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,130],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,143]}]},f:[{t:2,r:"status",p:[3,132,230]}]}]}," ",{p:[4,5,265],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,291]}]}," ",{p:[5,5,324],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,353]}]}," ",{p:[7,5,380],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,404]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,464]},'"}']},f:[{t:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,482]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,554]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,79],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,96]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,144]}]}],n:50,r:"data.isdryer",p:[4,3,59]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,252],t:7,e:"ui-notice",f:[{p:[8,5,268],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,294]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,216]},{t:4,n:51,f:[{p:[11,1,349],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,380],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,413],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,467],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,525],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,589]}],n:50,r:"data.verb",p:[20,5,572]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,680],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,713],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,740]}]}," ",{p:[28,4,766],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,807]}]}," ",{p:[31,4,835],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,878],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,915],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,943],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,982]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1039]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1114],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1142],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1181]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1237]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,654]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,640],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,671],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,710],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,743]}],state:[{t:2,r:"capacityPercentState",p:[26,71,776]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,802]},"%"]}]}]}," ",{p:[29,1,880],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,909],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,946],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,963]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1015]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1082]}]}," [",{p:[34,6,1149],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1162]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1178]}]},"]"]}," ",{p:[36,3,1300],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1338],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1359]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1390]}]},f:[{t:2,r:"adata.inputLevel_text",p:[37,78,1411]}]}]}," ",{p:[39,3,1463],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1501],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1540]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1634],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1668]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1763],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1852],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1885]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,1996],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2034]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2159],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2192],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2198]}]}]}]}," ",{p:[50,1,2259],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2289],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2326],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2343]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2398]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2467]}]}," [",{p:[55,6,2533],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2546]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2563]}]},"]"]}," ",{p:[57,3,2668],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2707],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2728]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2760]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2782]}]}]}," ",{p:[60,3,2835],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2874],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2913]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3009],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3043]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3140],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3230],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3263]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3377],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3415]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3543],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3577],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3583]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,32],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,71],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,101],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,118]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,170]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,218]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,280]}]}]}," ",{p:[10,3,345],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,391],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,437],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,467]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,520]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,622],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,652]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,705]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,807],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,837]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,890]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,992],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1022]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1075]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1178],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1208]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1261]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1392],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1456],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1462]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1502]}," Units"]}," ",{p:[22,6,1543],t:7,e:"br"}," ",{p:[23,5,1553],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1599],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1642]}," units of ",{t:2,r:"name",p:[25,85,1677]}]},{p:[25,100,1692],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1564]}],n:50,r:"data.isTankLoaded",p:[20,4,1425]},{t:4,n:51,f:[{p:[28,6,1730],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1780],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1797]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1851]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1905]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1967]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1507],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1602],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1690],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1776],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1869],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2051],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2130],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2169],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2182]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2227]},"Found"]}]}," ",{p:[43,2,2296],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2345]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2389]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],468:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,84],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,115]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,60]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,220],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,251],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,268]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,318]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,358]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,422]}]}]}," ",{p:[12,3,479],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,541],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,574]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,595]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,509]},{t:4,n:51,f:[{p:[16,4,652],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,725],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,759],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,802],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,808]},"°C"]}]}," ",{p:[24,2,871],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,913],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,919]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1004],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1045],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1084]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1189],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1223]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1327],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1419],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1452]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1555],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1593]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,982]}," ",{p:[36,3,1719],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1771],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1810]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1918],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1959]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2067],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2101]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1747]},{t:4,n:51,f:[{p:[42,4,2217],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2223]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,30],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,49]}," Alarms"]},f:[{p:[3,5,72],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,103],t:7,e:"li",f:[{t:2,r:".",p:[5,13,107]}]}],n:52,r:".",p:[4,7,83]},{t:4,n:51,f:[{p:[7,9,141],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],471:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,41],t:7,e:"ui-notice",f:[{p:[3,5,57],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,173],t:7,e:"ui-notice",f:[{p:[8,5,189],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,148]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,357],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,374]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,425]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,339]}," ",{t:4,f:[{p:[14,27,506],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,523]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,577]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,486]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,676],t:7,e:"ui-notice",f:[{p:[18,9,696],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,650]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,773],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,811],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,828]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,875]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,970]}]}]}," ",{p:[25,9,1039],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1075],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1092]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1138]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1229]}]}]}," ",{p:[29,9,1296],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1349]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1395]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1486]}]}]}," ",{p:[33,9,1553],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1592],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1609]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1658]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1755]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1836],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1869]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{341:341}],472:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,17],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,55],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,72]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,120]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,193]},")"]}," ",{p:[5,9,243],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,260]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,308]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,381]},")"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],473:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,282],t:7,e:"ui-notice",f:[{p:[15,3,296],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,316]}," connected to a mask."]}]}," ",{p:[17,1,393],t:7,e:"ui-display",f:[{p:[18,3,408],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,449],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,483]}],state:[{t:2,r:"tankPressureState",p:[20,16,521]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,544]}," kPa"]}]}," ",{p:[22,3,610],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,652],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,665]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,699]}],value:[{t:2,r:"data.releasePressure",p:[24,14,741]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,767]}," kPa"]}]}," ",{p:[26,3,836],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,880],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,913]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1067],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1098]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1243],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1337],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1367]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],474:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,32],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,73],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,79]}," K"]}]}," ",{p:[5,5,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,185],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,191]}," kPa"]}]}]}," ",{p:[9,1,268],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,302],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,337],t:7,e:"ui-button",a:{icon:[{
-t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,354]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,398]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,458]}]}]}," ",{p:[14,5,518],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,566],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,605]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,717],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,751]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,862],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,932]}]}," ",{p:[20,9,984],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1017]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1127],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1165]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,161],t:7,e:"ui-notice",f:[{p:[14,2,174],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,207],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,236],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,340],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,381],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,434],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,411]},{t:4,n:51,f:[{p:[25,4,480],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,493]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,522]}]}],r:"data.broken"}," ",{p:[27,3,630],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,659],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,712]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,736]}]},f:["On"]}," ",{p:[29,4,789],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,839]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,863]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,958],t:7,e:"br"}," [ ",{p:[33,6,968],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,925]}," ",{t:4,f:[{p:[36,4,1062],t:7,e:"br"}," [ ",{p:[37,6,1072],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1032]}]}]}," ",{p:[41,1,1160],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1189],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1226],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1232]}," RPM"]}]}," ",{p:[45,2,1293],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1330],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1336]}," K"]}]}," ",{p:[48,2,1396],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1435],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1441]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,460],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,432]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,543],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,587],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,600]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,644]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,734],t:7,e:"ui-display",f:[{p:[32,2,748],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,797]},'"}']},f:[{t:2,r:"name",p:[32,63,809]}]}," ",{t:4,f:[{p:[34,4,850],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,869]}],candystripe:0,right:0},f:[{p:[35,3,900],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,920]},": ",{t:2,r:"desc",p:[35,33,930]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,971]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1129]},'", "item": ',{t:2,r:"name",p:[37,63,1152]},', "cost": ',{t:2,r:"cost",p:[37,81,1170]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[38,43,1223]}," TC"]}]}],n:52,r:"items",p:[33,2,831]}]}],n:52,r:"data.categories",p:[30,1,706]}]},e.exports=a.extend(r.exports)},{341:341}],477:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{t:4,f:[{p:[26,5,586],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[27,6,620]}]}," ",{p:[29,5,670],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[30,6,704],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[30,27,725]}],value:[{t:2,r:"adata.vr_avatar.health",p:[30,65,763]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[30,100,798]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[30,141,839]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[30,180,878]}]}]}],n:50,r:"data.isliving",p:[25,4,559]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[35,3,979],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[39,2,1075],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[40,3,1111],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[40,20,1128]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[41,4,1195]}," the VR Sleeper"]}," ",{t:4,f:[{p:[44,4,1297],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[43,3,1269]}," ",{t:4,f:[{p:[49,4,1420],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[48,3,1393]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,40],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,59]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,68]}],labelcolor:[{t:2,r:"color",p:[3,80,115]}],candystripe:0,right:0},f:[{p:[4,7,151],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,192]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,205]}]}," ",{p:[5,7,248],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,291]},'"}']},f:["Pulse"]}," ",{p:[6,7,328],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,372]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,385]}]}]}],n:52,r:"data.wires",p:[2,3,15]}]}," ",{t:4,f:[{p:[11,3,498],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,543],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,555]}]}],n:52,r:"data.status",p:[12,5,515]}]}],n:50,r:"data.status",p:[10,1,476]}]},e.exports=a.extend(r.exports)},{341:341}],479:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(480),i=e.interopRequireDefault(r),o=t(481),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(485)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(482),text:t(486),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,327:327,328:328,329:329,330:330,331:331,341:341,480:480,481:481,482:482,485:485,486:486,"babel/external-helpers":"babel/external-helpers"}],480:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(481),a=t(483);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),firealarm:t(397),gps:t(398),gulag_console:t(399),gulag_item_reclaimer:t(400),holodeck:t(401),implantchair:t(402),intellicard:t(403),keycard_auth:t(404),labor_claim_console:t(405),language_menu:t(406),launchpad_remote:t(407),mech_bay_power_console:t(408),mulebot:t(409),nanite_chamber_control:t(410),nanite_cloud_control:t(411),nanite_program_hub:t(412),nanite_programmer:t(413),nanite_remote:t(414),notificationpanel:t(415),ntnet_relay:t(416),ntos_ai_restorer:t(417),ntos_card:t(418),ntos_configuration:t(419),ntos_file_manager:t(420),ntos_main:t(421),ntos_net_chat:t(422),ntos_net_dos:t(423),ntos_net_downloader:t(424),ntos_net_monitor:t(425),ntos_net_transfer:t(426),ntos_power_monitor:t(427),ntos_revelation:t(428),ntos_station_alert:t(429),ntos_supermatter_monitor:t(430),ntosheader:t(431),nuclear_bomb:t(432),operating_computer:t(433),ore_redemption_machine:t(434),pandemic:t(435),personal_crafting:t(436),portable_pump:t(437),portable_scrubber:t(438),power_monitor:t(439),radio:t(440),rdconsole:t(441),"rdconsole/circuit":t(442),"rdconsole/designview":t(443),"rdconsole/destruct":t(444),"rdconsole/diskopsdesign":t(445),"rdconsole/diskopstech":t(446),"rdconsole/nodeview":t(447),"rdconsole/protolathe":t(448),"rdconsole/rdheader":t(449),"rdconsole/settings":t(450),"rdconsole/techweb":t(451),reagentgrinder:t(452),rpd:t(453),"rpd/colorsel":t(454),"rpd/dirsel":t(455),sat_control:t(456),scrubbing_types:t(457),shuttle_manipulator:t(458),"shuttle_manipulator/modification":t(459),"shuttle_manipulator/status":t(460),"shuttle_manipulator/templates":t(461),sleeper:t(462),slime_swap_body:t(463),smartvend:t(464),smes:t(465),smoke_machine:t(466),solar_control:t(467),space_heater:t(468),spawners_menu:t(469),station_alert:t(470),suit_storage_unit:t(471),tank_dispenser:t(472),tanks:t(473),thermomachine:t(474),turbine_computer:t(475),uplink:t(476),vr_sleeper:t(477),wires:t(478)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1819],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1829]}]}," ",{p:[57,1,1859],t:7,e:"main",f:[{p:[58,3,1868],t:7,e:"warnings"}," ",{p:[59,3,1882],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1929],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1903]}]},r.exports.components=r.exports.components||{};var i={warnings:t(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,478:478,481:481,483:483}],481:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],482:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],483:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(481)},{481:481}],484:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],485:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],486:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(p){r("throw",p)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(p){return void n(p)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=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")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=0?"good":"average"'},p:[14,16,619]}]},f:[{t:2,r:"data.occupant.health",p:[14,68,671]}]}]}," ",{t:4,f:[{p:[17,7,892],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[17,26,911]}]},f:[{p:[18,9,931],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[18,30,952]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,66,988]}],state:"bad"},f:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[18,103,1025]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[16,5,727]}],n:50,r:"data.hasOccupant",p:[5,3,155]}]}," ",{p:[23,1,1116],t:7,e:"ui-display",a:{title:"Cell"},f:[{p:[24,3,1144],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[25,5,1175],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOperating"],s:'_0?"power-off":"close"'},p:[25,22,1192]}],style:[{t:2,x:{r:["data.isOperating"],s:'_0?"selected":null'},p:[26,14,1251]}],state:[{t:2,x:{r:["data.isOpen"],s:'_0?"disabled":null'},p:[27,14,1306]}],action:"power"},f:[{t:2,x:{r:["data.isOperating"],s:'_0?"On":"Off"'},p:[28,22,1364]}]}]}," ",{p:[30,3,1430],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[31,3,1465],t:7,e:"span",a:{"class":[{t:2,r:"data.temperaturestatus",p:[31,16,1478]}]},f:[{t:2,r:"data.cellTemperature",p:[31,44,1506]}," K"]}]}," ",{p:[33,2,1556],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[34,5,1586],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isOpen"],s:'_0?"unlock":"lock"'},p:[34,22,1603]}],action:"door"},f:[{t:2,x:{r:["data.isOpen"],s:'_0?"Open":"Closed"'},p:[34,73,1654]}]}," ",{p:[35,5,1706],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoEject"],s:'_0?"sign-out":"sign-in"'},p:[35,22,1723]}],action:"autoeject"},f:[{t:2,x:{r:["data.autoEject"],s:'_0?"Auto":"Manual"'},p:[35,86,1787]}]}]}]}," ",{p:{button:[{p:[40,5,1928],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.isBeakerLoaded"],s:'_0?null:"disabled"'},p:[40,36,1959]}],action:"ejectbeaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{p:[42,3,2060],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[45,9,2167],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,r:"volume",p:[45,52,2210]}," units of ",{t:2,r:"name",p:[45,72,2230]}]},{p:[45,87,2245],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[44,7,2128]},{t:4,n:51,f:[{p:[47,9,2274],t:7,e:"span",a:{"class":"bad"},f:["Beaker Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[43,5,2094]},{t:4,n:51,f:[{p:[50,7,2347],t:7,e:"span",a:{"class":"average"},f:["No Beaker"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],388:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,14],t:7,e:"ui-section",a:{label:"State"},f:[{t:4,f:[{p:[4,4,73],t:7,e:"span",a:{"class":"good"},f:["Ready"]}],n:50,r:"data.full_pressure",p:[3,3,43]},{t:4,n:51,f:[{t:4,f:[{p:[7,5,147],t:7,e:"span",a:{"class":"bad"},f:["Power Disabled"]}],n:50,r:"data.panel_open",p:[6,4,119]},{t:4,n:51,f:[{t:4,f:[{p:[10,6,239],t:7,e:"span",a:{"class":"average"},f:["Pressurizing"]}],n:50,r:"data.pressure_charging",p:[9,5,203]},{t:4,n:51,f:[{p:[12,6,299],t:7,e:"span",a:{"class":"bad"},f:["Off"]}],r:"data.pressure_charging"}],r:"data.panel_open"}],r:"data.full_pressure"}]}," ",{p:[17,2,377],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[18,3,409],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.per",p:[18,36,442]}],state:"good"},f:[{t:2,r:"data.per",p:[18,63,469]},"%"]}]}," ",{p:[20,5,511],t:7,e:"ui-section",a:{label:"Handle"},f:[{p:[21,9,547],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.flush"],s:'_0?"toggle-on":"toggle-off"'},p:[22,10,568]}],state:[{t:2,x:{r:["data.isai","data.panel_open"],s:'_0||_1?"disabled":null'},p:[23,11,625]}],action:[{t:2,x:{r:["data.flush"],s:'_0?"handle-0":"handle-1"'},p:[24,12,691]}]},f:[{t:2,x:{r:["data.flush"],s:'_0?"Disengage":"Engage"'},p:[25,5,739]}]}]}," ",{p:[27,2,811],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[28,3,840],t:7,e:"ui-button",a:{icon:"sign-out",state:[{t:2,x:{r:["data.isai"],s:'_0?"disabled":null'},p:[28,37,874]}],action:"eject"},f:["Eject Contents"]},{p:[28,114,951],t:7,e:"br"}]}," ",{p:[30,2,973],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,3,1002],t:7,e:"ui-button",a:{icon:"power-off",state:[{t:2,x:{r:["data.panel_open"],s:'_0?"disabled":null'},p:[31,38,1037]}],action:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"pump-0":"pump-1"'},p:[31,87,1086]}],style:[{t:2,x:{r:["data.pressure_charging"],s:'_0?"selected":null'},p:[31,145,1144]}]}},{p:[31,206,1205],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],389:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"DNA Vault Database"},f:[{p:[2,3,42],t:7,e:"ui-section",a:{label:"Human DNA"},f:[{p:[3,7,79],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.dna_max",p:[3,28,100]}],value:[{t:2,r:"data.dna",p:[3,53,125]}]},f:[{t:2,r:"data.dna",p:[3,67,139]},"/",{t:2,r:"data.dna_max",p:[3,80,152]}," Samples"]}]}," ",{p:[5,3,204],t:7,e:"ui-section",a:{label:"Plant Data"},f:[{p:[6,5,240],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.plants_max",p:[6,26,261]}],value:[{t:2,r:"data.plants",p:[6,54,289]}]},f:[{t:2,r:"data.plants",p:[6,71,306]},"/",{t:2,r:"data.plants_max",p:[6,87,322]}," Samples"]}]}," ",{p:[8,3,377],t:7,e:"ui-section",a:{label:"Animal Data"},f:[{p:[9,5,414],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.animals_max",p:[9,26,435]}],value:[{t:2,r:"data.animals",p:[9,55,464]}]},f:[{t:2,r:"data.animals",p:[9,73,482]},"/",{t:2,r:"data.animals_max",p:[9,90,499]}," Samples"]}]}]}," ",{t:4,f:[{p:[13,1,604],t:7,e:"ui-display",a:{title:"Personal Gene Therapy"},f:[{p:[14,3,650],t:7,e:"ui-section",f:[{p:[15,2,664],t:7,e:"span",f:["Applicable gene therapy treatments:"]}]}," ",{p:[17,3,731],t:7,e:"ui-section",f:[{p:[18,2,745],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceA",p:[18,47,790]},'"}']},f:[{t:2,r:"data.choiceA",p:[18,67,810]}]}," ",{p:[19,2,840],t:7,e:"ui-button",a:{action:"gene",params:['{"choice": "',{t:2,r:"data.choiceB",p:[19,47,885]},'"}']},f:[{t:2,r:"data.choiceB",p:[19,67,905]}]}]}]}],n:50,x:{r:["data.completed","data.used"],s:"_0&&!_1"},p:[12,1,567]}]},e.exports=a.extend(r.exports)},{341:341}],390:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,32],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,64],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,70]}]}]}," ",{t:4,f:[{p:[6,5,178],t:7,e:"ui-section",a:{label:"Items in storage"},f:[{p:[7,4,219],t:7,e:"span",f:[{t:2,r:"data.items",p:[7,10,225]}]}]}],n:50,r:"data.items",p:[5,3,155]}," ",{t:4,f:[{p:[11,5,300],t:7,e:"ui-section",a:{label:"State"},f:[{p:[12,7,333],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[12,20,346]}]},f:[{t:2,r:"data.occupant.stat",p:[12,49,375]}]}]}," ",{p:[14,5,426],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[15,7,460],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[15,20,473]}],max:[{t:2,r:"data.occupant.maxHealth",p:[15,54,507]}],value:[{t:2,r:"data.occupant.health",p:[15,90,543]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[16,16,584]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[16,68,636]}]}]}," ",{t:4,f:[{p:[19,7,870],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[19,26,889]}]},f:[{p:[20,9,909],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[20,30,930]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[20,66,966]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[20,103,1003]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[18,5,705]}," ",{p:[23,5,1087],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[24,9,1122],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[24,22,1135]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[24,68,1181]}]}]}," ",{p:[26,5,1262],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[27,9,1297],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[27,22,1310]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[27,68,1356]}]}]}," ",{p:[29,5,1438],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[31,11,1523],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[31,54,1566]}," units of ",{t:2,r:"name",p:[31,89,1601]}]},{p:[31,104,1616],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[30,9,1479]},{t:4,n:51,f:[{p:[33,11,1649],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[10,3,274]}]}," ",{p:[38,1,1740],t:7,e:"ui-display",a:{title:"Operations"},f:[{p:[39,3,1774],t:7,e:"ui-section",a:{label:"Inject"},f:[{t:4,f:[{p:[41,7,1832],t:7,e:"ui-button",a:{icon:"flask",state:[{t:2,x:{r:["data.occupied"],s:'_0?null:"disabled"'},p:[41,38,1863]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[41,111,1936]},'"}']},f:[{t:2,r:"name",p:[41,121,1946]}]},{p:[41,141,1966],t:7,e:"br"}],n:52,r:"data.chem",p:[40,5,1806]}]}," ",{p:[44,2,2003],t:7,e:"ui-section",a:{label:"Eject"},f:[{p:[45,6,2035],t:7,e:"ui-button",a:{icon:"sign-out",action:"eject"},f:["Eject Contents"]}]}," ",{p:[47,2,2120],t:7,e:"ui-section",a:{label:"Self Cleaning"},f:[{p:[48,3,2157],t:7,e:"ui-button",a:{icon:"recycle",action:"cleaning"},f:["Self-Clean Cycle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],391:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,23],t:7,e:"ui-display",a:{title:[{t:2,r:"data.question",p:[2,21,41]}]},f:[{p:[3,5,64],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,9,114],t:7,e:"ui-button",a:{action:"vote",params:['{"answer": "',{t:2,r:"answer",p:[6,45,169]},'"}'],style:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[7,18,200]}]},f:[{t:2,r:"answer",p:[7,53,235]}," (",{t:2,r:"amount",p:[7,65,247]},")"]}],n:52,r:"data.answers",p:[4,7,83]}]}]}],n:50,r:"data.shaking",p:[1,1,0]},{t:4,n:51,f:[{p:[13,3,341],t:7,e:"ui-notice",f:["The eightball is not currently being shaken."]}],r:"data.shaking"}]},e.exports=a.extend(r.exports)},{341:341}],392:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,5,16],t:7,e:"span",f:["Time Until Launch: ",{t:2,r:"data.timer_str",p:[2,30,41]}]}]}," ",{p:[4,1,80],t:7,e:"ui-notice",f:[{p:[5,3,94],t:7,e:"span",f:["Engines: ",{t:2,x:{r:["data.engines_started"],s:'_0?"Online":"Idle"'},p:[5,18,109]}]}]}," ",{p:[7,1,174],t:7,e:"ui-display",a:{title:"Early Launch"},f:[{p:[8,2,209],t:7,e:"span",f:["Authorizations Remaining: ",{t:2,x:{r:["data.emagged","data.authorizations_remaining"],s:'_0?"ERROR":_1'},p:[9,2,242]}]}," ",{p:[10,2,309],t:7,e:"ui-button",a:{icon:"exclamation-triangle",action:"authorize",style:"danger",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[12,10,393]}]},f:["AUTHORIZE"]}," ",{p:[15,2,459],t:7,e:"ui-button",a:{icon:"minus",action:"repeal",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[16,10,508]}]},f:["Repeal"]}," ",{p:[19,2,571],t:7,e:"ui-button",a:{icon:"close",action:"abort",state:[{t:2,x:{r:["data.enabled"],s:'_0?null:"disabled"'},p:[20,10,619]}]},f:["Repeal All"]}]}," ",{p:[24,1,699],t:7,e:"ui-display",a:{title:"Authorizations"},f:[{t:4,f:[{p:[26,3,768],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{t:2,r:"name",p:[26,34,799]}," (",{t:2,r:"job",p:[26,44,809]},")"]}],n:52,r:"data.authorizations",p:[25,2,736]},{t:4,n:51,f:[{p:[28,3,843],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:["No authorizations."]}],r:"data.authorizations"}]}]},e.exports=a.extend(r.exports)},{341:341}],393:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.hidden_message",p:[3,5,48]}]}," ",{p:[5,3,90],t:7,e:"ui-section",a:{label:"Created On"},f:[{t:2,r:"data.realdate",p:[6,5,126]}]}," ",{p:[8,3,162],t:7,e:"ui-section",a:{label:"Approval"},f:[{p:[9,5,196],t:7,e:"ui-button",a:{icon:"arrow-up",state:[{t:2,x:{r:["data.is_creator","data.has_liked"],s:'_0?"disabled":_1?"selected":null'},p:[11,14,242]}],action:"like"},f:[{t:2,r:"data.num_likes",p:[12,21,333]}]}," ",{p:[13,5,368],t:7,e:"ui-button",a:{icon:"circle",state:[{t:2,x:{r:["data.is_creator","data.has_liked","data.has_disliked"],s:'_0?"disabled":!_1&&!_2?"selected":null'},p:[15,14,412]}],action:"neutral"}}," ",{p:[17,5,546],t:7,e:"ui-button",a:{icon:"arrow-down",state:[{t:2,x:{r:["data.is_creator","data.has_disliked"],s:'_0?"disabled":_1?"selected":null'},p:[19,14,594]}],action:"dislike"},f:[{t:2,r:"data.num_dislikes",p:[20,24,691]}]}]}]}," ",{t:4,f:[{p:[24,3,782],t:7,e:"ui-display",a:{title:"Admin Panel"},f:[{p:[25,5,819],t:7,e:"ui-section",a:{label:"Creator Ckey"},f:[{t:2,r:"data.creator_key",p:[25,38,852]}]}," ",{p:[26,5,890],t:7,e:"ui-section",a:{label:"Creator Character Name"},f:[{t:2,r:"data.creator_name",p:[26,48,933]}]}," ",{p:[27,5,972],t:7,e:"ui-button",a:{icon:"remove",action:"delete",style:"danger"},f:["Delete"]}]}],n:50,r:"data.admin_mode",p:[23,1,756]}]},e.exports=a.extend(r.exports)},{341:341}],394:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The requested interface (",{t:2,r:"config.interface",p:[2,34,45]},") was not found. Does it exist?"]}]}]},e.exports=a.extend(r.exports)},{341:341}],395:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,19],t:7,e:"ui-notice",f:["Currently syncing with the database"]}],n:50,r:"data.sync",p:[1,1,0]},{t:4,n:51,f:[{p:{button:[{p:[8,4,156],t:7,e:"ui-button",a:{icon:"eject",action:"eject_all"},f:["Eject all"]}," ",{p:[9,4,224],t:7,e:"ui-button",a:{icon:["toggle-",{t:2,x:{r:["data.show_materials"],s:'_0?"off":"on"'},p:[9,28,248]}],action:"toggle_materials_visibility"},f:[{t:2,x:{r:["data.show_materials"],s:'_0?"Hide":"Show"'},p:[10,5,330]}]}]},t:7,e:"ui-display",a:{title:"Materials",button:0},f:[" ",{t:4,f:[{p:[14,4,436],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[15,5,470],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[16,6,505],t:7,e:"section",a:{"class":"cell"}}," ",{p:[17,6,543],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[20,6,601],t:7,e:"section",a:{"class":"cell"},f:["Amount"]}," ",{p:[23,6,658],t:7,e:"section",a:{"class":"cell"}}," ",{p:[24,6,696],t:7,e:"section",a:{"class":"cell"}}]}," ",{t:4,f:[{p:[27,6,782],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[28,7,818],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[29,8,848]}]}," ",{p:[31,7,880],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"amount",p:[32,8,910]}]}," ",{p:[34,7,944],t:7,e:"section",a:{"class":"cell"},f:[{p:[35,8,974],t:7,e:"ui-button",a:{icon:"eject"},f:["Release amount"]}]}," ",{p:[37,7,1048],t:7,e:"section",a:{"class":"cell",style:"width: 40px;"},f:[{p:[38,8,1099],t:7,e:"ui-button",a:{icon:"eject"},f:["Release all"]}]}]}],n:52,r:"data.all_materials",p:[26,5,748]}]}],n:50,r:"data.show_materials",p:[13,3,405]}]}," ",{p:[45,2,1230],t:7,e:"ui-display",a:{title:"Categories"},f:[{t:4,f:[{p:[47,4,1288],t:7,e:"ui-button",f:[{t:2,r:".",p:[47,15,1299]}]}],r:"data.categories",p:[46,3,1264]}]}],r:"data.sync"}]},e.exports=a.extend(r.exports)},{341:341}],396:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,3,15],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,5,47],t:7,e:"ui-button",a:{action:"toggle_power",style:[{t:2,x:{r:["data.toggle"],s:'_0?"selected":null'},p:[5,18,107]}]},f:["Turn ",{t:2,x:{r:["data.toggle"],s:'_0?"off":"on"'},p:[6,16,161]}]}]}," ",{p:[9,3,227],t:7,e:"ui-display",a:{title:"Logging"},f:[{t:4,f:[{p:[11,3,282],t:7,e:"ui-section",a:{label:">"},f:[{t:2,r:".",p:[11,25,304]},{p:[11,30,309],t:7,e:"ui-section",f:[]}]}],n:52,r:"data.logs",p:[10,5,260]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],397:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[2,1,30],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[3,2,58],t:7,e:"ui-button",a:{icon:"power-off",style:[{t:2,x:{r:["data.power"],s:'_0?"selected":"danger"'},p:[3,37,93]}],action:"power"},f:[{t:2,x:{r:["data.power"],s:'_0?"Enabled":"Disabled"'},p:[3,92,148]}]}]}," ",{p:[5,1,214],t:7,e:"ui-section",a:{label:"Tag"},f:[{p:[6,2,240],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:[{t:2,r:"data.tag",p:[6,43,281]}]}]}," ",{p:[8,1,320],t:7,e:"ui-section",a:{label:"Scanning mode"},f:[{p:[9,2,356],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.updating"],s:'_0?"unlock":"lock"'},p:[9,18,372]}],style:[{t:2,x:{r:["data.updating"],s:'_0?null:"danger"'},p:[9,63,417]}],action:"updating",tooltip:"Toggle between automatic scanning or scan only when a button is pressed.","tooltip-side":"right"},f:[{t:2,x:{r:["data.updating"],s:'_0?"AUTO":"MANUAL"'},p:[9,221,575]}]}]}," ",{p:[11,1,639],t:7,e:"ui-section",a:{label:"Detection range"},f:[{p:[12,2,677],t:7,e:"ui-button",a:{icon:"refresh",style:[{t:2,x:{r:["data.globalmode"],s:'_0?null:"selected"'},p:[12,35,710]}],action:"globalmode",tooltip:"Local sector or whole region scanning.","tooltip-side":"right"},f:[{t:2,x:{r:["data.globalmode"],s:'_0?"MAXIMUM":"LOCAL"'},p:[12,165,840]}]}]}]}," ",{t:4,f:[{p:[16,2,942],t:7,e:"ui-display",a:{title:"Current Location"},f:[{p:[17,3,982],t:7,e:"span",f:[{t:2,r:"data.current",p:[17,9,988]}]}]}," ",{p:[20,2,1029],t:7,e:"ui-display",a:{title:"Detected Signals"},f:[{t:4,f:[{p:[22,3,1093],t:7,e:"ui-section",a:{label:[{t:2,r:"entrytag",p:[22,21,1111]}]},f:[{p:[23,3,1127],t:7,e:"span",f:[{t:2,r:"area",p:[23,9,1133]}," (",{t:2,r:"coord",p:[23,19,1143]},")"]}," ",{t:4,f:[{p:[25,4,1185],t:7,e:"span",f:["Dist: ",{t:2,r:"dist",p:[25,16,1197]},"m Dir: ",{t:2,r:"degrees",p:[25,31,1212]},"° (",{t:2,r:"direction",p:[25,45,1226]},")"]}],n:50,r:"direction",p:[24,3,1164]}]}],n:52,r:"data.signals",p:[21,2,1068]}]}],n:50,r:"data.power",p:[15,1,922]}]},e.exports=a.extend(r.exports)},{341:341}],398:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Labor Camp Teleporter"},f:[{p:[2,2,44],t:7,e:"ui-section",a:{label:"Teleporter Status"},f:[{p:[3,3,85],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.teleporter"],s:'_0?"good":"bad"'},p:[3,16,98]}]},f:[{t:2,x:{r:["data.teleporter"],s:'_0?"Connected":"Not connected"'},p:[3,54,136]}]}]}," ",{t:4,f:[{p:[6,4,239],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[7,5,273],t:7,e:"span",f:[{t:2,r:"data.teleporter_location",p:[7,11,279]}]}]}," ",{p:[9,4,335],t:7,e:"ui-section",a:{label:"Locked status"},f:[{p:[10,5,374],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"lock":"unlock"'},p:[10,22,391]}],action:"teleporter_lock"},f:[{t:2,x:{r:["data.teleporter_lock"],s:'_0?"Locked":"Unlocked"'},p:[10,93,462]}]}," ",{p:[11,5,527],t:7,e:"ui-button",a:{action:"toggle_open"},f:[{t:2,x:{r:["data.teleporter_state_open"],s:'_0?"Open":"Closed"'},p:[11,37,559]}]}]}],n:50,r:"data.teleporter",p:[5,3,212]},{t:4,n:51,f:[{p:[14,4,653],t:7,e:"span",f:[{p:[14,10,659],t:7,e:"ui-button",a:{action:"scan_teleporter"},f:["Scan Teleporter"]}]}],r:"data.teleporter"}]}," ",{p:[17,1,754],t:7,e:"ui-display",a:{title:"Labor Camp Beacon"},f:[{p:[18,2,794],t:7,e:"ui-section",a:{label:"Beacon Status"},f:[{p:[19,3,831],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.beacon"],s:'_0?"good":"bad"'},p:[19,16,844]}]},f:[{t:2,x:{r:["data.beacon"],s:'_0?"Connected":"Not connected"'},p:[19,50,878]}]}]}," ",{t:4,f:[{p:[22,3,971],t:7,e:"ui-section",a:{label:"Location"},f:[{p:[23,4,1004],t:7,e:"span",f:[{t:2,r:"data.beacon_location",p:[23,10,1010]}]}]}],n:50,r:"data.beacon",p:[21,2,949]},{t:4,n:51,f:[{p:[26,4,1072],t:7,e:"span",f:[{p:[26,10,1078],t:7,e:"ui-button",a:{action:"scan_beacon"},f:["Scan Beacon"]}]}],r:"data.beacon"}]}," ",{p:[29,1,1165],t:7,e:"ui-display",a:{title:"Prisoner details"},f:[{p:[30,2,1204],t:7,e:"ui-section",a:{label:"Prisoner ID"},f:[{p:[31,3,1239],t:7,e:"ui-button",a:{action:"handle_id"},f:[{t:2,x:{r:["data.id","data.id_name"],s:'_0?_1:"-------------"'},p:[31,33,1269]}]}]}," ",{t:4,f:[{p:[34,2,1359],t:7,e:"ui-section",a:{label:"Set ID goal"},f:[{p:[35,4,1395],t:7,e:"ui-button",a:{action:"set_goal"},f:[{t:2,r:"data.goal",p:[35,33,1424]}]}]}],n:50,r:"data.id",p:[33,2,1342]}," ",{p:[38,2,1475],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[39,3,1507],t:7,e:"span",f:[{t:2,x:{r:["data.prisoner.name"],s:'_0?_0:"No Occupant"'},p:[39,9,1513]}]}]}," ",{t:4,f:[{p:[42,3,1620],t:7,e:"ui-section",a:{label:"Criminal Status"},f:[{p:[43,4,1660],t:7,e:"span",f:[{t:2,r:"data.prisoner.crimstat",p:[43,10,1666]}]}]}],n:50,r:"data.prisoner",p:[41,2,1596]}]}," ",{p:[47,1,1739],t:7,e:"ui-display",f:[{p:[48,2,1753],t:7,e:"center",f:[{p:[48,10,1761],t:7,e:"ui-button",a:{action:"teleport",state:[{t:2,x:{r:["data.can_teleport"],s:'_0?null:"disabled"'},p:[48,45,1796]}]},f:["Process Prisoner"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],399:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Stored Items"},f:[{t:4,f:[{p:[3,3,59],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,22,78]}]},f:[{p:[4,4,93],t:7,e:"ui-button",a:{action:"release_items",params:['{"mobref":',{t:2,r:"mob",p:[4,56,145]},"}"],state:[{t:2,x:{r:["data.can_reclaim"],s:'_0?null:"disabled"'},p:[4,72,161]}]},f:["Drop Items"]}]}],n:52,r:"data.mobs",p:[2,2,36]}]}]},e.exports=a.extend(r.exports)},{341:341}],400:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{p:[3,3,68],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.emagged"],s:'_0?"un":null'},p:[3,20,85]},"lock"],state:[{t:2,x:{r:["data.can_toggle_safety"],s:'_0?null:"disabled"'},p:[3,63,128]}],action:"safety"},f:["Safeties: ",{p:[4,14,206],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.emagged"],s:'_0?"bad":"good"'},p:[4,27,219]}]},f:[{t:2,x:{r:["data.emagged"],s:'_0?"OFF":"ON"'},p:[4,62,254]}]}]}]},t:7,e:"ui-display",a:{title:"Default Programs",button:0},f:[" ",{t:4,f:[{p:[8,2,356],t:7,e:"ui-button",a:{action:"load_program",params:['{"type": ',{t:2,r:"type",p:[8,52,406]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[8,70,424]}]},f:[{t:2,r:"name",p:[9,5,475]}," "]},{p:[10,14,497],t:7,e:"br"}],n:52,r:"data.default_programs",p:[7,2,323]}]}," ",{t:4,f:[{p:[14,2,549],t:7,e:"ui-display",a:{title:"Dangerous Programs"},f:[{t:4,f:[{p:[16,4,623],t:7,e:"ui-button",a:{icon:"warning",action:"load_program",params:['{"type": ',{t:2,r:"type",p:[16,69,688]},"}"],style:[{t:2,x:{r:["data.program","type"],s:'_0==_1?"selected":null'},p:[16,87,706]}]},f:[{t:2,r:"name",p:[17,5,757]}," "]},{p:[18,16,781],t:7,e:"br"}],n:52,r:"data.emag_programs",p:[15,3,591]}]}],n:50,r:"data.emagged",p:[13,1,527]}]},e.exports=a.extend(r.exports)},{341:341}],401:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{occupantStatState:function(){switch(this.get("data.occupant.stat")){case 0:return"good";case 1:return"average";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[15,1,266],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[16,3,298],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[17,3,330],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[17,9,336]}]}]}," ",{t:4,f:[{p:[20,5,447],t:7,e:"ui-section",a:{label:"State"},f:[{p:[21,7,480],t:7,e:"span",a:{"class":[{t:2,r:"occupantStatState",p:[21,20,493]}]},f:[{t:2,x:{r:["data.occupant.stat"],s:'_0==0?"Conscious":_0==1?"Unconcious":"Dead"'},p:[21,43,516]}]}]}],n:50,r:"data.occupied",p:[19,3,421]}]}," ",{p:[25,1,656],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[26,2,687],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[27,5,717],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[27,22,734]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[27,71,783]}]}]}," ",{p:[29,3,846],t:7,e:"ui-section",a:{label:"Uses"},f:[{t:2,r:"data.ready_implants",p:[30,5,876]}," ",{t:4,f:[{p:[32,7,938],t:7,e:"span",a:{"class":"fa fa-cog fa-spin"}}],n:50,r:"data.replenishing",p:[31,5,906]}]}," ",{p:[35,3,1002],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[36,7,1038],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","data.ready_implants","data.ready"],s:'_0&&_1>0&&_2?null:"disabled"'},p:[36,25,1056]}],action:"implant"},f:[{t:2,x:{r:["data.ready","data.special_name"],s:'_0?(_1?_1:"Implant"):"Recharging"'},p:[37,9,1162]}," "]},{p:[38,19,1265],t:7,e:"br"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],402:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{t:4,f:[{p:[15,3,282],t:7,e:"ui-notice",f:[{p:[16,5,298],t:7,e:"span",f:["Wipe in progress!"]}]}],n:50,r:"data.wiping",p:[14,1,260]},{p:{button:[{t:4,f:[{p:[22,7,458],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.isDead"],s:'_0?"disabled":null'},p:[22,38,489]}],action:"wipe"},f:[{t:2,x:{r:["data.wiping"],s:'_0?"Stop Wiping":"Wipe"'},p:[22,89,540]}," AI"]}],n:50,r:"data.name",p:[21,5,434]}]},t:7,e:"ui-display",a:{title:[{t:2,x:{r:["data.name"],s:'_0||"Empty Card"'},p:[19,19,370]}],button:0},f:[" ",{t:4,f:[{p:[26,5,647],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[27,9,683],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"bad":"good"'},p:[27,22,696]}]},f:[{t:2,x:{r:["data.isDead","data.isBraindead"],s:'_0||_1?"Offline":"Operational"'},p:[27,76,750]}]}]}," ",{p:[29,5,843],t:7,e:"ui-section",a:{label:"Software Integrity"},f:[{p:[30,7,889],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[30,40,922]}],state:[{t:2,r:"healthState",p:[30,64,946]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[30,81,963]},"%"]}]}," ",{p:[32,5,1024],t:7,e:"ui-section",a:{label:"Laws"},f:[{t:4,f:[{p:[34,9,1084],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[34,33,1108]}]},{p:[34,45,1120],t:7,e:"br"}],n:52,r:"data.laws",p:[33,7,1056]}]}," ",{p:[37,5,1164],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[38,7,1200],t:7,e:"ui-button",a:{icon:"signal",style:[{t:2,x:{r:["data.wireless"],s:'_0?"selected":null'},p:[38,39,1232]}],action:"wireless"},f:["Wireless Activity"]}," ",{p:[39,7,1325],t:7,e:"ui-button",a:{icon:"microphone",style:[{t:2,x:{r:["data.radio"],s:'_0?"selected":null'},p:[39,43,1361]}],action:"radio"},f:["Subspace Radio"]}]}],n:50,r:"data.name",p:[25,3,625]}]}]},e.exports=a.extend(r.exports)},{341:341}],403:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,22],t:7,e:"ui-notice",f:[{p:[3,3,36],t:7,e:"span",f:["Waiting for another device to confirm your request..."]}]}],n:50,r:"data.waiting",p:[1,1,0]},{t:4,n:51,f:[{p:[6,2,127],t:7,e:"ui-display",f:[{p:[7,3,142],t:7,e:"ui-section",f:[{t:4,f:[{p:[9,5,189],t:7,e:"ui-button",a:{icon:"check",action:"auth_swipe"},f:["Authorize ",{t:2,r:"data.auth_required",p:[9,59,243]}]}],n:50,r:"data.auth_required",p:[8,4,158]},{t:4,n:51,f:[{p:[11,5,294],t:7,e:"ui-button",a:{icon:"warning",state:[{t:2,x:{r:["data.red_alert"],s:'_0?"disabled":null'},p:[11,38,327]}],action:"red_alert"},f:["Red Alert"]}," ",{p:[12,5,412],t:7,e:"ui-button",a:{icon:"wrench",state:[{t:2,x:{r:["data.emergency_maint"],s:'_0?"disabled":null'},p:[12,37,444]}],action:"emergency_maint"},f:["Emergency Maintenance Access"]}," ",{p:[13,5,560],t:7,e:"ui-button",a:{icon:"warning",state:"null",action:"bsa_unlock"},f:["Bluespace Artillery Unlock"]}],r:"data.auth_required"}]}]}],r:"data.waiting"}]},e.exports=a.extend(r.exports)},{341:341}],404:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ore values"},f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-section",a:{label:[{t:2,r:"ore",p:[3,22,76]}]},f:[{p:[4,4,90],t:7,e:"span",f:[{t:2,r:"value",p:[4,10,96]}]}]}],n:52,r:"data.ores",p:[2,2,34]}]}," ",{p:[8,1,158],t:7,e:"ui-display",a:{title:"Points"},f:[{p:[9,2,188],t:7,e:"ui-section",a:{label:"Unclaimed points"},f:[{p:[10,3,229],t:7,e:"span",f:[{t:2,r:"data.unclaimed_points",p:[10,9,235]}]}," ",{p:[11,3,271],t:7,e:"ui-button",a:{action:"claim_points",state:[{t:2,x:{r:["data.unclaimed_points"],s:'_0?null:"disabled"'},p:[11,42,310]}]},f:["Claim points"]}]}]}," ",{p:[14,1,413],t:7,e:"ui-display",f:[{p:[15,2,428],t:7,e:"span",f:["Points: ",{t:2,r:"data.id_points",p:[15,16,442]}]}," ",{p:[16,2,470],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[17,3,501],t:7,e:"span",f:[{t:2,r:"data.status_info",p:[17,9,507]}]}," ",{p:[18,3,538],t:7,e:"ui-button",a:{action:"move_shuttle",state:[{t:2,x:{r:["data.can_go_home"],s:'_0?null:"disabled"'},p:[18,42,577]}]},f:["Move shuttle"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],405:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Known Languages"},f:[{t:4,f:[{p:[3,5,68],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[3,23,86]}]},f:[{p:[4,7,102],t:7,e:"span",f:[{t:2,r:"desc",p:[4,13,108]}]}," ",{p:[5,7,130],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[5,19,142]}]}," ",{t:4,f:[{p:[7,9,186],t:7,e:"span",f:["(gained from mob)"]}],n:50,r:"shadow",p:[6,7,163]}," ",{p:[9,7,237],t:7,e:"span",f:[{t:2,x:{r:["can_speak"],s:'_0?"Can Speak":"Cannot Speak"'},p:[9,13,243]}]}," ",{t:4,f:[{p:[11,9,332],t:7,e:"ui-button",a:{action:"select_default",params:['{"language_name":"',{t:2,r:"name",p:[13,37,413]},'"}'],style:[{t:2,x:{r:["is_default","can_speak"],s:'_0?"selected":_1?null:"disabled"'},p:[14,18,442]}]},f:[{t:2,x:{r:["is_default"],s:'_0?"Default Language":"Select as Default"'},p:[15,10,512]}]}],n:50,r:"data.is_living",p:[10,7,301]}," ",{t:4,f:[{t:4,f:[{p:[20,11,666],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[20,72,727]},'"}']},f:["Grant"]}],n:50,r:"shadow",p:[19,9,641]},{t:4,n:51,f:[{p:[22,11,784],t:7,e:"ui-button",a:{action:"remove_language",params:['{"language_name":"',{t:2,r:"name",p:[22,73,846]},'"}']},f:["Remove"]}],r:"shadow"}],n:50,r:"data.admin_mode",p:[18,7,609]}]}],n:52,r:"data.languages",p:[2,3,39]}]}," ",{t:4,f:[{t:4,f:[{p:[30,5,1004],t:7,e:"ui-button",a:{action:"toggle_omnitongue",style:[{t:2,x:{r:["data.omnitongue"],s:'_0?"selected":null'},p:[32,14,1061]}]},f:["Omnitongue ",{t:2,x:{r:["data.omnitongue"],s:'_0?"Enabled":"Disabled"'
+},p:[33,19,1120]}]}],n:50,r:"data.is_living",p:[29,3,977]}," ",{p:[36,3,1196],t:7,e:"ui-display",a:{title:"Unknown Languages"},f:[{t:4,f:[{p:[38,7,1278],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[38,25,1296]}]},f:[{p:[39,9,1314],t:7,e:"span",f:[{t:2,r:"desc",p:[39,15,1320]}]}," ",{p:[40,9,1344],t:7,e:"span",f:["Key: ,",{t:2,r:"key",p:[40,21,1356]}]}," ",{p:[41,9,1379],t:7,e:"ui-button",a:{action:"grant_language",params:['{"language_name":"',{t:2,r:"name",p:[43,37,1460]},'"}']},f:["Grant"]}]}],n:52,r:"data.unknown_languages",p:[37,5,1239]}]}],n:50,r:"data.admin_mode",p:[28,1,951]}]},e.exports=a.extend(r.exports)},{341:341}],406:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Controls"},f:[{t:4,f:[{t:4,f:[{p:[4,4,81],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[5,5,114],t:7,e:"span",f:["Launchpad closed."]}]}],n:50,r:"data.pad_closed",p:[3,3,54]},{t:4,n:51,f:[{p:[8,4,176],t:7,e:"ui-section",a:{label:"Launchpad"},f:[{p:[9,4,210],t:7,e:"span",f:[{p:[9,10,216],t:7,e:"b",f:[{t:2,r:"data.pad_name",p:[9,13,219]}]}]},{p:[9,41,247],t:7,e:"br"}," ",{p:[10,4,255],t:7,e:"ui-button",a:{icon:"pencil",action:"rename"},f:["Rename"]}," ",{p:[11,4,318],t:7,e:"ui-button",a:{icon:"remove",style:"danger",action:"remove"},f:["Remove"]}]}," ",{p:[14,4,414],t:7,e:"ui-section",a:{label:"Set Target"},f:[{p:[15,4,449],t:7,e:"table",f:[{p:[16,4,460],t:7,e:"tr",f:[{p:[17,5,469],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[17,38,502],t:7,e:"ui-button",a:{action:"up-left"},f:["↖"]}]}," ",{p:[18,5,553],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[18,57,605],t:7,e:"ui-button",a:{action:"up"},f:["↑"]}]}," ",{p:[19,5,651],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[19,56,702],t:7,e:"ui-button",a:{action:"up-right"},f:["↗"]}]}]}," ",{p:[21,4,762],t:7,e:"tr",f:[{p:[22,5,771],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[22,38,804],t:7,e:"ui-button",a:{action:"left",style:"width:35px!important"},f:["←"]}]}," ",{p:[23,5,881],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[23,57,933],t:7,e:"ui-button",a:{action:"reset"},f:["R"]}]}," ",{p:[24,5,982],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[24,56,1033],t:7,e:"ui-button",a:{action:"right"},f:["→"]}]}]}," ",{p:[26,4,1090],t:7,e:"tr",f:[{p:[27,5,1099],t:7,e:"td",a:{style:"width:25px!important"},f:[{p:[27,38,1132],t:7,e:"ui-button",a:{action:"down-left"},f:["↙"]}]}," ",{p:[28,5,1185],t:7,e:"td",a:{style:"width:25px!important; text-align:center"},f:[{p:[28,57,1237],t:7,e:"ui-button",a:{action:"down"},f:["↓"]}]}," ",{p:[29,5,1285],t:7,e:"td",a:{style:"width:25px!important; text-align:right"},f:[{p:[29,56,1336],t:7,e:"ui-button",a:{action:"down-right"},f:["↘"]}]}]}]}]}," ",{p:[33,4,1427],t:7,e:"ui-section",a:{label:"Current Target"},f:[{p:[34,5,1467],t:7,e:"span",f:[{t:2,r:"data.abs_y",p:[34,11,1473]}," ",{t:2,r:"data.north_south",p:[34,26,1488]}]},{p:[34,53,1515],t:7,e:"br"}," ",{p:[35,5,1524],t:7,e:"span",f:[{t:2,r:"data.abs_x",p:[35,11,1530]}," ",{t:2,r:"data.east_west",p:[35,26,1545]}]}]}," ",{p:[37,4,1591],t:7,e:"ui-section",a:{label:"Activate"},f:[{p:[38,5,1625],t:7,e:"ui-button",a:{action:"launch",tooltip:"Teleport everything on the pad to the target.","tooltip-side":"down"},f:["Launch"]}," ",{p:[39,5,1751],t:7,e:"ui-button",a:{action:"pull",tooltip:"Teleport everything from the target to the pad.","tooltip-side":"down"},f:["Pull"]}]}],r:"data.pad_closed"}],n:50,r:"data.has_pad",p:[2,2,31]},{t:4,n:51,f:[{p:[45,3,1912],t:7,e:"ui-section",a:{label:"Warning"},f:[{p:[46,4,1944],t:7,e:"span",f:["No launchpad found. Link the remote to a launchpad."]}]}],r:"data.has_pad"}]}]},e.exports=a.extend(r.exports)},{341:341}],407:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{mechChargeState:function(t){var e=this.get("data.recharge_port.mech.cell.maxcharge");return t>=e/1.5?"good":t>=e/3?"average":"bad"},mechHealthState:function(t){var e=this.get("data.recharge_port.mech.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[20,1,526],t:7,e:"ui-display",a:{title:"Mech Status"},f:[{t:4,f:[{t:4,f:[{p:[23,4,624],t:7,e:"ui-section",a:{label:"Integrity"},f:[{p:[24,6,660],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,27,681]}],value:[{t:2,r:"adata.recharge_port.mech.health",p:[24,74,728]}],state:[{t:2,x:{r:["mechHealthState","adata.recharge_port.mech.health"],s:"_0(_1)"},p:[24,117,771]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.health"],s:"Math.round(_0)"},p:[24,171,825]},"/",{t:2,r:"adata.recharge_port.mech.maxhealth",p:[24,219,873]}]}]}," ",{t:4,f:[{t:4,f:[{p:[28,5,1034],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[28,31,1060],t:7,e:"span",a:{"class":"bad"},f:["Cell Critical Failure"]}]}],n:50,r:"data.recharge_port.mech.cell.critfail",p:[27,3,984]},{t:4,n:51,f:[{p:[30,11,1141],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[31,13,1180],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.recharge_port.mech.cell.maxcharge",p:[31,34,1201]}],value:[{t:2,r:"adata.recharge_port.mech.cell.charge",p:[31,86,1253]}],state:[{t:2,x:{r:["mechChargeState","adata.recharge_port.mech.cell.charge"],s:"_0(_1)"},p:[31,134,1301]}]},f:[{t:2,x:{r:["adata.recharge_port.mech.cell.charge"],s:"Math.round(_0)"},p:[31,193,1360]},"/",{t:2,x:{r:["adata.recharge_port.mech.cell.maxcharge"],s:"Math.round(_0)"},p:[31,246,1413]}]}]}],r:"data.recharge_port.mech.cell.critfail"}],n:50,r:"data.recharge_port.mech.cell",p:[26,4,945]},{t:4,n:51,f:[{p:[35,3,1524],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[35,29,1550],t:7,e:"span",a:{"class":"bad"},f:["Cell Missing"]}]}],r:"data.recharge_port.mech.cell"}],n:50,r:"data.recharge_port.mech",p:[22,2,589]},{t:4,n:51,f:[{p:[38,4,1625],t:7,e:"ui-section",f:["Mech Not Found"]}],r:"data.recharge_port.mech"}],n:50,r:"data.recharge_port",p:[21,3,561]},{t:4,n:51,f:[{p:[41,5,1689],t:7,e:"ui-section",f:["Recharging Port Not Found"]}," ",{p:[42,2,1741],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}],r:"data.recharge_port"}]}]},e.exports=a.extend(r.exports)},{341:341}],408:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{t:4,f:[{p:[3,5,43],t:7,e:"ui-section",a:{label:"Interface Lock"},f:[{p:[4,7,85],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock":"unlock"'},p:[4,24,102]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Engaged":"Disengaged"'},p:[4,75,153]}]}]}],n:50,r:"data.siliconUser",p:[2,3,14]},{t:4,n:51,f:[{p:[7,5,241],t:7,e:"span",f:["Swipe an ID card to ",{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[7,31,267]}," this interface."]}],r:"data.siliconUser"}]}," ",{p:[10,1,349],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[11,3,379],t:7,e:"ui-section",a:{label:"Power"},f:[{t:4,f:[{p:[13,7,458],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[13,24,475]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[13,68,519]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[13,116,567]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[12,5,410]},{t:4,n:51,f:[{p:[15,7,625],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.on"],s:'_0?"good":"bad"'},p:[15,20,638]}],state:[{t:2,x:{r:["data.cell"],s:'_0?null:"disabled"'},p:[15,57,675]}]},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[15,92,710]}]}],x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"}}]}," ",{p:[18,3,774],t:7,e:"ui-section",a:{label:"Cell"},f:[{p:[19,5,804],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.cell"],s:'_0?null:"bad"'},p:[19,18,817]}]},f:[{t:2,x:{r:["data.cell","data.cellPercent"],s:'_0?_1+"%":"No Cell"'},p:[19,48,847]}]}]}," ",{p:[21,3,923],t:7,e:"ui-section",a:{label:"Mode"},f:[{p:[22,5,953],t:7,e:"span",a:{"class":[{t:2,r:"data.modeStatus",p:[22,18,966]}]},f:[{t:2,r:"data.mode",p:[22,39,987]}]}]}," ",{p:[24,3,1026],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[25,5,1056],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.load"],s:'_0?"good":"average"'},p:[25,18,1069]}]},f:[{t:2,x:{r:["data.load"],s:'_0?_0:"None"'},p:[25,54,1105]}]}]}," ",{p:[27,3,1165],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[28,5,1202],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.destination"],s:'_0?"good":"average"'},p:[28,18,1215]}]},f:[{t:2,x:{r:["data.destination"],s:'_0?_0:"None"'},p:[28,60,1257]}]}]}]}," ",{t:4,f:[{p:{button:[{t:4,f:[{p:[35,9,1479],t:7,e:"ui-button",a:{icon:"eject",action:"unload"},f:["Unload"]}],n:50,r:"data.load",p:[34,7,1453]}," ",{t:4,f:[{p:[38,9,1586],t:7,e:"ui-button",a:{icon:"eject",action:"ejectpai"},f:["Eject PAI"]}],n:50,r:"data.haspai",p:[37,7,1558]}," ",{p:[40,7,1670],t:7,e:"ui-button",a:{icon:"pencil",action:"setid"},f:["Set ID"]}]},t:7,e:"ui-display",a:{title:"Controls",button:0},f:[" ",{p:[42,5,1750],t:7,e:"ui-section",a:{label:"Destination"},f:[{p:[43,7,1789],t:7,e:"ui-button",a:{icon:"pencil",action:"destination"},f:["Set Destination"]}," ",{p:[44,7,1869],t:7,e:"ui-button",a:{icon:"stop",action:"stop"},f:["Stop"]}," ",{p:[45,7,1929],t:7,e:"ui-button",a:{icon:"play",action:"go"},f:["Go"]}]}," ",{p:[47,5,2001],t:7,e:"ui-section",a:{label:"Home"},f:[{p:[48,7,2033],t:7,e:"ui-button",a:{icon:"home",action:"home"},f:["Go Home"]}," ",{p:[49,7,2096],t:7,e:"ui-button",a:{icon:"pencil",action:"sethome"},f:["Set Home"]}]}," ",{p:[51,5,2181],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[52,7,2217],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoReturn"],s:'_0?"check-square-o":"square-o"'},p:[52,24,2234]}],style:[{t:2,x:{r:["data.autoReturn"],s:'_0?"selected":null'},p:[52,84,2294]}],action:"autoret"},f:["Auto-Return Home"]}," ",{p:[54,7,2396],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.autoPickup"],s:'_0?"check-square-o":"square-o"'},p:[54,24,2413]}],style:[{t:2,x:{r:["data.autoPickup"],s:'_0?"selected":null'},p:[54,84,2473]}],action:"autopick"},f:["Auto-Pickup Crate"]}," ",{p:[56,7,2577],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"check-square-o":"square-o"'},p:[56,24,2594]}],style:[{t:2,x:{r:["data.reportDelivery"],s:'_0?"selected":null'},p:[56,88,2658]}],action:"report"},f:["Report Deliveries"]}]}]}],n:50,x:{r:["data.locked","data.siliconUser"],s:"!_0||_1"},p:[31,1,1343]}]},e.exports=a.extend(r.exports)},{341:341}],409:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Chamber Console"},f:[{p:[2,1,44],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,2,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,63,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,3,195],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[6,36,228]}]}," ",{p:[7,3,262],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[7,35,294]}]}," ",{p:[8,3,328],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[8,41,366]}]}," ",{t:4,f:[{p:[10,4,468],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[10,41,505]}]}],n:50,r:"data.disk.activation_delay",p:[9,3,430]}," ",{t:4,f:[{p:[13,4,588],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[13,30,614]}]}," ",{p:[14,4,650],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[14,36,682]}]}],n:50,r:"data.disk.timer",p:[12,3,561]}," ",{t:4,f:[{p:[17,4,769],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[17,40,805]}]}],n:50,r:"data.disk.activation_code",p:[16,3,732]}," ",{t:4,f:[{p:[20,4,899],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[20,42,937]}]}],n:50,r:"data.disk.deactivation_code",p:[19,3,860]}," ",{t:4,f:[{p:[23,4,1025],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[23,34,1055]}]}],n:50,r:"data.disk.kill_code",p:[22,3,994]}," ",{t:4,f:[{p:[26,4,1138],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[26,37,1171]}]}],n:50,r:"data.disk.trigger_code",p:[25,3,1104]}," ",{t:4,f:[{t:4,f:[{p:[30,6,1303],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[30,25,1322]}]},f:[{t:2,r:"value",p:[30,35,1332]}]}],n:52,r:"data.disk.extra_settings",p:[29,4,1263]}],n:50,r:"data.disk.has_extra_settings",p:[28,3,1223]}],n:50,r:"data.has_program",p:[5,2,168]},{t:4,n:51,f:[{p:[34,3,1390],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,1,78]},{t:4,n:51,f:[{p:[37,2,1453],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[40,1,1511],t:7,e:"br"}," ",{t:4,f:[{p:[42,2,1541],t:7,e:"ui-notice",f:[{t:2,r:"data.status_msg",p:[42,13,1552]}]}],n:50,r:"data.status_msg",p:[41,1,1516]},{t:4,n:51,f:[{p:[44,2,1594],t:7,e:"ui-display",a:{title:"Chamber"},f:[{p:[45,2,1624],t:7,e:"ui-section",f:[{p:[45,14,1636],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"lock-open":"lock"'},p:[45,30,1652]}],action:"toggle_lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[45,90,1712]}," Chamber"]},{p:[45,146,1768],t:7,e:"br"}]}," ",{p:[46,2,1787],t:7,e:"ui-section",f:[{p:[46,14,1799],t:7,e:"b",f:["Occupant:"]}," ",{t:2,r:"data.occupant_name",p:[46,31,1816]}]}," ",{t:4,f:[{p:[48,4,1882],t:7,e:"ui-section",f:[{p:[48,16,1894],t:7,e:"ui-notice",f:["No nanites detected."]}]}," ",{p:[49,4,1954],t:7,e:"ui-section",f:[{p:[49,16,1966],t:7,e:"ui-button",a:{icon:"syringe",action:"nanite_injection"},f:["Implant Nanites"]}]}],n:50,x:{r:["data.has_nanites"],s:"!_0"},p:[47,2,1853]},{t:4,n:51,f:[{p:[51,3,2071],t:7,e:"ui-display",a:{title:"Nanites"},f:[{t:4,f:[{p:[53,5,2129],t:7,e:"ui-button",a:{icon:"download",action:"add_program"},f:["Install Program From Disk"]},{p:[53,90,2214],t:7,e:"br"}," ",{p:[54,5,2223],t:7,e:"br"}],n:50,r:"data.has_disk",p:[52,4,2103]}," ",{p:[56,4,2242],t:7,e:"ui-section",f:[{p:[57,5,2259],t:7,e:"ui-section",a:{label:"Nanite Volume"},f:[{t:2,r:"data.nanite_volume",p:[57,39,2293]}]}," ",{p:[58,5,2333],t:7,e:"ui-section",a:{label:"Growth Rate"},f:[{t:2,r:"data.regen_rate",p:[58,37,2365]}]}," ",{p:[59,5,2402],t:7,e:"ui-section",a:{label:"Safety Threshold"},f:[{t:2,r:"data.safety_threshold",p:[59,42,2439]}," ",{p:[59,68,2465],t:7,e:"ui-button",a:{icon:"pencil",action:"set_safety"},f:["Set"]}]}," ",{p:[60,5,2544],t:7,e:"ui-section",a:{label:"Cloud ID"},f:[{t:2,x:{r:["data.cloud_id"],s:'_0?_0:"No Cloud"'},p:[60,34,2573]}," ",{p:[60,82,2621],t:7,e:"ui-button",a:{icon:"pencil",action:"set_cloud"},f:["Set"]}]}]}," ",{p:[62,4,2715],t:7,e:"ui-display",a:{title:"Programs"},f:[{t:4,f:[{p:[64,6,2782],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[64,25,2801]}],button:0},f:[{p:[65,6,2824],t:7,e:"ui-button",a:{icon:"minus",action:"remove_program",params:['{"program_id": "',{t:2,r:"id",p:[65,78,2896]},'"}']},f:["Uninstall"]}," ",{p:[66,6,2933],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[66,38,2965]}]}," ",{t:4,f:[{p:[68,7,3027],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[68,45,3065]}]}," ",{p:[69,7,3123],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[69,44,3160]},"/s"]}," ",{t:4,f:[{p:[71,8,3221],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[71,41,3254]}]}," ",{p:[72,8,3291],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[72,45,3328]}," seconds"]}],n:50,r:"can_trigger",p:[70,7,3194]}," ",{t:4,f:[{t:4,f:[{p:[76,9,3459],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,46,3496]}]}],n:50,r:"activation_delay",p:[75,8,3426]}," ",{t:4,f:[{p:[79,9,3574],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,35,3600]}]}," ",{p:[80,9,3631],t:7,e:"ui-section",a:{label:"Timer Type"},f:[{t:2,r:"timer_type",p:[80,40,3662]}]}],n:50,r:"timer",p:[78,8,3552]}," ",{t:4,f:[{t:4,f:[{p:[84,11,3782],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[84,30,3801]}]},f:[{t:2,r:"value",p:[84,40,3811]}]}],n:52,r:"extra_settings",p:[83,9,3747]}],n:50,r:"has_extra_settings",p:[82,8,3712]}," ",{t:4,f:[{t:4,f:[{p:[89,10,3944],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[89,46,3980]}]}],n:50,r:"activation_code",p:[88,9,3911]}," ",{t:4,f:[{p:[92,10,4072],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[92,48,4110]}]}],n:50,r:"deactivation_code",p:[91,9,4037]}," ",{t:4,f:[{p:[95,10,4196],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[95,40,4226]}]}],n:50,r:"kill_code",p:[94,9,4169]}," ",{t:4,f:[{p:[98,10,4307],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[98,43,4340]}]}],n:50,r:"trigger_code",p:[97,9,4277]}],n:50,x:{r:["data.scan_level"],s:"_0>=4"},p:[87,8,3874]}],n:50,x:{r:["data.scan_level"],s:"_0>=3"},p:[74,7,3390]}],n:50,x:{r:["data.scan_level"],s:"_0>=2"},p:[67,6,2992]}]}],n:52,r:"data.mob_programs",p:[63,5,2749]}]}]}],x:{r:["data.has_nanites"],s:"!_0"}}]}],r:"data.status_msg"}]}]},e.exports=a.extend(r.exports)},{341:341}],410:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Cloud Console"},f:[{p:[2,1,42],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{t:4,f:[{p:[4,3,101],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]},{p:[4,64,162],t:7,e:"br"}," ",{t:4,f:[{p:[6,4,197],t:7,e:"ui-section",f:[{p:[7,5,214],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[7,38,247]}]}," ",{p:[8,5,283],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[8,37,315]}]}," ",{p:[9,5,351],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["data.disk.activated"],s:'_0?"Active":"Inactive"'},p:[9,43,389]}]}," ",{t:4,f:[{p:[11,6,495],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"data.disk.activation_delay",p:[11,43,532]}]}],n:50,r:"data.disk.activation_delay",p:[10,5,455]}," ",{t:4,f:[{p:[14,6,621],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"data.disk.timer",p:[14,32,647]}]}," ",{p:[15,6,685],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"data.disk.timer_type",p:[15,38,717]}]}],n:50,r:"data.disk.timer",p:[13,5,592]}," ",{t:4,f:[{p:[18,6,810],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"data.disk.activation_code",p:[18,42,846]}]}],n:50,r:"data.disk.activation_code",p:[17,5,771]}," ",{t:4,f:[{p:[21,6,946],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"data.disk.deactivation_code",p:[21,44,984]}]}],n:50,r:"data.disk.deactivation_code",p:[20,5,905]}," ",{t:4,f:[{p:[24,6,1078],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"data.disk.kill_code",p:[24,36,1108]}]}],n:50,r:"data.disk.kill_code",p:[23,5,1045]}," ",{t:4,f:[{p:[27,6,1197],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"data.disk.trigger_code",p:[27,39,1230]}]}],n:50,r:"data.disk.trigger_code",p:[26,5,1161]}," ",{t:4,f:[{t:4,f:[{p:[31,8,1370],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[31,27,1389]}]},f:[{t:2,r:"value",p:[31,37,1399]}]}],n:52,r:"data.disk.extra_settings",p:[30,6,1328]}],n:50,r:"data.disk.has_extra_settings",p:[29,5,1286]}]}],n:50,r:"data.has_program",p:[5,3,169]},{t:4,n:51,f:[{p:[36,4,1480],t:7,e:"ui-notice",f:["No program detected."]}],r:"data.has_program"}],n:50,r:"data.has_disk",p:[3,2,77]},{t:4,n:51,f:[{p:[39,3,1546],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"}]}," ",{p:[42,1,1605],t:7,e:"ui-display",a:{title:"Cloud Storage"},f:[{t:4,f:[{p:[44,3,1670],t:7,e:"ui-button",a:{icon:"plus-circle",action:"create_backup"},f:["Create New Backup"]}," ",{p:[45,3,1755],t:7,e:"ui-display",a:{title:"Active Backups"},f:[{t:4,f:[{p:[47,5,1827],t:7,e:"ui-button",a:{action:"set_view",params:['{"view": "',{t:2,r:"cloud_id",p:[47,52,1874]},'"}']},f:["Backup #",{t:2,r:"cloud_id",p:[47,76,1898]}]}],n:52,r:"data.cloud_backups",p:[46,4,1794]}]}],n:50,x:{r:["data.current_view"],s:"!_0"},p:[43,2,1641]},{t:4,n:51,f:[{p:[51,3,1964],t:7,e:"ui-button",a:{icon:"undo",action:"set_view",params:'{"view": "0"}'},f:["Return"]}," ",{t:4,f:[{p:[53,4,2079],t:7,e:"ui-notice",f:["ERROR: Backup not found."]}],n:50,x:{r:["data.cloud_backup"],s:"!_0"},p:[52,3,2049]},{t:4,n:51,f:[{p:[55,4,2141],t:7,e:"ui-display",a:{title:["Backup #",{t:2,r:"data.current_view",p:[55,31,2168]}]},f:[{t:4,f:[{p:[57,6,2226],t:7,e:"ui-button",a:{icon:"upload",action:"upload_program",style:"selected"},f:["Upload Program From Disk"]},{p:[57,108,2328],t:7,e:"br"}],n:50,r:"data.has_program",p:[56,5,2196]}," ",{t:4,f:[{p:[60,6,2384],t:7,e:"hr"}," ",{p:[61,6,2394],t:7,e:"ui-section",f:[{p:[62,7,2413],t:7,e:"h3",f:[{t:2,r:"name",p:[62,11,2417]}]}," ",{p:[63,7,2437],t:7,e:"div",a:{style:"float:right"},f:[{p:[64,8,2470],t:7,e:"ui-button",a:{icon:"minus-circle",action:"remove_program",style:"danger",params:['{"program_id": "',{t:2,r:"id",p:[64,102,2564]},'"}']},f:["Uninstall"]}]}]}," ",{p:[67,6,2633],t:7,e:"ui-section",f:[{p:[68,7,2652],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"desc",p:[68,39,2684]}]}," ",{p:[69,7,2712],t:7,e:"ui-section",a:{label:"Activation Status"},f:[{t:2,x:{r:["activated"],s:'_0?"Active":"Inactive"'},p:[69,45,2750]}]}," ",{p:[70,7,2808],t:7,e:"ui-section",a:{label:"Nanites Consumed"},f:[{t:2,r:"use_rate",p:[70,44,2845]},"/s"]}," ",{t:4,f:[{p:[72,8,2906],t:7,e:"ui-section",a:{label:"Trigger Cost"},f:[{t:2,r:"trigger_cost",p:[72,41,2939]},"/s"]}," ",{p:[73,8,2978],t:7,e:"ui-section",a:{label:"Trigger Cooldown"},f:[{t:2,r:"trigger_cooldown",p:[73,45,3015]},"/s"]}],n:50,r:"can_trigger",p:[71,7,2879]}," ",{t:4,f:[{p:[76,8,3103],t:7,e:"ui-section",a:{label:"Activation Delay"},f:[{t:2,r:"activation_delay",p:[76,45,3140]}]}],n:50,r:"activation_delay",p:[75,7,3071]}," ",{t:4,f:[{p:[79,8,3215],t:7,e:"ui-section",a:{label:"Timer"},f:[{t:2,r:"timer",p:[79,34,3241]}]}," ",{p:[80,8,3271],t:7,e:"ui-section",a:{label:"Timer Type "},f:[{t:2,r:"timer_type",p:[80,40,3303]}]}],n:50,r:"timer",p:[78,7,3194]}," ",{t:4,f:[{p:[83,8,3382],t:7,e:"ui-section",a:{label:"Activation Code"},f:[{t:2,r:"activation_code",p:[83,44,3418]}]}],n:50,r:"activation_code",p:[82,7,3351]}," ",{t:4,f:[{p:[86,8,3504],t:7,e:"ui-section",a:{label:"Deactivation Code"},f:[{t:2,r:"deactivation_code",p:[86,46,3542]}]}],n:50,r:"deactivation_code",p:[85,7,3471]}," ",{t:4,f:[{p:[89,8,3622],t:7,e:"ui-section",a:{label:"Kill Code"},f:[{t:2,r:"kill_code",p:[89,38,3652]}]}],n:50,r:"kill_code",p:[88,7,3597]}," ",{t:4,f:[{p:[92,8,3727],t:7,e:"ui-section",a:{label:"Trigger Code"},f:[{t:2,r:"trigger_code",p:[92,41,3760]}]}],n:50,r:"trigger_code",p:[91,7,3699]}," ",{t:4,f:[{t:4,f:[{p:[96,10,3878],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[96,29,3897]}]},f:[{t:2,r:"value",p:[96,39,3907]}]}],n:52,r:"extra_settings",p:[95,8,3844]}],n:50,r:"has_extra_settings",p:[94,7,3810]}]}],n:52,r:"data.cloud_programs",p:[59,5,2349]}]}],x:{r:["data.cloud_backup"],s:"!_0"}}],x:{r:["data.current_view"],s:"!_0"}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],411:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Program Hub"},f:[{t:4,f:[{p:[3,2,63],t:7,e:"ui-display",a:{title:"Program Disk"},f:[{p:[4,3,99],t:7,e:"ui-section",f:[{p:[5,4,115],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{p:[6,4,180],t:7,e:"ui-button",a:{icon:"minus-circle",action:"clear"},f:["Delete Program"]}]}," ",{t:4,f:[{p:[9,4,299],t:7,e:"ui-section",a:{label:"Program Name"},f:[{t:2,r:"data.disk.name",p:[9,37,332]}]}," ",{p:[10,4,367],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.disk.desc",p:[10,36,399]}]}],n:50,r:"data.has_program",p:[8,3,271]},{t:4,n:51,f:[{p:[12,4,445],t:7,e:"ui-notice",f:["No program installed."]}],r:"data.has_program"}]}],n:50,r:"data.has_disk",p:[2,1,40]},{t:4,n:51,f:[{p:[16,2,525],t:7,e:"ui-notice",f:["Insert disk."]}],r:"data.has_disk"},{p:[18,1,569],t:7,e:"br"}," ",{p:[19,1,574],t:7,e:"ui-display",a:{title:"Programs"},f:[{p:[20,2,605],t:7,e:"ui-section",f:[{p:[21,3,620],t:7,e:"ui-button",a:{icon:"undo",action:"set_category",params:'{"category": "Main"}'},f:["Return"]}," ",{p:[22,3,716],t:7,e:"ui-button",a:{icon:"align-justify ",action:"toggle_details"},f:[{t:2,x:{r:["data.detail_view"],s:'_0?"Compact View":"Detailed View"'},p:[22,60,773]}]}]}," ",{t:4,f:[{p:[25,3,892],t:7,e:"ui-display",f:[{t:4,f:[{p:[27,5,938],t:7,e:"ui-section",f:[{p:[27,17,950],t:7,e:"ui-button",a:{action:"set_category",params:['{"category": "',{t:2,r:"name",p:[27,72,1005]},'"}']},f:[{t:2,r:"name",p:[27,84,1017]}]}]}],n:52,r:"data.categories",p:[26,4,908]}]}],n:50,x:{r:["data.category"],s:'_0=="Main"'},p:[24,2,858]},{t:4,n:51,f:[{p:[31,3,1092],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[31,22,1111]}]},f:[{t:4,f:[{t:4,f:[{p:[34,6,1196],t:7,e:"ui-display",f:[{p:[35,7,1215],t:7,e:"ui-section",f:[{p:[35,19,1227],t:7,e:"b",f:[{t:2,r:"name",p:[35,22,1230]}]}]}," ",{p:[36,7,1262],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[36,19,1274]}]}," ",{p:[37,7,1302],t:7,e:"ui-section",f:[{p:[38,8,1322],t:7,e:"ui-button",a:{icon:"download",action:"download",params:['{"program_id": "',{t:2,r:"id",p:[38,77,1391]},'"}'],state:[{t:2,x:{r:["data.has_disk"],s:'_0?null:"disabled"'},p:[38,94,1408]}]},f:["Download"]}]}]}],n:50,r:"data.detail_view",p:[33,5,1166]},{t:4,n:51,f:[{p:[44,6,1542],t:7,e:"ui-section",f:[{p:[44,18,1554],t:7,e:"ui-button",a:{action:"download",params:['{"program_id": "',{t:2,r:"id",p:[44,71,1607]},'"}']},f:[{t:2,r:"name",p:[44,81,1617]}]}]}],r:"data.detail_view"}],n:52,r:"data.program_list",p:[32,4,1134]}]}],x:{r:["data.category"],s:'_0=="Main"'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],412:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Programming"},f:[{t:4,f:[{p:[3,3,65],t:7,e:"ui-notice",f:["Insert a nanite program disk."]}],n:50,x:{r:["data.has_disk"],s:"!_0"},p:[2,1,40]},{t:4,n:51,f:[{p:[5,3,129],t:7,e:"ui-button",a:{icon:"eject",action:"eject"},f:["Eject Disk"]}," ",{t:4,f:[{p:[7,5,223],t:7,e:"ui-notice",f:["No program detected."]}],n:50,x:{r:["data.has_program"],s:"!_0"},p:[6,3,193]},{t:4,n:51,f:[{p:[9,5,282],t:7,e:"ui-section",f:[{p:[10,7,301],t:7,e:"ui-display",a:{title:[{t:2,r:"data.name",p:[10,26,320]}]},f:[{t:2,r:"data.desc",p:[11,9,344]}]}]}," ",{p:[14,5,400],t:7,e:"ui-section",f:[{p:[15,7,419],t:7,e:"ui-section",a:{label:"Program Info"},f:["Nanites Consumed: ",{t:2,r:"data.use_rate",p:[16,26,478]},{p:[16,43,495],t:7,e:"br"}," ",{t:4,f:["Trigger Cost: ",{t:2,r:"data.trigger_cost",p:[18,25,557]},"u",{p:[18,47,579],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[17,9,508]}]}," ",{p:[22,7,627],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[23,9,663],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.activated"],s:'_0?"toggle-on":"toggle-off"'},p:[24,17,690]}],action:"toggle_active"},f:[{t:2,x:{r:["data.activated"],s:'_0?"Active":"Inactive"'},p:[26,11,784]}]}]}," ",{p:[30,7,876],t:7,e:"ui-section",a:{label:"Settings"},f:[{p:[31,9,914],t:7,e:"ui-button",a:{icon:"pencil",action:"set_activation_delay"}}," Activation Delay: ",{t:2,r:"data.activation_delay",p:[31,95,1e3]}," ",{p:[31,121,1026],t:7,e:"br"}," ",{p:[32,9,1039],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer"}}," Timer: ",{t:2,r:"data.timer",p:[32,73,1103]}," ",{p:[32,88,1118],t:7,e:"br"}," ",{p:[33,9,1131],t:7,e:"ui-button",a:{icon:"pencil",action:"set_timer_type"}}," Timer Type: ",{t:2,r:"data.timer_type",p:[33,83,1205]}," ",{p:[33,103,1225],t:7,e:"br"}]}," ",{p:[36,7,1257],t:7,e:"ui-section",a:{label:"Codes"},f:[{p:[37,9,1292],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "activation"}'}}," Activation Code: ",{t:2,r:"data.activation_code",p:[37,121,1404]}," ",{p:[37,146,1429],t:7,e:"br"}," ",{p:[38,9,1442],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "deactivation"}'}}," Deactivation Code: ",{t:2,r:"data.deactivation_code",p:[38,125,1558]}," ",{p:[38,152,1585],t:7,e:"br"}," ",{p:[39,9,1598],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "kill"}'}}," Kill Code: ",{t:2,r:"data.kill_code",p:[39,109,1698]}," ",{p:[39,128,1717],t:7,e:"br"}," ",{t:4,f:[{p:[41,11,1765],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code",params:'{"target_code": "trigger"}'}}," Trigger Code: ",{t:2,r:"data.trigger_code",p:[41,117,1871]}," ",{p:[41,139,1893],t:7,e:"br"}],n:50,r:"data.can_trigger",p:[40,9,1730]}]}," ",{t:4,f:[{p:[46,9,1981],t:7,e:"ui-section",a:{label:"Special"},f:[{t:4,f:[{p:[48,13,2062],t:7,e:"ui-button",a:{icon:"pencil",action:"set_extra_setting",params:['{"target_setting": "',{t:2,r:"name",p:[48,93,2142]},'"}']}}," ",{t:2,r:"name",p:[48,118,2167]},": ",{t:2,r:"value",p:[48,128,2177]}," ",{p:[48,138,2187],t:7,e:"br"}],n:52,r:"data.extra_settings",p:[47,11,2020]}]}],n:50,r:"data.has_extra_settings",p:[45,7,1941]}]}],x:{r:["data.has_program"],s:"!_0"}}],x:{r:["data.has_disk"],s:"!_0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],413:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Nanite Control"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-notice",f:["The interface is locked."]}],n:50,r:"data.locked",p:[2,1,36]},{t:4,n:51,f:[{p:[5,3,117],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock Interface"]}," ",{p:[6,3,183],t:7,e:"ui-button",a:{icon:"save",action:"save"},f:["Save Current Setting"]}," ",{p:[7,3,255],t:7,e:"ui-section",a:{label:"Signal Code"},f:[{p:[8,5,292],t:7,e:"span",f:[{t:2,r:"data.code",p:[8,11,298]}]}," ",{p:[9,4,322],t:7,e:"ui-button",a:{icon:"pencil",action:"set_code"},f:["Set"]}]}," ",{t:4,f:[{p:[12,5,432],t:7,e:"ui-section",a:{label:"Relay Code"},f:[{p:[13,7,470],t:7,e:"span",f:[{t:2,r:"data.relay_code",p:[13,13,476]}]}," ",{p:[14,5,507],t:7,e:"ui-button",a:{icon:"pencil",action:"set_relay_code"},f:["Set"]}]}],n:50,x:{r:["data.mode"],s:'_0=="Relay"'},p:[11,3,399]}," ",{p:[17,3,602],t:7,e:"ui-section",a:{label:"Signal Mode"},f:[{p:[18,5,639],t:7,e:"span",f:[{t:2,r:"data.mode",p:[18,11,645]}]}," ",{p:[19,5,670],t:7,e:"br"}," ",{p:[20,4,678],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Off"}'},f:["Off"]}," ",{p:[21,5,755],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Local"}'},f:["Local"]}," ",{p:[22,5,836],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Targeted"}'},f:["Targeted"]}," ",{p:[23,5,923],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Area"}'},f:["Area"]}," ",{p:[24,5,1002],t:7,e:"ui-button",a:{action:"select_mode",params:'{"mode": "Relay"}'},f:["Relay"]}]}],r:"data.locked"}]}," ",{p:[28,1,1117],t:7,e:"ui-display",a:{title:"Saved Settings"},f:[{t:4,f:[{p:[30,3,1186],t:7,e:"ui-button",a:{icon:"load",action:"load",params:['{"save_id": "',{t:2,r:"id",p:[30,61,1244]},'"}']},f:[{t:2,r:"name",p:[30,71,1254]}]}," ",{t:4,f:[{p:[32,4,1301],t:7,e:"ui-button",a:{icon:"remove",action:"remove_save",params:['{"save_id": "',{t:2,r:"id",p:[32,71,1368]},'"}']},f:["Remove"]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[31,3,1277]}," ",{p:[34,3,1409],t:7,e:"br"}],n:52,r:"data.saved_settings",p:[29,2,1154]}]}]},e.exports=a.extend(r.exports)},{341:341}],414:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Ghost roles"},f:[{p:[2,2,34],t:7,e:"ui-section",a:{label:"Ignored roles"},f:[{t:4,f:[{p:[4,4,96],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[4,21,113]}],style:[{t:2,x:{r:["enabled"],s:'_0?"danger":null'},p:[4,73,165]}],action:"toggle_ignore",params:['{"key": "',{t:2,r:"key",p:[4,144,236]},'"}']},f:[{t:2,r:"desc",p:[4,155,247]}]}],n:52,r:"data.ignore",p:[3,3,71]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],415:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Relay"},f:[{t:4,f:[{p:[3,3,55],t:7,e:"h2",f:["NETWORK BUFFERS OVERLOADED"]}," ",{p:[4,3,93],t:7,e:"h3",f:["Overload Recovery Mode"]}," ",{p:[5,3,127],t:7,e:"i",f:["This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue."]
+}," ",{p:[6,3,479],t:7,e:"h3",f:["ADMINISTRATIVE OVERRIDE"]}," ",{p:[7,3,514],t:7,e:"b",f:["CAUTION - Data loss may occur"]}," ",{p:[8,3,555],t:7,e:"ui-button",a:{icon:"signal",action:"restart"},f:["Purge buffered traffic"]}],n:50,r:"data.dos_crashed",p:[2,2,28]},{t:4,n:51,f:[{p:[12,3,652],t:7,e:"ui-section",a:{label:"Relay status"},f:[{p:[13,4,689],t:7,e:"ui-button",a:{icon:"power-off",action:"toggle"},f:[{t:2,x:{r:["data.enabled"],s:'_0?"ENABLED":"DISABLED"'},p:[14,6,739]}]}]}," ",{p:[18,3,819],t:7,e:"ui-section",a:{label:"Network buffer status"},f:[{t:2,r:"data.dos_overload",p:[19,4,865]}," / ",{t:2,r:"data.dos_capacity",p:[19,28,889]}," GQ"]}],r:"data.dos_crashed"}]}]},e.exports=a.extend(r.exports)},{341:341}],416:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{healthState:function(){var t=this.get("data.health");return t>70?"good":t>50?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,306],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[18,3,346],t:7,e:"ui-notice",f:[{p:[19,5,362],t:7,e:"span",f:["Reconstruction in progress!"]}]}],n:50,r:"data.restoring",p:[17,1,321]},{p:[24,1,428],t:7,e:"ui-display",f:[{p:[26,1,442],t:7,e:"div",a:{"class":"item"},f:[{p:[27,3,463],t:7,e:"div",a:{"class":"itemLabel"},f:["Inserted AI:"]}," ",{p:[30,3,512],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[31,2,539],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",state:[{t:2,x:{r:["data.nocard"],s:'_0?"disabled":null'},p:[31,52,589]}]},f:[{t:2,x:{r:["data.name"],s:'_0?_0:"---"'},p:[31,89,626]}]}]}]}," ",{t:4,f:[{p:[36,2,709],t:7,e:"b",f:["ERROR: ",{t:2,r:"data.error",p:[36,12,719]}]}],n:50,r:"data.error",p:[35,1,689]},{t:4,n:51,f:[{p:[38,2,748],t:7,e:"h2",f:["System Status"]}," ",{p:[39,2,772],t:7,e:"div",a:{"class":"item"},f:[{p:[40,3,793],t:7,e:"div",a:{"class":"itemLabel"},f:["Current AI:"]}," ",{p:[43,3,843],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.name",p:[44,4,872]}]}," ",{p:[46,3,897],t:7,e:"div",a:{"class":"itemLabel"},f:["Status:"]}," ",{p:[49,3,943],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["Nonfunctional"],n:50,r:"data.isDead",p:[50,4,972]},{t:4,n:51,f:["Functional"],r:"data.isDead"}]}," ",{p:[56,3,1059],t:7,e:"div",a:{"class":"itemLabel"},f:["System Integrity:"]}," ",{p:[59,3,1115],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[60,4,1144],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.health",p:[60,37,1177]}],state:[{t:2,r:"healthState",p:[61,11,1204]}]},f:[{t:2,x:{r:["adata.health"],s:"Math.round(_0)"},p:[61,28,1221]},"%"]}]}," ",{p:[63,3,1274],t:7,e:"div",a:{"class":"itemLabel"},f:["Active Laws:"]}," ",{p:[66,3,1325],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[67,4,1354],t:7,e:"table",f:[{t:4,f:[{p:[69,6,1394],t:7,e:"tr",f:[{p:[69,10,1398],t:7,e:"td",f:[{p:[69,14,1402],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:".",p:[69,38,1426]}]}]}]}],n:52,r:"data.ai_laws",p:[68,5,1366]}]}]}," ",{p:[73,2,1475],t:7,e:"ui-section",a:{label:"Operations"},f:[{p:[74,3,1509],t:7,e:"ui-button",a:{icon:"plus",style:[{t:2,x:{r:["data.restoring"],s:'_0?"disabled":null'},p:[74,33,1539]}],action:"PRG_beginReconstruction"},f:["Begin Reconstruction"]}]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],417:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,1,87],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"home",params:'{"target" : "mod"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==1?"disabled":null'},p:[5,80,166]}]},f:["Access Modification"]}],n:50,r:"data.have_id_slot",p:[4,1,61]},{p:[7,1,247],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manage"}',state:[{t:2,x:{r:["data.mmode"],s:'_0==2?"disabled":null'},p:[7,90,336]}]},f:["Job Management"]}," ",{p:[8,1,404],t:7,e:"ui-button",a:{action:"PRG_switchm",icon:"folder-open",params:'{"target" : "manifest"}',state:[{t:2,x:{r:["data.mmode"],s:'!_0?"disabled":null'},p:[8,92,495]}]},f:["Crew Manifest"]}," ",{t:4,f:[{p:[10,1,584],t:7,e:"ui-button",a:{action:"PRG_print",icon:"print",state:[{t:2,x:{r:["data.has_id","data.mmode"],s:'!_1||_0&&_1==1?null:"disabled"'},p:[10,51,634]}]},f:["Print"]}],n:50,r:"data.have_printer",p:[9,1,558]},{t:4,f:[{p:[14,1,753],t:7,e:"div",a:{"class":"item"},f:[{p:[15,3,774],t:7,e:"h2",f:["Crew Manifest"]}," ",{p:[16,3,799],t:7,e:"br"},"Please use security record computer to modify entries.",{p:[16,61,857],t:7,e:"br"},{p:[16,65,861],t:7,e:"br"}]}," ",{t:4,f:[{p:[19,2,898],t:7,e:"div",a:{"class":"item"},f:[{t:2,r:"name",p:[20,2,918]}," - ",{t:2,r:"rank",p:[20,13,929]}]}],n:52,r:"data.manifest",p:[18,1,873]}],n:50,x:{r:["data.mmode"],s:"!_0"},p:[13,1,733]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.mmode"],s:"_0==2"},f:[{p:[25,1,984],t:7,e:"div",a:{"class":"item"},f:[{p:[26,3,1005],t:7,e:"h2",f:["Job Management"]}]}," ",{p:[28,1,1036],t:7,e:"table",f:[{p:[29,1,1044],t:7,e:"tr",f:[{p:[29,5,1048],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,27,1070],t:7,e:"b",f:["Job"]}]},{p:[29,42,1085],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,64,1107],t:7,e:"b",f:["Slots"]}]},{p:[29,81,1124],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,103,1146],t:7,e:"b",f:["Open job"]}]},{p:[29,123,1166],t:7,e:"td",a:{style:"width:25%"},f:[{p:[29,145,1188],t:7,e:"b",f:["Close job"]}]}]}," ",{t:4,f:[{p:[32,2,1238],t:7,e:"tr",f:[{p:[32,6,1242],t:7,e:"td",f:[{t:2,r:"title",p:[32,10,1246]}]},{p:[32,24,1260],t:7,e:"td",f:[{t:2,r:"current",p:[32,28,1264]},"/",{t:2,r:"total",p:[32,40,1276]}]},{p:[32,54,1290],t:7,e:"td",f:[{p:[32,58,1294],t:7,e:"ui-button",a:{action:"PRG_open_job",params:['{"target" : "',{t:2,r:"title",p:[32,112,1348]},'"}'],state:[{t:2,x:{r:["status_open"],s:'_0?null:"disabled"'},p:[32,132,1368]}]},f:[{t:2,r:"desc_open",p:[32,169,1405]}]},{p:[32,194,1430],t:7,e:"br"}]},{p:[32,203,1439],t:7,e:"td",f:[{p:[32,207,1443],t:7,e:"ui-button",a:{action:"PRG_close_job",params:['{"target" : "',{t:2,r:"title",p:[32,262,1498]},'"}'],state:[{t:2,x:{r:["status_close"],s:'_0?null:"disabled"'},p:[32,282,1518]}]},f:[{t:2,r:"desc_close",p:[32,320,1556]}]}]}]}],n:52,r:"data.slots",p:[30,1,1215]}]}]},{t:4,n:50,x:{r:["data.mmode"],s:"!(_0==2)"},f:[" ",{p:[40,1,1626],t:7,e:"div",a:{"class":"item"},f:[{p:[41,3,1647],t:7,e:"h2",f:["Access Modification"]}]}," ",{t:4,f:[{p:[45,3,1707],t:7,e:"span",a:{"class":"alert"},f:[{p:[45,23,1727],t:7,e:"i",f:["Please insert the ID into the terminal to proceed."]}]},{p:[45,87,1791],t:7,e:"br"}],n:50,x:{r:["data.has_id"],s:"!_0"},p:[44,1,1684]},{p:[48,1,1805],t:7,e:"div",a:{"class":"item"},f:[{p:[49,3,1826],t:7,e:"div",a:{"class":"itemLabel"},f:["Target Identity:"]}," ",{p:[52,3,1879],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[53,2,1906],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "id"}'},f:[{t:2,r:"data.id_name",p:[53,72,1976]}]}]}]}," ",{p:[56,1,2021],t:7,e:"div",a:{"class":"item"},f:[{p:[57,3,2042],t:7,e:"div",a:{"class":"itemLabel"},f:["Auth Identity:"]}," ",{p:[60,3,2093],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[61,2,2120],t:7,e:"ui-button",a:{icon:"eject",action:"PRG_eject",params:'{"target" : "auth"}'},f:[{t:2,r:"data.auth_name",p:[61,74,2192]}]}]}]}," ",{p:[64,1,2239],t:7,e:"hr"}," ",{t:4,f:[{t:4,f:[{p:[68,2,2295],t:7,e:"div",a:{"class":"item"},f:[{p:[69,4,2317],t:7,e:"h2",f:["Details"]}]}," ",{t:4,f:[{p:[73,2,2364],t:7,e:"div",a:{"class":"item"},f:[{p:[74,4,2386],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[77,4,2442],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_owner",p:[78,3,2470]}]}]}," ",{p:[81,2,2507],t:7,e:"div",a:{"class":"item"},f:[{p:[82,4,2529],t:7,e:"div",a:{"class":"itemLabel"},f:["Rank:"]}," ",{p:[85,4,2574],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.id_rank",p:[86,3,2602]}]}]}," ",{p:[89,2,2638],t:7,e:"div",a:{"class":"item"},f:[{p:[90,4,2660],t:7,e:"div",a:{"class":"itemLabel"},f:["Demote:"]}," ",{p:[93,4,2707],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[94,3,2735],t:7,e:"ui-button",a:{action:"PRG_terminate",icon:"gear",state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Unassigned"?"disabled":null'},p:[94,56,2788]}]},f:["Demote ",{t:2,r:"data.id_owner",p:[94,117,2849]}]}]}]}],n:50,r:"data.minor",p:[72,2,2344]},{t:4,n:51,f:[{p:[99,2,2909],t:7,e:"div",a:{"class":"item"},f:[{p:[100,4,2931],t:7,e:"div",a:{"class":"itemLabel"},f:["Registered Name:"]}," ",{p:[103,4,2987],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[104,3,3015],t:7,e:"ui-button",a:{action:"PRG_edit",icon:"pencil",params:'{"name" : "1"}'},f:[{t:2,r:"data.id_owner",p:[104,70,3082]}]}]}]}," ",{p:[108,2,3132],t:7,e:"div",a:{"class":"item"},f:[{p:[109,4,3154],t:7,e:"h2",f:["Assignment"]}]}," ",{p:[111,3,3184],t:7,e:"ui-button",a:{action:"PRG_togglea",icon:"gear"},f:[{t:2,x:{r:["data.assignments"],s:'_0?"Hide assignments":"Show assignments"'},p:[111,47,3228]}]}," ",{p:[112,2,3304],t:7,e:"div",a:{"class":"item"},f:[{p:[113,4,3326],t:7,e:"span",a:{id:"allvalue.jobsslot"},f:[]}]}," ",{p:[117,2,3379],t:7,e:"div",a:{"class":"item"},f:[{t:4,f:[{p:[119,4,3429],t:7,e:"div",a:{id:"all-value.jobs"},f:[{p:[120,3,3457],t:7,e:"table",f:[{p:[121,5,3469],t:7,e:"tr",f:[{p:[122,4,3477],t:7,e:"th",f:["Command"]}," ",{p:[123,4,3497],t:7,e:"td",f:[{p:[124,6,3507],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Captain"}',state:[{t:2,x:{r:["data.id_rank"],s:'_0=="Captain"?"selected":null'},p:[124,83,3584]}]},f:["Captain"]}]}]}," ",{p:[127,5,3678],t:7,e:"tr",f:[{p:[128,4,3686],t:7,e:"th",f:["Special"]}," ",{p:[129,4,3706],t:7,e:"td",f:[{p:[130,6,3716],t:7,e:"ui-button",a:{action:"PRG_assign",params:'{"assign_target" : "Custom"}'},f:["Custom"]}]}]}," ",{p:[133,5,3827],t:7,e:"tr",f:[{p:[134,4,3835],t:7,e:"th",a:{style:"color: '#FFA500';"},f:["Engineering"]}," ",{p:[135,4,3885],t:7,e:"td",f:[{t:4,f:[{p:[137,5,3931],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[137,64,3990]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[137,82,4008]}]},f:[{t:2,r:"display_name",p:[137,127,4053]}]}],n:52,r:"data.engineering_jobs",p:[136,6,3895]}]}]}," ",{p:[141,5,4120],t:7,e:"tr",f:[{p:[142,4,4128],t:7,e:"th",a:{style:"color: '#008000';"},f:["Medical"]}," ",{p:[143,4,4174],t:7,e:"td",f:[{t:4,f:[{p:[145,5,4216],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[145,64,4275]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[145,82,4293]}]},f:[{t:2,r:"display_name",p:[145,127,4338]}]}],n:52,r:"data.medical_jobs",p:[144,6,4184]}]}]}," ",{p:[149,5,4405],t:7,e:"tr",f:[{p:[150,4,4413],t:7,e:"th",a:{style:"color: '#800080';"},f:["Science"]}," ",{p:[151,4,4459],t:7,e:"td",f:[{t:4,f:[{p:[153,5,4501],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[153,64,4560]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[153,82,4578]}]},f:[{t:2,r:"display_name",p:[153,127,4623]}]}],n:52,r:"data.science_jobs",p:[152,6,4469]}]}]}," ",{p:[157,5,4690],t:7,e:"tr",f:[{p:[158,4,4698],t:7,e:"th",a:{style:"color: '#DD0000';"},f:["Security"]}," ",{p:[159,4,4745],t:7,e:"td",f:[{t:4,f:[{p:[161,5,4788],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[161,64,4847]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[161,82,4865]}]},f:[{t:2,r:"display_name",p:[161,127,4910]}]}],n:52,r:"data.security_jobs",p:[160,6,4755]}]}]}," ",{p:[165,5,4977],t:7,e:"tr",f:[{p:[166,4,4985],t:7,e:"th",a:{style:"color: '#cc6600';"},f:["Cargo"]}," ",{p:[167,4,5029],t:7,e:"td",f:[{t:4,f:[{p:[169,5,5069],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[169,64,5128]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[169,82,5146]}]},f:[{t:2,r:"display_name",p:[169,127,5191]}]}],n:52,r:"data.cargo_jobs",p:[168,6,5039]}]}]}," ",{p:[173,5,5258],t:7,e:"tr",f:[{p:[174,4,5266],t:7,e:"th",a:{style:"color: '#808080';"},f:["Civilian"]}," ",{p:[175,4,5313],t:7,e:"td",f:[{t:4,f:[{p:[177,5,5356],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[177,64,5415]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[177,82,5433]}]},f:[{t:2,r:"display_name",p:[177,127,5478]}]}],n:52,r:"data.civilian_jobs",p:[176,6,5323]}]}]}," ",{t:4,f:[{p:[182,4,5576],t:7,e:"tr",f:[{p:[183,6,5586],t:7,e:"th",a:{style:"color: '#A52A2A';"},f:["CentCom"]}," ",{p:[184,6,5634],t:7,e:"td",f:[{t:4,f:[{p:[186,7,5677],t:7,e:"ui-button",a:{action:"PRG_assign",params:['{"assign_target" : "',{t:2,r:"job",p:[186,66,5736]},'"}'],state:[{t:2,x:{r:["data.id_rank","job"],s:'_0==_1?"selected":null'},p:[186,84,5754]}]},f:[{t:2,r:"display_name",p:[186,129,5799]}]}],n:52,r:"data.centcom_jobs",p:[185,5,5643]}]}]}],n:50,r:"data.centcom_access",p:[181,5,5545]}]}]}],n:50,r:"data.assignments",p:[118,4,3401]}]}],r:"data.minor"}," ",{t:4,f:[{p:[198,4,5956],t:7,e:"div",a:{"class":"item"},f:[{p:[199,3,5977],t:7,e:"h2",f:["Central Command"]}]}," ",{p:[201,4,6015],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[203,5,6094],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[204,5,6128],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[204,64,6187]},'", "allowed" : "',{t:2,r:"allowed",p:[204,87,6210]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[204,109,6232]}]},f:[{t:2,r:"desc",p:[204,140,6263]}]}]}],n:52,r:"data.all_centcom_access",p:[202,3,6056]}]}],n:50,r:"data.centcom_access",p:[197,2,5925]},{t:4,n:51,f:[{p:[209,4,6330],t:7,e:"div",a:{"class":"item"},f:[{p:[210,3,6351],t:7,e:"h2",f:[{t:2,r:"data.station_name",p:[210,7,6355]}]}]}," ",{p:[212,4,6395],t:7,e:"div",a:{"class":"item",style:"width: 100%"},f:[{t:4,f:[{p:[214,5,6463],t:7,e:"div",a:{style:"float: left; width: 175px; min-height: 250px"},f:[{p:[215,4,6525],t:7,e:"div",a:{"class":"average"},f:[{p:[215,25,6546],t:7,e:"ui-button",a:{action:"PRG_regsel",state:[{t:2,x:{r:["selected"],s:'_0?"toggle":null'},p:[215,63,6584]}],params:['{"region" : "',{t:2,r:"regid",p:[215,116,6637]},'"}']},f:[{p:[215,129,6650],t:7,e:"b",f:[{t:2,r:"name",p:[215,132,6653]}]}]}]}," ",{p:[216,4,6687],t:7,e:"br"}," ",{t:4,f:[{p:[218,6,6721],t:7,e:"div",a:{"class":"itemContentWide"},f:[{p:[219,5,6755],t:7,e:"ui-button",a:{action:"PRG_access",params:['{"access_target" : "',{t:2,r:"ref",p:[219,64,6814]},'", "allowed" : "',{t:2,r:"allowed",p:[219,87,6837]},'"}'],state:[{t:2,x:{r:["allowed"],s:'_0?"toggle":null'},p:[219,109,6859]}]},f:[{t:2,r:"desc",p:[219,140,6890]}]}]}],n:52,r:"accesses",p:[217,6,6697]}]}],n:52,r:"data.regions",p:[213,3,6436]}]}],r:"data.centcom_access"}],n:50,r:"data.has_id",p:[67,3,2274]}],n:50,r:"data.authenticated",p:[66,1,2245]}]}],x:{r:["data.mmode"],s:"!_0"}}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],418:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargeState:function(t){var e=this.get("data.battery.max");return t>e/2?"good":t>e/4?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[15,1,297],t:7,e:"ntosheader"}," ",{p:[17,1,312],t:7,e:"ui-display",f:[{p:[18,2,326],t:7,e:"i",f:["Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device."]},{p:[18,137,461],t:7,e:"hr"}," ",{p:[19,2,467],t:7,e:"ui-display",a:{title:"Power Supply"},f:[{p:[20,3,503],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"data.power_usage",p:[21,4,539]},"W"]}," ",{t:4,f:[{p:[25,4,606],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Active"]}," ",{p:[28,4,674],t:7,e:"ui-section",a:{label:"Battery Rating"},f:[{t:2,r:"data.battery.max",p:[29,5,714]}]}," ",{p:[31,4,755],t:7,e:"ui-section",a:{label:"Battery Charge"},f:[{p:[32,5,795],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.battery.max",p:[32,26,816]}],value:[{t:2,r:"adata.battery.charge",p:[32,56,846]}],state:[{t:2,x:{r:["chargeState","adata.battery.charge"],s:"_0(_1)"},p:[32,89,879]}]},f:[{t:2,x:{r:["adata.battery.charge"],s:"Math.round(_0)"},p:[32,128,918]},"/",{t:2,r:"adata.battery.max",p:[32,165,955]}]}]}],n:50,r:"data.battery",p:[24,3,582]},{t:4,n:51,f:[{p:[35,4,1017],t:7,e:"ui-section",a:{label:"Battery Status"},f:["Not Available"]}],r:"data.battery"}]}," ",{p:[41,2,1116],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,3,1151],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,4,1189],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,25,1210]}],value:[{t:2,r:"adata.disk_used",p:[43,53,1238]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,87,1272]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,123,1308]},"GQ"]}]}]}," ",{p:[47,2,1373],t:7,e:"ui-display",a:{title:"Computer Components"},f:[{t:4,f:[{p:[49,4,1443],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[49,26,1465]}]},f:[{p:[50,5,1480],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"desc",p:[50,59,1534]}]}," ",{p:[52,5,1554],t:7,e:"ui-section",a:{label:"State"},f:[{p:[53,6,1586],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["critical"],s:'_0?"disabled":null'},p:[53,24,1604]}],action:"PC_toggle_component",params:['{"name": "',{t:2,r:"name",p:[53,105,1685]},'"}']},f:[{t:2,x:{r:["enabled"],s:'_0?"Enabled":"Disabled"'},p:[54,7,1704]}]}]}," ",{t:4,f:[{p:[59,6,1810],t:7,e:"ui-section",a:{label:"Power Usage"},f:[{t:2,r:"powerusage",p:[60,7,1849]},"W"]}],n:50,r:"powerusage",p:[58,5,1786]}]}," ",{p:[64,4,1922],t:7,e:"br"}],n:52,r:"data.hardware",p:[48,3,1416]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],419:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,3,97],t:7,e:"h2",f:["An error has occurred and this program can not continue."]}," Additional information: ",{t:2,r:"data.error",p:[8,27,189]},{p:[8,41,203],t:7,e:"br"}," ",{p:[9,3,210],t:7,e:"i",f:["Please try again. If the problem persists contact your system administrator for assistance."]}," ",{p:[10,3,311],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["Restart program"]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,f:[{p:[13,4,410],t:7,e:"h2",f:["Viewing file ",{t:2,r:"data.filename",p:[13,21,427]}]}," ",{p:[14,4,453],t:7,e:"div",a:{"class":"item"},f:[{p:[15,4,475],t:7,e:"ui-button",a:{action:"PRG_closefile"},f:["CLOSE"]}," ",{p:[16,4,530],t:7,e:"ui-button",a:{action:"PRG_edit"},f:["EDIT"]}," ",{p:[17,4,579],t:7,e:"ui-button",a:{action:"PRG_printfile"},f:["PRINT"]}," "]},{p:[18,10,640],t:7,e:"hr"}," ",{t:3,r:"data.filedata",p:[19,4,648]}],n:50,r:"data.filename",p:[12,3,385]},{t:4,n:51,f:[{p:[21,4,682],t:7,e:"h2",f:["Available files (local):"]}," ",{p:[22,4,719],t:7,e:"table",f:[{p:[23,5,731],t:7,e:"tr",f:[{p:[24,6,741],t:7,e:"th",f:["File name"]}," ",{p:[25,6,765],t:7,e:"th",f:["File type"]}," ",{p:[26,6,789],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[27,6,818],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[30,6,878],t:7,e:"tr",f:[{p:[31,7,889],t:7,e:"td",f:[{t:2,r:"name",p:[31,11,893]}]}," ",{p:[32,7,913],t:7,e:"td",f:[".",{t:2,r:"type",p:[32,12,918]}]}," ",{p:[33,7,938],t:7,e:"td",f:[{t:2,r:"size",p:[33,11,942]},"GQ"]}," ",{p:[34,7,964],t:7,e:"td",f:[{p:[35,8,976],t:7,e:"ui-button",a:{action:"PRG_openfile",params:['{"name": "',{t:2,r:"name",p:[35,59,1027]},'"}']},f:["VIEW"]}," ",{p:[36,8,1063],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[36,26,1081]}],action:"PRG_deletefile",params:['{"name": "',{t:2,r:"name",p:[36,105,1160]},'"}']},f:["DELETE"]}," ",{p:[37,8,1198],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[37,26,1216]}],action:"PRG_rename",params:['{"name": "',{t:2,r:"name",p:[37,101,1291]},'"}']},f:["RENAME"]}," ",{p:[38,8,1329],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[38,26,1347]}],action:"PRG_clone",params:['{"name": "',{t:2,r:"name",p:[38,100,1421]},'"}']},f:["CLONE"]}," ",{t:4,f:[{p:[40,9,1492],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[40,27,1510]}],action:"PRG_copytousb",params:['{"name": "',{t:2,r:"name",p:[40,105,1588]},'"}']},f:["EXPORT"]}],n:50,r:"data.usbconnected",p:[39,8,1458]}]}]}],n:52,r:"data.files",p:[29,5,852]}]}," ",{t:4,f:[{p:[47,4,1715],t:7,e:"h2",f:["Available files (portable device):"]}," ",{p:[48,4,1762],t:7,e:"table",f:[{p:[49,5,1774],t:7,e:"tr",f:[{p:[50,6,1784],t:7,e:"th",f:["File name"]}," ",{p:[51,6,1808],t:7,e:"th",f:["File type"]}," ",{p:[52,6,1832],t:7,e:"th",f:["File size (GQ)"]}," ",{p:[53,6,1861],t:7,e:"th",f:["Operations"]}]}," ",{t:4,f:[{p:[56,6,1924],t:7,e:"tr",f:[{p:[57,7,1935],t:7,e:"td",f:[{t:2,r:"name",p:[57,11,1939]}]}," ",{p:[58,7,1959],t:7,e:"td",f:[".",{t:2,r:"type",p:[58,12,1964]}]}," ",{p:[59,7,1984],t:7,e:"td",f:[{t:2,r:"size",p:[59,11,1988]},"GQ"]}," ",{p:[60,7,2010],t:7,e:"td",f:[{p:[61,8,2022],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[61,26,2040]}],action:"PRG_usbdeletefile",params:['{"name": "',{t:2,r:"name",p:[61,108,2122]},'"}']},f:["DELETE"]}," ",{t:4,f:[{p:[63,9,2194],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["undeletable"],s:'_0?"disabled":null'},p:[63,27,2212]}],action:"PRG_copyfromusb",params:['{"name": "',{t:2,r:"name",p:[63,107,2292]},'"}']},f:["IMPORT"]}],n:50,r:"data.usbconnected",p:[62,8,2160]}]}]}],n:52,r:"data.usbfiles",p:[55,5,1895]}]}],n:50,r:"data.usbconnected",p:[46,4,1686]}," ",{p:[70,4,2401],t:7,e:"ui-button",a:{action:"PRG_newtextfile"},f:["NEW DATA FILE"]}],r:"data.filename"}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],420:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["No program loaded. Please select program from list below."]}," ",{p:[6,2,141],t:7,e:"table",f:[{t:4,f:[{p:[8,4,178],t:7,e:"tr",f:[{p:[8,8,182],t:7,e:"td",f:[{p:[8,12,186],t:7,e:"ui-button",a:{action:"PC_runprogram",params:['{"name": "',{t:2,r:"name",p:[8,64,238]},'"}']},f:[{t:2,r:"desc",p:[9,5,255]}]}]},{p:[11,4,283],t:7,e:"td",f:[{p:[11,8,287],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["running"],s:'_0?null:"disabled"'},p:[11,26,305]}],icon:"close",action:"PC_killprogram",params:['{"name": "',{t:2,r:"name",p:[11,114,393]},'"}']}}]}]}],n:52,r:"data.programs",p:[7,3,151]}]}," ",{p:[14,2,441],t:7,e:"br"},{p:[14,6,445],t:7,e:"br"}," ",{t:4,f:[{p:[16,3,476],t:7,e:"ui-button",a:{action:"PC_toggle_light",style:[{t:2,x:{r:["data.light_on"],s:'_0?"selected":null'},p:[16,46,519]}]},f:["Toggle Flashlight"]},{p:[16,114,587],t:7,e:"br"}," ",{p:[17,3,594],t:7,e:"ui-button",a:{action:"PC_light_color"},f:["Change Flashlight Color ",{p:[17,62,653],t:7,e:"span",a:{style:["border:1px solid #161616; background-color: ",{t:2,r:"data.comp_light_color",p:[17,119,710]},";"]},f:[" "]}]}],n:50,r:"data.has_light",p:[15,2,451]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],421:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[6,3,100],t:7,e:"h1",f:["ADMINISTRATIVE MODE"]}],n:50,r:"data.adminmode",p:[5,2,75]}," ",{t:4,f:[{p:[10,3,161],t:7,e:"div",a:{"class":"itemLabel"},f:["Current channel:"]}," ",{p:[13,3,217],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.title",p:[14,4,246]}]}," ",{p:[16,3,272],t:7,e:"div",a:{"class":"itemLabel"},f:["Operator access:"]}," ",{p:[19,3,328],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:[{p:[21,5,386],t:7,e:"b",f:["Enabled"]}],n:50,r:"data.is_operator",p:[20,4,357]},{t:4,n:51,f:[{p:[23,5,417],t:7,e:"b",f:["Disabled"]}],r:"data.is_operator"}]}," ",{p:[26,3,455],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[29,3,504],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[30,4,533],t:7,e:"table",f:[{p:[31,5,545],t:7,e:"tr",f:[{p:[31,9,549],t:7,e:"td",f:[{p:[31,13,553],t:7,e:"ui-button",a:{action:"PRG_speak"},f:["Send message"]}]}]},{p:[32,5,612],t:7,e:"tr",f:[{p:[32,9,616],t:7,e:"td",f:[{p:[32,13,620],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[33,5,687],t:7,e:"tr",f:[{p:[33,9,691],t:7,e:"td",f:[{p:[33,13,695],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]},{p:[34,5,774],t:7,e:"tr",f:[{p:[34,9,778],t:7,e:"td",f:[{p:[34,13,782],t:7,e:"ui-button",a:{action:"PRG_leavechannel"},f:["Leave channel"]}]}]},{p:[35,5,849],t:7,e:"tr",f:[{p:[35,9,853],t:7,e:"td",f:[{p:[35,13,857],t:7,e:"ui-button",a:{action:"PRG_savelog"},f:["Save log to local drive"]}," ",{t:4,f:[{p:[37,6,959],t:7,e:"tr",f:[{p:[37,10,963],t:7,e:"td",f:[{p:[37,14,967],t:7,e:"ui-button",a:{action:"PRG_renamechannel"},f:["Rename channel"]}]}]},{p:[38,6,1037],t:7,e:"tr",f:[{p:[38,10,1041],t:7,e:"td",f:[{p:[38,14,1045],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}]}]},{p:[39,6,1111],t:7,e:"tr",f:[{p:[39,10,1115],t:7,e:"td",f:[{p:[39,14,1119],t:7,e:"ui-button",a:{action:"PRG_deletechannel"},f:["Delete channel"]}]}]}],n:50,r:"data.is_operator",p:[36,5,929]}]}]}]}]}," ",{p:[43,3,1221],t:7,e:"b",f:["Chat Window"]}," ",{p:[44,4,1243],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[45,4,1298],t:7,e:"div",a:{"class":"item"},f:[{p:[46,5,1321],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"msg",p:[48,7,1403]},{p:[48,14,1410],t:7,e:"br"}],n:52,r:"data.messages",p:[47,6,1373]}]}]}]}," ",{p:[53,3,1464],t:7,e:"b",f:["Connected Users"]},{p:[53,25,1486],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"name",p:[55,4,1519]},{p:[55,12,1527],t:7,e:"br"}],n:52,r:"data.clients",p:[54,3,1493]}],n:50,r:"data.title",p:[9,2,140]},{t:4,n:51,f:[{p:[58,3,1556],t:7,e:"b",f:["Controls:"]}," ",{p:[59,3,1575],t:7,e:"table",f:[{p:[60,4,1586],t:7,e:"tr",f:[{p:[60,8,1590],t:7,e:"td",f:[{p:[60,12,1594],t:7,e:"ui-button",a:{action:"PRG_changename"},f:["Change nickname"]}]}]},{p:[61,4,1660],t:7,e:"tr",f:[{p:[61,8,1664],t:7,e:"td",f:[{p:[61,12,1668],t:7,e:"ui-button",a:{action:"PRG_newchannel"},f:["New Channel"]}]}]},{p:[62,4,1730],t:7,e:"tr",f:[{p:[62,8,1734],t:7,e:"td",f:[{p:[62,12,1738],t:7,e:"ui-button",a:{action:"PRG_toggleadmin"},f:["Toggle administration mode"]}]}]}]}," ",{p:[64,3,1826],t:7,e:"b",f:["Available channels:"]}," ",{p:[65,3,1855],t:7,e:"table",f:[{t:4,f:[{p:[67,4,1898],t:7,e:"tr",f:[{p:[67,8,1902],t:7,e:"td",f:[{p:[67,12,1906],t:7,e:"ui-button",a:{action:"PRG_joinchannel",params:['{"id": "',{t:2,r:"id",p:[67,64,1958]},'"}']},f:[{t:2,r:"chan",p:[67,74,1968]}]},{p:[67,94,1988],t:7,e:"br"}]}]}],n:52,r:"data.all_channels",p:[66,3,1865]}]}],r:"data.title"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],422:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:["##SYSTEM ERROR: ",{t:2,r:"data.error",p:[6,19,112]},{p:[6,33,126],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["RESET"]}],n:50,r:"data.error",p:[5,2,75]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.target"],s:"_0"},f:["##DoS traffic generator active. Tx: ",{t:2,r:"data.speed",p:[8,39,236]},"GQ/s",{p:[8,57,254],t:7,e:"br"}," ",{t:4,f:[{t:2,r:"nums",p:[10,4,291]},{p:[10,12,299],t:7,e:"br"}],n:52,r:"data.dos_strings",p:[9,3,261]}," ",{p:[12,3,318],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["ABORT"]}]},{t:4,n:50,x:{r:["data.target"],s:"!(_0)"},f:[" ##DoS traffic generator ready. Select target device.",{p:[14,55,430],t:7,e:"br"}," ",{t:4,f:["Targeted device ID: ",{t:2,r:"data.focus",p:[16,24,479]}],n:50,r:"data.focus",p:[15,3,437]},{t:4,n:51,f:["Targeted device ID: None"],r:"data.focus"}," ",{p:[20,3,545],t:7,e:"ui-button",a:{action:"PRG_execute"},f:["EXECUTE"]},{p:[20,54,596],t:7,e:"div",a:{style:"clear:both"}}," Detected devices on network:",{p:[21,31,657],t:7,e:"br"}," ",{t:4,f:[{p:[23,4,689],t:7,e:"ui-button",a:{action:"PRG_target_relay",params:['{"targid": "',{t:2,r:"id",p:[23,61,746]},'"}']},f:[{t:2,r:"id",p:[23,71,756]}]}],n:52,r:"data.relays",p:[22,3,664]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],423:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"i",f:["Welcome to software download utility. Please select which software you wish to download."]},{p:[5,97,170],t:7,e:"hr"}," ",{t:4,f:[{p:[7,3,197],t:7,e:"ui-display",a:{title:"Download Error"},f:[{p:[8,4,236],t:7,e:"ui-section",a:{label:"Information"},f:[{t:2,r:"data.error",p:[9,5,273]}]}," ",{p:[11,4,308],t:7,e:"ui-section",a:{label:"Reset Program"},f:[{p:[12,5,347],t:7,e:"ui-button",a:{icon:"times",action:"PRG_reseterror"},f:["RESET"]}]}]}],n:50,r:"data.error",p:[6,2,176]},{t:4,n:51,f:[{t:4,f:[{p:[19,4,498],t:7,e:"ui-display",a:{title:"Download Running"},f:[{p:[20,5,540],t:7,e:"i",f:["Please wait..."]}," ",{p:[21,5,566],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"data.downloadname",p:[22,6,602]}]}," ",{p:[24,5,646],t:7,e:"ui-section",a:{label:"File description"},f:[{t:2,r:"data.downloaddesc",p:[25,6,689]}]}," ",{p:[27,5,733],t:7,e:"ui-section",a:{label:"File size"},f:[{t:2,r:"data.downloadsize",p:[28,6,769]},"GQ"]}," ",{p:[30,5,815],t:7,e:"ui-section",a:{label:"Transfer Rate"},f:[{t:2,r:"data.downloadspeed",p:[31,6,855]}," GQ/s"]}," ",{p:[33,5,905],t:7,e:"ui-section",a:{label:"Download progress"},f:[{p:[34,6,949],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.downloadsize",p:[34,27,970]}],value:[{t:2,r:"adata.downloadcompletion",p:[34,58,1001]}],state:"good"},f:[{t:2,x:{r:["adata.downloadcompletion"],s:"Math.round(_0)"},p:[34,101,1044]},"GQ / ",{t:2,r:"adata.downloadsize",p:[34,146,1089]},"GQ"]}]}]}],n:50,r:"data.downloadname",p:[18,3,469]}],r:"data.error"}," ",{t:4,f:[{t:4,f:[{p:[41,4,1230],t:7,e:"ui-display",a:{title:"File System"},f:[{p:[42,5,1267],t:7,e:"ui-section",a:{label:"Used Capacity"},f:[{p:[43,6,1307],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.disk_size",p:[43,27,1328]}],value:[{t:2,r:"adata.disk_used",p:[43,55,1356]}],state:"good"},f:[{t:2,x:{r:["adata.disk_used"],s:"Math.round(_0)"},p:[43,89,1390]},"GQ / ",{t:2,r:"adata.disk_size",p:[43,125,1426]},"GQ"]}]}]}," ",{p:[47,4,1499],t:7,e:"ui-display",a:{title:"Primary Software Repository"},f:[{t:4,f:[{p:[49,6,1594],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[49,28,1616]}]},f:[{p:[50,7,1637],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[50,61,1691]}]}," ",{p:[52,7,1723],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[53,8,1761]}," (",{t:2,r:"size",p:[53,22,1775]}," GQ)"]}," ",{p:[55,7,1814],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[56,8,1856]}]}," ",{p:[58,7,1900],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[58,80,1973]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[62,6,2052],t:7,e:"br"}],n:52,r:"data.downloadable_programs",p:[48,5,1552]}]}," ",{t:4,f:[{p:[67,5,2128],t:7,e:"ui-display",a:{title:"UNKNOWN Software Repository"},
+f:[{p:[68,6,2182],t:7,e:"i",f:["Please note that Nanotrasen does not recommend download of software from non-official servers."]}," ",{t:4,f:[{p:[70,7,2326],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"filedesc",p:[70,29,2348]}]},f:[{p:[71,8,2370],t:7,e:"div",a:{style:"display: table-caption; margin-left: 3px"},f:[{t:2,r:"fileinfo",p:[71,62,2424]}]}," ",{p:[73,8,2458],t:7,e:"ui-section",a:{label:"File name"},f:[{t:2,r:"filename",p:[74,9,2497]}," (",{t:2,r:"size",p:[74,23,2511]}," GQ)"]}," ",{p:[76,8,2552],t:7,e:"ui-section",a:{label:"Compatibility"},f:[{t:2,r:"compatibility",p:[77,9,2595]}]}," ",{p:[79,8,2641],t:7,e:"ui-button",a:{icon:"signal",action:"PRG_downloadfile",params:['{"filename": "',{t:2,r:"filename",p:[79,81,2714]},'"}']},f:["DOWNLOAD"]}]}," ",{p:[83,7,2797],t:7,e:"br"}],n:52,r:"data.hacked_programs",p:[69,6,2289]}]}],n:50,r:"data.hackedavailable",p:[66,4,2095]}],n:50,x:{r:["data.error"],s:"!_0"},p:[40,3,1207]}],n:50,x:{r:["data.downloadname"],s:"!_0"},p:[39,2,1178]}," ",{p:[89,2,2866],t:7,e:"br"},{p:[89,6,2870],t:7,e:"br"},{p:[89,10,2874],t:7,e:"hr"},{p:[89,14,2878],t:7,e:"i",f:["NTOS v2.0.4b Copyright Nanotrasen 2557 - 2559"]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],424:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[6,2,76],t:7,e:"ui-display",a:{title:"WIRELESS CONNECTIVITY"},f:[{p:[8,3,122],t:7,e:"ui-section",a:{label:"Active NTNetRelays"},f:[{p:[9,4,165],t:7,e:"b",f:[{t:2,r:"data.ntnetrelays",p:[9,7,168]}]}]}," ",{t:4,f:[{p:[12,4,239],t:7,e:"ui-section",a:{label:"System status"},f:[{p:[13,6,279],t:7,e:"b",f:[{t:2,x:{r:["data.ntnetstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[13,9,282]}]}]}," ",{p:[15,4,352],t:7,e:"ui-section",a:{label:"Control"},f:[{p:[17,4,385],t:7,e:"ui-button",a:{icon:"plus",action:"toggleWireless"},f:["TOGGLE"]}]}," ",{p:[21,4,480],t:7,e:"br"},{p:[21,8,484],t:7,e:"br"}," ",{p:[22,4,492],t:7,e:"i",f:["Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again!"]}],n:50,r:"data.ntnetrelays",p:[11,3,211]},{t:4,n:51,f:[{p:[24,4,627],t:7,e:"br"},{p:[24,8,631],t:7,e:"p",f:["Wireless coverage unavailable, no relays are connected."]}],r:"data.ntnetrelays"}]}," ",{p:[29,2,722],t:7,e:"ui-display",a:{title:"FIREWALL CONFIGURATION"},f:[{p:[31,2,768],t:7,e:"table",f:[{p:[32,3,778],t:7,e:"tr",f:[{p:[33,4,786],t:7,e:"th",f:["PROTOCOL"]},{p:[34,4,802],t:7,e:"th",f:["STATUS"]},{p:[35,4,816],t:7,e:"th",f:["CONTROL"]}]},{p:[36,3,830],t:7,e:"tr",f:[" ",{p:[37,4,838],t:7,e:"td",f:["Software Downloads"]},{p:[38,4,864],t:7,e:"td",f:[{t:2,x:{r:["data.config_softwaredownload"],s:'_0?"ENABLED":"DISABLED"'},p:[38,8,868]}]},{p:[39,4,929],t:7,e:"td",f:[" ",{p:[39,9,934],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "1"}'},f:["TOGGLE"]}]}]},{p:[40,3,1012],t:7,e:"tr",f:[" ",{p:[41,4,1020],t:7,e:"td",f:["Peer to Peer Traffic"]},{p:[42,4,1048],t:7,e:"td",f:[{t:2,x:{r:["data.config_peertopeer"],s:'_0?"ENABLED":"DISABLED"'},p:[42,8,1052]}]},{p:[43,4,1107],t:7,e:"td",f:[{p:[43,8,1111],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "2"}'},f:["TOGGLE"]}]}]},{p:[44,3,1189],t:7,e:"tr",f:[" ",{p:[45,4,1197],t:7,e:"td",f:["Communication Systems"]},{p:[46,4,1226],t:7,e:"td",f:[{t:2,x:{r:["data.config_communication"],s:'_0?"ENABLED":"DISABLED"'},p:[46,8,1230]}]},{p:[47,4,1288],t:7,e:"td",f:[{p:[47,8,1292],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "3"}'},f:["TOGGLE"]}]}]},{p:[48,3,1370],t:7,e:"tr",f:[" ",{p:[49,4,1378],t:7,e:"td",f:["Remote System Control"]},{p:[50,4,1407],t:7,e:"td",f:[{t:2,x:{r:["data.config_systemcontrol"],s:'_0?"ENABLED":"DISABLED"'},p:[50,8,1411]}]},{p:[51,4,1469],t:7,e:"td",f:[{p:[51,8,1473],t:7,e:"ui-button",a:{action:"toggle_function",params:'{"id": "4"}'},f:["TOGGLE"]}]}]}]}]}," ",{p:[55,2,1576],t:7,e:"ui-display",a:{title:"SECURITY SYSTEMS"},f:[{t:4,f:[{p:[58,4,1642],t:7,e:"ui-notice",f:[{p:[59,5,1658],t:7,e:"h1",f:["NETWORK INCURSION DETECTED"]}]}," ",{p:[61,5,1714],t:7,e:"i",f:["An abnormal activity has been detected in the network. Please verify system logs for more information"]}],n:50,r:"data.idsalarm",p:[57,3,1617]}," ",{p:[64,3,1839],t:7,e:"ui-section",a:{label:"Intrusion Detection System"},f:[{p:[65,4,1890],t:7,e:"b",f:[{t:2,x:{r:["data.idsstatus"],s:'_0?"ENABLED":"DISABLED"'},p:[65,7,1893]}]}]}," ",{p:[68,3,1962],t:7,e:"ui-section",a:{label:"Maximal Log Count"},f:[{p:[69,4,2004],t:7,e:"b",f:[{t:2,r:"data.ntnetmaxlogs",p:[69,7,2007]}]}]}," ",{p:[72,3,2054],t:7,e:"ui-section",a:{label:"Controls"},f:[]}," ",{p:[74,4,2103],t:7,e:"table",f:[{p:[75,4,2114],t:7,e:"tr",f:[{p:[75,8,2118],t:7,e:"td",f:[{p:[75,12,2122],t:7,e:"ui-button",a:{action:"resetIDS"},f:["RESET IDS"]}]}]},{p:[76,4,2176],t:7,e:"tr",f:[{p:[76,8,2180],t:7,e:"td",f:[{p:[76,12,2184],t:7,e:"ui-button",a:{action:"toggleIDS"},f:["TOGGLE IDS"]}]}]},{p:[77,4,2240],t:7,e:"tr",f:[{p:[77,8,2244],t:7,e:"td",f:[{p:[77,12,2248],t:7,e:"ui-button",a:{action:"updatemaxlogs"},f:["SET LOG LIMIT"]}]}]},{p:[78,4,2311],t:7,e:"tr",f:[{p:[78,8,2315],t:7,e:"td",f:[{p:[78,12,2319],t:7,e:"ui-button",a:{action:"purgelogs"},f:["PURGE LOGS"]}]}]}]}," ",{p:[81,3,2387],t:7,e:"ui-subdisplay",a:{title:"System Logs"},f:[{p:[82,3,2425],t:7,e:"div",a:{"class":"statusDisplay",style:"overflow: auto;"},f:[{p:[83,3,2479],t:7,e:"div",a:{"class":"item"},f:[{p:[84,4,2501],t:7,e:"div",a:{"class":"itemContent",style:"width: 100%;"},f:[{t:4,f:[{t:2,r:"entry",p:[86,6,2582]},{p:[86,15,2591],t:7,e:"br"}],n:52,r:"data.ntnetlogs",p:[85,5,2552]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],425:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{t:4,f:[{p:[7,2,96],t:7,e:"div",a:{"class":"item"},f:[{p:[8,3,117],t:7,e:"h2",f:["An error has occurred during operation..."]}," ",{p:[9,3,170],t:7,e:"b",f:["Additional information:"]},{t:2,r:"data.error",p:[9,34,201]},{p:[9,48,215],t:7,e:"br"}," ",{p:[10,3,222],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Clear"]}]}],n:50,r:"data.error",p:[6,2,76]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.downloading"],s:"_0"},f:[{p:[13,3,309],t:7,e:"h2",f:["Download in progress..."]}," ",{p:[14,3,344],t:7,e:"div",a:{"class":"itemLabel"},f:["Downloaded file:"]}," ",{p:[17,3,400],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_name",p:[18,4,429]}]}," ",{p:[20,3,464],t:7,e:"div",a:{"class":"itemLabel"},f:["Download progress:"]}," ",{p:[23,3,522],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_progress",p:[24,4,551]}," / ",{t:2,r:"data.download_size",p:[24,33,580]}," GQ"]}," ",{p:[26,3,617],t:7,e:"div",a:{"class":"itemLabel"},f:["Transfer speed:"]}," ",{p:[29,3,672],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.download_netspeed",p:[30,4,701]},"GQ/s"]}," ",{p:[32,3,743],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[35,3,792],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[36,4,821],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Abort download"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading"],s:"(!(_0))&&(_1)"},f:[" ",{p:[39,3,916],t:7,e:"h2",f:["Server enabled"]}," ",{p:[40,3,942],t:7,e:"div",a:{"class":"itemLabel"},f:["Connected clients:"]}," ",{p:[43,3,1e3],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_clients",p:[44,4,1029]}]}," ",{p:[46,3,1064],t:7,e:"div",a:{"class":"itemLabel"},f:["Provided file:"]}," ",{p:[49,3,1118],t:7,e:"div",a:{"class":"itemContent"},f:[{t:2,r:"data.upload_filename",p:[50,4,1147]}]}," ",{p:[52,3,1183],t:7,e:"div",a:{"class":"itemLabel"},f:["Server password:"]}," ",{p:[55,3,1239],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ENABLED"],n:50,r:"data.upload_haspassword",p:[56,4,1268]},{t:4,n:51,f:["DISABLED"],r:"data.upload_haspassword"}]}," ",{p:[62,3,1359],t:7,e:"div",a:{"class":"itemLabel"},f:["Commands:"]}," ",{p:[65,3,1408],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[66,4,1437],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[67,4,1501],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Exit server"]}]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(_2))"},f:[" ",{p:[70,3,1599],t:7,e:"h2",f:["File transfer server ready. Select file to upload:"]}," ",{p:[71,3,1662],t:7,e:"table",f:[{p:[72,3,1672],t:7,e:"tr",f:[{p:[72,7,1676],t:7,e:"th",f:["File name"]},{p:[72,20,1689],t:7,e:"th",f:["File size"]},{p:[72,33,1702],t:7,e:"th",f:["Controls ",{t:4,f:[{p:[74,4,1751],t:7,e:"tr",f:[{p:[74,8,1755],t:7,e:"td",f:[{t:2,r:"filename",p:[74,12,1759]}]},{p:[75,4,1775],t:7,e:"td",f:[{t:2,r:"size",p:[75,8,1779]},"GQ"]},{p:[76,4,1793],t:7,e:"td",f:[{p:[76,8,1797],t:7,e:"ui-button",a:{action:"PRG_uploadfile",params:['{"id": "',{t:2,r:"uid",p:[76,59,1848]},'"}']},f:["Select"]}]}]}],n:52,r:"data.upload_filelist",p:[73,3,1717]}]}]}]}," ",{p:[79,3,1903],t:7,e:"hr"}," ",{p:[80,3,1910],t:7,e:"ui-button",a:{action:"PRG_setpassword"},f:["Set password"]}," ",{p:[81,3,1973],t:7,e:"ui-button",a:{action:"PRG_reset"},f:["Return"]}]},{t:4,n:50,x:{r:["data.downloading","data.uploading","data.upload_filelist"],s:"(!(_0))&&((!(_1))&&(!(_2)))"},f:[" ",{p:[83,3,2034],t:7,e:"h2",f:["Available files:"]}," ",{p:[84,3,2062],t:7,e:"table",a:{border:"1",style:"border-collapse: collapse"},f:[{p:[84,55,2114],t:7,e:"tr",f:[{p:[84,59,2118],t:7,e:"th",f:["Server UID"]},{p:[84,73,2132],t:7,e:"th",f:["File Name"]},{p:[84,86,2145],t:7,e:"th",f:["File Size"]},{p:[84,99,2158],t:7,e:"th",f:["Password Protection"]},{p:[84,122,2181],t:7,e:"th",f:["Operations ",{t:4,f:[{p:[86,5,2226],t:7,e:"tr",f:[{p:[86,9,2230],t:7,e:"td",f:[{t:2,r:"uid",p:[86,13,2234]}]},{p:[87,5,2246],t:7,e:"td",f:[{t:2,r:"filename",p:[87,9,2250]}]},{p:[88,5,2267],t:7,e:"td",f:[{t:2,r:"size",p:[88,9,2271]},"GQ ",{t:4,f:[{p:[90,6,2311],t:7,e:"td",f:["Enabled"]}],n:50,r:"haspassword",p:[89,5,2286]}," ",{t:4,f:[{p:[93,6,2365],t:7,e:"td",f:["Disabled"]}],n:50,x:{r:["haspassword"],s:"!_0"},p:[92,5,2339]}]},{p:[96,5,2399],t:7,e:"td",f:[{p:[96,9,2403],t:7,e:"ui-button",a:{action:"PRG_downloadfile",params:['{"id": "',{t:2,r:"uid",p:[96,62,2456]},'"}']},f:["Download"]}]}]}],n:52,r:"data.servers",p:[85,4,2199]}]}]}]}," ",{p:[99,3,2514],t:7,e:"hr"}," ",{p:[100,3,2521],t:7,e:"ui-button",a:{action:"PRG_uploadmenu"},f:["Send file"]}]}],r:"data.error"}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],426:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[43,1,1040],t:7,e:"ntosheader"}," ",{p:[45,1,1055],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[47,5,1111],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[47,27,1133]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[49,38,1283]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[50,15,1338]}],yinc:"9"}}],n:50,r:"config.fancy",p:[46,3,1086]},{t:4,n:51,f:[{p:[52,5,1386],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[53,7,1423],t:7,e:"span",f:[{t:2,r:"data.supply",p:[53,13,1429]}]}]}," ",{p:[55,5,1474],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[56,9,1508],t:7,e:"span",f:[{t:2,r:"data.demand",p:[56,15,1514]}]}]}],r:"config.fancy"}]}," ",{p:[60,1,1579],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[61,3,1608],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[62,5,1632],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[63,5,1668],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[64,5,1706],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[65,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[66,5,1780],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[67,5,1821],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[68,5,1861],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[71,5,1943],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[71,24,1962]}],nowrap:0},f:[{p:[72,7,1986],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[72,28,2007]}," %"]}," ",{p:[73,7,2064],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[73,28,2085]}]}," ",{p:[74,7,2126],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2147],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[74,41,2160]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[74,70,2189]}]}]}," ",{p:[75,7,2235],t:7,e:"div",a:{"class":"content"},f:[{p:[75,28,2256],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[75,41,2269]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[75,64,2292]}," [",{p:[75,87,2315],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[75,93,2321]}]},"]"]}]}," ",{p:[76,7,2369],t:7,e:"div",a:{"class":"content"},f:[{p:[76,28,2390],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[76,41,2403]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[76,64,2426]}," [",{p:[76,87,2449],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[76,93,2455]}]},"]"]}]}," ",{p:[77,7,2503],t:7,e:"div",a:{"class":"content"},f:[{p:[77,28,2524],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[77,41,2537]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[77,64,2560]}," [",{p:[77,87,2583],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[77,93,2589]}]},"]"]}]}]}],n:52,r:"data.areas",p:[70,3,1918]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],427:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{p:[4,1,61],t:7,e:"ui-display",f:[{p:[5,2,75],t:7,e:"div",a:{"class":"item"},f:[{p:[6,3,96],t:7,e:"div",a:{"class":"itemLabel"},f:["Payload status:"]}," ",{p:[9,3,150],t:7,e:"div",a:{"class":"itemContent"},f:[{t:4,f:["ARMED"],n:50,r:"data.armed",p:[10,4,179]},{t:4,n:51,f:["DISARMED"],r:"data.armed"}]}," ",{p:[16,3,255],t:7,e:"div",a:{"class":"itemLabel"},f:["Controls:"]}," ",{p:[19,3,303],t:7,e:"div",a:{"class":"itemContent"},f:[{p:[20,4,332],t:7,e:"table",f:[{p:[21,4,343],t:7,e:"tr",f:[{p:[21,8,347],t:7,e:"td",f:[{p:[21,12,351],t:7,e:"ui-button",a:{action:"PRG_obfuscate"},f:["OBFUSCATE PROGRAM NAME"]}]}]},{p:[22,4,423],t:7,e:"tr",f:[{p:[22,8,427],t:7,e:"td",f:[{p:[22,12,431],t:7,e:"ui-button",a:{action:"PRG_arm",state:[{t:2,x:{r:["data.armed"],s:'_0?"danger":null'},p:[22,47,466]}]},f:[{t:2,x:{r:["data.armed"],s:'_0?"DISARM":"ARM"'},p:[22,81,500]}]}," ",{p:[23,4,549],t:7,e:"ui-button",a:{icon:"radiation",state:[{t:2,x:{r:["data.armed"],s:'_0?null:"disabled"'},p:[23,39,584]}],action:"PRG_activate"},f:["ACTIVATE"]}]}]}]}]}]}]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],428:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[2,1,46],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[5,3,91],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[5,22,110]}," Alarms"]},f:[{p:[6,5,133],t:7,e:"ul",f:[{t:4,f:[{p:[8,9,164],t:7,e:"li",f:[{t:2,r:".",p:[8,13,168]}]}],n:52,r:".",p:[7,7,144]},{t:4,n:51,f:[{p:[10,9,202],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[4,1,61]}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],429:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{integState:function(t){var e=100;return t==e?"good":t>e/2?"average":"bad"},bigState:function(t,e,n){return charge>n?"bad":t>e?"average":"good"}}}}(r),r.exports.template={v:3,t:[" "," ",{p:[23,1,399],t:7,e:"ntosheader"}," ",{t:4,f:[{p:[27,2,436],t:7,e:"ui-button",a:{action:"PRG_clear"},f:["Back to Menu"]},{p:[27,56,490],t:7,e:"br"}," ",{p:[28,3,497],t:7,e:"ui-display",a:{title:"Supermatter Status:"},f:[{p:[29,3,540],t:7,e:"ui-section",a:{label:"Core Integrity"},f:[{p:[30,5,580],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"adata.SM_integrity",p:[30,38,613]}],state:[{t:2,x:{r:["integState","adata.SM_integrity"],s:"_0(_1)"},p:[30,69,644]}]},f:[{t:2,r:"data.SM_integrity",p:[30,105,680]},"%"]}]}," ",{p:[32,3,730],t:7,e:"ui-section",a:{label:"Relative EER"},f:[{p:[33,5,768],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_power"],s:"_0(_1,150,300)"},p:[33,18,781]}]},f:[{t:2,r:"data.SM_power",p:[33,55,818]}," MeV/cm3"]}]}," ",{p:[35,3,869],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[36,5,906],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambienttemp"],s:"_0(_1,4000,5000)"},p:[36,18,919]}]},f:[{t:2,r:"data.SM_ambienttemp",p:[36,63,964]}," K"]}]}," ",{p:[38,3,1015],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[39,5,1049],t:7,e:"span",a:{"class":[{t:2,x:{r:["bigState","data.SM_ambientpressure"],s:"_0(_1,5000,10000)"},p:[39,18,1062]}]},f:[{t:2,r:"data.SM_ambientpressure",p:[39,68,1112]}," kPa"]}]}]}," ",{p:[42,3,1186],t:7,e:"hr"},{p:[42,7,1190],t:7,e:"br"}," ",{p:[43,3,1197],t:7,e:"ui-display",a:{title:"Gas Composition:"},f:[{t:4,f:[{p:[45,5,1263],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[45,24,1282]}]},f:[{t:2,r:"amount",p:[46,6,1298]}," %"]}],n:52,r:"data.gases",p:[44,4,1238]}]}],n:50,r:"data.active",p:[26,1,415]},{t:4,n:51,f:[{p:[51,2,1368],t:7,e:"ui-button",a:{action:"PRG_refresh"},f:["Refresh"]},{p:[51,53,1419],t:7,e:"br"}," ",{p:[52,2,1425],t:7,e:"ui-display",a:{title:"Detected Supermatters"},f:[{t:4,f:[{p:[54,3,1499],t:7,e:"ui-section",a:{label:"Area"},f:[{t:2,r:"area_name",p:[55,5,1529]}," - (#",{t:2,r:"uid",p:[55,23,1547]},")"]}," ",{p:[57,3,1574],t:7,e:"ui-section",a:{label:"Integrity"},f:[{t:2,r:"integrity",p:[58,5,1609]}," %"]}," ",{p:[60,3,1643],t:7,e:"ui-section",a:{label:"Options"},f:[{p:[61,5,1676],t:7,e:"ui-button",a:{action:"PRG_set",params:['{"target" : "',{t:2,r:"uid",p:[61,54,1725]},'"}']},f:["View Details"]}]}],n:52,r:"data.supermatters",p:[53,2,1469]}]}],r:"data.active"}]},r.exports.components=r.exports.components||{};var i={ntosheader:t(430)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,430:430}],430:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"div",a:{"class":"item",style:"float: left"},f:[{p:[2,2,40],t:7,e:"table",f:[{p:[2,9,47],t:7,e:"tr",f:[{t:4,f:[{p:[4,3,110],t:7,e:"td",f:[{p:[4,7,114],t:7,e:"img",a:{src:[{t:2,r:"data.PC_batteryicon",p:[4,17,124]}]}}]}],n:50,x:{r:["data.PC_batteryicon","data.PC_showbatteryicon"],s:"_0&&_1"},p:[3,2,53]}," ",{t:4,f:[{p:[7,3,220],t:7,e:"td",f:[{p:[7,7,224],t:7,e:"b",f:[{t:2,r:"data.PC_batterypercent",p:[7,10,227]}]}]}],n:50,x:{r:["data.PC_batterypercent","data.PC_showbatteryicon"],s:"_0&&_1"},p:[6,2,160]}," ",{t:4,f:[{p:[10,3,296],t:7,e:"td",f:[{p:[10,7,300],t:7,e:"img",a:{src:[{t:2,r:"data.PC_ntneticon",p:[10,17,310]}]}}]}],n:50,r:"data.PC_ntneticon",p:[9,2,268]}," ",{t:4,f:[{p:[13,3,374],t:7,e:"td",f:[{p:[13,7,378],t:7,e:"img",a:{src:[{t:2,r:"data.PC_apclinkicon",p:[13,17,388]}]}}]}],n:50,r:"data.PC_apclinkicon",p:[12,2,344]}," ",{t:4,f:[{p:[16,3,454],t:7,e:"td",f:[{p:[16,7,458],t:7,e:"b",f:[{t:2,r:"data.PC_stationtime",p:[16,10,461]}]}]}],n:50,r:"data.PC_stationtime",p:[15,2,424]}," ",{t:4,f:[{p:[19,3,534],t:7,e:"td",f:[{p:[19,7,538],t:7,e:"img",a:{src:[{t:2,r:"icon",p:[19,17,548]}]}}]}],n:52,r:"data.PC_programheaders",p:[18,2,499]}]}]}]}," ",{p:[23,1,587],t:7,e:"div",a:{style:"float: right; margin-top: 5px"},f:[{p:[24,2,632],t:7,e:"ui-button",a:{action:"PC_shutdown"},f:["Shutdown"]}," ",{t:4,f:[{p:[26,3,720],t:7,e:"ui-button",a:{action:"PC_exit"},f:["EXIT PROGRAM"]}," ",{p:[27,3,775],t:7,e:"ui-button",a:{action:"PC_minimize"},f:["Minimize Program"]}],n:50,r:"data.PC_showexitprogram",p:[25,2,686]}]}," ",{p:[30,1,852],t:7,e:"div",a:{style:"clear: both"}}]},e.exports=a.extend(r.exports)},{341:341}],431:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Auth. Disk:"},f:[{t:4,f:[{p:[3,7,67],t:7,e:"ui-button",a:{icon:"eject",style:"selected",action:"eject_disk"},f:["++++++++++"]}],n:50,r:"data.disk_present",p:[2,3,35]},{t:4,n:51,f:[{p:[5,7,168],t:7,e:"ui-button",a:{icon:"plus",action:"insert_disk"},f:["----------"]}],r:"data.disk_present"}]}," ",{p:[8,1,259],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[9,3,289],t:7,e:"span",f:[{t:2,r:"data.status1",p:[9,9,295]},"-",{t:2,r:"data.status2",p:[9,26,312]}]}]}," ",{p:[11,1,350],t:7,e:"ui-display",a:{title:"Timer"},f:[{p:[12,3,379],t:7,e:"ui-section",a:{label:"Time to Detonation"},f:[{p:[13,5,423],t:7,e:"span",f:[{t:2,x:{r:["data.timing","data.time_left","data.timer_set"],s:"_0?_1:_2"},p:[13,11,429]}]}]}," ",{t:4,f:[{p:[16,5,525],t:7,e:"ui-section",a:{label:"Adjust Timer"},f:[{p:[17,7,565],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_default"],s:'_0&&_1&&_2?null:"disabled"'},p:[17,40,598]}],action:"timer",params:'{"change": "reset"}'},f:["Reset"]}," ",{p:[19,7,768],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_min"],s:'_0&&_1&&_2?null:"disabled"'},p:[19,38,799]}],action:"timer",params:'{"change": "decrease"}'},f:["Decrease"]}," ",{p:[21,7,971],t:7,e:"ui-button",a:{icon:"pencil",state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[21,39,1003]}],action:"timer",params:'{"change": "input"}'},f:["Set"]}," ",{p:[22,7,1134],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.timer_is_not_max"],s:'_0&&_1&&_2?null:"disabled"'},p:[22,37,1164]}],action:"timer",params:'{"change": "increase"}'},f:["Increase"]}]}],n:51,r:"data.timing",p:[15,3,504]}," ",{p:[26,3,1369],t:7,e:"ui-section",a:{label:"Timer"},f:[{p:[27,5,1400],t:7,e:"ui-button",a:{icon:"clock-o",style:[{t:2,x:{r:["data.timing"],s:'_0?"danger":"caution"'},p:[27,38,1433]}],action:"toggle_timer",state:[{t:2,x:{r:["data.disk_present","data.code_approved","data.safety"],s:'_0&&_1&&!_2?null:"disabled"'},p:[29,14,1514]}]},f:[{t:2,x:{r:["data.timing"],s:'_0?"On":"Off"'},p:[30,7,1602]}]}]}]}," ",{p:[34,1,1680],t:7,e:"ui-display",a:{title:"Anchoring"},f:[{p:[35,3,1713],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[36,12,1735]}],icon:[{t:2,x:{r:["data.anchored"],s:'_0?"lock":"unlock"'},p:[37,11,1810]}],style:[{t:2,x:{r:["data.anchored"],s:'_0?null:"caution"'},p:[38,12,1860]}],action:"anchor"},f:[{t:2,x:{r:["data.anchored"],s:'_0?"Engaged":"Off"'},p:[39,21,1918]}]}]}," ",{p:[41,1,1982],t:7,e:"ui-display",a:{title:"Safety"},f:[{p:[42,3,2012],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.disk_present","data.code_approved"],s:'_0&&_1?null:"disabled"'},p:[43,12,2034]}],icon:[{t:2,x:{r:["data.safety"],s:'_0?"lock":"unlock"'},p:[44,11,2109]}],action:"safety",style:[{t:2,x:{r:["data.safety"],s:'_0?"caution":"danger"'},p:[45,12,2173]}]},f:[{p:[46,7,2220],t:7,e:"span",f:[{t:2,x:{r:["data.safety"],s:'_0?"On":"Off"'},p:[46,13,2226]}]}]}]}," ",{p:[49,1,2293],t:7,e:"ui-display",a:{title:"Code"},f:[{p:[50,3,2321],t:7,e:"ui-section",a:{label:"Message"},f:[{t:2,r:"data.message",p:[50,31,2349]}]}," ",{p:[51,3,2381],t:7,e:"ui-section",a:{label:"Keypad"},f:[{p:[52,5,2413],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[52,39,2447]}],params:'{"digit":"1"}'},f:["1"]}," ",{p:[53,5,2531],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[53,39,2565]}],params:'{"digit":"2"}'},f:["2"]}," ",{p:[54,5,2649],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[54,39,2683]}],params:'{"digit":"3"}'},f:["3"]}," ",{p:[55,5,2767],t:7,e:"br"}," ",{p:[56,5,2776],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[56,39,2810]}],params:'{"digit":"4"}'},f:["4"]}," ",{p:[57,5,2894],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[57,39,2928]}],params:'{"digit":"5"}'},f:["5"]}," ",{p:[58,5,3012],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[58,39,3046]}],params:'{"digit":"6"}'},f:["6"]}," ",{p:[59,5,3130],t:7,e:"br"}," ",{p:[60,5,3139],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[60,39,3173]}],params:'{"digit":"7"}'},f:["7"]}," ",{p:[61,5,3257],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[61,39,3291]}],params:'{"digit":"8"}'},f:["8"]}," ",{p:[62,5,3375],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[62,39,3409]}],params:'{"digit":"9"}'},f:["9"]}," ",{p:[63,5,3493],t:7,e:"br"}," ",{p:[64,5,3502],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[64,39,3536]}],params:'{"digit":"R"}'},f:["R"]}," ",{p:[65,5,3620],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[65,39,3654]}],params:'{"digit":"0"}'},f:["0"]}," ",{p:[66,5,3738],t:7,e:"ui-button",a:{action:"keypad",state:[{t:2,x:{r:["data.disk_present"],s:'_0?null:"disabled"'},p:[66,39,3772]}],params:'{"digit":"E"}'},f:["E"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],432:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,24],t:7,e:"ui-button",a:{icon:"undo",action:"change_menu",params:'{"menu": "1"}'},f:["Return"]}," ",{p:[3,2,111],t:7,e:"ui-display",a:{title:"Advanced Surgery Procedures"},f:[{p:[4,3,162],t:7,e:"ui-button",a:{icon:"download",action:"sync"},f:["Sync with research database"]}," ",{t:4,f:[{p:[6,4,273],t:7,e:"ui-display",f:[{p:[7,6,291],t:7,e:"ui-section",f:[{p:[7,18,303],t:7,e:"b",f:[{t:2,r:"name",p:[7,21,306]}]}]}," ",{p:[8,6,337],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[8,18,349]}]}]}],n:52,r:"data.surgeries",p:[5,3,245]}]}],n:50,x:{r:["data.menu"],s:"_0==2"},p:[1,1,0]},{t:4,n:51,f:[{p:[13,2,425],t:7,e:"ui-button",a:{action:"change_menu",params:'{"menu": "2"}'},f:["View Surgery Procedures"]}," ",{t:4,f:[{p:[15,3,542],t:7,e:"ui-notice",f:["No table detected!"]}],n:51,r:"data.table",p:[14,2,517]}," ",{p:[19,2,605],t:7,e:"ui-display",f:[{p:[20,3,620],t:7,e:"ui-display",a:{title:"Patient State"},f:[{t:4,f:[{p:[22,5,683],t:7,e:"ui-section",a:{label:"State"},f:[{p:[23,6,715],t:7,e:"span",a:{"class":[{t:2,r:"data.patient.statstate",p:[23,19,728]}]},f:[{t:2,r:"data.patient.stat",p:[23,47,756]}]}]}," ",{p:[25,5,807],t:7,e:"ui-section",a:{label:"Blood Type"},f:[{p:[26,6,844],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"data.patient.blood_type",p:[26,28,866]}]}]}," ",{p:[28,5,923],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[29,6,956],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.patient.minHealth",p:[29,19,969]}],max:[{t:2,r:"data.patient.maxHealth",p:[29,52,1002]}],value:[{t:2,r:"data.patient.health",p:[29,87,1037]}],state:[{t:2,x:{r:["data.patient.health"],s:'_0>=0?"good":"average"'},p:[30,13,1074]}]},f:[{t:2,x:{r:["adata.patient.health"],s:"Math.round(_0)"},p:[30,64,1125]}]}]}," ",{t:4,f:[{p:[33,6,1357],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[33,25,1376]}]},f:[{p:[34,7,1394],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.patient.maxHealth",p:[34,28,1415]}],value:[{t:2,rx:{r:"data.patient",m:[{t:30,n:"type"}]},p:[34,63,1450]}],state:"bad"},f:[{t:2,x:{r:["type","adata.patient"],s:"Math.round(_1[_0])"},p:[34,99,1486]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"},{label:"Toxin",type:"toxLoss"},{label:"Respiratory",type:"oxyLoss"}]'},p:[32,5,1193]}],n:50,r:"data.patient",p:[21,4,658]},{t:4,n:51,f:["No patient detected."],r:"data.patient"}]}," ",{p:[41,3,1630],t:7,e:"ui-display",a:{title:"Initiated Procedures"},f:[{t:4,f:[{t:4,f:[{p:[44,6,1734],t:7,e:"ui-subdisplay",a:{title:[{t:2,r:"name",p:[44,28,1756]}]},f:[{p:[45,7,1773],t:7,e:"ui-section",a:{label:"Next Step"},f:[{p:[46,8,1811],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"next_step",p:[46,30,1833]}]}," ",{t:4,f:[{p:[48,9,1890],t:7,e:"span",a:{"class":"content"},f:[{p:[48,31,1912],t:7,e:"b",f:["Required chemicals:"]},{p:[48,57,1938],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[48,62,1943]}]}],n:50,r:"chems_needed",p:[47,8,1861]}]}," ",{t:4,f:[{p:[52,8,2040],t:7,e:"ui-section",a:{label:"Alternative Step"},f:[{p:[53,9,2086],t:7,e:"span",a:{"class":"content"},f:[{t:2,r:"alternative_step",p:[53,31,2108]}]}," ",{t:4,f:[{p:[55,10,2178],t:7,e:"span",a:{"class":"content"},f:[{p:[55,32,2200],t:7,e:"b",f:["Required chemicals:"]},{p:[55,58,2226],t:7,e:"br"}," ",{t:2,r:"chems_needed",p:[55,63,2231]}]}],n:50,r:"alt_chems_needed",p:[54,9,2144]}]}],n:50,r:"alternative_step",p:[51,7,2008]}]}],n:52,r:"data.procedures",p:[43,5,1703]}],n:50,r:"data.procedures",p:[42,4,1675]},{t:4,n:51,f:["No active procedures."],r:"data.procedures"}]}]}],x:{r:["data.menu"],s:"_0==2"}}]},e.exports=a.extend(r.exports)},{341:341}],433:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,2,15],t:7,e:"ui-section",f:["This machine only accepts ore. Gibtonite and Slag are not accepted."]}," ",{p:[5,2,117],t:7,e:"ui-section",f:["Current unclaimed credits: ",{t:2,r:"data.unclaimedPoints",p:[6,30,160]}," ",{p:[7,4,189],t:7,e:"ui-button",a:{action:"Claim"},f:["Claim"]}]}]}," ",{p:[12,1,276],t:7,e:"ui-display",f:[{t:4,f:[{p:[14,3,315],t:7,e:"ui-section",f:[{p:[15,4,332],t:7,e:"ui-button",a:{action:"diskEject",icon:"eject"},f:["Eject Disk"]}]}," ",{t:4,f:[{p:[20,4,460],t:7,e:"ui-section",a:{"class":"candystripe"},f:[{p:[21,5,496],t:7,e:"ui-button",a:{action:"diskUpload",state:[{t:2,x:{r:["canupload"],s:'(_0)?null:"disabled"'},p:[21,42,533]}],icon:"upload",align:"right",params:['{ "design" : "',{t:2,r:"index",p:[21,129,620]},'" }']},f:["Upload"]}," File ",{t:2,r:"index",p:[24,10,676]},": ",{t:2,r:"name",p:[24,21,687]}]}],n:52,r:"data.diskDesigns",p:[19,3,429]}],n:50,r:"data.hasDisk",p:[13,2,291]},{t:4,n:51,f:[{p:[28,3,741],t:7,e:"ui-section",f:[{p:[29,4,758],t:7,e:"ui-button",a:{action:"diskInsert",icon:"floppy-o"},f:["Insert Disk"]}]}],r:"data.hasDisk"}]}," ",{t:4,f:[{p:[36,2,911],t:7,e:"ui-display",f:[{p:[37,3,927],t:7,e:"ui-section",f:[{p:[38,4,944],t:7,e:"b",f:["Warning"]},": ",{t:2,r:"data.disconnected",p:[38,20,960]},". Please contact the quartermaster."]}]}],n:50,r:"data.disconnected",p:[35,1,883]},{t:4,f:[{p:[43,2,1100],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[44,3,1133],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[45,5,1168],t:7,e:"section",a:{"class":"cell"},f:["Mineral"]}," ",{p:[48,5,1226],t:7,e:"section",a:{"class":"cell"
+},f:["Sheets"]}," ",{p:[51,5,1283],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[53,5,1327],t:7,e:"section",a:{"class":"cell"},f:[]}," ",{p:[55,5,1371],t:7,e:"section",a:{"class":"cell"},f:["Ore Value"]}]}," ",{t:4,f:[{p:[60,4,1473],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[61,5,1508],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[62,6,1537]}]}," ",{p:[64,5,1567],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[65,6,1610]}]}," ",{p:[67,5,1642],t:7,e:"section",a:{"class":"cell"},f:[{p:[68,6,1671],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[68,19,1684]}],placeholder:"###","class":"number"}}]}," ",{p:[70,5,1751],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[71,6,1794],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[71,60,1848]}],params:['{ "id" : ',{t:2,r:"id",p:[71,115,1903]},', "sheets" : ',{t:2,r:"sheets",p:[71,134,1922]}," }"]},f:["Release"]}]}," ",{p:[75,5,1993],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"value",p:[76,6,2036]}]}]}],n:52,r:"data.materials",p:[59,3,1444]}," ",{t:4,f:[{p:[81,4,2119],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[82,5,2154],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[83,6,2183]}]}," ",{p:[85,5,2213],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[86,6,2256]}]}," ",{p:[88,5,2288],t:7,e:"section",a:{"class":"cell"},f:[{p:[89,6,2317],t:7,e:"input",a:{value:[{t:2,r:"sheets",p:[89,19,2330]}],placeholder:"###","class":"number"}}]}," ",{p:[91,5,2397],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{p:[92,6,2440],t:7,e:"ui-button",a:{"class":"center",grid:0,action:"Smelt",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[92,58,2492]}],params:['{ "id" : ',{t:2,r:"id",p:[92,114,2548]},', "sheets" : ',{t:2,r:"sheets",p:[92,133,2567]}," }"]},f:["Smelt"]}]}," ",{p:[96,5,2635],t:7,e:"section",a:{"class":"cell",align:"right"},f:[]}]}],n:52,r:"data.alloys",p:[80,3,2093]}]}],n:50,x:{r:["data.materials","data.alloys"],s:"_0||_1"},p:[42,1,1060]}]},e.exports=a.extend(r.exports)},{341:341}],434:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,4,84],t:7,e:"ui-button",a:{icon:"remove",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[4,36,116]}],action:"empty_eject_beaker"},f:["Empty and eject"]}," ",{p:[7,4,225],t:7,e:"ui-button",a:{icon:"trash",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[7,35,256]}],action:"empty_beaker"},f:["Empty"]}," ",{p:[10,4,349],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.has_beaker"],s:'_0?null:"disabled"'},p:[10,35,380]}],action:"eject_beaker"},f:["Eject"]}]},t:7,e:"ui-display",a:{title:"Beaker",button:0},f:[" ",{t:4,f:[{p:[15,4,514],t:7,e:"ui-section",f:[{t:4,f:[{p:[17,6,562],t:7,e:"span",a:{"class":"bad"},f:["The beaker is empty!"]}],n:50,r:"data.beaker_empty",p:[16,5,531]},{t:4,n:51,f:[{p:[19,6,626],t:7,e:"ui-subdisplay",a:{title:"Blood"},f:[{t:4,f:[{p:[21,8,692],t:7,e:"ui-section",a:{label:"Blood DNA"},f:[{t:2,r:"data.blood.dna",p:[21,38,722]}]}," ",{p:[22,8,761],t:7,e:"ui-section",a:{label:"Blood type"},f:[{t:2,r:"data.blood.type",p:[22,39,792]}]}],n:50,r:"data.has_blood",p:[20,7,662]},{t:4,n:51,f:[{p:[24,8,847],t:7,e:"ui-section",f:[{p:[25,9,868],t:7,e:"span",a:{"class":"average"},f:["No blood sample detected."]}]}],r:"data.has_blood"}]}],r:"data.beaker_empty"}]}],n:50,r:"data.has_beaker",p:[14,3,487]},{t:4,n:51,f:[{p:[32,4,1023],t:7,e:"ui-section",f:[{p:[33,5,1040],t:7,e:"span",a:{"class":"bad"},f:["No beaker loaded."]}]}],r:"data.has_beaker"}]}," ",{t:4,f:[{p:[38,3,1151],t:7,e:"ui-display",a:{title:"Diseases"},f:[{t:4,f:[{p:{button:[{t:4,f:[{p:[43,8,1301],t:7,e:"ui-button",a:{icon:"pencil",action:"rename_disease",state:[{t:2,x:{r:["can_rename"],s:'_0?"":"disabled"'},p:[43,64,1357]}],params:['{"index": ',{t:2,r:"index",p:[43,116,1409]},"}"]},f:["Name advanced disease"]}],n:50,r:"is_adv",p:[42,7,1279]}," ",{p:[47,7,1492],t:7,e:"ui-button",a:{icon:"flask",action:"create_culture_bottle",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[47,69,1554]}],params:['{"index": ',{t:2,r:"index",p:[47,124,1609]},"}"]},f:["Create virus culture bottle"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[40,24,1230]}],button:0},f:[" ",{p:[51,6,1699],t:7,e:"ui-section",a:{label:"Disease agent"},f:[{t:2,r:"agent",p:[51,40,1733]}]}," ",{p:[52,6,1761],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[52,38,1793]}]}," ",{p:[53,6,1827],t:7,e:"ui-section",a:{label:"Spread"},f:[{t:2,r:"spread",p:[53,33,1854]}]}," ",{p:[54,6,1883],t:7,e:"ui-section",a:{label:"Possible cure"},f:[{t:2,r:"cure",p:[54,40,1917]}]}," ",{t:4,f:[{p:[56,7,1966],t:7,e:"ui-section",a:{label:"Symptoms"},f:[{t:4,f:[{p:[58,9,2030],t:7,e:"ui-button",a:{action:"symptom_details",state:"",params:['{"picked_symptom": ',{t:2,r:"sym_index",p:[58,81,2102]},', "index": ',{t:2,r:"index",p:[58,105,2126]},"}"]},f:[{t:2,r:"name",p:[59,10,2148]}," "]},{p:[60,21,2177],t:7,e:"br"}],n:52,r:"symptoms",p:[57,8,2003]}]}," ",{p:[63,7,2227],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[63,38,2258]}]}," ",{p:[64,7,2292],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[64,35,2320]}]}," ",{p:[65,7,2351],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[65,39,2383]}]}," ",{p:[66,7,2418],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[66,44,2455]}]}],n:50,r:"is_adv",p:[55,6,1945]}]}],n:52,r:"data.viruses",p:[39,4,1184]},{t:4,n:51,f:[{p:[70,5,2532],t:7,e:"ui-section",f:[{p:[71,6,2550],t:7,e:"span",a:{"class":"average"},f:["No detectable virus in the blood sample."]}]}],r:"data.viruses"}]}," ",{p:[75,3,2669],t:7,e:"ui-display",a:{title:"Antibodies"},f:[{t:4,f:[{p:[77,5,2735],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[77,24,2754]}]},f:[{p:[78,7,2771],t:7,e:"ui-button",a:{icon:"eyedropper",state:[{t:2,x:{r:["data.is_ready"],s:'_0?"":"disabled"'},p:[78,43,2807]}],action:"create_vaccine_bottle",params:['{"index": ',{t:2,r:"id",p:[78,129,2893]},"}"]},f:["Create vaccine bottle"]}]}],n:52,r:"data.resistances",p:[76,4,2704]},{t:4,n:51,f:[{p:[83,5,2985],t:7,e:"ui-section",f:[{p:[84,6,3003],t:7,e:"span",a:{"class":"average"},f:["No antibodies detected in the blood sample."]}]}],r:"data.resistances"}]}],n:50,r:"data.has_blood",p:[37,2,1126]}],n:50,x:{r:["data.mode"],s:"_0==1"},p:[1,1,0]},{t:4,n:51,f:[{p:[90,2,3142],t:7,e:"ui-button",a:{icon:"undo",state:"",action:"back"},f:["Back"]}," ",{t:4,f:[{p:[94,4,3237],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[94,23,3256]}]},f:[{p:[95,4,3270],t:7,e:"ui-section",f:[{t:2,r:"desc",p:[96,5,3287]}," ",{t:4,f:[{p:[98,5,3320],t:7,e:"br"}," ",{p:[99,5,3330],t:7,e:"b",f:["This symptom has been neutered, and has no effect. It will still affect the virus' statistics."]}],n:50,r:"neutered",p:[97,4,3299]}]}," ",{p:[102,4,3463],t:7,e:"ui-section",f:[{p:[103,5,3480],t:7,e:"ui-section",a:{label:"Level"},f:[{t:2,r:"level",p:[103,31,3506]}]}," ",{p:[104,5,3533],t:7,e:"ui-section",a:{label:"Resistance"},f:[{t:2,r:"resistance",p:[104,36,3564]}]}," ",{p:[105,5,3596],t:7,e:"ui-section",a:{label:"Stealth"},f:[{t:2,r:"stealth",p:[105,33,3624]}]}," ",{p:[106,5,3653],t:7,e:"ui-section",a:{label:"Stage speed"},f:[{t:2,r:"stage_speed",p:[106,37,3685]}]}," ",{p:[107,5,3718],t:7,e:"ui-section",a:{label:"Transmittability"},f:[{t:2,r:"transmission",p:[107,42,3755]}]}]}," ",{p:[109,4,3805],t:7,e:"ui-subdisplay",a:{title:"Effect Thresholds"},f:[{p:[110,5,3851],t:7,e:"ui-section",f:[{t:3,r:"threshold_desc",p:[110,17,3863]}]}]}]}],n:53,r:"data.symptom",p:[93,2,3211]}],x:{r:["data.mode"],s:"_0==1"}}]},e.exports=a.extend(r.exports)},{341:341}],435:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(483);e.exports={data:{filter:"",tooltiptext:function(t,e,n){var a="";return t&&(a+="REQUIREMENTS: "+t+" "),e&&(a+="CATALYSTS: "+e+" "),n&&(a+="TOOLS: "+n),a}},oninit:function(){var t=this;this.on({hover:function(t){this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}}),this.observe("filter",function(e,a,r){var i=null;i=t.get("data.display_compact")?t.findAll(".section"):t.findAll(".display:not(:first-child)"),(0,n.filterMulti)(i,t.get("filter").toLowerCase())},{init:!1})}}}(r),r.exports.template={v:3,t:[" ",{p:[48,1,1295],t:7,e:"ui-display",a:{title:[{t:2,r:"data.category",p:[48,20,1314]},{t:4,f:[" : ",{t:2,r:"data.subcategory",p:[48,64,1358]}],n:50,r:"data.subcategory",p:[48,37,1331]}]},f:[{t:4,f:[{p:[50,3,1410],t:7,e:"ui-section",f:["Crafting... ",{p:[51,16,1438],t:7,e:"i",a:{"class":"fa-spin fa fa-spinner"}}]}],n:50,r:"data.busy",p:[49,2,1390]},{t:4,n:51,f:[{p:[54,3,1504],t:7,e:"ui-section",f:[{p:[55,4,1520],t:7,e:"table",a:{style:"width:100%"},f:[{p:[56,5,1551],t:7,e:"tr",f:[{p:[57,6,1561],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[58,7,1602],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardCat"},f:[{t:2,r:"data.prev_cat",p:[59,8,1660]}]}]}," ",{p:[62,6,1713],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[63,7,1754],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardCat"},f:[{t:2,r:"data.next_cat",p:[64,7,1811]}]}]}," ",{p:[67,6,1864],t:7,e:"td",a:{style:"float:right!important"},f:[{t:4,f:[{p:[69,7,1946],t:7,e:"ui-button",a:{icon:"lock",action:"toggle_recipes"},f:["Showing Craftable Recipes"]}],n:50,r:"data.display_craftable_only",p:[68,6,1904]},{t:4,n:51,f:[{p:[73,7,2066],t:7,e:"ui-button",a:{icon:"unlock",action:"toggle_recipes"},f:["Showing All Recipes"]}],r:"data.display_craftable_only"}]}," ",{p:[78,6,2191],t:7,e:"td",a:{style:"float:right!important"},f:[{p:[79,7,2232],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.display_compact"],s:'_0?"check-square-o":"square-o"'},p:[79,24,2249]}],action:"toggle_compact"},f:["Compact"]}]}]}," ",{p:[84,5,2391],t:7,e:"tr",f:[{t:4,f:[{p:[86,6,2430],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[87,7,2471],t:7,e:"ui-button",a:{icon:"arrow-left",action:"backwardSubCat"},f:[{t:2,r:"data.prev_subcat",p:[88,8,2532]}]}]}," ",{p:[91,6,2588],t:7,e:"td",a:{style:"width:150px!important"},f:[{p:[92,7,2629],t:7,e:"ui-button",a:{icon:"arrow-right",action:"forwardSubCat"},f:[{t:2,r:"data.next_subcat",p:[93,8,2690]}]}]}],n:50,r:"data.subcategory",p:[85,5,2400]}]}]}," ",{t:4,f:[{t:4,f:[" ",{p:[101,6,2892],t:7,e:"ui-input",a:{value:[{t:2,r:"filter",p:[101,23,2909]}],placeholder:"Filter.."}}],n:51,r:"data.display_compact",p:[100,5,2803]}],n:50,r:"config.fancy",p:[99,4,2778]}]}," ",{t:4,f:[{p:[106,5,3039],t:7,e:"ui-display",f:[{t:4,f:[{p:[108,6,3086],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[108,25,3105]}]},f:[{p:[109,7,3122],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[109,27,3142]}],"tooltip-side":"right",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[109,135,3250]},'"}'],icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.can_craft",p:[107,5,3056]}," ",{t:4,f:[{t:4,f:[{p:[116,7,3452],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[116,26,3471]}]},f:[{p:[117,8,3489],t:7,e:"ui-button",a:{tooltip:[{t:2,x:{r:["tooltiptext","req_text","catalyst_text","tool_text"],s:"_0(_1,_2,_3)"},p:[117,28,3509]}],"tooltip-side":"right",state:"disabled",icon:"gears"},v:{hover:"hover",unhover:"unhover"},f:["Craft"]}]}],n:52,r:"data.cant_craft",p:[115,6,3420]}],n:51,r:"data.display_craftable_only",p:[114,5,3382]}]}],n:50,r:"data.display_compact",p:[105,4,3006]},{t:4,n:51,f:[{t:4,f:[{p:[126,6,3822],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[126,25,3841]}]},f:[{t:4,f:[{p:[128,8,3882],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[129,9,3924]}]}],n:50,r:"req_text",p:[127,7,3858]}," ",{t:4,f:[{p:[133,8,4007],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[134,9,4046]}]}],n:50,r:"catalyst_text",p:[132,7,3978]}," ",{t:4,f:[{p:[138,8,4130],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[139,9,4165]}]}],n:50,r:"tool_text",p:[137,7,4105]}," ",{p:[142,7,4220],t:7,e:"ui-section",f:[{p:[143,8,4240],t:7,e:"ui-button",a:{icon:"gears",action:"make",params:['{"recipe": "',{t:2,r:"ref",p:[143,66,4298]},'"}']},f:["Craft"]}]}]}],n:52,r:"data.can_craft",p:[125,5,3792]}," ",{t:4,f:[{t:4,f:[{p:[151,7,4471],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[151,26,4490]}]},f:[{t:4,f:[{p:[153,9,4533],t:7,e:"ui-section",a:{label:"Requirements"},f:[{t:2,r:"req_text",p:[154,10,4576]}]}],n:50,r:"req_text",p:[152,8,4508]}," ",{t:4,f:[{p:[158,9,4663],t:7,e:"ui-section",a:{label:"Catalysts"},f:[{t:2,r:"catalyst_text",p:[159,10,4703]}]}],n:50,r:"catalyst_text",p:[157,8,4633]}," ",{t:4,f:[{p:[163,9,4791],t:7,e:"ui-section",a:{label:"Tools"},f:[{t:2,r:"tool_text",p:[164,10,4827]}]}],n:50,r:"tool_text",p:[162,8,4765]}]}],n:52,r:"data.cant_craft",p:[150,6,4439]}],n:51,r:"data.display_craftable_only",p:[149,5,4401]}],r:"data.display_compact"}],r:"data.busy"}]}]},e.exports=a.extend(r.exports)},{341:341,483:483}],436:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-notice",f:[{p:[2,3,14],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[2,23,34]}," connected to a tank."]}]}," ",{p:[4,1,110],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[5,3,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,5,181],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[6,11,187]}," kPa"]}]}," ",{p:[8,3,247],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[9,5,277],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[9,18,290]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[9,59,331]}]}]}]}," ",{p:[12,1,419],t:7,e:"ui-display",a:{title:"Pump"},f:[{p:[13,3,447],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,5,478],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[14,22,495]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[15,14,545]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[16,22,601]}]}]}," ",{p:[18,3,658],t:7,e:"ui-section",a:{label:"Direction"},f:[{p:[19,5,693],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"sign-out":"sign-in"'},p:[19,22,710]}],action:"direction"},f:[{t:2,x:{r:["data.direction"],s:'_0=="out"?"Out":"In"'},p:[20,26,789]}]}]}," ",{p:[22,3,862],t:7,e:"ui-section",a:{label:"Target Pressure"},f:[{p:[23,5,903],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.min_pressure",p:[23,18,916]}],max:[{t:2,r:"data.max_pressure",p:[23,46,944]}],value:[{t:2,r:"data.target_pressure",p:[24,14,980]}]},f:[{t:2,x:{r:["adata.target_pressure"],s:"Math.round(_0)"},p:[24,40,1006]}," kPa"]}]}," ",{p:[26,3,1075],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,1119],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.target_pressure","data.default_pressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,1152]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1300],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.target_pressure","data.min_pressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1331]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1470],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1564],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.target_pressure","data.max_pressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1594]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}," ",{p:{button:[{t:4,f:[{p:[39,7,1853],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[39,38,1884]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[38,5,1826]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[43,3,2e3],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[44,4,2030]}]}," ",{p:[46,3,2070],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[47,4,2103]}," kPa"]}],n:50,r:"data.holding",p:[42,3,1977]},{t:4,n:51,f:[{p:[50,3,2174],t:7,e:"ui-section",f:[{p:[51,4,2190],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}]},e.exports=a.extend(r.exports)},{341:341}],437:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" ",{p:[3,1,69],t:7,e:"ui-notice",f:[{p:[4,3,84],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.holding"],s:'_0?"is":"is not"'},p:[4,23,104]}," connected to a tank."]}]}," ",{p:[6,1,182],t:7,e:"ui-display",a:{title:"Status",button:0},f:[{p:[7,3,220],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[8,5,255],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.round(_0)"},p:[8,11,261]}," kPa"]}]}," ",{p:[10,3,323],t:7,e:"ui-section",a:{label:"Port"},f:[{p:[11,5,354],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected"],s:'_0?"good":"average"'},p:[11,18,367]}]},f:[{t:2,x:{r:["data.connected"],s:'_0?"Connected":"Not Connected"'},p:[11,59,408]}]}]}]}," ",{p:[14,1,499],t:7,e:"ui-display",a:{title:"Filter"},f:[{p:[15,3,530],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[16,5,562],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[16,22,579]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":"null"'},p:[17,14,630]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[18,22,687]}]}]}]}," ",{p:{button:[{t:4,f:[{p:[24,7,856],t:7,e:"ui-button",a:{icon:"eject",style:[{t:2,x:{r:["data.on"],s:'_0?"danger":null'},p:[24,38,887]}],action:"eject"},f:["Eject"]}],n:50,r:"data.holding",p:[23,5,828]}]},t:7,e:"ui-display",a:{title:"Holding Tank",button:0},f:[" ",{t:4,f:[{p:[28,3,1007],t:7,e:"ui-section",a:{label:"Label"},f:[{t:2,r:"data.holding.name",p:[29,4,1038]}]}," ",{p:[31,3,1080],t:7,e:"ui-section",a:{label:"Pressure"},f:[{t:2,x:{r:["adata.holding.pressure"],s:"Math.round(_0)"},p:[32,4,1114]}," kPa"]}],n:50,r:"data.holding",p:[27,3,983]},{t:4,n:51,f:[{p:[35,3,1188],t:7,e:"ui-section",f:[{p:[36,4,1205],t:7,e:"span",a:{"class":"average"},f:["No Holding Tank"]}]}],r:"data.holding"}]}," ",{p:[40,1,1293],t:7,e:"ui-display",a:{title:"Filters"},f:[{t:4,f:[{p:[42,5,1345],t:7,e:"filters"}],n:53,r:"data",p:[41,3,1325]}]}]},r.exports.components=r.exports.components||{};var i={filters:t(456)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,456:456}],438:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{chargingState:function(t){switch(t){case 2:return"good";case 1:return"average";default:return"bad"}},chargingMode:function(t){return 2==t?"Full":1==t?"Charging":"Draining"},channelState:function(t){return t>=2?"good":"bad"},channelPower:function(t){return t>=2?"On":"Off"},channelMode:function(t){return 1==t||3==t?"Auto":"Manual"}},computed:{graphData:function(){var t=this.get("data.history");return Object.keys(t).map(function(e){return t[e].map(function(t,e){return{x:e,y:t}})})}}}}(r),r.exports.template={v:3,t:[" ",{p:[42,1,1035],t:7,e:"ui-display",a:{title:"Network"},f:[{t:4,f:[{p:[44,5,1093],t:7,e:"ui-linegraph",a:{points:[{t:2,r:"graphData",p:[44,27,1115]}],height:"500",legend:'["Available", "Load"]',colors:'["rgb(0, 102, 0)", "rgb(153, 0, 0)"]',xunit:"seconds ago",xfactor:[{t:2,r:"data.interval",p:[46,38,1267]}],yunit:"W",yfactor:"1",xinc:[{t:2,x:{r:["data.stored"],s:"_0/10"},p:[47,15,1323]}],yinc:"9"}}],n:50,r:"config.fancy",p:[43,3,1067]},{t:4,n:51,f:[{p:[49,5,1373],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[50,7,1411],t:7,e:"span",f:[{t:2,r:"data.supply",p:[50,13,1417]}]}]}," ",{p:[52,5,1464],t:7,e:"ui-section",a:{label:"Load"},f:[{p:[53,9,1499],t:7,e:"span",f:[{t:2,r:"data.demand",p:[53,15,1505]}]}]}],r:"config.fancy"}]}," ",{p:[57,1,1574],t:7,e:"ui-display",a:{title:"Areas"},f:[{p:[58,3,1604],t:7,e:"ui-section",a:{nowrap:0},f:[{p:[59,5,1629],t:7,e:"div",a:{"class":"content"},f:["Area"]}," ",{p:[60,5,1666],t:7,e:"div",a:{"class":"content"},f:["Charge"]}," ",{p:[61,5,1705],t:7,e:"div",a:{"class":"content"},f:["Load"]}," ",{p:[62,5,1742],t:7,e:"div",a:{"class":"content"},f:["Status"]}," ",{p:[63,5,1781],t:7,e:"div",a:{"class":"content"},f:["Equipment"]}," ",{p:[64,5,1823],t:7,e:"div",a:{"class":"content"},f:["Lighting"]}," ",{p:[65,5,1864],t:7,e:"div",a:{"class":"content"},f:["Environment"]}]}," ",{t:4,f:[{p:[68,5,1949],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[68,24,1968]}],nowrap:0},f:[{p:[69,7,1993],t:7,e:"div",a:{"class":"content"},f:[{t:2,x:{r:["@index","adata.areas"],s:"Math.round(_1[_0].charge)"},p:[69,28,2014]}," %"]}," ",{p:[70,7,2072],t:7,e:"div",a:{"class":"content"},f:[{t:2,rx:{r:"adata.areas",m:[{t:30,n:"@index"},"load"]},p:[70,28,2093]}]}," ",{p:[71,7,2135],t:7,e:"div",a:{"class":"content"},f:[{p:[71,28,2156],t:7,e:"span",a:{"class":[{t:2,x:{r:["chargingState","charging"],s:"_0(_1)"},p:[71,41,2169]}]},f:[{t:2,x:{r:["chargingMode","charging"],s:"_0(_1)"},p:[71,70,2198]}]}]}," ",{p:[72,7,2245],t:7,e:"div",a:{"class":"content"},f:[{p:[72,28,2266],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","eqp"],s:"_0(_1)"},p:[72,41,2279]}]},f:[{t:2,x:{r:["channelPower","eqp"],s:"_0(_1)"},p:[72,64,2302]}," [",{p:[72,87,2325],t:7,e:"span",f:[{t:2,x:{r:["channelMode","eqp"],s:"_0(_1)"},p:[72,93,2331]}]},"]"]}]}," ",{p:[73,7,2380],t:7,e:"div",a:{"class":"content"},f:[{p:[73,28,2401],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","lgt"],s:"_0(_1)"},p:[73,41,2414]}]},f:[{t:2,x:{r:["channelPower","lgt"],s:"_0(_1)"},p:[73,64,2437]}," [",{p:[73,87,2460],t:7,e:"span",f:[{t:2,x:{r:["channelMode","lgt"],s:"_0(_1)"},p:[73,93,2466]}]},"]"]}]}," ",{p:[74,7,2515],t:7,e:"div",a:{"class":"content"},f:[{p:[74,28,2536],t:7,e:"span",a:{"class":[{t:2,x:{r:["channelState","env"],s:"_0(_1)"},p:[74,41,2549]}]},f:[{t:2,x:{r:["channelPower","env"],s:"_0(_1)"},p:[74,64,2572]}," [",{p:[74,87,2595],t:7,e:"span",f:[{t:2,x:{r:["channelMode","env"],s:"_0(_1)"},p:[74,93,2601]}]},"]"]}]}]}],n:52,r:"data.areas",p:[67,3,1923]}]}]},e.exports=a.extend(r.exports)},{341:341}],439:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{readableFrequency:function(){return Math.round(this.get("adata.frequency"))/10}}}}(r),r.exports.template={v:3,t:[" ",{p:[11,1,167],t:7,e:"ui-display",a:{title:"Settings"},f:[{t:4,f:[{p:[13,5,224],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[14,7,257],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[14,24,274]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[14,75,325]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"On":"Off"'},p:[16,9,398]}]}]}],n:50,r:"data.headset",p:[12,3,199]},{t:4,n:51,f:[{p:[19,5,476],t:7,e:"ui-section",a:{label:"Microphone"},f:[{p:[20,7,514],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.broadcasting"],s:'_0?"power-off":"close"'},p:[20,24,531]}],style:[{t:2,x:{r:["data.broadcasting"],s:'_0?"selected":null'},p:[20,78,585]}],action:"broadcast"},f:[{t:2,x:{r:["data.broadcasting"],s:'_0?"Engaged":"Disengaged"'},p:[22,9,664]}]}]}," ",{p:[24,5,746],t:7,e:"ui-section",a:{label:"Speaker"},f:[{p:[25,7,781],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.listening"],s:'_0?"power-off":"close"'},p:[25,24,798]}],style:[{t:2,x:{r:["data.listening"],s:'_0?"selected":null'},p:[25,75,849]}],action:"listen"},f:[{t:2,x:{r:["data.listening"],s:'_0?"Engaged":"Disengaged"'},p:[27,9,922]}]}]}],r:"data.headset"}," ",{t:4,f:[{p:[31,5,1034],t:7,e:"ui-section",a:{label:"High Volume"},f:[{p:[32,7,1073],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.useCommand"],s:'_0?"power-off":"close"'},p:[32,24,1090]}],style:[{t:2,x:{r:["data.useCommand"],s:'_0?"selected":null'},p:[32,76,1142]}],action:"command"},f:[{t:2,x:{r:["data.useCommand"],s:'_0?"On":"Off"'},p:[34,9,1217]}]}]}],n:50,r:"data.command",p:[30,3,1009]}]}," ",{p:[38,1,1305],t:7,e:"ui-display",a:{title:"Channel"},f:[{p:[39,3,1336],t:7,e:"ui-section",a:{label:"Frequency"},f:[{t:4,f:[{p:[41,7,1399],t:7,e:"span",f:[{t:2,r:"readableFrequency",p:[41,13,1405]}]}],n:50,r:"data.freqlock",p:[40,5,1371]},{t:4,n:51,f:[{p:[43,7,1453],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[43,46,1492]}],action:"frequency",params:'{"adjust": -1}'}}," ",{p:[44,7,1603],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.frequency","data.minFrequency"],s:'_0==_1?"disabled":null'},p:[44,41,1637]}],action:"frequency",params:'{"adjust": -.2}'}}," ",{p:[45,7,1749],t:7,e:"ui-button",a:{icon:"pencil",action:"frequency",params:'{"tune": "input"}'},f:[{t:2,r:"readableFrequency",p:[45,78,1820]}]}," ",{p:[46,7,1860],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[46,40,1893]}],action:"frequency",params:'{"adjust": .2}'}}," ",{p:[47,7,2004],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.frequency","data.maxFrequency"],s:'_0==_1?"disabled":null'},p:[47,45,2042]}],action:"frequency",params:'{"adjust": 1}'}}],r:"data.freqlock"}]}," ",{t:4,f:[{p:[51,5,2212],t:7,e:"ui-section",a:{label:"Subspace Transmission"},f:[{p:[52,7,2261],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.subspace"],s:'_0?"power-off":"close"'},p:[52,24,2278]}],style:[{t:2,x:{r:["data.subspace"],s:'_0?"selected":null'},p:[52,74,2328]}],action:"subspace"},f:[{t:2,x:{r:["data.subspace"],s:'_0?"Active":"Inactive"'},p:[53,29,2395]}]}]}],n:50,r:"data.subspaceSwitchable",p:[50,3,2176]}," ",{t:4,f:[{p:[57,5,2522],t:7,e:"ui-section",a:{label:"Channels"},f:[{t:4,f:[{p:[59,9,2598],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["."],s:'_0?"check-square-o":"square-o"'},p:[59,26,2615]}],style:[{t:2,x:{r:["."],s:'_0?"selected":null'},p:[60,18,2671]}],action:"channel",params:['{"channel": "',{t:2,r:"channel",p:[61,49,2746]},'"}']},f:[{t:2,r:"channel",p:[62,11,2772]}]},{p:[62,34,2795],t:7,e:"br"}],n:52,i:"channel",r:"data.channels",p:[58,7,2558]}]}],n:50,x:{r:["data.subspace","data.channels"],s:"_0&&_1"},p:[56,3,2479]}]}]},e.exports=a.extend(r.exports)},{341:341}],440:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," "," "," "," "," "," "," "," ",{p:[11,1,550],t:7,e:"rdheader"}," ",{t:4,f:[{p:[13,2,583],t:7,e:"ui-display",a:{title:"CONSOLE LOCKED"},f:[{p:[14,3,621],t:7,e:"ui-button",a:{action:"Unlock"},f:["Unlock"]}]}],n:50,r:"data.locked",p:[12,1,562]},{t:4,f:[{p:[18,2,712],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[18,17,727]}]},f:[{p:[19,3,745],t:7,e:"tab",a:{name:"Technology"},f:[{p:[20,4,772],t:7,e:"techweb"}]}," ",{p:[22,3,794],t:7,e:"tab",a:{name:"View Node"},f:[{p:[23,4,820],t:7,e:"nodeview"}]}," ",{p:[25,3,843],t:7,e:"tab",a:{name:"View Design"},f:[{p:[26,4,871],t:7,e:"designview"}]}," ",{p:[28,3,896],t:7,e:"tab",a:{name:"Disk Operations - Design"},f:[{p:[29,4,937],t:7,e:"diskopsdesign"}]}," ",{p:[31,3,965],t:7,e:"tab",a:{name:"Disk Operations - Technology"},f:[{p:[32,4,1010],t:7,e:"diskopstech"}]}," ",{p:[34,3,1036],t:7,e:"tab",a:{name:"Deconstructive Analyzer"},f:[{p:[35,4,1076],t:7,e:"destruct"}]}," ",{p:[37,3,1099],t:7,e:"tab",a:{name:"Protolathe"},f:[{p:[38,4,1126],t:7,e:"protolathe"}]}," ",{p:[40,3,1151],t:7,e:"tab",a:{name:"Circuit Imprinter"},f:[{p:[41,4,1185],t:7,e:"circuit"}]}," ",{p:[43,3,1207],t:7,e:"tab",a:{name:"Settings"},f:[{p:[44,4,1232],t:7,e:"settings"}]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[17,1,690]}]},r.exports.components=r.exports.components||{};var i={settings:t(449),circuit:t(441),protolathe:t(447),destruct:t(443),diskopsdesign:t(444),diskopstech:t(445),designview:t(442),nodeview:t(446),techweb:t(450),rdheader:t(448)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450}],441:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,56],t:7,e:"ui-display",a:{title:"Circuit Imprinter Busy!"}}],n:50,r:"data.circuitbusy",p:[2,2,29]},{t:4,n:51,f:[{p:[5,3,126],t:7,e:"ui-display",f:[{p:[6,4,142],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,183],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,196]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,254],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "circuit", "inputText" : ',{t:2,r:"textsearch",p:[8,84,333]},"}"]},f:["Search"]}]}," ",{p:[10,4,389],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.circuitmats",p:[10,27,412]}," / ",{t:2,r:"data.circuitmaxmats",p:[10,50,435]}]}," ",{p:[11,4,475],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.circuitchems",p:[11,26,497]}," / ",{t:2,r:"data.circuitmaxchems",p:[11,50,521]}]}," ",{p:[12,3,561],t:7,e:"ui-display",f:[{p:[14,3,577],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,592]}]},f:[{p:[15,4,617],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,680],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.circuitcat"],s:'_0=="{{name}}"?"selected":null'},p:[17,43,717]}],params:['{"type" : "circuit", "cat" : "',{t:2,r:"name",p:[17,135,809]},'"}']},f:[{t:2,r:"name",p:[17,147,821]}]}],n:52,r:"data.circuitcats",p:[16,5,648]}]}," ",{p:[20,4,869],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,935],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,947]},{t:2,r:"matstring",p:[22,26,955]}," ",{p:[23,7,975],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[23,40,1008]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[23,119,1087]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitdes",p:[21,5,904]}]}," ",{p:[27,4,1161],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[29,6,1226],t:7,e:"ui-section",f:[{t:2,r:"name",p:[29,18,1238]},{t:2,r:"matstring",p:[29,26,1246]}," ",{p:[30,7,1266],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[30,40,1299]}],params:['{"latheType" : "circuit", "id" : "',{t:2,r:"id",p:[30,119,1378]},'"}']},f:["Print"]}]}],n:52,r:"data.circuitmatch",p:[28,5,1193]}]}," ",{p:[34,4,1452],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[36,6,1515],t:7,e:"ui-section",f:[{t:2,r:"name",p:[36,18,1527]}," : ",{t:2,r:"amount",p:[36,29,1538]}," cm3 - ",{t:4,f:[{p:[38,7,1586],t:7,e:"input",a:{value:[{t:2,r:"number",p:[38,20,1599]}],placeholder:["1-",{t:2,r:"sheets",p:[38,46,1625]}],"class":"number"}}," ",{p:[39,7,1660],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "circuit", "mat_id" : ',{t:2,r:"mat_id",p:[39,84,1737]},', "sheets" : ',{t:2,r:"number",p:[39,107,1760]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[37,6,1561]}]}],n:52,r:"data.circuitmat_list",p:[35,5,1479]}]}," ",{p:[44,4,1852],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[46,6,1916],t:7,e:"ui-section",f:[{t:2,r:"name",p:[46,18,1928]}," : ",{t:2,r:"amount",p:[46,29,1939]}," - ",{p:[47,7,1959],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "circuit", "name" : ',{t:2,r:"name",p:[47,80,2032]},', "id" : ',{t:2,r:"reagentid",p:[47,97,2049]},"}"]},f:["Purge"]}]}],n:52,r:"data.circuitchem_list",p:[45,5,1879]}]}]}]}]}],r:"data.circuitbusy"}],n:50,r:"data.circuit_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[55,2,2162],t:7,e:"ui-display",a:{title:"No Linked Circuit Imprinter"}}],r:"data.circuit_linked"}]},e.exports=a.extend(r.exports)},{341:341}],442:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,30],t:7,e:"ui-display",a:{title:[{t:2,r:"data.sdesign_name",p:[2,21,49]}]},f:[{p:[3,3,75],t:7,e:"ui-section",a:{title:"Description"},f:[{t:2,r:"data.sdesign_desc",p:[3,35,107]}]}]}," ",{p:[5,2,158],t:7,e:"ui-display",a:{title:"Lathe Types"},f:[{t:4,f:[{p:[7,4,233],t:7,e:"ui-section",a:{title:"Circuit Imprinter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&1"},p:[6,3,193]}," ",{t:4,f:[{p:[10,4,337],t:7,e:"ui-section",a:{title:"Protolathe"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&2"},p:[9,3,297]}," ",{t:4,f:[{p:[13,4,434],t:7,e:"ui-section",a:{title:"Autolathe"}}],
+n:50,x:{r:["data.sdesign_buildtype"],s:"_0&4"},p:[12,3,394]}," ",{t:4,f:[{p:[16,4,530],t:7,e:"ui-section",a:{title:"Crafting Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&8"},p:[15,3,490]}," ",{t:4,f:[{p:[19,4,637],t:7,e:"ui-section",a:{title:"Exosuit Fabricator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&16"},p:[18,3,596]}," ",{t:4,f:[{p:[22,4,743],t:7,e:"ui-section",a:{title:"Biogenerator"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&32"},p:[21,3,702]}," ",{t:4,f:[{p:[25,4,843],t:7,e:"ui-section",a:{title:"Limb Grower"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&64"},p:[24,3,802]}," ",{t:4,f:[{p:[28,4,943],t:7,e:"ui-section",a:{title:"Ore Smelter"}}],n:50,x:{r:["data.sdesign_buildtype"],s:"_0&128"},p:[27,3,901]}]}," ",{p:[31,2,1015],t:7,e:"ui-display",a:{title:"Materials"},f:[{t:4,f:[{p:[33,4,1084],t:7,e:"ui-section",a:{title:[{t:2,r:"matname",p:[33,23,1103]}]},f:[{t:2,r:"matamt",p:[33,36,1116]}," cm^3"]}],n:52,r:"data.sdesign_materials",p:[32,3,1048]}]}],n:50,r:"data.design_selected",p:[1,1,0]},{t:4,f:[{p:[38,2,1211],t:7,e:"ui-display",a:{title:"No Design Selected."}}],n:50,x:{r:["data.design_selected"],s:"!_0"},p:[37,1,1180]}]},e.exports=a.extend(r.exports)},{341:341}],443:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[4,3,57],t:7,e:"ui-display",a:{title:"Destructive Analyzer Busy!"}}],n:50,r:"data.destroybusy",p:[3,2,30]},{t:4,n:51,f:[{t:4,f:[{p:[7,4,162],t:7,e:"ui-display",a:{title:"Destructive Analyzer Unloaded"}}],n:50,x:{r:["data.destroy_loaded"],s:"!_0"},p:[6,3,130]},{t:4,n:51,f:[{p:[9,4,240],t:7,e:"ui-display",a:{title:"Loaded Item"},f:[{p:[10,4,276],t:7,e:"ui-section",a:{title:"Name"},f:[{t:2,r:"data.destroy_name",p:[10,29,301]}]}]}," ",{p:[12,4,356],t:7,e:"ui-display",a:{title:"Boost Nodes"},f:[{t:4,f:[{p:[14,6,425],t:7,e:"ui-section",a:{title:[{t:2,r:"name",p:[14,25,444]}," | ",{t:2,r:"value",p:[14,36,455]}]},f:[{p:[15,7,473],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["allow"],s:'_0?null:"disabled"'},p:[15,25,491]}],action:"deconstruct",params:['{"id":',{t:2,r:"id",p:[15,90,556]},"}"]},f:["Deconstruct and Boost"]}]}],n:52,r:"data.boost_paths",p:[13,5,393]}]}," ",{p:[19,4,652],t:7,e:"ui-button",a:{action:"eject_da"},f:["Eject Item"]}],x:{r:["data.destroy_loaded"],s:"!_0"}}],r:"data.destroybusy"}],n:50,r:"data.destroy_linked",p:[2,1,1]},{t:4,n:51,f:[{p:[23,2,733],t:7,e:"ui-display",a:{title:"No Linked Destructive Analyzer"}}],r:"data.destroy_linked"}]},e.exports=a.extend(r.exports)},{341:341}],444:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Design Disk Loaded"}}],n:50,x:{r:["data.ddisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,116],t:7,e:"ui-display",a:{title:"Design Disk Updating"}}],n:50,r:"data.ddisk_update",p:[5,2,88]},{t:4,n:51,f:[{t:4,f:[{p:[9,4,213],t:7,e:"ui-display",a:{title:"Design Disk"},f:[{p:[10,5,250],t:7,e:"ui-section",a:{title:"Disk Space"},f:["Disk Capacity: ",{t:2,r:"data.ddisk_size",p:[10,51,296]}," blueprints."]}," ",{p:[11,5,345],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[11,33,373],t:7,e:"ui-button",a:{action:"ddisk_upall"},f:["Upload all designs"]}]}," ",{p:[12,5,453],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[12,36,484],t:7,e:"ui-button",a:{action:"clear_designdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[13,5,579],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[13,36,610],t:7,e:"ui-button",a:{action:"eject_designdisk"},f:["Eject Disk"]}]}]}," ",{p:[15,4,703],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[17,6,776],t:7,e:"ui-section",a:{title:"Number"},f:["#",{t:2,r:"pos",p:[17,34,804]},": ",{t:4,f:[{p:[19,8,848],t:7,e:"ui-button",a:{action:"upload_empty_ddisk_slot",params:['{"slot": "',{t:2,r:"pos",p:[19,70,910]},'"}']},f:["Upload to Empty Slot"]}],n:50,x:{r:["id"],s:'_0=="null"'},p:[18,7,820]},{t:4,n:51,f:[{p:[21,8,976],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[21,58,1026]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[21,75,1043]}]},f:[{t:2,r:"name",p:[21,122,1090]}]}," ",{p:[22,8,1118],t:7,e:"ui-button",a:{action:"ddisk_erasepos",style:"danger",params:['{"id": "',{t:2,r:"id",p:[22,74,1184]},'"}'],state:[{t:2,x:{r:["id"],s:'_0=="null"?"disabled":null'},p:[22,91,1201]}]},f:["Delete Slot"]}],x:{r:["id"],s:'_0=="null"'}}]}],n:52,r:"data.ddisk_designs",p:[16,5,742]}]}],n:50,x:{r:["data.ddisk_upload"],s:"!_0"},p:[8,3,183]},{t:4,n:51,f:[{p:[28,4,1340],t:7,e:"ui-display",a:{title:"Upload Design to Disk"},f:[{p:[28,46,1382],t:7,e:"ui-section",f:["Available Designs:"]}]}," ",{t:4,f:[{p:[30,5,1484],t:7,e:"ui-section",f:[{p:[30,17,1496],t:7,e:"ui-button",a:{action:"ddisk_uploaddesign",params:['{"id": "',{t:2,r:"id",p:[30,72,1551]},'"}']},f:[{t:2,r:"name",p:[30,82,1561]}]}]}],n:52,r:"data.ddisk_possible_designs",p:[29,4,1442]}],x:{r:["data.ddisk_upload"],s:"!_0"}}],r:"data.ddisk_update"}],x:{r:["data.ddisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],445:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[3,2,22],t:7,e:"ui-display",a:{title:"No Technology Disk Loaded"}}],n:50,x:{r:["data.tdisk"],s:"!_0"},p:[2,1,1]},{t:4,n:51,f:[{t:4,f:[{p:[6,3,120],t:7,e:"ui-display",a:{title:"Technology Disk Updating"}}],n:50,r:"data.tdisk_update",p:[5,2,92]},{t:4,n:51,f:[{p:[8,3,191],t:7,e:"ui-display",a:{title:"Technology Disk"},f:[{p:[9,4,231],t:7,e:"ui-section",a:{title:"Disk IO"},f:[{p:[9,32,259],t:7,e:"ui-button",a:{action:"tdisk_down"},f:["Download Research to Disk"]},{p:[9,100,327],t:7,e:"ui-button",a:{action:"tdisk_up"},f:["Upload Research from Disk"]}," ",{p:[10,4,397],t:7,e:"ui-section",a:{title:"Clear Disk"},f:[{p:[10,35,428],t:7,e:"ui-button",a:{action:"clear_techdisk",style:"danger"},f:["WIPE ALL DATA"]}]}," ",{p:[11,4,520],t:7,e:"ui-section",a:{title:"Eject Disk"},f:[{p:[11,35,551],t:7,e:"ui-button",a:{action:"eject_techdisk"},f:["Eject Disk"]}]}]}]}," ",{p:[13,3,640],t:7,e:"ui-display",a:{title:"Disk Contents"},f:[{t:4,f:[{p:[15,5,709],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,53,757]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,70,774]}]},f:[{t:2,r:"display_name",p:[15,115,819]}]}],n:52,r:"data.tdisk_nodes",p:[14,4,678]}]}],r:"data.tdisk_update"}],x:{r:["data.tdisk"],s:"!_0"}}]},e.exports=a.extend(r.exports)},{341:341}],446:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,2,28],t:7,e:"ui-display",a:{title:[{t:2,r:"data.snode_name",p:[2,21,47]}]},f:[{p:[3,3,71],t:7,e:"ui-section",a:{title:"Description"},f:["Description: ",{t:2,r:"data.snode_desc",p:[3,48,116]}]}," ",{p:[4,3,151],t:7,e:"ui-section",a:{title:"Point Cost"},f:["Point Cost: ",{t:2,r:"data.snode_cost",p:[4,46,194]}]}," ",{p:[5,3,229],t:7,e:"ui-section",a:{title:"Export Price"},f:["Export Price: ",{t:2,r:"data.snode_export",p:[5,50,276]}]}," ",{p:[6,3,313],t:7,e:"ui-button",a:{action:"research_node",params:['{"id"="',{t:2,r:"id",p:[6,52,362]},'"}'],state:[{t:2,x:{r:["data.snode_researched"],s:'_0?"disabled":null'},p:[6,69,379]}]},f:[{t:2,x:{r:["data.snode_researched"],s:'_0?"Researched":"Research Node"'},p:[6,115,425]}]}]}," ",{p:[8,2,511],t:7,e:"ui-display",a:{title:"Prerequisites"},f:[{t:4,f:[{p:[10,4,579],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[10,52,627]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[10,69,644]}]},f:[{t:2,r:"display_name",p:[10,114,689]}]}],n:52,r:"data.node_prereqs",p:[9,3,548]}]}," ",{p:[13,2,747],t:7,e:"ui-display",a:{title:"Unlocks"},f:[{t:4,f:[{p:[15,4,809],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[15,52,857]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[15,69,874]}]},f:[{t:2,r:"display_name",p:[15,114,919]}]}],n:52,r:"data.node_unlocks",p:[14,3,778]}]}," ",{p:[18,2,977],t:7,e:"ui-display",a:{title:"Designs"},f:[{t:4,f:[{p:[20,4,1039],t:7,e:"ui-button",a:{action:"select_design",params:['{"id": "',{t:2,r:"id",p:[20,54,1089]},'"}'],state:[{t:2,x:{r:["data.sdesign_id","id"],s:'_0==_1?"selected":null'},p:[20,71,1106]}]},f:[{t:2,r:"name",p:[20,118,1153]}]}],n:52,r:"data.node_designs",p:[19,3,1008]}]}],n:50,r:"data.node_selected",p:[1,1,0]},{t:4,f:[{p:[25,2,1239],t:7,e:"ui-display",a:{title:"No Node Selected."}}],n:50,x:{r:["data.node_selected"],s:"!_0"},p:[24,1,1210]}]},e.exports=a.extend(r.exports)},{341:341}],447:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{t:4,f:[{p:[3,3,57],t:7,e:"ui-display",a:{title:"Protolathe Busy!"}}],n:50,r:"data.protobusy",p:[2,2,32]},{t:4,n:51,f:[{p:[5,3,120],t:7,e:"ui-display",f:[{p:[6,4,136],t:7,e:"ui-section",f:["Search Available Designs: ",{p:[7,4,177],t:7,e:"input",a:{value:[{t:2,r:"textsearch",p:[7,17,190]}],placeholder:"Type Here","class":"text"}}," ",{p:[8,5,248],t:7,e:"ui-button",a:{action:"textSearch",params:['{"latheType" : "proto", "inputText" : ',{t:2,r:"textsearch",p:[8,82,325]},"}"]},f:["Search"]}]}," ",{p:[10,4,381],t:7,e:"ui-section",f:["Materials: ",{t:2,r:"data.protomats",p:[10,27,404]}," / ",{t:2,r:"data.protomaxmats",p:[10,48,425]}]}," ",{p:[11,4,463],t:7,e:"ui-section",f:["Reagents: ",{t:2,r:"data.protochems",p:[11,26,485]}," / ",{t:2,r:"data.protomaxchems",p:[11,48,507]}]}," ",{p:[12,3,545],t:7,e:"ui-display",f:[{p:[14,3,561],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.lathe_tabs",p:[14,18,576]}]},f:[{p:[15,4,601],t:7,e:"tab",a:{name:"Category List"},f:[{t:4,f:[{p:[17,6,662],t:7,e:"ui-button",a:{action:"switchcat",state:[{t:2,x:{r:["data.protocat","name"],s:'_0==_1?"selected":null'},p:[17,43,699]}],params:['{"type" : "proto", "cat" : "',{t:2,r:"name",p:[17,125,781]},'"}']},f:[{t:2,r:"name",p:[17,137,793]}]}],n:52,r:"data.protocats",p:[16,5,632]}]}," ",{p:[20,4,841],t:7,e:"tab",a:{name:"Selected Category"},f:[{t:4,f:[{p:[22,6,905],t:7,e:"ui-section",f:[{t:2,r:"name",p:[22,18,917]},{t:2,r:"matstring",p:[22,26,925]}," ",{t:4,f:[{p:[24,8,973],t:7,e:"input",a:{value:[{t:2,r:"number",p:[24,21,986]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[24,47,1012]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[23,7,945]}," ",{p:[26,7,1083],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[26,40,1116]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[26,117,1193]},'", "amount" : "',{t:2,r:"number",p:[26,138,1214]},'"}']},f:["Print"]}]}],n:52,r:"data.protodes",p:[21,5,876]}]}," ",{p:[30,4,1292],t:7,e:"tab",a:{name:"Search Results"},f:[{t:4,f:[{p:[32,6,1355],t:7,e:"ui-section",f:[{t:2,r:"name",p:[32,18,1367]},{t:2,r:"matstring",p:[32,26,1375]}," ",{t:4,f:[{p:[34,8,1423],t:7,e:"input",a:{value:[{t:2,r:"number",p:[34,21,1436]}],placeholder:["1-",{t:2,x:{r:["canprint"],s:"_0>10?10:_0"},p:[34,47,1462]}],"class":"number"}}],n:50,x:{r:["canprint"],s:"_0>1"},p:[33,7,1395]}," ",{p:[36,7,1533],t:7,e:"ui-button",a:{action:"print",state:[{t:2,x:{r:["canprint"],s:'_0>1?null:"disabled"'},p:[36,40,1566]}],params:['{"latheType" : "proto", "id" : "',{t:2,r:"id",p:[36,117,1643]},'", "amount" : "',{t:2,r:"number",p:[36,138,1664]},'"}']},f:["Print"]}]}],n:52,r:"data.protomatch",p:[31,5,1324]}]}," ",{p:[40,4,1742],t:7,e:"tab",a:{name:"Materials"},f:[{t:4,f:[{p:[42,6,1803],t:7,e:"ui-section",f:[{t:2,r:"name",p:[42,18,1815]}," : ",{t:2,r:"amount",p:[42,29,1826]}," cm3 - ",{t:4,f:[{p:[44,7,1874],t:7,e:"input",a:{value:[{t:2,r:"number",p:[44,20,1887]}],placeholder:["1-",{t:2,r:"sheets",p:[44,46,1913]}],"class":"number"}}," ",{p:[45,7,1948],t:7,e:"ui-button",a:{action:"releasemats",params:['{"latheType" : "proto", "mat_id" : ',{t:2,r:"mat_id",p:[45,82,2023]},', "sheets" : ',{t:2,r:"number",p:[45,105,2046]},"}"]},f:["Release"]}],n:50,x:{r:["sheets"],s:"_0>0"},p:[43,6,1849]}]}],n:52,r:"data.protomat_list",p:[41,5,1769]}]}," ",{p:[50,4,2138],t:7,e:"tab",a:{name:"Chemicals"},f:[{t:4,f:[{p:[52,6,2200],t:7,e:"ui-section",f:[{t:2,r:"name",p:[52,18,2212]}," : ",{t:2,r:"amount",p:[52,29,2223]}," - ",{p:[53,7,2243],t:7,e:"ui-button",a:{action:"purgechem",params:['{"latheType" : "proto", "name" : ',{t:2,r:"name",p:[53,78,2314]},', "id" : ',{t:2,r:"reagentid",p:[53,95,2331]},"}"]},f:["Purge"]}]}],n:52,r:"data.protochem_list",p:[51,5,2165]}]}]}]}]}],r:"data.protobusy"}],n:50,r:"data.protolathe_linked",p:[1,1,0]},{t:4,n:51,f:[{p:[61,2,2444],t:7,e:"ui-display",a:{title:"No Linked Protolathe"}}],r:"data.protolathe_linked"}]},e.exports=a.extend(r.exports)},{341:341}],448:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,1,13],t:7,e:"span",a:{"class":"memoedit"},f:["Nanotrasen R&D Console"]},{p:[2,53,65],t:7,e:"br"}," Available Points: ",{p:[3,19,89],t:7,e:"ui-section",a:{title:"Research Points"},f:[{t:2,r:"data.research_points_stored",p:[3,55,125]}]}," ",{p:[4,1,170],t:7,e:"ui-section",a:{title:["Page Selection - ",{t:2,r:"page",p:[4,37,206]}]},f:[{p:[4,47,216],t:7,e:"input",a:{value:[{t:2,r:"pageselect",p:[4,60,229]}],placeholder:"1","class":"number"}}," Select Page: ",{p:[5,14,290],t:7,e:"ui-button",a:{action:"page",params:['{"num" : "',{t:2,r:"pageselect",p:[5,57,333]},'"}']},f:["[Go]"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],449:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"span",a:{"class":"bad"},f:["Settings"]},{p:[1,34,33],t:7,e:"br"},{p:[1,39,38],t:7,e:"br"}," ",{p:[2,1,44],t:7,e:"ui-button",a:{action:"Resync"},f:["RESYNC MACHINERY"]},{p:[2,56,99],t:7,e:"br"}," ",{p:[3,1,105],t:7,e:"ui-button",a:{action:"Lock"},f:["LOCK"]}," ",{p:[4,1,147],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "destroy"}',state:[{t:2,x:{r:["data.destroy_linked"],s:'_0?null:"disabled"'},p:[4,71,217]}]},f:["Disconnect Destructive Analyzer"]}," ",{p:[5,1,305],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "lathe"}',state:[{t:2,x:{r:["data.protolathe_linked"],s:'_0?null:"disabled"'},p:[5,69,373]}]},f:["Disconnect Protolathe"]}," ",{p:[6,1,454],t:7,e:"ui-button",a:{action:"disconnect",params:'{"type" : "imprinter"}',state:[{t:2,x:{r:["data.circuit_linked"],s:'_0?null:"disabled"'},p:[6,73,526]}]},f:["Disconnect Circuit Imprinter"]}]},e.exports=a.extend(r.exports)},{341:341}],450:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Available for Research"},f:[{t:4,f:[{p:[3,3,76],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[3,51,124]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[3,68,141]}]},f:[{t:2,r:"display_name",p:[3,113,186]}]}],n:52,r:"data.techweb_avail",p:[2,2,45]}]}," ",{p:[6,1,240],t:7,e:"ui-display",a:{title:"Locked Nodes"},f:[{t:4,f:[{p:[8,3,307],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[8,51,355]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[8,68,372]}]},f:[{t:2,r:"display_name",p:[8,113,417]}]}],n:52,r:"data.techweb_locked",p:[7,2,275]}]}," ",{p:[11,1,472],t:7,e:"ui-display",a:{title:"Researched Nodes"},f:[{t:4,f:[{p:[13,3,547],t:7,e:"ui-button",a:{action:"select_node",params:['{"id": "',{t:2,r:"id",p:[13,51,595]},'"}'],state:[{t:2,x:{r:["data.snode_id","id"],s:'_0==_1?"selected":null'},p:[13,68,612]}]},f:[{t:2,r:"display_name",p:[13,113,657]}]}],n:52,r:"data.techweb_researched",p:[12,2,511]}]}]},e.exports=a.extend(r.exports)},{341:341}],451:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,1,24],t:7,e:"ui-notice",f:[{p:[3,3,38],t:7,e:"span",f:["The grinder is currently processing and cannot be used."]}]}],n:50,r:"data.processing",p:[1,1,0]},{p:{button:[{p:[8,5,201],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[8,36,232]}],action:"eject"},f:["Eject Contents"]}]},t:7,e:"ui-display",a:{title:"Processing Chamber",button:0},f:[" ",{p:[10,3,355],t:7,e:"ui-section",a:{label:"Grinding"},f:[{p:[11,5,389],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.operating"],s:'_0?"average":"good"'},p:[11,18,402]}]},f:[{t:2,x:{r:["data.operating"],s:'_0?"Busy":"Ready"'},p:[11,59,443]}]}," ",{p:[12,2,489],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.operating","data.contents"],s:'(_0==0)&&_1?null:"disabled"'},p:[12,35,522]}],action:"grind"},f:["Activate"]}]}," ",{p:[14,3,640],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{t:4,f:[{p:[17,9,739],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:["The ",{t:2,r:"name",p:[17,56,786]}]},{p:[17,71,801],t:7,e:"br"}],n:52,r:"adata.contentslist",p:[16,7,702]},{t:4,n:51,f:[{p:[19,9,830],t:7,e:"span",f:["No Contents"]}],r:"adata.contentslist"}],n:50,r:"data.contents",p:[15,5,674]},{t:4,n:51,f:[{p:[22,7,890],t:7,e:"span",f:["No Contents"]}],r:"data.contents"}]}]}," ",{p:{button:[{p:[28,5,1020],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.operating","data.isBeakerLoaded"],s:'(_0==0)&&_1?null:"disabled"'},p:[28,36,1051]}],action:"detach"},f:["Detach"]}]},t:7,e:"ui-display",a:{title:"Container",button:0},f:[" ",{p:[30,3,1173],t:7,e:"ui-section",a:{label:"Reagents"},f:[{t:4,f:[{p:[32,7,1241],t:7,e:"span",f:[{t:2,x:{r:["adata.beakerCurrentVolume"],s:"Math.round(_0)"},p:[32,13,1247]},"/",{t:2,r:"data.beakerMaxVolume",p:[32,55,1289]}," Units"]}," ",{p:[33,7,1333],t:7,e:"br"}," ",{t:4,f:[{p:[35,9,1384],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[35,52,1427]}," units of ",{t:2,r:"name",p:[35,87,1462]}]},{p:[35,102,1477],t:7,e:"br"}],n:52,r:"adata.beakerContents",p:[34,7,1345]},{t:4,n:51,f:[{p:[37,9,1506],t:7,e:"span",a:{"class":"bad"},f:["Container Empty"]}],r:"adata.beakerContents"}],n:50,r:"data.isBeakerLoaded",p:[31,5,1207]},{t:4,n:51,f:[{p:[40,7,1582],t:7,e:"span",a:{"class":"average"},f:["No Container"]}],r:"data.isBeakerLoaded"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],452:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"span",a:{"class":["pipes32x32 ",{t:2,r:"dir",p:[6,80,248]},"-",{t:2,r:"icon_state",p:[6,88,256]}],title:[{t:2,r:"dir_name",p:[6,111,279]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}," ",{t:4,f:[{p:[12,2,395],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[14,4,455],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["@key","data.selected_color"],s:'_0==_1?"selected":null'},p:[14,22,473]}],action:"color",params:['{"paint_color": ',{t:2,r:"@key",p:[15,44,569]},"}"]},f:[{t:2,r:"@key",p:[15,55,580]}]}],n:52,r:"data.paint_colors",p:[13,3,424]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[11,1,367]},{p:[19,1,636],t:7,e:"ui-display",a:{title:"Utilities"},f:[{p:[20,2,668],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&1?"check-square-o":"square-o"'},p:[20,19,685]}],action:"mode",params:'{"mode": 1}'},f:["Build"]}," ",{p:[22,2,792],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&2?"check-square-o":"square-o"'},p:[22,19,809]}],action:"mode",params:'{"mode": 2}'},f:["Wrench"]}," ",{p:[24,2,917],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&4?"check-square-o":"square-o"'},p:[24,19,934]}],action:"mode",params:'{"mode": 4}'},f:["Destroy"]}," ",{t:4,f:[{p:[27,3,1072],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mode"],s:'_0&8?"check-square-o":"square-o"'},p:[27,20,1089]}],action:"mode",params:'{"mode": 8}'},f:["Paint"]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[26,2,1043]}]}," ",{p:[31,1,1219],t:7,e:"ui-display",a:{title:"Category"},f:[{p:[32,2,1250],t:7,e:"ui-section",f:[{p:[33,3,1265],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==0?"check-square-o":"square-o"'},p:[33,20,1282]}],state:[{t:2,x:{r:["data.category"],s:'_0<=0?"selected":null'},p:[33,83,1345]}],action:"category",params:'{"category": 0}'},f:["Atmospherics"]}," ",{p:[35,3,1462],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==1?"check-square-o":"square-o"'},p:[35,20,1479]}],state:[{t:2,x:{r:["data.category"],s:'_0==1?"selected":null'},p:[35,83,1542]}],action:"category",params:'{"category": 1}'},f:["Disposals"]}," ",{p:[37,3,1656],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.category"],s:'_0==2?"check-square-o":"square-o"'},p:[37,20,1673]}],state:[{t:2,x:{r:["data.category"],s:'_0==2?"selected":null'},p:[37,83,1736]}],action:"category",params:'{"category": 2}'},f:["Transit Tubes"]}]}," ",{t:4,f:[{p:[41,3,1897],t:7,e:"ui-section",a:{label:"Piping Layer"},f:[{p:[42,4,1934],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==1?"selected":null'},p:[42,22,1952]}],action:"piping_layer",params:'{"piping_layer": 1}'},f:["1"]}," ",{p:[44,4,2072],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==2?"selected":null'},p:[44,22,2090]}],action:"piping_layer",params:'{"piping_layer": 2}'},f:["2"]}," ",{p:[46,4,2210],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.piping_layer"],s:'_0==3?"selected":null'},p:[46,22,2228]}],action:"piping_layer",params:'{"piping_layer": 3}'},f:["3"]}]}],n:50,x:{r:["data.category"],s:"_0==0"},p:[40,2,1868]}]}," ",{t:4,f:[{p:[52,2,2411],t:7,e:"ui-display",a:{title:[{t:2,r:"cat_name",p:[52,21,2430]}]},f:[{t:4,f:[{p:[54,4,2468],t:7,e:"ui-section",f:[{p:[55,5,2485],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[55,23,2503]}],action:"pipe_type",params:['{"pipe_type": ',{t:2,r:"pipe_index",p:[56,28,2583]},', "category": ',{t:2,r:"cat_name",p:[56,56,2611]},"}"]},f:[{t:2,r:"pipe_name",p:[56,71,2626]}]}]}],n:52,r:"recipes",p:[53,3,2447]}]}],n:52,r:"data.categories",p:[51,1,2384]}]},e.exports=a.extend(r.exports)},{341:341}],453:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Color"},f:[{t:4,f:[{p:[3,3,58],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[3,21,76]}],action:"color",params:['{"paint_color": ',{t:2,r:"color_name",p:[4,28,152]},"}"]},f:[{t:2,r:"color_name",p:[4,45,169]}]}],n:52,r:"data.paint_colors",p:[2,2,28]}]}]},e.exports=a.extend(r.exports)},{341:341}],454:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Direction"},f:[{t:4,f:[{p:[3,3,62],t:7,e:"ui-section",f:[{t:4,f:[{p:[5,5,101],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["selected"],s:'_0?"selected":null'},p:[5,23,119]}],action:"setdir",params:['{"dir": ',{t:2,r:"dir",p:[6,22,190]},', "flipped": ',{t:2,r:"flipped",p:[6,42,210]},"}"]},f:[{p:[6,56,224],t:7,e:"img",a:{src:["pipe.",{t:2,r:"dir",p:[6,71,239]},".",{t:2,r:"icon_state",p:[6,79,247]},".png"],title:[{t:2,r:"dir_name",p:[6,106,274]}]}}]}],n:52,r:"previews",p:[4,4,78]}]}],n:52,r:"data.preview_rows",p:[2,2,32]}]}]},e.exports=a.extend(r.exports)},{341:341}],455:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,22],t:7,e:"ui-notice",f:[{t:2,r:"data.notice",p:[3,5,38]}]}],n:50,r:"data.notice",p:[1,1,0]},{p:[6,1,77],t:7,e:"ui-display",a:{title:"Satellite Network Control",button:0},f:[{t:4,f:[{p:[8,4,161],t:7,e:"ui-section",a:{candystripe:0,nowrap:0},f:[{p:[9,9,201],t:7,e:"div",a:{"class":"content"},f:["#",{t:2,r:"id",p:[9,31,223]}]}," ",{p:[10,9,244],t:7,e:"div",a:{"class":"content"},f:[{t:2,r:"mode",p:[10,30,265]}]}," ",{p:[11,9,288],t:7,e:"div",a:{"class":"content"},f:[{p:[12,11,320],t:7,e:"ui-button",a:{action:"toggle",params:['{"id": "',{t:2,r:"id",p:[12,54,363]},'"}']},f:[{t:2,x:{r:["active"],s:'_0?"Deactivate":"Activate"'},p:[12,64,373]}]}]}]}],n:52,r:"data.satellites",p:[7,2,132]}]}," ",{t:4,f:[{p:[18,1,511],t:7,e:"ui-display",a:{title:"Station Shield Coverage"},f:[{p:[19,3,558],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.meteor_shield_coverage_max",p:[19,24,579]}],value:[{t:2,r:"data.meteor_shield_coverage",p:[19,68,623]}]},f:[{t:2,x:{r:["data.meteor_shield_coverage","data.meteor_shield_coverage_max"],s:"100*_0/_1"},p:[19,101,656]}," %"]}," ",{p:[20,1,739],t:7,e:"ui-display",f:[]}]}],n:50,r:"data.meteor_shield",p:[17,1,484]}]},e.exports=a.extend(r.exports)},{341:341}],456:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,25],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["enabled"],s:'_0?"check-square-o":"square-o"'},p:[2,20,42]}],style:[{t:2,x:{r:["enabled"],s:'_0?"selected":null'},p:[2,72,94]}],action:"toggle_filter",params:['{"id_tag": "',{t:2,r:"id_tag",p:[3,48,174]},'", "val": ',{t:2,r:"gas_id",p:[3,68,194]},"}"]},f:[{t:2,r:"gas_name",p:[3,81,207]}]}],n:52,r:"filter_types",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],457:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[" "," "," ",{p:[5,1,196],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.tabs",p:[5,16,211]}]},f:[{p:[6,2,228],t:7,e:"tab",a:{name:"Status"},f:[{p:[7,3,250],t:7,e:"status"}]}," ",{p:[9,2,269],t:7,e:"tab",a:{name:"Templates"},f:[{p:[10,3,294],t:7,e:"templates"}]}," ",{p:[12,2,316],t:7,e:"tab",a:{name:"Modification"},f:[{t:4,f:[{p:[14,3,368],t:7,e:"modification"}],n:50,r:"data.selected",p:[13,3,344]}," ",{t:4,f:[{p:[17,3,421],t:7,e:"span",a:{"class":"bad"},f:["No shuttle selected."]}],n:50,x:{r:["data.selected"],s:"!_0"},p:[16,3,396]}]}]}]},r.exports.components=r.exports.components||{};var i={modification:t(458),templates:t(460),status:t(459)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{341:341,458:458,459:459,460:460}],458:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:["Selected: ",{t:2,r:"data.selected.name",p:[1,30,29]}]},f:[{t:4,f:[{p:[3,5,94],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"data.selected.description",p:[3,37,126]}]}],n:50,r:"data.selected.description",p:[2,3,56]}," ",{t:4,f:[{p:[6,5,219],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"data.selected.admin_notes",p:[6,37,251]}]}],n:50,r:"data.selected.admin_notes",p:[5,3,181]}]}," ",{t:4,f:[{p:[11,3,351],t:7,e:"ui-display",a:{title:["Existing Shuttle: ",{t:2,r:"data.existing_shuttle.name",p:[11,40,388]}]},f:["Status: ",{t:2,r:"data.existing_shuttle.status",p:[12,13,433]}," ",{t:4,f:["(",{t:2,r:"data.existing_shuttle.timeleft",p:[14,8,513]},")"],n:50,r:"data.existing_shuttle.timer",p:[13,5,470]}," ",{p:[16,5,565],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"data.existing_shuttle.id",p:[17,41,633]},'"}']},f:["Jump To"]}]}],n:50,r:"data.existing_shuttle",p:[10,1,319]},{t:4,f:[{p:[24,3,755],t:7,e:"ui-display",a:{title:"Existing Shuttle: None"}}],n:50,x:{r:["data.existing_shuttle"],s:"!_0"},p:[23,1,722]},{p:[27,1,821],t:7,e:"ui-button",a:{action:"preview",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[28,27,875]},'"}']},f:["Preview"]}," ",{p:[31,1,931],t:7,e:"ui-button",a:{action:"load",params:['{"shuttle_id": "',{t:2,r:"data.selected.shuttle_id",p:[32,27,982]},'"}'],style:"danger"},f:["Load"]}," ",{p:[37,1,1053],t:7,e:"ui-display",a:{title:"Status"},f:[]}]},e.exports=a.extend(r.exports)},{341:341}],459:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"table",a:{width:"100%"},f:[{t:4,f:[{p:[3,3,47],t:7,e:"tr",f:[{p:[4,5,56],t:7,e:"td",f:[{p:[5,7,67],t:7,e:"ui-button",a:{action:"jump_to",params:['{"type": "mobile", "id": "',{t:2,r:"id",p:[5,69,129]},'"}']},f:["JMP"]}]}," ",{p:[9,5,185],t:7,e:"td",f:[{p:[10,7,196],t:7,e:"ui-button",a:{action:"fly",params:['{"id": "',{t:2,r:"id",p:[10,47,236]},'"}'],state:[{t:2,x:{r:["can_fly"],s:'_0?null:"disabled"'},p:[10,64,253]}]},f:["Fly"]}]}," ",{p:[14,5,332],t:7,e:"td",f:[{t:2,r:"name",p:[15,7,343]}," (",{p:[15,17,353],t:7,e:"code",f:[{t:2,r:"id",p:[15,23,359]}]},")"]}," ",{p:[17,5,388],t:7,e:"td",f:[{t:2,r:"status",p:[18,7,399]}]}," ",{p:[20,5,424],t:7,e:"td",f:[{t:4,f:[{t:2,r:"mode",p:[22,9,456]}],n:50,r:"mode",p:[21,7,435]}," ",{t:4,f:["(",{t:2,r:"timeleft",p:[25,10,508]},") ",{p:[26,9,530],t:7,e:"ui-button",a:{action:"fast_travel",params:['{"id": "',{t:2,r:"id",p:[26,57,578]},'"}'],state:[{t:2,x:{r:["can_fast_travel"],s:'_0?null:"disabled"'},p:[26,74,595]}]},f:["Fast Travel"]}],n:50,r:"timer",p:[24,7,485]}]}]}],n:52,r:"data.shuttles",p:[2,1,21]}]}]},e.exports=a.extend(r.exports)},{341:341}],460:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-tabs",a:{tabs:[{t:2,r:"data.templates_tabs",p:[1,16,15]}]},f:[{t:4,f:[{p:[3,5,72],t:7,e:"tab",a:{name:[{t:2,r:"port_id",p:[3,16,83]}]},f:[{t:4,f:[{p:[5,9,131],t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[5,28,150]}]},f:[{t:4,f:[{p:[7,13,203],t:7,e:"ui-section",a:{label:"Description"},f:[{t:2,r:"description",p:[7,45,235]}]}],n:50,r:"description",p:[6,11,171]}," ",{t:4,f:[{p:[10,13,324],t:7,e:"ui-section",a:{label:"Admin Notes"},f:[{t:2,r:"admin_notes",p:[10,45,356]}]}],n:50,r:"admin_notes",p:[9,11,292]}," ",{p:[13,11,414],t:7,e:"ui-button",a:{action:"select_template",params:['{"shuttle_id": "',{t:2,r:"shuttle_id",p:[14,37,486]},'"}'],state:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"selected":null'},p:[15,20,523]}]},f:[{t:2,x:{r:["data.selected.shuttle_id","shuttle_id"],s:'_0==_1?"Selected":"Select"'},p:[17,13,614]}]}]}],n:52,r:"templates",p:[4,7,103]}]}],n:52,r:"data.templates",p:[2,3,43]}]}]},e.exports=a.extend(r.exports)},{341:341}],461:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Occupant"},f:[{p:[2,3,33],t:7,e:"ui-section",a:{label:"Occupant"},f:[{p:[3,3,66],t:7,e:"span",f:[{t:2,x:{r:["data.occupant.name"],s:'_0?_0:"No Occupant"'},p:[3,9,72]}]}]}," ",{t:4,f:[{p:[6,5,186],t:7,e:"ui-section",a:{label:"State"},f:[{p:[7,7,220],t:7,e:"span",a:{"class":[{t:2,r:"data.occupant.statstate",p:[7,20,233]}]},f:[{t:2,r:"data.occupant.stat",p:[7,49,262]}]}]}," ",{p:[9,5,315],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[10,7,350],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.occupant.minHealth",p:[10,20,363]}],max:[{t:2,r:"data.occupant.maxHealth",p:[10,54,397]}],value:[{t:2,r:"data.occupant.health",p:[10,90,433]}],state:[{t:2,x:{r:["data.occupant.health"],s:'_0>=0?"good":"average"'},p:[11,16,475]}]},f:[{t:2,x:{r:["adata.occupant.health"],s:"Math.round(_0)"},p:[11,68,527]}]}]}," ",{t:4,f:[{p:[14,7,764],t:7,e:"ui-section",a:{label:[{t:2,r:"label",p:[14,26,783]}]},f:[{p:[15,9,804],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.maxHealth",p:[15,30,825]}],value:[{t:2,rx:{r:"data.occupant",m:[{t:30,n:"type"}]},p:[15,66,861]}],state:"bad"},f:[{t:2,x:{r:["type","adata.occupant"],s:"Math.round(_1[_0])"},p:[15,103,898]}]}]}],n:52,x:{r:[],s:'[{label:"Brute",type:"bruteLoss"},{label:"Respiratory",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Burn",type:"fireLoss"}]'},p:[13,5,598]}," ",{t:4,f:[{p:[19,7,1020],t:7,e:"ui-section",a:{label:"Blood"},f:[{p:[20,9,1056],t:7,e:"ui-section",a:{label:"Volume"},f:[{p:[21,11,1095],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.occupant.blood.maxBloodVolume",p:[21,32,1116]}],value:[{t:2,r:"data.occupant.blood.currentBloodVolume",p:[21,79,1163]}],state:[{t:2,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"bad":"good"'},p:[21,130,1214]}]},f:[{t:3,x:{r:["data.occupant.blood.currentBloodVolume","data.occupant.blood.dangerBloodVolume"],s:'_0<=_1?"LOW ":"OK"'},p:[21,232,1316]}," - ",{t:2,x:{r:["data.occupant.blood.currentBloodVolume"],s:"Math.round(_0)"},p:[21,342,1426]}," cl"]}]}," ",{p:[23,9,1525],t:7,e:"ui-section",a:{label:"Type"},f:[{p:[24,11,1562],t:7,e:"span",a:{"class":"highlight"},f:[{t:2,r:"data.occupant.blood.bloodType",p:[24,35,1586]}]}]}]}],n:50,r:"data.occupant.blood",p:[18,5,985]}," ",{p:[28,5,1689],t:7,e:"ui-section",a:{label:"Cells"},f:[{p:[29,9,1725],t:7,
+e:"span",a:{"class":[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"bad":"good"'},p:[29,22,1738]}]},f:[{t:2,x:{r:["data.occupant.cloneLoss"],s:'_0?"Damaged":"Healthy"'},p:[29,68,1784]}]}]}," ",{p:[31,5,1867],t:7,e:"ui-section",a:{label:"Brain"},f:[{p:[32,9,1903],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"bad":"good"'},p:[32,22,1916]}]},f:[{t:2,x:{r:["data.occupant.brainLoss"],s:'_0?"Abnormal":"Healthy"'},p:[32,68,1962]}]}]}," ",{t:4,f:[{p:[35,3,2083],t:7,e:"ui-section",a:{label:"Failing Organs"},f:[{t:4,f:[{p:[37,5,2167],t:7,e:"span",a:{"class":"bad"},f:[{t:2,r:"name",p:[37,24,2186]}]}],n:52,r:"data.occupant.failing_organs",p:[36,4,2123]}]}],n:50,r:"data.occupant.failing_organs",p:[34,2,2043]}," ",{p:[41,5,2249],t:7,e:"ui-section",a:{label:"Bloodstream"},f:[{t:4,f:[{p:[43,11,2336],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,1)"},p:[43,54,2379]}," units of ",{t:2,r:"name",p:[43,89,2414]}]},{p:[43,104,2429],t:7,e:"br"}],n:52,r:"adata.occupant.reagents",p:[42,9,2291]},{t:4,n:51,f:[{p:[45,11,2464],t:7,e:"span",a:{"class":"good"},f:["Pure"]}],r:"adata.occupant.reagents"}]}],n:50,r:"data.occupied",p:[5,3,159]}]}," ",{p:[50,1,2560],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[51,2,2592],t:7,e:"ui-section",a:{label:"Door"},f:[{p:[52,5,2623],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"unlock":"lock"'},p:[52,22,2640]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Open":"Closed"'},p:[52,71,2689]}]}]}," ",{p:[55,3,2756],t:7,e:"ui-section",a:{label:"Synthesize"},f:[{t:4,f:[{p:[57,7,2826],t:7,e:"ui-button",a:{grid:0,state:[{t:2,x:{r:["synth_allowed"],s:'_0?null:"disabled"'},p:[57,30,2849]}],action:"synth",params:['{"chem": "',{t:2,r:"id",p:[57,102,2921]},'"}']},f:[{t:2,r:"name",p:[57,112,2931]}]}],n:52,r:"data.synthchems",p:[56,5,2793]}]}," ",{p:[61,3,2989],t:7,e:"ui-section",a:{label:"Inject"},f:[{p:[62,2,3019],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[63,3,3052],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[64,4,3086],t:7,e:"section",a:{"class":"compressedcell"},f:["Name"]}," ",{p:[68,4,3150],t:7,e:"section",a:{"class":"compressedcell"},f:["Volume"]}," ",{t:4,f:[{p:[73,5,3250],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[74,6,3289],t:7,e:"span",f:["Purity"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[72,4,3216]}," ",{t:4,f:[{p:[79,5,3377],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[78,4,3343]}," ",{t:4,f:[{p:[84,5,3478],t:7,e:"section",a:{"class":"compressedcell"},f:[]}],n:50,x:{r:["data.efficiency"],s:"_0>=2"},p:[83,4,3444]}," ",{p:[88,4,3545],t:7,e:"section",a:{"class":"compressedcell"},f:[]}," ",{p:[91,4,3599],t:7,e:"section",a:{"class":"compressedcell"},f:[]}]}," ",{t:4,f:[{p:[96,4,3691],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[97,5,3726],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[98,6,3765],t:7,e:"span",f:[{p:[98,12,3771],t:7,e:"b",f:[{t:2,r:"name",p:[98,15,3774]}]}]}]}," ",{p:[101,5,3817],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[102,6,3871],t:7,e:"span",f:[{t:2,r:"vol",p:[102,12,3877]},"u"]}]}," ",{t:4,f:[{p:[106,6,3953],t:7,e:"section",a:{"class":"compressedcell",align:"center"},f:[{p:[107,7,4008],t:7,e:"span",f:[{t:2,r:"purity",p:[107,13,4014]}]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=4"},p:[105,7,3918]}," ",{t:4,f:[{p:[112,6,4106],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[113,7,4146],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[113,25,4164]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[113,109,4248]},'", "volume": 1}']},f:["1"]}]}],n:50,x:{r:["data.efficiency"],s:"_0>=3"},p:[111,5,4071]}," ",{t:4,f:[{p:[118,6,4358],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[119,7,4398],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[119,25,4416]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[119,109,4500]},'", "volume": 5}']},f:["5"]}]}],n:50,x:{r:["adata.efficiency"],s:"_0>=2"},p:[117,5,4322]}," ",{p:[123,5,4574],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[124,6,4613],t:7,e:"ui-button",a:{state:[{t:2,x:{r:["data.occupied","allowed"],s:'_0&&_1?null:"disabled"'},p:[124,24,4631]}],action:"inject",params:['{"chem": "',{t:2,r:"id",p:[124,108,4715]},'", "volume": 10}']},f:["10"]}]}," ",{p:[127,5,4777],t:7,e:"section",a:{"class":"compressedcell"},f:[{p:[128,6,4816],t:7,e:"ui-button",a:{action:"purge",params:['{"chem": "',{t:2,r:"id",p:[128,50,4860]},'"}']},f:["Purge"]},{p:[128,77,4887],t:7,e:"br"}]}]}],n:52,r:"data.chems",p:[95,3,3666]}]}]}," ",{p:[135,3,4968],t:7,e:"ui-section",a:{label:"Capacity"},f:[{p:[136,5,5003],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.tot_capacity",p:[136,24,5022]}],value:[{t:2,r:"data.current_vol",p:[136,54,5052]}],state:[{t:2,r:"data.current_vol",p:[137,12,5086]}]},f:[{t:2,r:"data.current_vol",p:[137,34,5108]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],462:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,24],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[2,22,43]}],labelcolor:[{t:2,r:"htmlcolor",p:[2,44,65]}],candystripe:0,right:0},f:[{p:[3,5,103],t:7,e:"ui-section",a:{label:"Status"},f:[{p:[3,32,130],t:7,e:"span",a:{"class":[{t:2,x:{r:["status"],s:'_0=="Dead"?"bad bold":_0=="Unconscious"?"average bold":"good"'},p:[3,45,143]}]},f:[{t:2,r:"status",p:[3,132,230]}]}]}," ",{p:[4,5,265],t:7,e:"ui-section",a:{label:"Jelly"},f:[{t:2,r:"exoticblood",p:[4,31,291]}]}," ",{p:[5,5,324],t:7,e:"ui-section",a:{label:"Location"},f:[{t:2,r:"area",p:[5,34,353]}]}," ",{p:[7,5,380],t:7,e:"ui-button",a:{state:[{t:2,r:"swap_button_state",p:[8,14,404]}],action:"swap",params:['{"ref": "',{t:2,r:"ref",p:[9,38,464]},'"}']},f:[{t:4,f:["You Are Here"],n:50,x:{r:["occupied"],s:'_0=="owner"'},p:[10,7,482]},{t:4,n:51,f:[{t:4,f:["Occupied"],n:50,x:{r:["occupied"],s:'_0=="stranger"'},p:[13,9,554]},{t:4,n:51,f:["Swap"],x:{r:["occupied"],s:'_0=="stranger"'}}],x:{r:["occupied"],s:'_0=="owner"'}}]}]}],n:52,r:"data.bodies",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],463:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,23,79],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.drying"],s:'_0?"stop":"tint"'},p:[4,40,96]}],action:"Dry"},f:[{t:2,x:{r:["data.drying"],s:'_0?"Stop drying":"Dry"'},p:[4,88,144]}]}],n:50,r:"data.isdryer",p:[4,3,59]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[7,3,252],t:7,e:"ui-notice",f:[{p:[8,5,268],t:7,e:"span",f:["Unfortunately, this ",{t:2,r:"data.name",p:[8,31,294]}," is empty."]}]}],n:50,x:{r:["data.contents.length"],s:"_0==0"},p:[6,1,216]},{t:4,n:51,f:[{p:[11,1,349],t:7,e:"div",a:{"class":"display tabular"},f:[{p:[12,2,380],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[13,4,413],t:7,e:"section",a:{"class":"cell bold"},f:["Item"]}," ",{p:[16,4,467],t:7,e:"section",a:{"class":"cell bold"},f:["Quantity"]}," ",{p:[19,4,525],t:7,e:"section",a:{"class":"cell bold",align:"center"},f:[{t:4,f:[{t:2,r:"data.verb",p:[20,22,589]}],n:50,r:"data.verb",p:[20,5,572]},{t:4,n:51,f:["Dispense"],r:"data.verb"}]}]}," ",{t:4,f:[{p:[24,3,680],t:7,e:"section",a:{"class":"candystripe"},f:[{p:[25,4,713],t:7,e:"section",a:{"class":"cell"},f:[{t:2,r:"name",p:[26,5,740]}]}," ",{p:[28,4,766],t:7,e:"section",a:{"class":"cell",align:"right"},f:[{t:2,r:"amount",p:[29,5,807]}]}," ",{p:[31,4,835],t:7,e:"section",a:{"class":"table",alight:"right"},f:[{p:[32,5,878],t:7,e:"section",a:{"class":"cell"}}," ",{p:[33,5,915],t:7,e:"section",a:{"class":"cell"},f:[{p:[34,6,943],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>=1)?null:"disabled"'},p:[34,45,982]}],params:['{ "name" : ',{t:2,r:"name",p:[34,102,1039]},', "amount" : 1 }']},f:["One"]}]}," ",{p:[38,5,1114],t:7,e:"section",a:{"class":"cell"},f:[{p:[39,6,1142],t:7,e:"ui-button",a:{grid:0,action:"Release",state:[{t:2,x:{r:["amount"],s:'(_0>1)?null:"disabled"'},p:[39,45,1181]}],params:['{ "name" : ',{t:2,r:"name",p:[39,101,1237]}," }"]},f:["Many"]}]}]}]}],n:52,r:"data.contents",p:[23,2,654]}]}],x:{r:["data.contents.length"],s:"_0==0"}}]}]},e.exports=a.extend(r.exports)},{341:341}],464:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{capacityPercentState:function(){var t=this.get("data.capacityPercent");return t>50?"good":t>15?"average":"bad"},inputState:function(){return this.get("data.capacityPercent")>=100?"good":this.get("data.inputting")?"average":"bad"},outputState:function(){return this.get("data.outputting")?"good":this.get("data.charge")>0?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[24,1,640],t:7,e:"ui-display",a:{title:"Storage"},f:[{p:[25,3,671],t:7,e:"ui-section",a:{label:"Stored Energy"},f:[{p:[26,5,710],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.capacityPercent",p:[26,38,743]}],state:[{t:2,r:"capacityPercentState",p:[26,71,776]}]},f:[{t:2,x:{r:["adata.capacityPercent"],s:"Math.fixed(_0)"},p:[26,97,802]},"%"]}]}]}," ",{p:[29,1,880],t:7,e:"ui-display",a:{title:"Input"},f:[{p:[30,3,909],t:7,e:"ui-section",a:{label:"Charge Mode"},f:[{p:[31,5,946],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"refresh":"close"'},p:[31,22,963]}],style:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"selected":null'},p:[31,74,1015]}],action:"tryinput"},f:[{t:2,x:{r:["data.inputAttempt"],s:'_0?"Auto":"Off"'},p:[32,25,1082]}]}," [",{p:[34,6,1149],t:7,e:"span",a:{"class":[{t:2,r:"inputState",p:[34,19,1162]}]},f:[{t:2,x:{r:["data.capacityPercent","data.inputting"],s:'_0>=100?"Fully Charged":_1?"Charging":"Not Charging"'},p:[34,35,1178]}]},"]"]}," ",{p:[36,3,1300],t:7,e:"ui-section",a:{label:"Target Input"},f:[{p:[37,5,1338],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.inputLevelMax",p:[37,26,1359]}],value:[{t:2,r:"data.inputLevel",p:[37,57,1390]}]},f:[{t:2,r:"adata.inputLevel_text",p:[37,78,1411]}]}]}," ",{p:[39,3,1463],t:7,e:"ui-section",a:{label:"Adjust Input"},f:[{p:[40,5,1501],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[40,44,1540]}],action:"input",params:'{"target": "min"}'}}," ",{p:[41,5,1634],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.inputLevel"],s:'_0==0?"disabled":null'},p:[41,39,1668]}],action:"input",params:'{"adjust": -10000}'}}," ",{p:[42,5,1763],t:7,e:"ui-button",a:{icon:"pencil",action:"input",params:'{"target": "input"}'},f:["Set"]}," ",{p:[43,5,1852],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[43,38,1885]}],action:"input",params:'{"adjust": 10000}'}}," ",{p:[44,5,1996],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.inputLevel","data.inputLevelMax"],s:'_0==_1?"disabled":null'},p:[44,43,2034]}],action:"input",params:'{"target": "max"}'}}]}," ",{p:[46,3,2159],t:7,e:"ui-section",a:{label:"Available"},f:[{p:[47,3,2192],t:7,e:"span",f:[{t:2,r:"adata.inputAvailable",p:[47,9,2198]}]}]}]}," ",{p:[50,1,2259],t:7,e:"ui-display",a:{title:"Output"},f:[{p:[51,3,2289],t:7,e:"ui-section",a:{label:"Output Mode"},f:[{p:[52,5,2326],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"power-off":"close"'},p:[52,22,2343]}],style:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"selected":null'},p:[52,77,2398]}],action:"tryoutput"},f:[{t:2,x:{r:["data.outputAttempt"],s:'_0?"On":"Off"'},p:[53,26,2467]}]}," [",{p:[55,6,2533],t:7,e:"span",a:{"class":[{t:2,r:"outputState",p:[55,19,2546]}]},f:[{t:2,x:{r:["data.outputting","data.charge"],s:'_0?"Sending":_1>0?"Not Sending":"No Charge"'},p:[55,36,2563]}]},"]"]}," ",{p:[57,3,2668],t:7,e:"ui-section",a:{label:"Target Output"},f:[{p:[58,5,2707],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"data.outputLevelMax",p:[58,26,2728]}],value:[{t:2,r:"data.outputLevel",p:[58,58,2760]}]},f:[{t:2,r:"adata.outputLevel_text",p:[58,80,2782]}]}]}," ",{p:[60,3,2835],t:7,e:"ui-section",a:{label:"Adjust Output"},f:[{p:[61,5,2874],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[61,44,2913]}],action:"output",params:'{"target": "min"}'}}," ",{p:[62,5,3009],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.outputLevel"],s:'_0==0?"disabled":null'},p:[62,39,3043]}],action:"output",params:'{"adjust": -10000}'}}," ",{p:[63,5,3140],t:7,e:"ui-button",a:{icon:"pencil",action:"output",params:'{"target": "input"}'},f:["Set"]}," ",{p:[64,5,3230],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[64,38,3263]}],action:"output",params:'{"adjust": 10000}'}}," ",{p:[65,5,3377],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.outputLevel","data.outputLevelMax"],s:'_0==_1?"disabled":null'},p:[65,43,3415]}],action:"output",params:'{"target": "max"}'}}]}," ",{p:[67,3,3543],t:7,e:"ui-section",a:{label:"Outputting"},f:[{p:[68,3,3577],t:7,e:"span",f:[{t:2,r:"adata.outputUsed",p:[68,9,3583]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],465:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:["\ufeff",{t:4,f:[" ",{p:[2,2,32],t:7,e:"ui-display",a:{title:"Dispersal Tank"},f:[{p:[3,3,71],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[4,4,101],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.active"],s:'_0?"power-off":"close"'},p:[4,21,118]}],style:[{t:2,x:{r:["data.active"],s:'_0?"selected":null'},p:[5,12,170]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[6,12,218]}],action:"power"},f:[{t:2,x:{r:["data.active"],s:'_0?"On":"Off"'},p:[7,20,280]}]}]}," ",{p:[10,3,345],t:7,e:"ui-section",a:{label:"Smoke Radius Setting"},f:[{p:[11,5,391],t:7,e:"div",a:{"class":"content",style:"float:left"},f:[{p:[12,6,437],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=1?null:"disabled"'},p:[12,36,467]}],style:[{t:2,x:{r:["data.setting"],s:'_0==1?"selected":null'},p:[12,89,520]}],action:"setting",params:'{"amount": 1}'},f:["3"]}," ",{p:[13,6,622],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=2?null:"disabled"'},p:[13,36,652]}],style:[{t:2,x:{r:["data.setting"],s:'_0==2?"selected":null'},p:[13,89,705]}],action:"setting",params:'{"amount": 2}'},f:["6"]}," ",{p:[14,6,807],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=3?null:"disabled"'},p:[14,36,837]}],style:[{t:2,x:{r:["data.setting"],s:'_0==3?"selected":null'},p:[14,89,890]}],action:"setting",params:'{"amount": 3}'},f:["9"]}," ",{p:[15,6,992],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=4?null:"disabled"'},p:[15,36,1022]}],style:[{t:2,x:{r:["data.setting"],s:'_0==4?"selected":null'},p:[15,89,1075]}],action:"setting",params:'{"amount": 4}'},f:["12"]}," ",{p:[16,6,1178],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.maxSetting"],s:'_0>=5?null:"disabled"'},p:[16,36,1208]}],style:[{t:2,x:{r:["data.setting"],s:'_0==5?"selected":null'},p:[16,89,1261]}],action:"setting",params:'{"amount": 5}'},f:["15"]}]}]}," ",{p:[19,3,1392],t:7,e:"ui-section",a:{label:"Contents"},f:[{t:4,f:[{p:[21,6,1456],t:7,e:"span",f:[{t:2,x:{r:["adata.TankCurrentVolume"],s:"Math.round(_0)"},p:[21,12,1462]},"/",{t:2,r:"data.TankMaxVolume",p:[21,52,1502]}," Units"]}," ",{p:[22,6,1543],t:7,e:"br"}," ",{p:[23,5,1553],t:7,e:"br"}," ",{t:4,f:[{p:[25,7,1599],t:7,e:"span",a:{"class":"highlight"},t0:"fade",f:[{t:2,x:{r:["volume"],s:"Math.fixed(_0,2)"},p:[25,50,1642]}," units of ",{t:2,r:"name",p:[25,85,1677]}]},{p:[25,100,1692],t:7,e:"br"}],n:52,r:"adata.TankContents",p:[24,6,1564]}],n:50,r:"data.isTankLoaded",p:[20,4,1425]},{t:4,n:51,f:[{p:[28,6,1730],t:7,e:"span",a:{"class":"bad"},f:["Tank Empty"]}],r:"data.isTankLoaded"}," ",{p:[30,4,1780],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Eject":"Close"'},p:[30,21,1797]}],style:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"selected":null'},p:[31,12,1851]}],state:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?null:"disabled"'},p:[32,12,1905]}],action:"purge"},f:[{t:2,x:{r:["data.isTankLoaded"],s:'_0?"Purge Contents":"No chemicals detected"'},p:[33,20,1967]}]}]}]}],n:50,x:{r:["data.screen"],s:'_0=="home"'},p:[1,2,1]}]},e.exports=a.extend(r.exports)},{341:341}],466:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,3,30],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{t:2,x:{r:["adata.generated"],s:"Math.round(_0)"},p:[3,5,71]},"W"]}," ",{p:[5,3,122],t:7,e:"ui-section",a:{label:"Orientation"},f:[{p:[6,5,159],t:7,e:"span",f:[{t:2,x:{r:["adata.angle"],s:"Math.round(_0)"},p:[6,11,165]},"° (",{t:2,r:"data.direction",p:[6,45,199]},")"]}]}," ",{p:[8,3,244],t:7,e:"ui-section",a:{label:"Adjust Angle"},f:[{p:[9,5,282],t:7,e:"ui-button",a:{icon:"step-backward",action:"angle",params:'{"adjust": -15}'},f:["15°"]}," ",{p:[10,5,378],t:7,e:"ui-button",a:{icon:"backward",action:"angle",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[11,5,467],t:7,e:"ui-button",a:{icon:"forward",action:"angle",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[12,5,554],t:7,e:"ui-button",a:{icon:"step-forward",action:"angle",params:'{"adjust": 15}'},f:["15°"]}]}]}," ",{p:[15,1,673],t:7,e:"ui-display",a:{title:"Tracking"},f:[{p:[16,3,705],t:7,e:"ui-section",a:{label:"Tracker Mode"},f:[{p:[17,5,743],t:7,e:"ui-button",a:{icon:"close",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==0?"selected":null'},p:[17,36,774]}],action:"tracking",params:'{"mode": 0}'},f:["Off"]}," ",{p:[19,5,889],t:7,e:"ui-button",a:{icon:"clock-o",state:[{t:2,x:{r:["data.tracking_state"],s:'_0==1?"selected":null'},p:[19,38,922]}],action:"tracking",params:'{"mode": 1}'},f:["Timed"]}," ",{p:[21,5,1039],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.connected_tracker","data.tracking_state"],s:'_0?_1==2?"selected":null:"disabled"'},p:[21,38,1072]}],action:"tracking",params:'{"mode": 2}'},f:["Auto"]}]}," ",{p:[24,3,1239],t:7,e:"ui-section",a:{label:"Tracking Rate"},f:[{p:[25,3,1276],t:7,e:"span",f:[{t:2,x:{r:["adata.tracking_rate"],s:"Math.round(_0)"},p:[25,9,1282]},"°/h (",{t:2,r:"data.rotating_way",p:[25,53,1326]},")"]}]}," ",{p:[27,3,1373],t:7,e:"ui-section",a:{label:"Adjust Rate"},f:[{p:[28,5,1410],t:7,e:"ui-button",a:{icon:"fast-backward",action:"rate",params:'{"adjust": -180}'},f:["180°"]}," ",{p:[29,5,1507],t:7,e:"ui-button",a:{icon:"step-backward",action:"rate",params:'{"adjust": -30}'},f:["30°"]}," ",{p:[30,5,1602],t:7,e:"ui-button",a:{icon:"backward",action:"rate",params:'{"adjust": -5}'},f:["5°"]}," ",{p:[31,5,1690],t:7,e:"ui-button",a:{icon:"forward",action:"rate",params:'{"adjust": 5}'},f:["5°"]}," ",{p:[32,5,1776],t:7,e:"ui-button",a:{icon:"step-forward",action:"rate",params:'{"adjust": 30}'},f:["30°"]}," ",{p:[33,5,1869],t:7,e:"ui-button",a:{icon:"fast-forward",action:"rate",params:'{"adjust": 180}'},f:["180°"]}]}]}," ",{p:{button:[{p:[38,5,2051],t:7,e:"ui-button",a:{icon:"refresh",action:"refresh"},f:["Refresh"]}]},t:7,e:"ui-display",a:{title:"Devices",button:0},f:[" ",{p:[40,2,2130],t:7,e:"ui-section",a:{label:"Solar Tracker"},f:[{p:[41,5,2169],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_tracker"],s:'_0?"good":"bad"'},p:[41,18,2182]}]},f:[{t:2,x:{r:["data.connected_tracker"],s:'_0?"":"Not "'},p:[41,63,2227]},"Found"]}]}," ",{p:[43,2,2296],t:7,e:"ui-section",a:{label:"Solar Panels"},f:[{p:[44,3,2332],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.connected_panels"],s:'_0?"good":"bad"'},p:[44,16,2345]}]},f:[{t:2,x:{r:["adata.connected_panels"],s:"Math.round(_0)"},p:[44,60,2389]}," Panels Connected"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],467:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:{button:[{t:4,f:[{p:[4,7,84],t:7,e:"ui-button",a:{icon:"eject",state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[4,38,115]}],action:"eject"},f:["Eject"]}],n:50,r:"data.open",p:[3,5,60]}]},t:7,e:"ui-display",a:{title:"Power",button:0},f:[" ",{p:[7,3,220],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[8,5,251],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[8,22,268]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[9,14,318]}],state:[{t:2,x:{r:["data.hasPowercell"],s:'_0?null:"disabled"'},p:[9,54,358]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[10,22,422]}]}]}," ",{p:[12,3,479],t:7,e:"ui-section",a:{label:"Cell"},f:[{t:4,f:[{p:[14,7,541],t:7,e:"ui-bar",a:{min:"0",max:"100",value:[{t:2,r:"data.powerLevel",p:[14,40,574]}]},f:[{t:2,x:{r:["adata.powerLevel"],s:"Math.fixed(_0)"},p:[14,61,595]},"%"]}],n:50,r:"data.hasPowercell",p:[13,5,509]},{t:4,n:51,f:[{p:[16,4,652],t:7,e:"span",a:{"class":"bad"},f:["No Cell"]}],r:"data.hasPowercell"}]}]}," ",{p:[20,1,725],t:7,e:"ui-display",a:{title:"Thermostat"},f:[{p:[21,3,759],t:7,e:"ui-section",a:{label:"Current Temperature"},f:[{p:[22,3,802],t:7,e:"span",f:[{t:2,x:{r:["adata.currentTemp"],s:"Math.round(_0)"},p:[22,9,808]},"°C"]}]}," ",{p:[24,2,871],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[25,3,913],t:7,e:"span",f:[{t:2,x:{r:["adata.targetTemp"],s:"Math.round(_0)"},p:[25,9,919]},"°C"]}]}," ",{t:4,f:[{p:[28,5,1004],t:7,e:"ui-section",a:{label:"Adjust Target"},f:[{p:[29,7,1045],t:7,e:"ui-button",a:{icon:"fast-backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[29,46,1084]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[30,7,1189],t:7,e:"ui-button",a:{icon:"backward",state:[{t:2,x:{r:["data.targetTemp","data.minTemp"],s:'_0>_1?null:"disabled"'},p:[30,41,1223]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[31,7,1327],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:["Set"]}," ",{p:[32,7,1419],t:7,e:"ui-button",a:{icon:"forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[32,40,1452]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[33,7,1555],t:7,e:"ui-button",a:{icon:"fast-forward",state:[{t:2,x:{r:["data.targetTemp","data.maxTemp"],s:'_0<_1?null:"disabled"'},p:[33,45,1593]}],action:"target",params:'{"adjust": 20}'}}]}],n:50,r:"data.open",p:[27,3,982]}," ",{p:[36,3,1719],t:7,e:"ui-section",a:{label:"Mode"},f:[{t:4,f:[{p:[38,7,1771],t:7,e:"ui-button",a:{icon:"long-arrow-up",state:[{t:2,x:{r:["data.mode"],s:'_0=="heat"?"selected":null'},p:[38,46,1810]}],action:"mode",params:'{"mode": "heat"}'},f:["Heat"]}," ",{p:[39,7,1918],t:7,e:"ui-button",a:{icon:"long-arrow-down",state:[{t:2,x:{r:["data.mode"],s:'_0=="cool"?"selected":null'},p:[39,48,1959]}],action:"mode",params:'{"mode": "cool"}'},f:["Cool"]}," ",{p:[40,7,2067],t:7,e:"ui-button",a:{icon:"arrows-v",state:[{t:2,x:{r:["data.mode"],s:'_0=="auto"?"selected":null'},p:[40,41,2101]}],action:"mode",params:'{"mode": "auto"}'},f:["Auto"]}],n:50,r:"data.open",p:[37,3,1747]},{t:4,n:51,f:[{p:[42,4,2217],t:7,e:"span",f:[{t:2,x:{r:["text","data.mode"],s:"_0.titleCase(_1)"},p:[42,10,2223]}]}],r:"data.open"}]}]}]},e.exports=a.extend(r.exports)},{341:341}],468:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:{button:[{p:[4,8,97],t:7,e:"ui-button",a:{action:"jump",params:['{"name" : ',{t:2,r:"name",p:[4,51,140]},"}"]},f:["Jump"]}," ",{p:[7,9,195],t:7,e:"ui-button",a:{action:"spawn",params:['{"name" : ',{t:2,r:"name",p:[7,53,239]},"}"]},f:["Spawn"]}]},t:7,e:"ui-display",a:{title:[{t:2,r:"name",p:[2,22,46]}],button:0},f:[" ",{p:[11,3,308],t:7,e:"ui-section",a:{label:"Description"},f:[{p:[12,5,346],t:7,e:"span",f:[{t:3,r:"desc",p:[12,11,352]}]}]}," ",{p:[14,3,390],t:7,e:"ui-section",a:{label:"Spawners left"},f:[{p:[15,5,430],t:7,e:"span",f:[{t:2,r:"amount_left",p:[15,11,436]}]}]}]}],n:52,r:"data.spawners",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],469:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,30],t:7,e:"ui-display",a:{title:[{t:2,r:"class",p:[2,22,49]}," Alarms"]},f:[{p:[3,5,72],t:7,e:"ul",f:[{t:4,f:[{p:[5,9,103],t:7,e:"li",f:[{t:2,r:".",p:[5,13,107]}]}],n:52,r:".",p:[4,7,83]},{t:4,n:51,f:[{p:[7,9,141],t:7,e:"li",f:["System Nominal"]}],r:"."}]}]}],n:52,i:"class",r:"data.alarms",p:[1,1,0]}]},e.exports=a.extend(r.exports)},{341:341}],470:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{t:4,f:[{p:[2,3,41],t:7,e:"ui-notice",f:[{p:[3,5,57],t:7,e:"span",f:["Biological entity detected in contents. Please remove."]}]}],n:50,x:{r:["data.occupied","data.safeties"],s:"_0&&_1"},p:[1,1,0]},{t:4,f:[{p:[7,3,173],t:7,e:"ui-notice",f:[{p:[8,5,189],t:7,e:"span",f:["Contents are being disinfected. Please wait."]}]}],n:50,r:"data.uv_active",p:[6,1,148]},{t:4,n:51,f:[{p:{button:[{t:4,f:[{p:[13,25,357],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.locked"],s:'_0?"unlock":"lock"'},p:[13,42,374]}],action:"lock"},f:[{t:2,x:{r:["data.locked"],s:'_0?"Unlock":"Lock"'},p:[13,93,425]}]}],n:50,x:{r:["data.open"],s:"!_0"},p:[13,7,339]}," ",{t:4,f:[{p:[14,27,506],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.open"],s:'_0?"sign-out":"sign-in"'},p:[14,44,523]}],action:"door"},f:[{t:2,x:{r:["data.open"],s:'_0?"Close":"Open"'},p:[14,98,577]}]}],n:50,x:{r:["data.locked"],s:"!_0"},p:[14,7,486]}]},t:7,e:"ui-display",a:{title:"Storage",button:0},f:[" ",{t:4,f:[{p:[17,7,676],t:7,e:"ui-notice",f:[{p:[18,9,696],t:7,e:"span",f:["Unit Locked"]}]}],n:50,r:"data.locked",p:[16,5,650]},{t:4,n:51,f:[{t:4,n:50,x:{r:["data.open"],s:"_0"},f:[{p:[21,9,773],t:7,e:"ui-section",a:{label:"Helmet"},f:[{p:[22,11,811],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.helmet"],s:'_0?"square":"square-o"'},p:[22,28,828]}],state:[{t:2,x:{r:["data.helmet"],s:'_0?null:"disabled"'},p:[22,75,875]}],action:"dispense",params:'{"item": "helmet"}'},f:[{t:2,x:{r:["data.helmet"],s:'_0||"Empty"'},p:[23,59,970]}]}]}," ",{p:[25,9,1039],t:7,e:"ui-section",a:{label:"Suit"},f:[{p:[26,11,1075],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.suit"],s:'_0?"square":"square-o"'},p:[26,28,1092]}],state:[{t:2,x:{r:["data.suit"],s:'_0?null:"disabled"'},p:[26,74,1138]}],action:"dispense",params:'{"item": "suit"}'},f:[{t:2,x:{r:["data.suit"],s:'_0||"Empty"'},p:[27,57,1229]}]}]}," ",{p:[29,9,1296],t:7,e:"ui-section",a:{label:"Mask"},f:[{p:[30,11,1332],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.mask"],s:'_0?"square":"square-o"'},p:[30,28,1349]}],state:[{t:2,x:{r:["data.mask"],s:'_0?null:"disabled"'},p:[30,74,1395]}],action:"dispense",params:'{"item": "mask"}'},f:[{t:2,x:{r:["data.mask"],s:'_0||"Empty"'},p:[31,57,1486]}]}]}," ",{p:[33,9,1553],t:7,e:"ui-section",a:{label:"Storage"},f:[{p:[34,11,1592],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.storage"],s:'_0?"square":"square-o"'},p:[34,28,1609]}],state:[{t:2,x:{r:["data.storage"],s:'_0?null:"disabled"'},p:[34,77,1658]}],action:"dispense",params:'{"item": "storage"}'},f:[{t:2,x:{r:["data.storage"],s:'_0||"Empty"'},p:[35,60,1755]}]}]}]},{t:4,n:50,x:{r:["data.open"],s:"!(_0)"},f:[" ",{p:[38,7,1836],t:7,e:"ui-button",a:{icon:"recycle",state:[{t:2,x:{r:["data.occupied","data.safeties"],s:'_0&&_1?"disabled":null'},p:[38,40,1869]}],action:"uv"},f:["Disinfect"]}]}],r:"data.locked"}]}],r:"data.uv_active"}]},e.exports=a.extend(r.exports)},{341:341}],471:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{p:[2,5,17],t:7,e:"ui-section",a:{label:"Dispense"},f:[{p:[3,9,55],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.plasma"],s:'_0?"square":"square-o"'},p:[3,26,72]}],state:[{t:2,x:{r:["data.plasma"],s:'_0?null:"disabled"'},p:[3,74,120]}],action:"plasma"},f:["Plasma (",{t:2,x:{r:["adata.plasma"],s:"Math.round(_0)"},p:[4,37,193]},")"]}," ",{p:[5,9,243],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.oxygen"],s:'_0?"square":"square-o"'},p:[5,26,260]}],state:[{t:2,x:{r:["data.oxygen"],s:'_0?null:"disabled"'},p:[5,74,308]}],action:"oxygen"},f:["Oxygen (",{t:2,x:{r:["adata.oxygen"],s:"Math.round(_0)"},p:[6,37,381]},")"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],472:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={computed:{tankPressureState:function(){var t=this.get("data.tankPressure");return t>=200?"good":t>=100?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,282],t:7,e:"ui-notice",f:[{p:[15,3,296],t:7,e:"span",f:["The regulator ",{t:2,x:{r:["data.connected"],s:'_0?"is":"is not"'},p:[15,23,316]}," connected to a mask."]}]}," ",{p:[17,1,393],t:7,e:"ui-display",f:[{p:[18,3,408],t:7,e:"ui-section",a:{label:"Tank Pressure"},f:[{p:[19,7,449],t:7,e:"ui-bar",a:{min:"0",max:"1013",value:[{t:2,r:"data.tankPressure",p:[19,41,483]}],state:[{t:2,r:"tankPressureState",p:[20,16,521]}]},f:[{t:2,x:{r:["adata.tankPressure"],s:"Math.round(_0)"},p:[20,39,544]}," kPa"]}]}," ",{p:[22,3,610],t:7,e:"ui-section",a:{label:"Release Pressure"},f:[{p:[23,5,652],t:7,e:"ui-bar",a:{min:[{t:2,r:"data.minReleasePressure",p:[23,18,665]}],max:[{t:2,r:"data.maxReleasePressure",p:[23,52,699]}],value:[{t:2,r:"data.releasePressure",p:[24,14,741]}]},f:[{t:2,x:{r:["adata.releasePressure"],s:"Math.round(_0)"},p:[24,40,767]}," kPa"]}]}," ",{p:[26,3,836],t:7,e:"ui-section",a:{label:"Pressure Regulator"},f:[{p:[27,5,880],t:7,e:"ui-button",a:{icon:"refresh",state:[{t:2,x:{r:["data.releasePressure","data.defaultReleasePressure"],s:'_0!=_1?null:"disabled"'},p:[27,38,913]}],action:"pressure",params:'{"pressure": "reset"}'},f:["Reset"]}," ",{p:[29,5,1067],t:7,e:"ui-button",a:{icon:"minus",state:[{t:2,x:{r:["data.releasePressure","data.minReleasePressure"],s:'_0>_1?null:"disabled"'},p:[29,36,1098]}],action:"pressure",params:'{"pressure": "min"}'},f:["Min"]}," ",{p:[31,5,1243],t:7,e:"ui-button",a:{icon:"pencil",action:"pressure",params:'{"pressure": "input"}'},f:["Set"]}," ",{p:[32,5,1337],t:7,e:"ui-button",a:{icon:"plus",state:[{t:2,x:{r:["data.releasePressure","data.maxReleasePressure"],s:'_0<_1?null:"disabled"'},p:[32,35,1367]}],action:"pressure",params:'{"pressure": "max"}'},f:["Max"]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],473:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[2,5,32],t:7,e:"ui-section",a:{label:"Temperature"},f:[{p:[3,9,73],t:7,e:"span",f:[{t:2,x:{r:["adata.temperature"],s:"Math.fixed(_0,2)"},p:[3,15,79]}," K"]}]}," ",{p:[5,5,147],t:7,e:"ui-section",a:{label:"Pressure"},f:[{p:[6,9,185],t:7,e:"span",f:[{t:2,x:{r:["adata.pressure"],s:"Math.fixed(_0,2)"},p:[6,15,191]}," kPa"]}]}]}," ",{p:[9,1,268],t:7,e:"ui-display",a:{title:"Controls"},f:[{p:[10,5,302],t:7,e:"ui-section",a:{label:"Power"},f:[{p:[11,9,337],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.on"],s:'_0?"power-off":"close"'},p:[11,26,354]}],style:[{t:2,x:{r:["data.on"],s:'_0?"selected":null'},p:[11,70,398]}],action:"power"},f:[{t:2,x:{r:["data.on"],s:'_0?"On":"Off"'},p:[12,28,458]}]}]}," ",{p:[14,5,518],t:7,e:"ui-section",a:{label:"Target Temperature"},f:[{p:[15,9,566],t:7,e:"ui-button",a:{icon:"fast-backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[15,48,605]}],action:"target",params:'{"adjust": -20}'}}," ",{p:[17,9,717],t:7,e:"ui-button",a:{icon:"backward",style:[{t:2,x:{r:["data.target","data.min"],s:'_0==_1?"disabled":null'},p:[17,43,751]}],action:"target",params:'{"adjust": -5}'}}," ",{p:[19,9,862],t:7,e:"ui-button",a:{icon:"pencil",action:"target",params:'{"target": "input"}'},f:[{t:2,x:{r:["adata.target"],s:"Math.fixed(_0,2)"},p:[19,79,932]}]}," ",{p:[20,9,984],t:7,e:"ui-button",a:{icon:"forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[20,42,1017]}],action:"target",params:'{"adjust": 5}'}}," ",{p:[22,9,1127],t:7,e:"ui-button",a:{icon:"fast-forward",style:[{t:2,x:{r:["data.target","data.max"],s:'_0==_1?"disabled":null'},p:[22,47,1165]}],action:"target",params:'{"adjust": 20}'}}]}]}]},e.exports=a.extend(r.exports)},{341:341}],474:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{powerState:function(t){switch(t){case 1:return"good";default:return"bad"}}}}}(r),r.exports.template={v:3,t:[" ",{p:[13,1,161],
+t:7,e:"ui-notice",f:[{p:[14,2,174],t:7,e:"ui-section",a:{label:"Reconnect"},f:[{p:[15,3,207],t:7,e:"div",a:{style:"float:right"},f:[{p:[16,4,236],t:7,e:"ui-button",a:{icon:"refresh",action:"reconnect"},f:["Reconnect"]}]}]}]}," ",{p:[20,1,340],t:7,e:"ui-display",a:{title:"Turbine Controller"},f:[{p:[21,2,381],t:7,e:"ui-section",a:{label:"Status"},f:[{t:4,f:[{p:[23,4,434],t:7,e:"span",a:{"class":"bad"},f:["Broken"]}],n:50,r:"data.broken",p:[22,3,411]},{t:4,n:51,f:[{p:[25,4,480],t:7,e:"span",a:{"class":[{t:2,x:{r:["powerState","data.online"],s:"_0(_1)"},p:[25,17,493]}]},f:[{t:2,x:{r:["data.online","data.compressor_broke","data.turbine_broke"],s:'_0&&!(_1||_2)?"Online":"Offline"'},p:[25,46,522]}]}],r:"data.broken"}," ",{p:[27,3,630],t:7,e:"div",a:{style:"float:right"},f:[{p:[28,4,659],t:7,e:"ui-button",a:{icon:"power-off",action:"power-on",state:[{t:2,r:"data.broken",p:[28,57,712]}],style:[{t:2,x:{r:["data.online"],s:'_0?"selected":""'},p:[28,81,736]}]},f:["On"]}," ",{p:[29,4,789],t:7,e:"ui-button",a:{icon:"close",action:"power-off",state:[{t:2,r:"data.broken",p:[29,54,839]}],style:[{t:2,x:{r:["data.online"],s:'_0?"":"selected"'},p:[29,78,863]}]},f:["Off"]}]}," ",{t:4,f:[{p:[32,4,958],t:7,e:"br"}," [ ",{p:[33,6,968],t:7,e:"span",a:{"class":"bad"},f:["Compressor is inoperable"]}," ]"],n:50,r:"data.compressor_broke",p:[31,3,925]}," ",{t:4,f:[{p:[36,4,1062],t:7,e:"br"}," [ ",{p:[37,6,1072],t:7,e:"span",a:{"class":"bad"},f:["Turbine is inoperable"]}," ]"],n:50,r:"data.turbine_broke",p:[35,3,1032]}]}]}," ",{p:[41,1,1160],t:7,e:"ui-display",a:{title:"Status"},f:[{p:[42,2,1189],t:7,e:"ui-section",a:{label:"Turbine Speed"},f:[{p:[43,3,1226],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.rpm"],s:'_0?"--":_1'},p:[43,9,1232]}," RPM"]}]}," ",{p:[45,2,1293],t:7,e:"ui-section",a:{label:"Internal Temp"},f:[{p:[46,3,1330],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.temp"],s:'_0?"--":_1'},p:[46,9,1336]}," K"]}]}," ",{p:[48,2,1396],t:7,e:"ui-section",a:{label:"Generated Power"},f:[{p:[49,3,1435],t:7,e:"span",f:[{t:2,x:{r:["data.broken","data.power"],s:'_0?"--":_1'},p:[49,9,1441]}]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],475:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{},oninit:function(){this.on({hover:function(t){var e=this.get("data.telecrystals");e>=t.context.params.cost&&this.set("hovered",t.context.params)},unhover:function(t){this.set("hovered")}})}}}(r),r.exports.template={v:3,t:[" ",{p:{button:[{t:4,f:[{p:[23,7,460],t:7,e:"ui-button",a:{icon:"lock",action:"lock"},f:["Lock"]}],n:50,r:"data.lockable",p:[22,5,432]}]},t:7,e:"ui-display",a:{title:"Uplink",button:0},f:[" ",{p:[26,3,543],t:7,e:"ui-section",a:{label:"Telecrystals",right:0},f:[{p:[27,5,587],t:7,e:"span",a:{"class":[{t:2,x:{r:["data.telecrystals"],s:'_0>0?"good":"bad"'},p:[27,18,600]}]},f:[{t:2,r:"data.telecrystals",p:[27,62,644]}," TC"]}]}]}," ",{t:4,f:[{p:[31,3,734],t:7,e:"ui-display",f:[{p:[32,2,748],t:7,e:"ui-button",a:{action:"select",params:['{"category": "',{t:2,r:"name",p:[32,51,797]},'"}']},f:[{t:2,r:"name",p:[32,63,809]}]}," ",{t:4,f:[{p:[34,4,850],t:7,e:"ui-section",a:{label:[{t:2,r:"name",p:[34,23,869]}],candystripe:0,right:0},f:[{p:[35,3,900],t:7,e:"ui-button",a:{tooltip:[{t:2,r:"name",p:[35,23,920]},": ",{t:2,r:"desc",p:[35,33,930]}],"tooltip-side":"left",state:[{t:2,x:{r:["data.telecrystals","hovered.cost","cost","hovered.item","name"],s:'_0<_2||(_0-_1<_2&&_3!=_4)?"disabled":null'},p:[36,12,971]}],action:"buy",params:['{"category": "',{t:2,r:"category",p:[37,40,1129]},'", "item": ',{t:2,r:"name",p:[37,63,1152]},', "cost": ',{t:2,r:"cost",p:[37,81,1170]},"}"]},v:{hover:"hover",unhover:"unhover"},f:[{t:2,r:"cost",p:[38,43,1223]}," TC"]}]}],n:52,r:"items",p:[33,2,831]}]}],n:52,r:"data.categories",p:[30,1,706]}]},e.exports=a.extend(r.exports)},{341:341}],476:[function(t,e,n){var a=t(341),r={exports:{}};!function(t){"use strict";t.exports={data:{healthState:function(t){var e=this.get("data.vr_avatar.maxhealth");return t>e/1.5?"good":t>e/3?"average":"bad"}}}}(r),r.exports.template={v:3,t:[" ",{p:[14,1,292],t:7,e:"ui-display",f:[{t:4,f:[{p:[16,3,331],t:7,e:"ui-notice",f:[{p:[17,4,347],t:7,e:"span",f:["Safety restraints disabled."]}]}],n:50,r:"data.emagged",p:[15,2,307]}," ",{t:4,f:[{p:[21,3,442],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:[{p:[22,4,482],t:7,e:"ui-section",a:{label:"Name"},f:[{t:2,r:"data.vr_avatar.name",p:[23,5,513]}]}," ",{t:4,f:[{p:[26,5,586],t:7,e:"ui-section",a:{label:"Status"},f:[{t:2,r:"data.vr_avatar.status",p:[27,6,620]}]}," ",{p:[29,5,670],t:7,e:"ui-section",a:{label:"Health"},f:[{p:[30,6,704],t:7,e:"ui-bar",a:{min:"0",max:[{t:2,r:"adata.vr_avatar.maxhealth",p:[30,27,725]}],value:[{t:2,r:"adata.vr_avatar.health",p:[30,65,763]}],state:[{t:2,x:{r:["healthState","adata.vr_avatar.health"],s:"_0(_1)"},p:[30,100,798]}]},f:[{t:2,x:{r:["adata.vr_avatar.health"],s:"Math.round(_0)"},p:[30,141,839]},"/",{t:2,r:"adata.vr_avatar.maxhealth",p:[30,180,878]}]}]}],n:50,r:"data.isliving",p:[25,4,559]}]}],n:50,r:"data.vr_avatar",p:[20,2,416]},{t:4,n:51,f:[{p:[35,3,979],t:7,e:"ui-display",a:{title:"Virtual Avatar"},f:["No Virtual Avatar detected"]}],r:"data.vr_avatar"}," ",{p:[39,2,1075],t:7,e:"ui-display",a:{title:"VR Commands"},f:[{p:[40,3,1111],t:7,e:"ui-button",a:{icon:[{t:2,x:{r:["data.toggle_open"],s:'_0?"times":"plus"'},p:[40,20,1128]}],action:"toggle_open"},f:[{t:2,x:{r:["data.toggle_open"],s:'_0?"Close":"Open"'},p:[41,4,1195]}," the VR Sleeper"]}," ",{t:4,f:[{p:[44,4,1297],t:7,e:"ui-button",a:{icon:"signal",action:"vr_connect"},f:["Connect to VR"]}],n:50,r:"data.isoccupant",p:[43,3,1269]}," ",{t:4,f:[{p:[49,4,1420],t:7,e:"ui-button",a:{icon:"ban",action:"delete_avatar"},f:["Delete Virtual Avatar"]}],n:50,r:"data.vr_avatar",p:[48,3,1393]}]}]}]},e.exports=a.extend(r.exports)},{341:341}],477:[function(t,e,n){var a=t(341),r={exports:{}};r.exports.template={v:3,t:[{p:[1,1,0],t:7,e:"ui-display",f:[{t:4,f:[{p:[3,5,40],t:7,e:"ui-section",a:{label:[{t:2,r:"color",p:[3,24,59]},{t:2,x:{r:["wire"],s:'_0?" ("+_0+")":""'},p:[3,33,68]}],labelcolor:[{t:2,r:"color",p:[3,80,115]}],candystripe:0,right:0},f:[{p:[4,7,151],t:7,e:"ui-button",a:{action:"cut",params:['{"wire":"',{t:2,r:"color",p:[4,48,192]},'"}']},f:[{t:2,x:{r:["cut"],s:'_0?"Mend":"Cut"'},p:[4,61,205]}]}," ",{p:[5,7,248],t:7,e:"ui-button",a:{action:"pulse",params:['{"wire":"',{t:2,r:"color",p:[5,50,291]},'"}']},f:["Pulse"]}," ",{p:[6,7,328],t:7,e:"ui-button",a:{action:"attach",params:['{"wire":"',{t:2,r:"color",p:[6,51,372]},'"}']},f:[{t:2,x:{r:["attached"],s:'_0?"Detach":"Attach"'},p:[6,64,385]}]}]}],n:52,r:"data.wires",p:[2,3,15]}]}," ",{t:4,f:[{p:[11,3,498],t:7,e:"ui-display",f:[{t:4,f:[{p:[13,7,543],t:7,e:"ui-section",f:[{t:2,r:".",p:[13,19,555]}]}],n:52,r:"data.status",p:[12,5,515]}]}],n:50,r:"data.status",p:[10,1,476]}]},e.exports=a.extend(r.exports)},{341:341}],478:[function(t,e,n){(function(e){"use strict";var n=t(341),a=e.interopRequireDefault(n);t(331),t(1),t(327),t(330);var r=t(479),i=e.interopRequireDefault(r),o=t(480),s=t(328),p=t(329),u=e.interopRequireDefault(p);a["default"].DEBUG=/minified/.test(function(){}),Object.assign(Math,t(484)),window.initialize=function(e){window.tgui=window.tgui||new i["default"]({el:"#container",data:function(){var n=JSON.parse(e);return{constants:t(481),text:t(485),config:n.config,data:n.data,adata:n.data}}})};var c=document.getElementById("data"),l=c.textContent,d=c.getAttribute("data-ref");"{}"!==l&&(window.initialize(l),c.remove()),(0,o.act)(d,"tgui:initialize"),(0,s.loadCSS)("font-awesome.min.css");var f=new u["default"]("FontAwesome");f.check("").then(function(){return document.body.classList.add("icons")})["catch"](function(){return document.body.classList.add("no-icons")})}).call(this,t("babel/external-helpers"))},{1:1,327:327,328:328,329:329,330:330,331:331,341:341,479:479,480:480,481:481,484:484,485:485,"babel/external-helpers":"babel/external-helpers"}],479:[function(t,e,n){var a=t(341),r={exports:{}};!function(e){"use strict";var n=t(480),a=t(482);e.exports={components:{"ui-bar":t(342),"ui-button":t(343),"ui-display":t(344),"ui-input":t(345),"ui-linegraph":t(346),"ui-notice":t(347),"ui-section":t(349),"ui-subdisplay":t(350),"ui-tabs":t(351)},events:{enter:t(339).enter,space:t(339).space},transitions:{fade:t(340)},onconfig:function(){var e=this.get("config.interface"),n={ai_airlock:t(355),airalarm:t(356),"airalarm/back":t(357),"airalarm/modes":t(358),"airalarm/scrubbers":t(359),"airalarm/status":t(360),"airalarm/thresholds":t(361),"airalarm/vents":t(362),airlock_electronics:t(363),apc:t(364),atmos_alert:t(365),atmos_control:t(366),atmos_filter:t(367),atmos_mixer:t(368),atmos_pump:t(369),borgopanel:t(370),brig_timer:t(371),bsa:t(372),canister:t(373),cargo:t(374),cargo_express:t(375),cellular_emporium:t(376),centcom_podlauncher:t(377),chem_dispenser:t(378),chem_heater:t(379),chem_master:t(380),chem_synthesizer:t(381),clockwork_slab:t(382),codex_gigas:t(383),computer_fabricator:t(384),crayon:t(385),crew:t(386),cryo:t(387),disposal_unit:t(388),dna_vault:t(389),dogborg_sleeper:t(390),eightball:t(391),emergency_shuttle_console:t(392),engraved_message:t(393),error:t(394),"exofab - Copia":t(395),exonet_node:t(396),gps:t(397),gulag_console:t(398),gulag_item_reclaimer:t(399),holodeck:t(400),implantchair:t(401),intellicard:t(402),keycard_auth:t(403),labor_claim_console:t(404),language_menu:t(405),launchpad_remote:t(406),mech_bay_power_console:t(407),mulebot:t(408),nanite_chamber_control:t(409),nanite_cloud_control:t(410),nanite_program_hub:t(411),nanite_programmer:t(412),nanite_remote:t(413),notificationpanel:t(414),ntnet_relay:t(415),ntos_ai_restorer:t(416),ntos_card:t(417),ntos_configuration:t(418),ntos_file_manager:t(419),ntos_main:t(420),ntos_net_chat:t(421),ntos_net_dos:t(422),ntos_net_downloader:t(423),ntos_net_monitor:t(424),ntos_net_transfer:t(425),ntos_power_monitor:t(426),ntos_revelation:t(427),ntos_station_alert:t(428),ntos_supermatter_monitor:t(429),ntosheader:t(430),nuclear_bomb:t(431),operating_computer:t(432),ore_redemption_machine:t(433),pandemic:t(434),personal_crafting:t(435),portable_pump:t(436),portable_scrubber:t(437),power_monitor:t(438),radio:t(439),rdconsole:t(440),"rdconsole/circuit":t(441),"rdconsole/designview":t(442),"rdconsole/destruct":t(443),"rdconsole/diskopsdesign":t(444),"rdconsole/diskopstech":t(445),"rdconsole/nodeview":t(446),"rdconsole/protolathe":t(447),"rdconsole/rdheader":t(448),"rdconsole/settings":t(449),"rdconsole/techweb":t(450),reagentgrinder:t(451),rpd:t(452),"rpd/colorsel":t(453),"rpd/dirsel":t(454),sat_control:t(455),scrubbing_types:t(456),shuttle_manipulator:t(457),"shuttle_manipulator/modification":t(458),"shuttle_manipulator/status":t(459),"shuttle_manipulator/templates":t(460),sleeper:t(461),slime_swap_body:t(462),smartvend:t(463),smes:t(464),smoke_machine:t(465),solar_control:t(466),space_heater:t(467),spawners_menu:t(468),station_alert:t(469),suit_storage_unit:t(470),tank_dispenser:t(471),tanks:t(472),thermomachine:t(473),turbine_computer:t(474),uplink:t(475),vr_sleeper:t(476),wires:t(477)};e in n?this.components["interface"]=n[e]:this.components["interface"]=n.error},oninit:function(){this.observe("config.style",function(t,e,n){t&&document.body.classList.add(t),e&&document.body.classList.remove(e)})},oncomplete:function(){if(this.get("config.locked")){var t=(0,a.lock)(window.screenLeft,window.screenTop),e=t.x,r=t.y;(0,n.winset)(this.get("config.window"),"pos",e+","+r)}(0,n.winset)("mapwindow.map","focus",!0)}}}(r),r.exports.template={v:3,t:[" "," "," "," ",{p:[56,1,1819],t:7,e:"titlebar",f:[{t:3,r:"config.title",p:[56,11,1829]}]}," ",{p:[57,1,1859],t:7,e:"main",f:[{p:[58,3,1868],t:7,e:"warnings"}," ",{p:[59,3,1882],t:7,e:"interface"}]}," ",{t:4,f:[{p:[62,3,1929],t:7,e:"resize"}],n:50,r:"config.titlebar",p:[61,1,1903]}]},r.exports.components=r.exports.components||{};var i={warnings:t(354),titlebar:t(353),resize:t(348)};for(var o in i)i.hasOwnProperty(o)&&(r.exports.components[o]=i[o]);e.exports=a.extend(r.exports)},{339:339,340:340,341:341,342:342,343:343,344:344,345:345,346:346,347:347,348:348,349:349,350:350,351:351,353:353,354:354,355:355,356:356,357:357,358:358,359:359,360:360,361:361,362:362,363:363,364:364,365:365,366:366,367:367,368:368,369:369,370:370,371:371,372:372,373:373,374:374,375:375,376:376,377:377,378:378,379:379,380:380,381:381,382:382,383:383,384:384,385:385,386:386,387:387,388:388,389:389,390:390,391:391,392:392,393:393,394:394,395:395,396:396,397:397,398:398,399:399,400:400,401:401,402:402,403:403,404:404,405:405,406:406,407:407,408:408,409:409,410:410,411:411,412:412,413:413,414:414,415:415,416:416,417:417,418:418,419:419,420:420,421:421,422:422,423:423,424:424,425:425,426:426,427:427,428:428,429:429,430:430,431:431,432:432,433:433,434:434,435:435,436:436,437:437,438:438,439:439,440:440,441:441,442:442,443:443,444:444,445:445,446:446,447:447,448:448,449:449,450:450,451:451,452:452,453:453,454:454,455:455,456:456,457:457,458:458,459:459,460:460,461:461,462:462,463:463,464:464,465:465,466:466,467:467,468:468,469:469,470:470,471:471,472:472,473:473,474:474,475:475,476:476,477:477,480:480,482:482}],480:[function(t,e,n){"use strict";function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"byond://"+e+"?"+Object.keys(t).map(function(e){return o(e)+"="+o(t[e])}).join("&")}function r(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};window.location.href=a(Object.assign({src:t,action:e},n))}function i(t,e,n){var r;window.location.href=a((r={},r[t+"."+e]=n,r),"winset")}n.__esModule=!0,n.href=a,n.act=r,n.winset=i;var o=encodeURIComponent},{}],481:[function(t,e,n){"use strict";n.__esModule=!0;n.UI_INTERACTIVE=2,n.UI_UPDATE=1,n.UI_DISABLED=0,n.UI_CLOSE=-1},{}],482:[function(t,e,n){"use strict";function a(t,e){return 0>t?t=0:t+window.innerWidth>window.screen.availWidth&&(t=window.screen.availWidth-window.innerWidth),0>e?e=0:e+window.innerHeight>window.screen.availHeight&&(e=window.screen.availHeight-window.innerHeight),{x:t,y:e}}function r(t){if(t.preventDefault(),this.get("drag")){if(this.get("x")){var e=t.screenX-this.get("x")+window.screenLeft,n=t.screenY-this.get("y")+window.screenTop;if(this.get("config.locked")){var r=a(e,n);e=r.x,n=r.y}(0,s.winset)(this.get("config.window"),"pos",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}function i(t,e){return t=Math.clamp(100,window.screen.width,t),e=Math.clamp(100,window.screen.height,e),{x:t,y:e}}function o(t){if(t.preventDefault(),this.get("resize")){if(this.get("x")){var e=t.screenX-this.get("x")+window.innerWidth,n=t.screenY-this.get("y")+window.innerHeight,a=i(e,n);e=a.x,n=a.y,(0,s.winset)(this.get("config.window"),"size",e+","+n)}this.set({x:t.screenX,y:t.screenY})}}n.__esModule=!0,n.lock=a,n.drag=r,n.sane=i,n.resize=o;var s=t(480)},{480:480}],483:[function(t,e,n){"use strict";function a(t,e){for(var n=t,a=Array.isArray(n),i=0,n=a?n:n[Symbol.iterator]();;){var o;if(a){if(i>=n.length)break;o=n[i++]}else{if(i=n.next(),i.done)break;o=i.value}var s=o;s.textContent.toLowerCase().includes(e)?(s.style.display="",r(s,e)):s.style.display="none"}}function r(t,e){for(var n=t.queryAll("section"),a=t.query("header").textContent.toLowerCase().includes(e),r=n,i=Array.isArray(r),o=0,r=i?r:r[Symbol.iterator]();;){var s;if(i){if(o>=r.length)break;s=r[o++]}else{if(o=r.next(),o.done)break;s=o.value}var p=s;a||p.textContent.toLowerCase().includes(e)?p.style.display="":p.style.display="none"}}n.__esModule=!0,n.filterMulti=a,n.filter=r},{}],484:[function(t,e,n){"use strict";function a(t,e,n){return Math.max(t,Math.min(n,e))}function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return+(Math.round(t+"e"+e)+"e-"+e)}n.__esModule=!0,n.clamp=a,n.fixed=r},{}],485:[function(t,e,n){"use strict";function a(t){return t[0].toUpperCase()+t.slice(1).toLowerCase()}function r(t){return t.replace(/\w\S*/g,a)}function i(t,e){for(t=""+t;t.length1){for(var p=Array(o),u=0;o>u;u++)p[u]=arguments[u+3];n.children=p}return{$$typeof:t,type:e,key:void 0===a?null:""+a,ref:null,props:n,_owner:null}}}(),e.asyncIterator=function(t){if("function"==typeof Symbol){if(Symbol.asyncIterator){var e=t[Symbol.asyncIterator];if(null!=e)return e.call(t)}if(Symbol.iterator)return t[Symbol.iterator]()}throw new TypeError("Object is not async iterable")},e.asyncGenerator=function(){function t(t){this.value=t}function e(e){function n(t,e){return new Promise(function(n,r){var s={key:t,arg:e,resolve:n,reject:r,next:null};o?o=o.next=s:(i=o=s,a(t,e))})}function a(n,i){try{var o=e[n](i),s=o.value;s instanceof t?Promise.resolve(s.value).then(function(t){a("next",t)},function(t){a("throw",t)}):r(o.done?"return":"normal",o.value)}catch(p){r("throw",p)}}function r(t,e){switch(t){case"return":i.resolve({value:e,done:!0});break;case"throw":i.reject(e);break;default:i.resolve({value:e,done:!1})}i=i.next,i?a(i.key,i.arg):o=null}var i,o;this._invoke=n,"function"!=typeof e["return"]&&(this["return"]=void 0)}return"function"==typeof Symbol&&Symbol.asyncIterator&&(e.prototype[Symbol.asyncIterator]=function(){return this}),e.prototype.next=function(t){return this._invoke("next",t)},e.prototype["throw"]=function(t){return this._invoke("throw",t)},e.prototype["return"]=function(t){return this._invoke("return",t)},{wrap:function(t){return function(){return new e(t.apply(this,arguments))}},await:function(e){return new t(e)}}}(),e.asyncGeneratorDelegate=function(t,e){function n(n,a){return r=!0,a=new Promise(function(e){e(t[n](a))}),{done:!1,value:e(a)}}var a={},r=!1;return"function"==typeof Symbol&&Symbol.iterator&&(a[Symbol.iterator]=function(){return this}),a.next=function(t){return r?(r=!1,t):n("next",t)},"function"==typeof t["throw"]&&(a["throw"]=function(t){if(r)throw r=!1,t;return n("throw",t)}),"function"==typeof t["return"]&&(a["return"]=function(t){return n("return",t)}),a},e.asyncToGenerator=function(t){return function(){var e=t.apply(this,arguments);return new Promise(function(t,n){function a(r,i){try{var o=e[r](i),s=o.value}catch(p){return void n(p)}return o.done?void t(s):Promise.resolve(s).then(function(t){a("next",t)},function(t){a("throw",t)})}return a("next")})}},e.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function t(t,e){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(t,a)&&(n[a]=t[a]);return n},e.possibleConstructorReturn=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e},e.selfGlobal=void 0===t?self:t,e.set=function a(t,e,n,r){var i=Object.getOwnPropertyDescriptor(t,e);if(void 0===i){var o=Object.getPrototypeOf(t);null!==o&&a(o,e,n,r)}else if("value"in i&&i.writable)i.value=n;else{var s=i.set;void 0!==s&&s.call(r,n)}return n},e.slicedToArray=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")}}(),e.slicedToArrayLoose=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t)){for(var n,a=[],r=t[Symbol.iterator]();!(n=r.next()).done&&(a.push(n.value),!e||a.length!==e););return a}throw new TypeError("Invalid attempt to destructure non-iterable instance")},e.taggedTemplateLiteral=function(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))},e.taggedTemplateLiteralLoose=function(t,e){return t.raw=e,t},e.temporalRef=function(t,e,n){if(t===n)throw new ReferenceError(e+" is not defined - temporal dead zone");return t},e.temporalUndefined={},e.toArray=function(t){return Array.isArray(t)?t:Array.from(t)},e.toConsumableArray=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e
- component.exports = {
- computed: {
- seclevelState () {
- switch (this.get('data.seclevel')) {
- case 'blue': return 'average'
- case 'red': return 'bad'
- case 'delta': return 'bad bold'
- default: return 'good'
- }
- }
- }
- }
-
-
-
-
- {{text.titleCase(data.seclevel)}}
-
-
-
- {{data.alarm ? "Reset" : "Activate"}}
-
- {{#if data.emagged}}
-
- Safety measures offline. Device may exhibit abnormal behavior.
-
- {{/if}}
-
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",